From 5a245126556f5f2cc6608a2113614a0b1ff94b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Sat, 15 Dec 2018 22:49:36 +0800 Subject: [PATCH 01/29] =?UTF-8?q?:alien:=20=E7=94=B1=E4=BA=8E=E5=A4=96?= =?UTF-8?q?=E9=83=A8API=E7=9A=84=E6=94=B9=E5=8F=98=E8=80=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/md/codegen.md | 8 +-- doc/md/social.md | 10 ++-- doc/md/swagger.md | 53 +++++++++++++++++-- .../filter/ValidateCodeGatewayFilter.java | 2 +- .../handler/HystrixFallbackHandler.java | 4 +- 5 files changed, 62 insertions(+), 15 deletions(-) diff --git a/doc/md/codegen.md b/doc/md/codegen.md index e62851813..cd6fe0def 100644 --- a/doc/md/codegen.md +++ b/doc/md/codegen.md @@ -40,19 +40,19 @@ v 1.4.0 提供了代码图形化生成功能。 1. 代码生成模块 -![](http://obq1lvsd9.bkt.clouddn.com/20180803083802.png) +![](http://a.pigx.top/20180803083802.png) 2. 选择要生成的表 > 以下为空则从**pigx-codegen/generator.properties** 获取 - ![](http://obq1lvsd9.bkt.clouddn.com/20180803084058.png) + ![](http://a.pigx.top/20180803084058.png) 3. 解压下载的**pigx_code_gen.zip** > 生成代码结构,安装前后端 maven 、vue-cli 目录生成,可以覆盖到指定业务模块 - ![](http://obq1lvsd9.bkt.clouddn.com/20180803084524.png) + ![](http://a.pigx.top/20180803084524.png) 4. **重点讲解生成的SQL使用** @@ -72,7 +72,7 @@ v 1.4.0 提供了代码图形化生成功能。 ├── 14 ``` -![](http://obq1lvsd9.bkt.clouddn.com/20180803084905.png) +![](http://a.pigx.top/20180803084905.png) 5. **配置路由** 前端 index.js diff --git a/doc/md/social.md b/doc/md/social.md index 5451768d5..f0faff6ea 100644 --- a/doc/md/social.md +++ b/doc/md/social.md @@ -12,7 +12,7 @@ 1. 修改为80 -![](http://obq1lvsd9.bkt.clouddn.com/20180818115000.png) +![](http://a.pigx.top/20180818115000.png) 2. 使用mac 的同学,nginx 代理一下 @@ -30,11 +30,11 @@ http://daoweicloud.com 1. 首先使用账号密码登录系统绑定微信 -![](http://obq1lvsd9.bkt.clouddn.com/20180818120253.png) +![](http://a.pigx.top/20180818120253.png) -![](http://obq1lvsd9.bkt.clouddn.com/20180818120339.png) +![](http://a.pigx.top/20180818120339.png) 2. 绑定后使用退出,使用社交等 选择微信登录即可。 @@ -46,8 +46,8 @@ http://daoweicloud.com 1. 选择社交登录 提示回调地址错误。 请使用 http://daoweicloud.com 访问 - ![](http://obq1lvsd9.bkt.clouddn.com/20180818120543.png) + ![](http://a.pigx.top/20180818120543.png) 1. 选择微信登录提示: 未绑定账户,请使用密码登录后绑定,需要先登录后绑定微信,才可以使用微信 -![](http://obq1lvsd9.bkt.clouddn.com/20180818120045.png) +![](http://a.pigx.top/20180818120045.png) diff --git a/doc/md/swagger.md b/doc/md/swagger.md index 7c2b82af0..0ea810ba9 100644 --- a/doc/md/swagger.md +++ b/doc/md/swagger.md @@ -114,7 +114,7 @@ swagger: - 通过界面的形式 - ![](http://obq1lvsd9.bkt.clouddn.com/20180725132807.png) + ![](http://a.pigx.top/20180725132807.png) - 直接操作**sys_oauth_client_details**表 @@ -159,9 +159,56 @@ ignore: - test ``` +#### 访问swagger-ui页面 + +从```1.6.3```版本开始,要求通过```hosts```进行访问,在pigx的默认配置下,可以访问```http://pigx-gateway:9999/swagger-ui.html```打开swagger页面。 + #### 填写客户端信息 -![](http://obq1lvsd9.bkt.clouddn.com/20180725133119.png) +![](http://a.pigx.top/20180725133119.png) -![](http://obq1lvsd9.bkt.clouddn.com/20180725133206.png) +![](http://a.pigx.top/20180725133206.png) +### Swagger FAQ + +- 为何要进行认证的操作? + +认证后Spring Security的上下文对象中才会有值,很多操作如获取当前用户信息都依赖于Spring Security上下文。 + +- 刷新页面后认证失效? + +官方UI比较蠢萌,虽然提供了Oauth2.0的认证功能,但是没有存储的措施,所以刷新页面后相关参数就会丢失。解决办法暴力一点的措施是修改官方UI添加存储措施,但是这个我肯定不会了。目前比较可行的就是修改代码进行swagger全局参数配置。 + +- 切换swagger分组文档页面报错 + +![20181121214548](http://oss1.pig4cloud.com/20181121214548.png) + +出现这个问题要么是你对应的服务没有启动,要么是你访问的服务还没有启动完毕,如果还没启动完毕的话,不妨等个十几二十秒再进行访问,最新的master-mp3分支支持在```pigx-gateway-dev.yml```中配置ignore.swagger-providers属性来屏蔽掉不希望生成swaager文档的微服务。 + +- 认证过程中出现```Auth ErrorError: Upgrade Required```? + +这个不用怀疑,原因一般不外乎三个。 + +一、用户名或密码错误 + +可以打开谷歌开发者工具,观察request详情和response详情以及返回的状态码,如果是426的话,就证明获取用户信息的时候失败了,可以判断是作为缓存中间件的redis并没有启动,那么只要启动redis,另一个原因是redis中有脏数据,这个时候清空redis即可。清空的具体步骤如下: + +windows平台下可以打开redis-cli.exe,然后执行```flushdb```或者```flushall```命令即可。 + +二、使用了需要验证码的客户端 + +除了上面的原因,还有可能返回428的状态码,而会出现这个问题就是使用了需要验证码的客户端。 + +三、跨域 + +排除所有不可能,剩下的那个不管多不可思议,都是事实真相。除开这两个原因,还有可能会出问题的,只有一种情况,那就是出现了跨域问题。 + +如果本地启动出现了问题,可以观察请求头里是否存在跨域,如果是OPTIONS请求基本就是跨域了。然后从以下两个解决方案中选择一个适合的: + +- 方案一 + +处理配置中心的```application-dev.yml```中的Spring Security Oauth相关的地址配置```security.auth.server```,修改掉认证中心的地址。 + +- 方案二 + +解决方案就是启动前端工程利用VUE的路由处理掉跨域,或者配置nginx添加反向代理。 diff --git a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java index 63a8a0e2c..ba5d1e855 100644 --- a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java +++ b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java @@ -83,7 +83,7 @@ public class ValidateCodeGatewayFilter extends AbstractGatewayFilterFactory { return response.writeWith(Mono.just(response.bufferFactory() .wrap(objectMapper.writeValueAsBytes( R.builder().msg(e.getMessage()) - .code(CommonConstant.FAIL).build())))); + .code(CommonConstants.FAIL).build())))); } catch (JsonProcessingException e1) { log.error("对象输出异常", e1); } diff --git a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/handler/HystrixFallbackHandler.java b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/handler/HystrixFallbackHandler.java index e5ad57d4e..f8aae5b1f 100644 --- a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/handler/HystrixFallbackHandler.java +++ b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/handler/HystrixFallbackHandler.java @@ -17,7 +17,7 @@ package com.pig4cloud.pigx.gateway.handler; -import com.pig4cloud.pigx.common.core.constant.CommonConstant; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.util.R; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -51,7 +51,7 @@ public class HystrixFallbackHandler implements HandlerFunction { .contentType(MediaType.APPLICATION_JSON_UTF8) .body(BodyInserters.fromObject(R.builder() .msg("服务异常") - .code(CommonConstant.FAIL) + .code(CommonConstants.FAIL) .build())); } } From 3657d82ea2f02c278c0d71627520efd751baadc9 Mon Sep 17 00:00:00 2001 From: lisb Date: Sat, 15 Dec 2018 23:33:34 +0800 Subject: [PATCH 02/29] :bug: Fixed a bug.Fixed auth jdbc url --- pigx-config/src/main/resources/config/pigx-auth-dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pigx-config/src/main/resources/config/pigx-auth-dev.yml b/pigx-config/src/main/resources/config/pigx-auth-dev.yml index e1f78069c..c00ab0548 100644 --- a/pigx-config/src/main/resources/config/pigx-auth-dev.yml +++ b/pigx-config/src/main/resources/config/pigx-auth-dev.yml @@ -5,7 +5,7 @@ spring: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root - url: jdbc:mysql://pigx-mysql:3306/pigxx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false + url: jdbc:mysql://pigx-mysql:3306/pigxx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8 freemarker: allow-request-override: false allow-session-override: false From 20b5bf20867645017faed872e2645776944f2177 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Sun, 16 Dec 2018 00:05:23 +0800 Subject: [PATCH 03/29] =?UTF-8?q?:alien:=20=E7=94=B1=E4=BA=8E=E5=A4=96?= =?UTF-8?q?=E9=83=A8API=E7=9A=84=E6=94=B9=E5=8F=98=E8=80=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E4=BB=A3=E7=A0=81,=E6=96=B0=E5=A2=9Etoken=20=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/AuthorizationServerConfig.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java index a068928c0..de5393d90 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java @@ -22,6 +22,7 @@ package com.pig4cloud.pigx.auth.config; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.security.component.PigxWebResponseExceptionTranslator; import com.pig4cloud.pigx.common.security.service.PigxClientDetailsService; +import com.pig4cloud.pigx.common.security.service.PigxUser; import com.pig4cloud.pigx.common.security.service.PigxUserDetailsService; import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; @@ -68,20 +69,20 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap @Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) { oauthServer - .allowFormAuthenticationForClients() - .checkTokenAccess("isAuthenticated()"); + .allowFormAuthenticationForClients() + .checkTokenAccess("isAuthenticated()"); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) { endpoints - .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST) - .tokenStore(tokenStore()) - .tokenEnhancer(tokenEnhancer()) - .userDetailsService(pigxUserDetailsService) - .authenticationManager(authenticationManager) - .reuseRefreshTokens(false) - .exceptionTranslator(new PigxWebResponseExceptionTranslator()); + .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST) + .tokenStore(tokenStore()) + .tokenEnhancer(tokenEnhancer()) + .userDetailsService(pigxUserDetailsService) + .authenticationManager(authenticationManager) + .reuseRefreshTokens(false) + .exceptionTranslator(new PigxWebResponseExceptionTranslator()); } @@ -95,7 +96,11 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap @Bean public TokenEnhancer tokenEnhancer() { return (accessToken, authentication) -> { - final Map additionalInfo = new HashMap<>(1); + final Map additionalInfo = new HashMap<>(4); + PigxUser pigxUser = (PigxUser) authentication.getUserAuthentication().getPrincipal(); + additionalInfo.put("user_id", pigxUser.getId()); + additionalInfo.put("dept_id", pigxUser.getDeptId()); + additionalInfo.put("tenant_id", pigxUser.getTenantId()); additionalInfo.put("license", SecurityConstants.PIGX_LICENSE); ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo); return accessToken; From 4151ec17e3e3530101d7c2916fbb403a01abd686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Sun, 16 Dec 2018 11:45:30 +0800 Subject: [PATCH 04/29] =?UTF-8?q?:zap:=20=E4=BC=98=E5=8C=96=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E3=80=82=20userdetails=20=E7=BC=93=E5=AD=98=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/PigxUserDetailsServiceImpl.java | 16 +++++++++++++--- .../pigx/admin/controller/UserController.java | 12 ++++++------ .../pigx/admin/handler/SmsLoginHandler.java | 10 +++++----- .../pigx/admin/handler/WeChatLoginHandler.java | 6 +++--- .../admin/service/impl/SysUserServiceImpl.java | 6 ------ 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java index c7410ef58..4855de67d 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java @@ -27,6 +27,8 @@ import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.UserDetails; @@ -48,6 +50,7 @@ import java.util.Set; @AllArgsConstructor public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { private final RemoteUserService remoteUserService; + private final CacheManager cacheManager; /** * 用户密码登录 @@ -58,8 +61,15 @@ public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + Cache cache = cacheManager.getCache("user_details"); + if (cache != null && cache.get(username) != null) { + return (PigxUser) cache.get(username).get(); + } + R result = remoteUserService.info(username, SecurityConstants.FROM_IN); - return getUserDetails(result); + UserDetails userDetails = getUserDetails(result); + cache.put(username, userDetails); + return userDetails; } @@ -96,12 +106,12 @@ public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { } Collection authorities - = AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0])); + = AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0])); SysUser user = info.getSysUser(); boolean enabled = StrUtil.equals(user.getDelFlag(), CommonConstants.STATUS_NORMAL); // 构造security用户 return new PigxUser(user.getUserId(), user.getDeptId(), user.getTenantId(), user.getUsername(), SecurityConstants.BCRYPT + user.getPassword(), enabled, - true, true, !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities); + true, true, !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java index bf832570e..df1395bfa 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java @@ -40,7 +40,7 @@ import javax.validation.Valid; /** * @author lengleng - * @date 2017/10/28 + * @date 2018/12/16 */ @RestController @AllArgsConstructor @@ -57,12 +57,12 @@ public class UserController { @GetMapping(value = {"/info"}) public R info() { String username = SecurityUtils.getUser().getUsername(); - SysUser sysUser = userService.getOne(Wrappers.query() - .lambda().eq(SysUser::getUsername, username)); - if (sysUser == null) { + SysUser user = userService.getOne(Wrappers.query() + .lambda().eq(SysUser::getUsername, username)); + if (user == null) { return new R<>(Boolean.FALSE, "获取当前用户信息失败"); } - return new R<>(userService.findUserInfo(sysUser)); + return new R<>(userService.findUserInfo(user)); } /** @@ -74,7 +74,7 @@ public class UserController { @GetMapping("/info/{username}") public R info(@PathVariable String username) { SysUser user = userService.getOne(Wrappers.query() - .lambda().eq(SysUser::getUsername, username)); + .lambda().eq(SysUser::getUsername, username)); if (user == null) { return new R<>(Boolean.FALSE, String.format("用户信息为空 %s", username)); } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java index d8ce7c842..62b3616e0 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java @@ -55,14 +55,14 @@ public class SmsLoginHandler extends AbstractLoginHandler { */ @Override public UserInfo info(String identify) { - SysUser sysUser = sysUserService - .getOne(Wrappers.query() - .lambda().eq(SysUser::getPhone, identify)); + SysUser user = sysUserService + .getOne(Wrappers.query() + .lambda().eq(SysUser::getPhone, identify)); - if (sysUser == null) { + if (user == null) { log.info("手机号未注册:{}", identify); return null; } - return sysUserService.findUserInfo(sysUser); + return sysUserService.findUserInfo(user); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java index 831e80242..02e7d11a2 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java @@ -75,14 +75,14 @@ public class WeChatLoginHandler extends AbstractLoginHandler { */ @Override public UserInfo info(String openId) { - SysUser sysUser = sysUserService + SysUser user = sysUserService .getOne(Wrappers.query() .lambda().eq(SysUser::getWxOpenid, openId)); - if (sysUser == null) { + if (user == null) { log.info("微信未绑定:{}", openId); return null; } - return sysUserService.findUserInfo(sysUser); + return sysUserService.findUserInfo(user); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java index 10360c9e3..ca221f10e 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java @@ -41,7 +41,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -99,12 +98,7 @@ public class SysUserServiceImpl extends ServiceImpl impl * @return */ @Override - @Cacheable(value = "user_details", key = "#sysUser.username", unless = "#result == null") public UserInfo findUserInfo(SysUser sysUser) { - if (sysUser == null) { - return null; - } - UserInfo userInfo = new UserInfo(); userInfo.setSysUser(sysUser); //设置角色列表 (ID) From 79161ac89ee1038a37829ad8e7cc29a49229c78f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Mon, 17 Dec 2018 11:24:48 +0800 Subject: [PATCH 05/29] :bug: Fixing a bug. package name error --- .../src/main/resources/mapper/SysRouteConfMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRouteConfMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRouteConfMapper.xml index 75af495eb..2542b4faa 100755 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRouteConfMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRouteConfMapper.xml @@ -18,7 +18,7 @@ - + From 4d81964bd06d38368d458047606eef4af2554e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Wed, 19 Dec 2018 18:30:41 +0800 Subject: [PATCH 06/29] :bug: Fixing a bug. del menu s --- pigx-common/pigx-common-security/pom.xml | 6 ++++ .../pigx/admin/controller/MenuController.java | 4 +-- .../pigx/admin/service/SysMenuService.java | 3 +- .../service/impl/SysMenuServiceImpl.java | 28 +++++++++++-------- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/pigx-common/pigx-common-security/pom.xml b/pigx-common/pigx-common-security/pom.xml index 9f43c2c22..75fa28f3d 100644 --- a/pigx-common/pigx-common-security/pom.xml +++ b/pigx-common/pigx-common-security/pom.xml @@ -40,6 +40,12 @@ pigx-common-core 2.0.0 + + + com.pig4cloud + pigx-common-cache + 2.0.0 + org.springframework.cloud diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java index 029f2978b..b52dcf5bb 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java @@ -128,8 +128,8 @@ public class MenuController { @SysLog("删除菜单") @DeleteMapping("/{id}") @PreAuthorize("@pms.hasPermission('sys_menu_del')") - public R removeById(@PathVariable Integer id) { - return new R<>(sysMenuService.removeMenuById(id)); + public R removeById(@PathVariable SysMenu id) { + return sysMenuService.removeMenuById(id); } /** diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java index 22f2930bb..8d4673145 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java @@ -23,6 +23,7 @@ package com.pig4cloud.pigx.admin.service; import com.baomidou.mybatisplus.extension.service.IService; import com.pig4cloud.pigx.admin.api.entity.SysMenu; import com.pig4cloud.pigx.admin.api.vo.MenuVO; +import com.pig4cloud.pigx.common.core.util.R; import java.util.List; @@ -49,7 +50,7 @@ public interface SysMenuService extends IService { * @param id 菜单ID * @return 成功、失败 */ - Boolean removeMenuById(Integer id); + R removeMenuById(SysMenu id); /** * 更新菜单信息 diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java index 0db5a86f8..c70bd4464 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java @@ -19,6 +19,7 @@ package com.pig4cloud.pigx.admin.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.pig4cloud.pigx.admin.api.entity.SysMenu; @@ -27,6 +28,8 @@ import com.pig4cloud.pigx.admin.api.vo.MenuVO; import com.pig4cloud.pigx.admin.mapper.SysMenuMapper; import com.pig4cloud.pigx.admin.mapper.SysRoleMenuMapper; import com.pig4cloud.pigx.admin.service.SysMenuService; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; +import com.pig4cloud.pigx.common.core.util.R; import lombok.AllArgsConstructor; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -34,7 +37,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; -import java.util.stream.Collectors; /** *

@@ -58,20 +60,22 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override @Transactional(rollbackFor = Exception.class) @CacheEvict(value = "menu_details", allEntries = true) - public Boolean removeMenuById(Integer id) { + public R removeMenuById(SysMenu id) { // 查询父节点为当前节点的节点 - List menuIdList = this.list(Wrappers.query() - .lambda().eq(SysMenu::getParentId, id)) - .stream().map(SysMenu::getMenuId) - .collect(Collectors.toList()); + List menuList = this.list(Wrappers.query() + .lambda().eq(SysMenu::getParentId, id)); + if (CollUtil.isNotEmpty(menuList)) { + return R.builder() + .code(CommonConstants.FAIL) + .msg("菜单含有下级不能删除").build(); + } + + sysRoleMenuMapper + .delete(Wrappers.query() + .lambda().eq(SysRoleMenu::getMenuId, id)); - //删除关联ROLE_MENU 数据 - menuIdList.add(id); - menuIdList.forEach(menu -> sysRoleMenuMapper - .delete(Wrappers.query() - .lambda().eq(SysRoleMenu::getMenuId, menu))); //删除当前菜单及其子菜单 - return this.removeByIds(menuIdList); + return new R(this.removeById(id)); } @Override From 7d832f295c7f1bd1d2fb293fe875a41adfc21397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Mon, 24 Dec 2018 23:46:49 +0800 Subject: [PATCH 07/29] =?UTF-8?q?:bug:=20Fixing=20a=20bug.=20=20mybatis=20?= =?UTF-8?q?=E5=B5=8C=E5=A5=97=E5=88=86=E9=A1=B5=E4=B8=8D=E5=87=86=E7=A1=AE?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E5=AD=90=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/mapper/SysUserMapper.xml | 54 ++++++++++++------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml index a3fddcffd..de0cb70cf 100644 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml @@ -21,21 +21,25 @@ - + + - - - - - - + + + + + + + + @@ -135,22 +139,34 @@ `user`.user_id = #{id} - SELECT - + `user`.user_id, + `user`.username, + `user`.`password`, + `user`.salt, + `user`.phone, + `user`.avatar, + `user`.wx_openid, + `user`.qq_openid, + `user`.dept_id, + `user`.create_time AS ucreate_time, + `user`.update_time AS uupdate_time, + `user`.del_flag AS udel_flag, + `user`.lock_flag AS lock_flag, + `user`.dept_id AS deptId, + `user`.tenant_id AS tenantId FROM sys_user AS `user` - LEFT JOIN sys_user_role AS ur ON ur.user_id = `user`.user_id - LEFT JOIN sys_role AS r ON r.role_id = ur.role_id LEFT JOIN sys_dept AS d ON d.dept_id = `user`.dept_id - WHERE - r.del_flag = 0 - - and `user`.username LIKE CONCAT('%',#{query.username},'%') - - - and `user`.dept_id = #{query.deptId} - + + + and `user`.username LIKE CONCAT('%',#{query.username},'%') + + + and `user`.dept_id = #{query.deptId} + + ORDER BY `user`.create_time DESC From 1fe7703246a25889ad7624b893ff0a8cc48e0f84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Mon, 24 Dec 2018 23:49:14 +0800 Subject: [PATCH 08/29] =?UTF-8?q?:recycle:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8CR=20=E3=80=81=20@Inner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/AuthorizationServerConfig.java | 2 +- .../pigx/auth/endpoint/PigxTokenEndpoint.java | 21 +++++++++++-------- pigx-common/pigx-common-security/pom.xml | 6 ------ .../admin/api/feign/RemoteTokenService.java | 3 +-- .../RemoteTokenServiceFallbackImpl.java | 3 +-- .../pigx/admin/controller/MenuController.java | 18 ++++++++-------- .../admin/controller/TokenController.java | 2 +- .../pigx/admin/service/SysMenuService.java | 2 +- .../service/impl/SysMenuServiceImpl.java | 2 +- pigx-visual/pigx-activiti/pom.xml | 6 ++++++ pigx-visual/pigx-codegen/pom.xml | 6 ++++++ pigx-visual/pigx-daemon/pom.xml | 6 ++++++ 12 files changed, 45 insertions(+), 32 deletions(-) diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java index de5393d90..4d1f932fe 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java @@ -96,7 +96,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap @Bean public TokenEnhancer tokenEnhancer() { return (accessToken, authentication) -> { - final Map additionalInfo = new HashMap<>(4); + final Map additionalInfo = new HashMap<>(8); PigxUser pigxUser = (PigxUser) authentication.getUserAuthentication().getPrincipal(); additionalInfo.put("user_id", pigxUser.getId()); additionalInfo.put("dept_id", pigxUser.getDeptId()); diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java index cc5d03f71..a0818d5e1 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java @@ -22,6 +22,7 @@ package com.pig4cloud.pigx.auth.endpoint; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; @@ -79,20 +80,26 @@ public class PigxTokenEndpoint { * @param authHeader Authorization */ @DeleteMapping("/logout") - public R logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) { + public R logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) { if (StrUtil.isBlank(authHeader)) { - return new R<>(false, "退出失败,token 为空"); + return R.builder() + .code(CommonConstants.FAIL) + .data(Boolean.FALSE) + .msg("退出失败,token 为空").build(); } String tokenValue = authHeader.replace("Bearer", "").trim(); OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue); if (accessToken == null || StrUtil.isBlank(accessToken.getValue())) { - return new R<>(false, "退出失败,token 无效"); + return R.builder() + .code(CommonConstants.FAIL) + .data(Boolean.FALSE) + .msg("退出失败,token 无效").build(); } OAuth2Authentication auth2Authentication = tokenStore.readAuthentication(accessToken); cacheManager.getCache("user_details") - .evict(auth2Authentication.getName()); + .evict(auth2Authentication.getName()); tokenStore.removeAccessToken(accessToken); return new R<>(Boolean.TRUE); } @@ -101,14 +108,10 @@ public class PigxTokenEndpoint { * 令牌管理调用 * * @param token token - * @param from 内部调用标志 * @return */ @DeleteMapping("/{token}") - public R delToken(@PathVariable("token") String token, @RequestHeader(required = false) String from) { - if (StrUtil.isBlank(from)) { - return null; - } + public R delToken(@PathVariable("token") String token) { return new R<>(redisTemplate.delete(PIGX_OAUTH_ACCESS + token)); } diff --git a/pigx-common/pigx-common-security/pom.xml b/pigx-common/pigx-common-security/pom.xml index 75fa28f3d..9f43c2c22 100644 --- a/pigx-common/pigx-common-security/pom.xml +++ b/pigx-common/pigx-common-security/pom.xml @@ -40,12 +40,6 @@ pigx-common-core 2.0.0 - - - com.pig4cloud - pigx-common-cache - 2.0.0 - org.springframework.cloud diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java index 3351cd8bf..e85e1798b 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java @@ -47,9 +47,8 @@ public interface RemoteTokenService { * 删除token * * @param token token - * @param from 调用标志 * @return */ @DeleteMapping("/token/{token}") - R removeTokenById(@PathVariable("token") String token, @RequestHeader(SecurityConstants.FROM) String from); + R removeTokenById(@PathVariable("token") String token); } diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java index 1704621e6..39263ca18 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java @@ -54,11 +54,10 @@ public class RemoteTokenServiceFallbackImpl implements RemoteTokenService { * 删除token * * @param token - * @param from * @return */ @Override - public R removeTokenById(String token, String from) { + public R removeTokenById(String token) { log.error("删除token 失败 {}", token, cause); return null; } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java index b52dcf5bb..c2bca98e1 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MenuController.java @@ -62,12 +62,12 @@ public class MenuController { // 获取符合条件的菜单 Set all = new HashSet<>(); SecurityUtils.getRoles() - .forEach(roleId -> all.addAll(sysMenuService.findMenuByRoleId(roleId))); + .forEach(roleId -> all.addAll(sysMenuService.findMenuByRoleId(roleId))); List menuTreeList = all.stream() - .filter(menuVo -> CommonConstants.MENU.equals(menuVo.getType())) - .map(MenuTree::new) - .sorted(Comparator.comparingInt(MenuTree::getSort)) - .collect(Collectors.toList()); + .filter(menuVo -> CommonConstants.MENU.equals(menuVo.getType())) + .map(MenuTree::new) + .sorted(Comparator.comparingInt(MenuTree::getSort)) + .collect(Collectors.toList()); return new R<>(TreeUtil.bulid(menuTreeList, -1)); } @@ -90,9 +90,9 @@ public class MenuController { @GetMapping("/tree/{roleId}") public List getRoleTree(@PathVariable Integer roleId) { return sysMenuService.findMenuByRoleId(roleId) - .stream() - .map(MenuVO::getMenuId) - .collect(Collectors.toList()); + .stream() + .map(MenuVO::getMenuId) + .collect(Collectors.toList()); } /** @@ -128,7 +128,7 @@ public class MenuController { @SysLog("删除菜单") @DeleteMapping("/{id}") @PreAuthorize("@pms.hasPermission('sys_menu_del')") - public R removeById(@PathVariable SysMenu id) { + public R removeById(@PathVariable Integer id) { return sysMenuService.removeMenuById(id); } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java index 6c19b0b7e..42a60381f 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java @@ -61,6 +61,6 @@ public class TokenController { @DeleteMapping("/{token}") @PreAuthorize("@pms.hasPermission('sys_token_del')") public R removeById(@PathVariable String token) { - return remoteTokenService.removeTokenById(token, SecurityConstants.FROM_IN); + return remoteTokenService.removeTokenById(token); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java index 8d4673145..747049dca 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysMenuService.java @@ -50,7 +50,7 @@ public interface SysMenuService extends IService { * @param id 菜单ID * @return 成功、失败 */ - R removeMenuById(SysMenu id); + R removeMenuById(Integer id); /** * 更新菜单信息 diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java index c70bd4464..fb4ec98c3 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMenuServiceImpl.java @@ -60,7 +60,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override @Transactional(rollbackFor = Exception.class) @CacheEvict(value = "menu_details", allEntries = true) - public R removeMenuById(SysMenu id) { + public R removeMenuById(Integer id) { // 查询父节点为当前节点的节点 List menuList = this.list(Wrappers.query() .lambda().eq(SysMenu::getParentId, id)); diff --git a/pigx-visual/pigx-activiti/pom.xml b/pigx-visual/pigx-activiti/pom.xml index 7394d89ef..3a1c36426 100644 --- a/pigx-visual/pigx-activiti/pom.xml +++ b/pigx-visual/pigx-activiti/pom.xml @@ -43,6 +43,12 @@ pigx-common-core 2.0.0 + + + com.pig4cloud + pigx-common-cache + 2.0.0 + com.pig4cloud pigx-upms-api diff --git a/pigx-visual/pigx-codegen/pom.xml b/pigx-visual/pigx-codegen/pom.xml index ff7537063..4931c6fc6 100755 --- a/pigx-visual/pigx-codegen/pom.xml +++ b/pigx-visual/pigx-codegen/pom.xml @@ -26,6 +26,12 @@ mybatis-plus-boot-starter ${mybatis-plus.version} + + + com.pig4cloud + pigx-common-cache + 2.0.0 + mysql mysql-connector-java diff --git a/pigx-visual/pigx-daemon/pom.xml b/pigx-visual/pigx-daemon/pom.xml index 8a2644420..e697168b2 100644 --- a/pigx-visual/pigx-daemon/pom.xml +++ b/pigx-visual/pigx-daemon/pom.xml @@ -48,6 +48,12 @@ pigx-common-swagger 2.0.0 + + + com.pig4cloud + pigx-common-cache + 2.0.0 + com.baomidou From 492b38742d1873474c6322dcc413859823f05ff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Wed, 26 Dec 2018 19:13:33 +0800 Subject: [PATCH 09/29] =?UTF-8?q?:recycle:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E5=9B=BE=E5=BD=A2=E5=8C=96=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90=E3=80=81=E5=90=88=E5=B9=B6=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/md/modules.md | 2 +- pigx-auth/pom.xml | 24 ++-- .../pigx/auth/endpoint/PigxTokenEndpoint.java | 9 +- .../main/resources/META-INF/spring.factories | 5 - pigx-common/pigx-common-core/pom.xml | 6 - .../pom.xml | 18 ++- .../data}/cache/DefaultRedisCacheWriter.java | 2 +- .../data}/cache/RedisAutoCacheManager.java | 4 +- .../cache/RedisCacheAutoConfiguration.java | 2 +- .../data}/cache/RedisCacheManagerConfig.java | 2 +- .../data}/cache/RedisTemplateConfig.java | 2 +- .../common/data}/datascope/DataScope.java | 5 +- .../data}/datascope/DataScopeInterceptor.java | 83 +++++++++++--- .../common/data/enums/DataScopeTypeEnum.java | 57 +++++----- .../data/mybatis/MybatisPlusConfig.java | 49 ++++----- .../tenant}/PigxFeignTenantConfiguration.java | 2 +- .../tenant}/PigxFeignTenantInterceptor.java | 3 +- .../common/data/tenant/PigxTenantHandler.java | 69 ++++++++++++ .../data/tenant}/TenantContextHolder.java | 2 +- .../tenant}/TenantContextHolderFilter.java | 3 +- .../main/resources/META-INF/spring.factories | 7 ++ .../support/RedisRouteDefinitionWriter.java | 4 + .../main/resources/META-INF/spring.factories | 3 +- pigx-common/pom.xml | 2 +- pigx-gateway/pom.xml | 5 +- pigx-upms/pigx-upms-api/pom.xml | 6 + .../pigx/admin/api/entity/SysRole.java | 5 + .../admin/api/feign/RemoteTokenService.java | 9 +- .../RemoteTokenServiceFallbackImpl.java | 3 +- pigx-upms/pigx-upms-biz/pom.xml | 9 +- .../admin/config/MybatisPlusConfigurer.java | 103 ------------------ .../admin/controller/TokenController.java | 3 +- .../pigx/admin/mapper/SysUserMapper.java | 2 +- .../service/impl/SysUserServiceImpl.java | 52 ++++----- .../main/resources/mapper/SysRoleMapper.xml | 2 + pigx-visual/pigx-activiti/pom.xml | 25 ++--- .../act/service/impl/ActTaskServiceImpl.java | 2 +- .../act/service/impl/EditorServiceImpl.java | 2 +- .../act/service/impl/ModelServiceImpl.java | 24 ++-- .../act/service/impl/ProcessServiceImpl.java | 2 +- pigx-visual/pigx-codegen/pom.xml | 12 +- .../codegen/config/MybatisPlusConfigurer.java | 53 --------- pigx-visual/pigx-daemon/pom.xml | 4 +- pigx-visual/pigx-monitor/pom.xml | 5 +- .../pigx/monitor/support/RedisEventStore.java | 2 + 45 files changed, 336 insertions(+), 359 deletions(-) delete mode 100644 pigx-common/pigx-common-cache/src/main/resources/META-INF/spring.factories rename pigx-common/{pigx-common-cache => pigx-common-data}/pom.xml (75%) rename pigx-common/{pigx-common-cache/src/main/java/com/pig4cloud/pigx/common => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data}/cache/DefaultRedisCacheWriter.java (99%) rename pigx-common/{pigx-common-cache/src/main/java/com/pig4cloud/pigx/common => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data}/cache/RedisAutoCacheManager.java (95%) rename pigx-common/{pigx-common-cache/src/main/java/com/pig4cloud/pigx/common => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data}/cache/RedisCacheAutoConfiguration.java (99%) rename pigx-common/{pigx-common-cache/src/main/java/com/pig4cloud/pigx/common => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data}/cache/RedisCacheManagerConfig.java (97%) rename pigx-common/{pigx-common-cache/src/main/java/com/pig4cloud/pigx/common => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data}/cache/RedisTemplateConfig.java (97%) rename pigx-common/{pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data}/datascope/DataScope.java (90%) rename pigx-common/{pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data}/datascope/DataScopeInterceptor.java (55%) rename pigx-visual/pigx-daemon/src/main/java/com/pig4cloud/pigx/daemon/config/MybatisPlusConfigurer.java => pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/enums/DataScopeTypeEnum.java (51%) rename pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/config/MybatisPlusConfigurer.java => pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java (69%) rename pigx-common/{pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant}/PigxFeignTenantConfiguration.java (96%) rename pigx-common/{pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant}/PigxFeignTenantInterceptor.java (92%) create mode 100644 pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java rename pigx-common/{pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant}/TenantContextHolder.java (96%) rename pigx-common/{pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/filter => pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant}/TenantContextHolderFilter.java (95%) create mode 100644 pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories delete mode 100644 pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/MybatisPlusConfigurer.java delete mode 100644 pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/MybatisPlusConfigurer.java diff --git a/doc/md/modules.md b/doc/md/modules.md index f6383a648..19fc31d39 100644 --- a/doc/md/modules.md +++ b/doc/md/modules.md @@ -5,7 +5,7 @@ pigx ├── pigx-auth -- 授权服务提供[3000] ├── pigx-common -- 系统公共模块 ├ ├── pigx-common-core -- 公共工具类核心包 -├ ├── pigx-common-cache -- 缓存 +├ ├── pigx-common-data -- 数据相关 ├ ├── pigx-common-job -- 定时任务 ├ ├── pigx-common-log -- 日志服务 ├ └── pigx-common-security -- 安全工具类 diff --git a/pigx-auth/pom.xml b/pigx-auth/pom.xml index b2051fd14..0fa7c5236 100644 --- a/pigx-auth/pom.xml +++ b/pigx-auth/pom.xml @@ -50,6 +50,18 @@ pigx-common-security 2.0.0 + + + mysql + mysql-connector-java + ${mysql.connector.version} + + + + com.pig4cloud + pigx-common-data + 2.0.0 + org.springframework.boot @@ -60,12 +72,6 @@ org.springframework.boot spring-boot-starter-freemarker - - - com.pig4cloud - pigx-common-cache - 2.0.0 - org.springframework.cloud @@ -83,12 +89,6 @@ spring-security-oauth2 ${security.oauth.version} - - - mysql - mysql-connector-java - ${mysql.connector.version} - org.springframework.boot diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java index a0818d5e1..92d9f7001 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java @@ -26,7 +26,7 @@ import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.common.security.service.PigxUser; import lombok.AllArgsConstructor; import org.springframework.cache.CacheManager; @@ -120,15 +120,10 @@ public class PigxTokenEndpoint { * 查询token * * @param params 分页参数 - * @param from 标志 * @return */ @PostMapping("/page") - public R tokenList(@RequestBody Map params, @RequestHeader(required = false) String from) { - if (StrUtil.isBlank(from)) { - return null; - } - + public R tokenList(@RequestBody Map params) { List> list = new ArrayList<>(); //根据分页参数获取对应数据 List pages = findKeysForPage(PIGX_OAUTH_ACCESS + "*", MapUtil.getInt(params, PaginationConstants.CURRENT), MapUtil.getInt(params, PaginationConstants.SIZE)); diff --git a/pigx-common/pigx-common-cache/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-cache/src/main/resources/META-INF/spring.factories deleted file mode 100644 index c34166bd2..000000000 --- a/pigx-common/pigx-common-cache/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,5 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.pig4cloud.pigx.common.cache.RedisTemplateConfig,\ - com.pig4cloud.pigx.common.cache.RedisCacheManagerConfig,\ - com.pig4cloud.pigx.common.cache.RedisCacheAutoConfiguration - diff --git a/pigx-common/pigx-common-core/pom.xml b/pigx-common/pigx-common-core/pom.xml index 5f6caa7e6..891bc187f 100644 --- a/pigx-common/pigx-common-core/pom.xml +++ b/pigx-common/pigx-common-core/pom.xml @@ -50,12 +50,6 @@ javax.servlet javax.servlet-api - - - com.baomidou - mybatis-plus-extension - ${mybatis-plus.version} - io.github.openfeign diff --git a/pigx-common/pigx-common-cache/pom.xml b/pigx-common/pigx-common-data/pom.xml similarity index 75% rename from pigx-common/pigx-common-cache/pom.xml rename to pigx-common/pigx-common-data/pom.xml index 24051163b..56cd4ccce 100644 --- a/pigx-common/pigx-common-cache/pom.xml +++ b/pigx-common/pigx-common-data/pom.xml @@ -27,19 +27,31 @@ 2.0.0 - pigx-common-cache + pigx-common-data jar - pigx 缓存工具类 + pigx 数据操作相关 - + com.pig4cloud pigx-common-core 2.0.0 + + + com.baomidou + mybatis-plus-extension + ${mybatis-plus.version} + + + + com.pig4cloud + pigx-common-security + 2.0.0 + org.springframework.boot diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/DefaultRedisCacheWriter.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/DefaultRedisCacheWriter.java similarity index 99% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/DefaultRedisCacheWriter.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/DefaultRedisCacheWriter.java index b8be1f8b6..44b62faa9 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/DefaultRedisCacheWriter.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/DefaultRedisCacheWriter.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import org.springframework.dao.PessimisticLockingFailureException; import org.springframework.data.redis.cache.RedisCacheWriter; diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisAutoCacheManager.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java similarity index 95% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisAutoCacheManager.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java index 3d0b02bac..dbec2bb1d 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisAutoCacheManager.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java @@ -15,10 +15,10 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import cn.hutool.core.util.StrUtil; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.Cache; import org.springframework.data.redis.cache.RedisCache; diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheAutoConfiguration.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java similarity index 99% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheAutoConfiguration.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java index 4de9ec321..d4f5d5894 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheAutoConfiguration.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheManagerConfig.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheManagerConfig.java similarity index 97% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheManagerConfig.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheManagerConfig.java index 8a020cbd7..bf92ed86b 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisCacheManagerConfig.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheManagerConfig.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer; diff --git a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisTemplateConfig.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisTemplateConfig.java similarity index 97% rename from pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisTemplateConfig.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisTemplateConfig.java index 554edb082..cf78ebb3b 100644 --- a/pigx-common/pigx-common-cache/src/main/java/com/pig4cloud/pigx/common/cache/RedisTemplateConfig.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisTemplateConfig.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.cache; +package com.pig4cloud.pigx.common.data.cache; import lombok.AllArgsConstructor; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScope.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java similarity index 90% rename from pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScope.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java index f5a5461a6..4fa3c9c63 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScope.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScope.java @@ -15,11 +15,12 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.core.datascope; +package com.pig4cloud.pigx.common.data.datascope; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -39,7 +40,7 @@ public class DataScope extends HashMap { /** * 具体的数据范围 */ - private List deptIds; + private List deptIds = new ArrayList<>(); /** * 是否只查询本部门 diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScopeInterceptor.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java similarity index 55% rename from pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScopeInterceptor.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java index 4862e1bdf..fd96d9f59 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/datascope/DataScopeInterceptor.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/datascope/DataScopeInterceptor.java @@ -15,12 +15,20 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.core.datascope; +package com.pig4cloud.pigx.common.data.datascope; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.util.StrUtil; +import cn.hutool.db.Db; +import cn.hutool.db.Entity; import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler; +import com.pig4cloud.pigx.common.core.constant.SecurityConstants; +import com.pig4cloud.pigx.common.core.exception.CheckedException; +import com.pig4cloud.pigx.common.data.enums.DataScopeTypeEnum; +import com.pig4cloud.pigx.common.security.service.PigxUser; +import com.pig4cloud.pigx.common.security.util.SecurityUtils; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.BoundSql; @@ -29,26 +37,29 @@ import org.apache.ibatis.mapping.SqlCommandType; import org.apache.ibatis.plugin.*; import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.SystemMetaObject; +import org.springframework.security.core.GrantedAuthority; +import javax.sql.DataSource; import java.sql.Connection; -import java.util.List; -import java.util.Map; -import java.util.Properties; +import java.util.*; +import java.util.stream.Collectors; /** * @author lengleng - * @date 2018/8/30 + * @date 2018/12/26 *

* mybatis 数据权限拦截器 */ @Slf4j +@AllArgsConstructor @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) public class DataScopeInterceptor extends AbstractSqlParserHandler implements Interceptor { + private final DataSource dataSource; @Override public Object intercept(Invocation invocation) throws Throwable { - StatementHandler statementHandler = (StatementHandler) PluginUtils.realTarget(invocation.getTarget()); + StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget()); MetaObject metaObject = SystemMetaObject.forObject(statementHandler); this.sqlParser(metaObject); // 先判断是不是SELECT操作 @@ -63,19 +74,57 @@ public class DataScopeInterceptor extends AbstractSqlParserHandler implements In //查找参数中包含DataScope类型的参数 DataScope dataScope = findDataScopeObject(parameterObject); - if (dataScope == null) { return invocation.proceed(); - } else { - String scopeName = dataScope.getScopeName(); - List deptIds = dataScope.getDeptIds(); - if (StrUtil.isNotBlank(scopeName) && CollectionUtil.isNotEmpty(deptIds)) { - String join = CollectionUtil.join(deptIds, ","); - originalSql = "select * from (" + originalSql + ") temp_data_scope where temp_data_scope." + scopeName + " in (" + join + ")"; - metaObject.setValue("delegate.boundSql.sql", originalSql); - } - return invocation.proceed(); } + + String scopeName = dataScope.getScopeName(); + List deptIds = dataScope.getDeptIds(); + // 优先获取赋值数据 + if (CollUtil.isEmpty(deptIds)) { + PigxUser user = SecurityUtils.getUser(); + if (user == null) { + throw new CheckedException("auto datascope, set up security details true"); + } + + List roleIdList = user.getAuthorities() + .stream().map(GrantedAuthority::getAuthority) + .filter(authority -> authority.startsWith(SecurityConstants.ROLE)) + .map(authority -> authority.split("_")[1]) + .collect(Collectors.toList()); + + Entity query = Db.use(dataSource) + .query("SELECT * FROM sys_role where role_id IN (" + CollUtil.join(roleIdList, ",") + ")") + .stream().min(Comparator.comparingInt(o -> o.getInt("ds_type"))).get(); + + Integer dsType = query.getInt("ds_type"); + // 查询全部 + if (DataScopeTypeEnum.ALL.getType() == dsType) { + return invocation.proceed(); + } + // 自定义 + if (DataScopeTypeEnum.CUSTOM.getType() == dsType) { + String dsScope = query.getStr("ds_scope"); + deptIds.addAll(Arrays.stream(dsScope.split(",")) + .map(Integer::parseInt).collect(Collectors.toList())); + } + // 查询本级及其下级 + if (DataScopeTypeEnum.OWN_CHILD_LEVEL.getType() == dsType) { + List deptIdList = Db.use(dataSource) + .findBy("sys_dept_relation", "ancestor", user.getDeptId()) + .stream().map(entity -> entity.getInt("descendant")) + .collect(Collectors.toList()); + deptIds.addAll(deptIdList); + } + // 只查询本级 + if (DataScopeTypeEnum.OWN_LEVEL.getType() == dsType) { + deptIds.add(user.getDeptId()); + } + } + String join = CollectionUtil.join(deptIds, ","); + originalSql = "select * from (" + originalSql + ") temp_data_scope where temp_data_scope." + scopeName + " in (" + join + ")"; + metaObject.setValue("delegate.boundSql.sql", originalSql); + return invocation.proceed(); } /** diff --git a/pigx-visual/pigx-daemon/src/main/java/com/pig4cloud/pigx/daemon/config/MybatisPlusConfigurer.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/enums/DataScopeTypeEnum.java similarity index 51% rename from pigx-visual/pigx-daemon/src/main/java/com/pig4cloud/pigx/daemon/config/MybatisPlusConfigurer.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/enums/DataScopeTypeEnum.java index d74149358..9e243af25 100644 --- a/pigx-visual/pigx-daemon/src/main/java/com/pig4cloud/pigx/daemon/config/MybatisPlusConfigurer.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/enums/DataScopeTypeEnum.java @@ -15,39 +15,46 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.daemon.config; +package com.pig4cloud.pigx.common.data.enums; -import com.baomidou.mybatisplus.core.injector.ISqlInjector; -import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; +import lombok.AllArgsConstructor; +import lombok.Getter; /** * @author lengleng - * @date 2017/10/29 + * @date 2018/12/26 + *

+ * 数据权限类型 */ -@Configuration -@MapperScan("com.pig4cloud.pigx.daemon.mapper") -public class MybatisPlusConfigurer { +@Getter +@AllArgsConstructor +public enum DataScopeTypeEnum { /** - * 分页插件 - * - * @return PaginationInterceptor + * 查询全部数据 */ - @Bean - public PaginationInterceptor paginationInterceptor() { - return new PaginationInterceptor(); - } + ALL(0, "全部"), /** - * 逻辑删除插件 - * - * @return LogicSqlInjector + * 自定义 */ - @Bean - public ISqlInjector sqlInjector() { - return new LogicSqlInjector(); - } + CUSTOM(1, "自定义"), + + /** + * 本级及子级 + */ + OWN_CHILD_LEVEL(2, "本级及子级"), + + /** + * 本级 + */ + OWN_LEVEL(3, "本级"); + + /** + * 类型 + */ + private final int type; + /** + * 描述 + */ + private final String description; } diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/config/MybatisPlusConfigurer.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java similarity index 69% rename from pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/config/MybatisPlusConfigurer.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java index 9b7c69e48..698bcc849 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/config/MybatisPlusConfigurer.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java @@ -15,34 +15,31 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.act.config; +package com.pig4cloud.pigx.common.data.mybatis; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.core.parser.ISqlParser; import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; -import lombok.extern.slf4j.Slf4j; -import net.sf.jsqlparser.expression.Expression; -import net.sf.jsqlparser.expression.LongValue; +import com.pig4cloud.pigx.common.data.datascope.DataScopeInterceptor; +import com.pig4cloud.pigx.common.data.tenant.PigxTenantHandler; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import javax.sql.DataSource; import java.util.ArrayList; import java.util.List; /** * @author lengleng - * @date 2018/9/27 - * mybatis-plus 配置 + * @date 2017/10/29 */ -@Slf4j @Configuration -@MapperScan("com.pig4cloud.pigx.act.mapper") -public class MybatisPlusConfigurer { +@MapperScan("com.pig4cloud.pigx.*.mapper") +public class MybatisPlusConfig { + /** * 分页插件 * @@ -53,29 +50,23 @@ public class MybatisPlusConfigurer { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); List sqlParserList = new ArrayList<>(); TenantSqlParser tenantSqlParser = new TenantSqlParser(); - tenantSqlParser.setTenantHandler(new TenantHandler() { - @Override - public Expression getTenantId() { - Integer tenantId = TenantContextHolder.getTenantId(); - log.debug("当前租户为 >> {}", tenantId); - return new LongValue(tenantId); - } - - @Override - public String getTenantIdColumn() { - return "tenant_id"; - } - - @Override - public boolean doTableFilter(String tableName) { - return false; - } - }); + tenantSqlParser.setTenantHandler(new PigxTenantHandler()); sqlParserList.add(tenantSqlParser); paginationInterceptor.setSqlParserList(sqlParserList); return paginationInterceptor; } + /** + * 数据权限插件 + * + * @param dataSource 数据源 + * @return DataScopeInterceptor + */ + @Bean + public DataScopeInterceptor dataScopeInterceptor(DataSource dataSource) { + return new DataScopeInterceptor(dataSource); + } + /** * 逻辑删除插件 * diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantConfiguration.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantConfiguration.java similarity index 96% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantConfiguration.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantConfiguration.java index 62592da3b..d5d6dbde8 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantConfiguration.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantConfiguration.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.security.feign; +package com.pig4cloud.pigx.common.data.tenant; import feign.RequestInterceptor; import org.springframework.context.annotation.Bean; diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantInterceptor.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantInterceptor.java similarity index 92% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantInterceptor.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantInterceptor.java index 4e0d90c70..fda44d470 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/feign/PigxFeignTenantInterceptor.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxFeignTenantInterceptor.java @@ -15,10 +15,9 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.security.feign; +package com.pig4cloud.pigx.common.data.tenant; import com.pig4cloud.pigx.common.core.constant.CommonConstants; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; import feign.RequestInterceptor; import feign.RequestTemplate; import lombok.extern.slf4j.Slf4j; diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java new file mode 100644 index 000000000..82f1d88a8 --- /dev/null +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.common.data.tenant; + +import cn.hutool.core.util.ArrayUtil; +import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; +import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; + +/** + * @author lengleng + * @date 2018-12-26 + *

+ * 租户维护处理器 + */ +@Slf4j +public class PigxTenantHandler implements TenantHandler { + private static final String[] TENANT_TABLES = new String[]{"sys_user", "sys_role", "sys_dept", + "sys_log", "sys_social_details", "sys_dict", "sys_log", "oa_leave_bill"}; + + /** + * 获取租户值 + * + * @return 租户值 + */ + @Override + public Expression getTenantId() { + Integer tenantId = TenantContextHolder.getTenantId(); + log.debug("当前租户为 >> {}", tenantId); + return new LongValue(tenantId); + } + + /** + * 获取租户字段名 + * + * @return 租户字段名 + */ + @Override + public String getTenantIdColumn() { + return "tenant_id"; + } + + /** + * 根据表名判断是否进行过滤 + * + * @param tableName 表名 + * @return 是否进行过滤 + */ + @Override + public boolean doTableFilter(String tableName) { + return !ArrayUtil.contains(TENANT_TABLES, tableName); + } +} diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/TenantContextHolder.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java similarity index 96% rename from pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/TenantContextHolder.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java index 0679f76ef..785ea86c5 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/util/TenantContextHolder.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java @@ -15,7 +15,7 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.core.util; +package com.pig4cloud.pigx.common.data.tenant; import com.alibaba.ttl.TransmittableThreadLocal; import lombok.experimental.UtilityClass; diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/filter/TenantContextHolderFilter.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolderFilter.java similarity index 95% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/filter/TenantContextHolderFilter.java rename to pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolderFilter.java index b72cfd21d..6d2ab51e8 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/filter/TenantContextHolderFilter.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolderFilter.java @@ -15,11 +15,10 @@ * Author: lengleng (wangiegie@gmail.com) */ -package com.pig4cloud.pigx.common.security.filter; +package com.pig4cloud.pigx.common.data.tenant; import cn.hutool.core.util.StrUtil; import com.pig4cloud.pigx.common.core.constant.CommonConstants; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; diff --git a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..5de28f3dc --- /dev/null +++ b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories @@ -0,0 +1,7 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.pig4cloud.pigx.common.data.cache.RedisTemplateConfig,\ + com.pig4cloud.pigx.common.data.cache.RedisCacheManagerConfig,\ + com.pig4cloud.pigx.common.data.cache.RedisCacheAutoConfiguration,\ + com.pig4cloud.pigx.common.data.tenant.TenantContextHolderFilter,\ + com.pig4cloud.pigx.common.data.tenant.PigxFeignTenantConfiguration,\ + com.pig4cloud.pigx.common.data.mybatis.MybatisPlusConfig \ No newline at end of file diff --git a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/support/RedisRouteDefinitionWriter.java b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/support/RedisRouteDefinitionWriter.java index e2ee5be47..f2a5f4d1f 100644 --- a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/support/RedisRouteDefinitionWriter.java +++ b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/support/RedisRouteDefinitionWriter.java @@ -26,6 +26,7 @@ import org.springframework.cloud.gateway.route.RouteDefinition; import org.springframework.cloud.gateway.route.RouteDefinitionRepository; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Component; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -51,6 +52,7 @@ public class RedisRouteDefinitionWriter implements RouteDefinitionRepository { RouteDefinitionVo vo = new RouteDefinitionVo(); BeanUtils.copyProperties(r, vo); log.info("保存路由信息{}", vo); + redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.opsForHash().put(CommonConstants.ROUTE_KEY, r.getId(), vo); return Mono.empty(); }); @@ -60,6 +62,7 @@ public class RedisRouteDefinitionWriter implements RouteDefinitionRepository { public Mono delete(Mono routeId) { routeId.subscribe(id -> { log.info("删除路由信息{}", id); + redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.opsForHash().delete(CommonConstants.ROUTE_KEY, id); }); return Mono.empty(); @@ -73,6 +76,7 @@ public class RedisRouteDefinitionWriter implements RouteDefinitionRepository { */ @Override public Flux getRouteDefinitions() { + redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(RouteDefinitionVo.class)); List values = redisTemplate.opsForHash().values(CommonConstants.ROUTE_KEY); List definitionList = new ArrayList<>(); diff --git a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories index 72cd2a9cd..de96a918e 100644 --- a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories @@ -1,5 +1,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.pig4cloud.pigx.common.security.filter.TenantContextHolderFilter,\ com.pig4cloud.pigx.common.security.feign.PigxFeignClientConfiguration,\ - com.pig4cloud.pigx.common.security.feign.PigxFeignTenantConfiguration,\ + com.pig4cloud.pigx.common.data.tenant.PigxFeignTenantConfiguration,\ com.pig4cloud.pigx.common.security.service.PigxUserDetailsServiceImpl diff --git a/pigx-common/pom.xml b/pigx-common/pom.xml index de4b26fa7..35eec4fa1 100644 --- a/pigx-common/pom.xml +++ b/pigx-common/pom.xml @@ -33,8 +33,8 @@ pigx 公共聚合模块 - pigx-common-cache pigx-common-core + pigx-common-data pigx-common-gateway pigx-common-job pigx-common-log diff --git a/pigx-gateway/pom.xml b/pigx-gateway/pom.xml index 0b52802d8..fc5f50835 100644 --- a/pigx-gateway/pom.xml +++ b/pigx-gateway/pom.xml @@ -67,9 +67,8 @@ - com.pig4cloud - pigx-common-cache - 2.0.0 + org.springframework.boot + spring-boot-starter-data-redis diff --git a/pigx-upms/pigx-upms-api/pom.xml b/pigx-upms/pigx-upms-api/pom.xml index dbf07ac5a..d08bd3f11 100644 --- a/pigx-upms/pigx-upms-api/pom.xml +++ b/pigx-upms/pigx-upms-api/pom.xml @@ -40,5 +40,11 @@ pigx-common-core 2.0.0 + + + com.baomidou + mybatis-plus-extension + ${mybatis-plus.version} + diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java index d5314ba0f..e08f8e23f 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java @@ -58,6 +58,11 @@ public class SysRole extends Model { @NotBlank(message = "角色描述 不能为空") private String roleDesc; + @NotBlank(message = "数据权限类型 不能为空") + private Integer dsType; + + private String dsScope; + private LocalDateTime createTime; private LocalDateTime updateTime; /** diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java index e85e1798b..2cd380c1c 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java @@ -19,11 +19,13 @@ package com.pig4cloud.pigx.admin.api.feign; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.admin.api.feign.factory.RemoteTokenServiceFallbackFactory; -import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants; import com.pig4cloud.pigx.common.core.util.R; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.util.Map; @@ -37,11 +39,10 @@ public interface RemoteTokenService { * 分页查询token 信息 * * @param params 分页参数 - * @param from 内部调用标志 * @return page */ @PostMapping("/token/page") - R getTokenPage(@RequestBody Map params, @RequestHeader(SecurityConstants.FROM) String from); + R getTokenPage(@RequestBody Map params); /** * 删除token diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java index 39263ca18..7c500be90 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java @@ -41,11 +41,10 @@ public class RemoteTokenServiceFallbackImpl implements RemoteTokenService { * 分页查询token 信息 * * @param params 分页参数 - * @param from 内部调用标志 * @return page */ @Override - public R getTokenPage(Map params, String from) { + public R getTokenPage(Map params) { log.error("调用认证中心查询token 失败", cause); return null; } diff --git a/pigx-upms/pigx-upms-biz/pom.xml b/pigx-upms/pigx-upms-biz/pom.xml index 93f60513c..74881c42b 100644 --- a/pigx-upms/pigx-upms-biz/pom.xml +++ b/pigx-upms/pigx-upms-biz/pom.xml @@ -45,10 +45,15 @@ pigx-common-log 2.0.0 - + + + mysql + mysql-connector-java + ${mysql.connector.version} + com.pig4cloud - pigx-common-cache + pigx-common-data 2.0.0 diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/MybatisPlusConfigurer.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/MybatisPlusConfigurer.java deleted file mode 100644 index 04ddf2708..000000000 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/MybatisPlusConfigurer.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * - * Copyright (c) 2018-2025, lengleng All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * Neither the name of the pig4cloud.com developer nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * Author: lengleng (wangiegie@gmail.com) - * - */ - -package com.pig4cloud.pigx.admin.config; - -import cn.hutool.core.util.ArrayUtil; -import com.baomidou.mybatisplus.core.injector.ISqlInjector; -import com.baomidou.mybatisplus.core.parser.ISqlParser; -import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; -import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; -import com.pig4cloud.pigx.common.core.datascope.DataScopeInterceptor; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; -import lombok.extern.slf4j.Slf4j; -import net.sf.jsqlparser.expression.Expression; -import net.sf.jsqlparser.expression.LongValue; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author lengleng - * @date 2017/10/29 - */ -@Slf4j -@Configuration -@MapperScan("com.pig4cloud.pigx.admin.mapper") -public class MybatisPlusConfigurer { - private static final String[] IGNORETABLES = new String[]{"sys_dept_relation", "sys_role_dept", "sys_role_menu", "sys_user_role", "sys_route_conf", "sys_menu"}; - - /** - * 分页插件 - * - * @return PaginationInterceptor - */ - @Bean - public PaginationInterceptor paginationInterceptor() { - PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); - List sqlParserList = new ArrayList<>(); - TenantSqlParser tenantSqlParser = new TenantSqlParser(); - tenantSqlParser.setTenantHandler(new TenantHandler() { - @Override - public Expression getTenantId() { - Integer tenantId = TenantContextHolder.getTenantId(); - log.debug("当前租户为 >> {}", tenantId); - return new LongValue(tenantId); - } - - @Override - public String getTenantIdColumn() { - return "tenant_id"; - } - - @Override - public boolean doTableFilter(String tableName) { - return ArrayUtil.contains(IGNORETABLES, tableName); - } - }); - sqlParserList.add(tenantSqlParser); - paginationInterceptor.setSqlParserList(sqlParserList); - return paginationInterceptor; - } - - /** - * 数据权限插件 - * - * @return DataScopeInterceptor - */ - @Bean - public DataScopeInterceptor dataScopeInterceptor() { - return new DataScopeInterceptor(); - } - - /** - * 逻辑删除插件 - * - * @return LogicSqlInjector - */ - @Bean - public ISqlInjector sqlInjector() { - return new LogicSqlInjector(); - } -} diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java index 42a60381f..b837d310a 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java @@ -18,7 +18,6 @@ package com.pig4cloud.pigx.admin.controller; import com.pig4cloud.pigx.admin.api.feign.RemoteTokenService; -import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; import com.pig4cloud.pigx.common.log.annotation.SysLog; import io.swagger.annotations.Api; @@ -48,7 +47,7 @@ public class TokenController { */ @GetMapping("/page") public R getTokenPage(@RequestParam Map params) { - return remoteTokenService.getTokenPage(params, SecurityConstants.FROM_IN); + return remoteTokenService.getTokenPage(params); } /** diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java index bb02e618b..16cd4ad83 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java @@ -25,7 +25,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.admin.api.dto.UserDTO; import com.pig4cloud.pigx.admin.api.entity.SysUser; import com.pig4cloud.pigx.admin.api.vo.UserVO; -import com.pig4cloud.pigx.common.core.datascope.DataScope; +import com.pig4cloud.pigx.common.data.datascope.DataScope; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java index ca221f10e..555cfba0a 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java @@ -33,8 +33,8 @@ import com.pig4cloud.pigx.admin.api.vo.UserVO; import com.pig4cloud.pigx.admin.mapper.SysUserMapper; import com.pig4cloud.pigx.admin.service.*; import com.pig4cloud.pigx.common.core.constant.CommonConstants; -import com.pig4cloud.pigx.common.core.datascope.DataScope; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.data.datascope.DataScope; import com.pig4cloud.pigx.common.security.util.SecurityUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -82,12 +82,12 @@ public class SysUserServiceImpl extends ServiceImpl impl sysUser.setPassword(ENCODER.encode(userDto.getPassword())); baseMapper.insert(sysUser); List userRoleList = userDto.getRole() - .stream().map(roleId -> { - SysUserRole userRole = new SysUserRole(); - userRole.setUserId(sysUser.getUserId()); - userRole.setRoleId(roleId); - return userRole; - }).collect(Collectors.toList()); + .stream().map(roleId -> { + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(sysUser.getUserId()); + userRole.setRoleId(roleId); + return userRole; + }).collect(Collectors.toList()); return sysUserRoleService.saveBatch(userRoleList); } @@ -103,19 +103,19 @@ public class SysUserServiceImpl extends ServiceImpl impl userInfo.setSysUser(sysUser); //设置角色列表 (ID) List roleIds = sysRoleService.findRolesByUserId(sysUser.getUserId()) - .stream() - .map(SysRole::getRoleId) - .collect(Collectors.toList()); + .stream() + .map(SysRole::getRoleId) + .collect(Collectors.toList()); userInfo.setRoles(ArrayUtil.toArray(roleIds, Integer.class)); //设置权限列表(menu.permission) Set permissions = new HashSet<>(); roleIds.forEach(roleId -> { List permissionList = sysMenuService.findMenuByRoleId(roleId) - .stream() - .filter(menuVo -> StringUtils.isNotEmpty(menuVo.getPermission())) - .map(MenuVO::getPermission) - .collect(Collectors.toList()); + .stream() + .filter(menuVo -> StringUtils.isNotEmpty(menuVo.getPermission())) + .map(MenuVO::getPermission) + .collect(Collectors.toList()); permissions.addAll(permissionList); }); userInfo.setPermissions(ArrayUtil.toArray(permissions, String.class)); @@ -131,11 +131,7 @@ public class SysUserServiceImpl extends ServiceImpl impl */ @Override public IPage getUsersWithRolePage(Page page, UserDTO userDTO) { - DataScope dataScope = new DataScope(); - dataScope.setScopeName("deptId"); - dataScope.setIsOnly(true); - dataScope.setDeptIds(getChildDepts()); - return baseMapper.getUserVosPage(page, userDTO, dataScope); + return baseMapper.getUserVosPage(page, userDTO, new DataScope()); } /** @@ -169,7 +165,7 @@ public class SysUserServiceImpl extends ServiceImpl impl UserVO userVO = baseMapper.getUserVoByUsername(userDto.getUsername()); SysUser sysUser = new SysUser(); if (StrUtil.isNotBlank(userDto.getPassword()) - && StrUtil.isNotBlank(userDto.getNewpassword1())) { + && StrUtil.isNotBlank(userDto.getNewpassword1())) { if (ENCODER.matches(userDto.getPassword(), userVO.getPassword())) { sysUser.setPassword(ENCODER.encode(userDto.getNewpassword1())); } else { @@ -196,7 +192,7 @@ public class SysUserServiceImpl extends ServiceImpl impl this.updateById(sysUser); sysUserRoleService.remove(Wrappers.update().lambda() - .eq(SysUserRole::getUserId, userDto.getUserId())); + .eq(SysUserRole::getUserId, userDto.getUserId())); userDto.getRole().forEach(roleId -> { SysUserRole userRole = new SysUserRole(); userRole.setUserId(sysUser.getUserId()); @@ -215,7 +211,7 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public List listAncestorUsers(String username) { SysUser sysUser = this.getOne(Wrappers.query().lambda() - .eq(SysUser::getUsername, username)); + .eq(SysUser::getUsername, username)); SysDept sysDept = sysDeptService.getById(sysUser.getDeptId()); if (sysDept == null) { @@ -224,7 +220,7 @@ public class SysUserServiceImpl extends ServiceImpl impl Integer parentId = sysDept.getParentId(); return this.list(Wrappers.query().lambda() - .eq(SysUser::getDeptId, parentId)); + .eq(SysUser::getDeptId, parentId)); } /** @@ -236,11 +232,11 @@ public class SysUserServiceImpl extends ServiceImpl impl Integer deptId = SecurityUtils.getUser().getDeptId(); //获取当前部门的子部门 return sysDeptRelationService - .list(Wrappers.query().lambda() - .eq(SysDeptRelation::getAncestor, deptId)) - .stream() - .map(SysDeptRelation::getDescendant) - .collect(Collectors.toList()); + .list(Wrappers.query().lambda() + .eq(SysDeptRelation::getAncestor, deptId)) + .stream() + .map(SysDeptRelation::getDescendant) + .collect(Collectors.toList()); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRoleMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRoleMapper.xml index 020f05257..b48488340 100644 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRoleMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysRoleMapper.xml @@ -27,6 +27,8 @@ + + diff --git a/pigx-visual/pigx-activiti/pom.xml b/pigx-visual/pigx-activiti/pom.xml index 3a1c36426..1a5f4cd19 100644 --- a/pigx-visual/pigx-activiti/pom.xml +++ b/pigx-visual/pigx-activiti/pom.xml @@ -43,10 +43,10 @@ pigx-common-core 2.0.0 - + com.pig4cloud - pigx-common-cache + pigx-common-data 2.0.0 @@ -54,29 +54,28 @@ pigx-upms-api 2.0.0 - - com.pig4cloud - pigx-common-swagger - 2.0.0 - - - mysql - mysql-connector-java - ${mysql.connector.version} - com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} + + com.pig4cloud + pigx-common-swagger + 2.0.0 + org.activiti activiti-spring-boot-starter-basic ${activiti.version} - + + mysql + mysql-connector-java + ${mysql.connector.version} + org.activiti activiti-modeler diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ActTaskServiceImpl.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ActTaskServiceImpl.java index 8c820df98..4ec7215f6 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ActTaskServiceImpl.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ActTaskServiceImpl.java @@ -29,7 +29,7 @@ import com.pig4cloud.pigx.act.mapper.LeaveBillMapper; import com.pig4cloud.pigx.act.service.ActTaskService; import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.enums.TaskStatusEnum; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.common.security.util.SecurityUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/EditorServiceImpl.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/EditorServiceImpl.java index 4dc5481b1..771f92f92 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/EditorServiceImpl.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/EditorServiceImpl.java @@ -21,7 +21,7 @@ import cn.hutool.core.util.CharsetUtil; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.pig4cloud.pigx.act.service.EditorService; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.ActivitiException; diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ModelServiceImpl.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ModelServiceImpl.java index 4b621e95f..f358ebca8 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ModelServiceImpl.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ModelServiceImpl.java @@ -26,7 +26,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.pig4cloud.pigx.act.service.ModelService; import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.activiti.bpmn.model.BpmnModel; @@ -82,8 +82,8 @@ public class ModelServiceImpl implements ModelService { model.setName(name); model.setCategory(category); model.setVersion(Integer.parseInt( - String.valueOf(repositoryService.createModelQuery() - .modelKey(model.getKey()).count() + 1))); + String.valueOf(repositoryService.createModelQuery() + .modelKey(model.getKey()).count() + 1))); ObjectNode modelObjectNode = objectMapper.createObjectNode(); modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, name); @@ -110,8 +110,8 @@ public class ModelServiceImpl implements ModelService { @Override public IPage getModelPage(Map params) { ModelQuery modelQuery = repositoryService.createModelQuery() - .modelTenantId(String.valueOf(TenantContextHolder.getTenantId())) - .latestVersion().orderByLastUpdateTime().desc(); + .modelTenantId(String.valueOf(TenantContextHolder.getTenantId())) + .latestVersion().orderByLastUpdateTime().desc(); String category = (String) params.get("category"); if (StrUtil.isNotBlank(category)) { modelQuery.modelCategory(category); @@ -158,18 +158,18 @@ public class ModelServiceImpl implements ModelService { } // 部署流程 Deployment deployment = repositoryService - .createDeployment().name(model.getName()) - .addBpmnModel(processName, bpmnModel) - .tenantId(String.valueOf(TenantContextHolder.getTenantId())) - .deploy(); + .createDeployment().name(model.getName()) + .addBpmnModel(processName, bpmnModel) + .tenantId(String.valueOf(TenantContextHolder.getTenantId())) + .deploy(); // 设置流程分类 List list = repositoryService.createProcessDefinitionQuery() - .deploymentId(deployment.getId()) - .list(); + .deploymentId(deployment.getId()) + .list(); list.stream().forEach(processDefinition -> - repositoryService.setProcessDefinitionCategory(processDefinition.getId(), model.getCategory())); + repositoryService.setProcessDefinitionCategory(processDefinition.getId(), model.getCategory())); } catch (Exception e) { log.error("部署失败,异常", e); } diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ProcessServiceImpl.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ProcessServiceImpl.java index 215e37446..1a0ab5010 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ProcessServiceImpl.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/service/impl/ProcessServiceImpl.java @@ -29,7 +29,7 @@ import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.enums.ProcessStatusEnum; import com.pig4cloud.pigx.common.core.constant.enums.ResourceTypeEnum; import com.pig4cloud.pigx.common.core.constant.enums.TaskStatusEnum; -import com.pig4cloud.pigx.common.core.util.TenantContextHolder; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import lombok.AllArgsConstructor; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; diff --git a/pigx-visual/pigx-codegen/pom.xml b/pigx-visual/pigx-codegen/pom.xml index 4931c6fc6..051afb09e 100755 --- a/pigx-visual/pigx-codegen/pom.xml +++ b/pigx-visual/pigx-codegen/pom.xml @@ -20,18 +20,18 @@ org.springframework.cloud spring-cloud-starter-config + + + com.pig4cloud + pigx-common-data + 2.0.0 + com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} - - - com.pig4cloud - pigx-common-cache - 2.0.0 - mysql mysql-connector-java diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/MybatisPlusConfigurer.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/MybatisPlusConfigurer.java deleted file mode 100644 index 23b314c3b..000000000 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/MybatisPlusConfigurer.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2018-2025, lengleng All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * Neither the name of the pig4cloud.com developer nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * Author: lengleng (wangiegie@gmail.com) - */ - -package com.pig4cloud.pigx.codegen.config; - -import com.baomidou.mybatisplus.core.injector.ISqlInjector; -import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author lengleng - * @date 2017/10/29 - */ -@Configuration -@MapperScan("com.pig4cloud.pigx.codegen.mapper") -public class MybatisPlusConfigurer { - /** - * 分页插件 - * - * @return PaginationInterceptor - */ - @Bean - public PaginationInterceptor paginationInterceptor() { - return new PaginationInterceptor(); - } - - /** - * 逻辑删除插件 - * - * @return LogicSqlInjector - */ - @Bean - public ISqlInjector sqlInjector() { - return new LogicSqlInjector(); - } -} diff --git a/pigx-visual/pigx-daemon/pom.xml b/pigx-visual/pigx-daemon/pom.xml index e697168b2..87267a4b1 100644 --- a/pigx-visual/pigx-daemon/pom.xml +++ b/pigx-visual/pigx-daemon/pom.xml @@ -48,10 +48,10 @@ pigx-common-swagger 2.0.0 - + com.pig4cloud - pigx-common-cache + pigx-common-data 2.0.0 diff --git a/pigx-visual/pigx-monitor/pom.xml b/pigx-visual/pigx-monitor/pom.xml index b8c63db0e..9c9d699ac 100644 --- a/pigx-visual/pigx-monitor/pom.xml +++ b/pigx-visual/pigx-monitor/pom.xml @@ -39,9 +39,8 @@ 2.0.0 - com.pig4cloud - pigx-common-cache - 2.0.0 + org.springframework.boot + spring-boot-starter-data-redis diff --git a/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/RedisEventStore.java b/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/RedisEventStore.java index 20ad272ed..7edd3f960 100644 --- a/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/RedisEventStore.java +++ b/pigx-visual/pigx-monitor/src/main/java/com/pig4cloud/pigx/monitor/support/RedisEventStore.java @@ -25,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import reactor.core.publisher.Mono; import java.util.List; @@ -47,6 +48,7 @@ public class RedisEventStore extends InMemoryEventStore { events.forEach(event -> { String key = event.getInstance().getValue() + "_" + event.getTimestamp().toString(); log.info("保存实例事件的KEY:{},EVENT: {}", key, event.getType()); + redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(InstanceEvent.class)); redisTemplate.opsForHash().put(CommonConstants.EVENT_KEY, key, event); }); From d76777fdf78aeaa1b41e1039e94c7e3adb4258aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Thu, 27 Dec 2018 23:37:01 +0800 Subject: [PATCH 10/29] :sparkles: add minioTemplate, support minio --- pigx-common/pigx-common-minio/pom.xml | 24 +++ .../common/minio/MinioAutoConfiguration.java | 48 +++++ .../common/minio/MinioProperties.java | 48 +++++ .../common/minio/http/MinioEndpoint.java | 122 +++++++++++ .../common/minio/service/MinioTemplate.java | 189 ++++++++++++++++++ .../pig4cloud/common/minio/vo/MinioItem.java | 53 +++++ .../common/minio/vo/MinioObject.java | 53 +++++ .../main/resources/META-INF/spring.factories | 2 + pigx-common/pom.xml | 1 + pom.xml | 1 + 10 files changed, 541 insertions(+) create mode 100755 pigx-common/pigx-common-minio/pom.xml create mode 100755 pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioAutoConfiguration.java create mode 100755 pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioProperties.java create mode 100755 pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/http/MinioEndpoint.java create mode 100755 pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/service/MinioTemplate.java create mode 100755 pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioItem.java create mode 100755 pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioObject.java create mode 100755 pigx-common/pigx-common-minio/src/main/resources/META-INF/spring.factories diff --git a/pigx-common/pigx-common-minio/pom.xml b/pigx-common/pigx-common-minio/pom.xml new file mode 100755 index 000000000..07505a9bf --- /dev/null +++ b/pigx-common/pigx-common-minio/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + com.pig4cloud + pigx-common + 2.0.0 + + + pigx-common-minio + jar + + pigx 文件系统依赖 + + + + io.minio + minio + ${minio.version} + + + \ No newline at end of file diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioAutoConfiguration.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioAutoConfiguration.java new file mode 100755 index 000000000..2ba6233b4 --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioAutoConfiguration.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio; + +import com.pig4cloud.common.minio.service.MinioTemplate; +import lombok.AllArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + +/** + * minio 自动配置类 + * + * @author lengleng + */ +@AllArgsConstructor +@EnableConfigurationProperties({MinioProperties.class}) +public class MinioAutoConfiguration { + private final MinioProperties properties; + + @Bean + @ConditionalOnMissingBean(MinioTemplate.class) + @ConditionalOnProperty(name = "minio.url") + MinioTemplate template() { + return new MinioTemplate( + properties.getUrl(), + properties.getAccessKey(), + properties.getSecretKey() + ); + } + +} diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioProperties.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioProperties.java new file mode 100755 index 000000000..664cd813c --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/MinioProperties.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * minio 配置信息 + * + * @author lengleng + */ +@Data +@Configuration +@ConfigurationProperties(prefix = "minio") +public class MinioProperties { + /** + * minio 服务地址 http://ip:port + */ + private String url; + + /** + * 用户名 + */ + private String accessKey; + + /** + * 密码 + */ + private String secretKey; + +} diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/http/MinioEndpoint.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/http/MinioEndpoint.java new file mode 100755 index 000000000..1952d6bfd --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/http/MinioEndpoint.java @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio.http; + +import com.pig4cloud.common.minio.service.MinioTemplate; +import com.pig4cloud.common.minio.vo.MinioItem; +import com.pig4cloud.common.minio.vo.MinioObject; +import io.minio.messages.Bucket; +import lombok.AllArgsConstructor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * minio 对外提供服务端点 + * + * @author lengleng + *

+ * minio.endpoint.enable + */ +@ConditionalOnProperty(name = "minio.endpoint.enable", havingValue = "true") +@RestController +@AllArgsConstructor +@RequestMapping("${minio.endpoint.name:/minio}") +public class MinioEndpoint { + private final MinioTemplate template; + + /** + * Bucket Endpoints + */ + @PostMapping("/bucket/{bucketName}") + public Bucket createBucker(@PathVariable String bucketName) throws Exception { + + template.createBucket(bucketName); + return template.getBucket(bucketName).get(); + + } + + @GetMapping("/bucket") + public List getBuckets() throws Exception { + return template.getAllBuckets(); + } + + @GetMapping("/bucket/{bucketName}") + public Bucket getBucket(@PathVariable String bucketName) throws Exception { + return template.getBucket(bucketName).orElseThrow(() -> new IllegalArgumentException("Bucket Name not found!")); + } + + @DeleteMapping("/bucket/{bucketName}") + @ResponseStatus(HttpStatus.ACCEPTED) + public void deleteBucket(@PathVariable String bucketName) throws Exception { + + template.removeBucket(bucketName); + } + + /** + * Object Endpoints + */ + + @PostMapping("/object/{bucketName}") + public MinioObject createObject(@RequestBody MultipartFile object, @PathVariable String bucketName) throws Exception { + String name = object.getOriginalFilename(); + template.putObject(bucketName, name, object.getInputStream(), object.getSize(), object.getContentType()); + return new MinioObject(template.getObjectInfo(bucketName, name)); + + } + + @PostMapping("/object/{bucketName}/{objectName}") + public MinioObject createObject(@RequestBody MultipartFile object, @PathVariable String bucketName, @PathVariable String objectName) throws Exception { + template.putObject(bucketName, objectName, object.getInputStream(), object.getSize(), object.getContentType()); + return new MinioObject(template.getObjectInfo(bucketName, objectName)); + + } + + + @GetMapping("/object/{bucketName}/{objectName}") + public List filterObject(@PathVariable String bucketName, @PathVariable String objectName) throws Exception { + + return template.getAllObjectsByPrefix(bucketName, objectName, true); + + } + + @GetMapping("/object/{bucketName}/{objectName}/{expires}") + public Map getObject(@PathVariable String bucketName, @PathVariable String objectName, @PathVariable Integer expires) throws Exception { + Map responseBody = new HashMap<>(8); + // Put Object info + responseBody.put("bucket", bucketName); + responseBody.put("object", objectName); + responseBody.put("url", template.getObjectURL(bucketName, objectName, expires)); + responseBody.put("expires", expires); + return responseBody; + } + + @DeleteMapping("/object/{bucketName}/{objectName}/") + @ResponseStatus(HttpStatus.ACCEPTED) + public void deleteObject(@PathVariable String bucketName, @PathVariable String objectName) throws Exception { + + template.removeObject(bucketName, objectName); + } + + +} diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/service/MinioTemplate.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/service/MinioTemplate.java new file mode 100755 index 000000000..396b82f90 --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/service/MinioTemplate.java @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio.service; + +import com.pig4cloud.common.minio.vo.MinioItem; +import io.minio.MinioClient; +import io.minio.ObjectStat; +import io.minio.Result; +import io.minio.messages.Bucket; +import io.minio.messages.Item; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +/** + * minio 交互类 + * + * @author lengleng + */ +@NoArgsConstructor +@AllArgsConstructor +public class MinioTemplate { + + private String endpoint; + private String accessKey; + private String secretKey; + + + /** + * 创建bucket + * + * @param bucketName bucket名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#makeBucket + */ + public void createBucket(String bucketName) throws Exception { + MinioClient client = getMinioClient(); + if (!client.bucketExists(bucketName)) { + client.makeBucket(bucketName); + } + } + + /** + * 获取全部bucket + *

+ * https://docs.minio.io/cn/java-client-api-reference.html#listBuckets + */ + public List getAllBuckets() throws Exception { + return getMinioClient().listBuckets(); + } + + /** + * @param bucketName bucket名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#listBuckets + */ + public Optional getBucket(String bucketName) throws Exception { + return getMinioClient().listBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst(); + } + + /** + * @param bucketName bucket名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeBucket + */ + public void removeBucket(String bucketName) throws Exception { + getMinioClient().removeBucket(bucketName); + } + + /** + * 根据文件前置查询文件 + * + * @param bucketName bucket名称 + * @param prefix 前缀 + * @param recursive 是否递归查询 + * @return + * @throws Exception + */ + public List getAllObjectsByPrefix(String bucketName, String prefix, boolean recursive) throws Exception { + List objectList = new ArrayList(); + Iterable> objectsIterator = getMinioClient() + .listObjects(bucketName, prefix, recursive); + + while (objectsIterator.iterator().hasNext()) { + objectList.add(objectsIterator.iterator().next().get()); + } + return objectList; + } + + /** + * 获取文件外链 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @param expires 过期时间 <=7 + * @return url + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#getObject + */ + public String getObjectURL(String bucketName, String objectName, Integer expires) throws Exception { + return getMinioClient().presignedGetObject(bucketName, objectName, expires); + } + + /** + * 获取文件 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @return 二进制流 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#getObject + */ + public InputStream getObject(String bucketName, String objectName) throws Exception { + return getMinioClient().getObject(bucketName, objectName); + } + + /** + * 上传文件 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @param stream 文件流 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject + */ + public void putObject(String bucketName, String objectName, InputStream stream) throws Exception { + getMinioClient().putObject(bucketName, objectName, stream, stream.available(), "application/octet-stream"); + } + + /** + * 上传文件 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @param stream 文件流 + * @param size 大小 + * @param contextType 类型 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject + */ + public void putObject(String bucketName, String objectName, InputStream stream, long size, String contextType) throws Exception { + getMinioClient().putObject(bucketName, objectName, stream, size, contextType); + } + + /** + * 获取文件信息 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#statObject + */ + public ObjectStat getObjectInfo(String bucketName, String objectName) throws Exception { + return getMinioClient().statObject(bucketName, objectName); + } + + /** + * 删除文件 + * + * @param bucketName bucket名称 + * @param objectName 文件名称 + * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeObject + */ + public void removeObject(String bucketName, String objectName) throws Exception { + getMinioClient().removeObject(bucketName, objectName); + } + + + /** + * 获取minio 原生客户端 + * + * @return + * @throws Exception + */ + public MinioClient getMinioClient() throws Exception { + return new MinioClient(endpoint, accessKey, secretKey); + } +} diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioItem.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioItem.java new file mode 100755 index 000000000..fcb9b0644 --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioItem.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio.vo; + +import io.minio.messages.Item; +import io.minio.messages.Owner; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + +/** + * minio 桶中的对象信息 + * + * @author lengleng + */ +@Data +@AllArgsConstructor +public class MinioItem { + + private String objectName; + private Date lastModified; + private String etag; + private Long size; + private String storageClass; + private Owner owner; + private String type; + + public MinioItem(Item item) { + this.objectName = item.objectName(); + this.lastModified = item.lastModified(); + this.etag = item.etag(); + this.size = (long) item.size(); + this.storageClass = item.storageClass(); + this.owner = item.owner(); + this.type = item.isDir() ? "directory" : "file"; + } +} diff --git a/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioObject.java b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioObject.java new file mode 100755 index 000000000..c4fd4f85c --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/java/com/pig4cloud/common/minio/vo/MinioObject.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.common.minio.vo; + +import io.minio.ObjectStat; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + + +/** + * 存储对象的元数据 + * + * @author lengleng + */ +@Data +@AllArgsConstructor +public class MinioObject { + private String bucketName; + private String name; + private Date createdTime; + private Long length; + private String etag; + private String contentType; + private String matDesc; + + public MinioObject(ObjectStat os) { + this.bucketName = os.bucketName(); + this.name = os.name(); + this.createdTime = os.createdTime(); + this.length = os.length(); + this.etag = os.etag(); + this.contentType = os.contentType(); + this.matDesc = os.matDesc(); + } + +} diff --git a/pigx-common/pigx-common-minio/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-minio/src/main/resources/META-INF/spring.factories new file mode 100755 index 000000000..b67a03493 --- /dev/null +++ b/pigx-common/pigx-common-minio/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.pig4cloud.common.minio.MinioAutoConfiguration \ No newline at end of file diff --git a/pigx-common/pom.xml b/pigx-common/pom.xml index 35eec4fa1..80415e4c8 100644 --- a/pigx-common/pom.xml +++ b/pigx-common/pom.xml @@ -38,6 +38,7 @@ pigx-common-gateway pigx-common-job pigx-common-log + pigx-common-minio pigx-common-security pigx-common-swagger pigx-common-transaction diff --git a/pom.xml b/pom.xml index 1bf361b1b..a57e66274 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,7 @@ 4.1.0 2.1.0 2.10.1 + 3.0.12 2.1.5 8.0.13 2.3.3.RELEASE From 0eae5cbfd4f9b3aeb1196da0250728c51b945a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Fri, 28 Dec 2018 10:27:00 +0800 Subject: [PATCH 11/29] :fire: Removing code or files. --- .../pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java | 4 ++++ .../src/main/resources/META-INF/spring.factories | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java index 698bcc849..9c52e5681 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusConfig.java @@ -25,6 +25,7 @@ import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; import com.pig4cloud.pigx.common.data.datascope.DataScopeInterceptor; import com.pig4cloud.pigx.common.data.tenant.PigxTenantHandler; import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -46,6 +47,7 @@ public class MybatisPlusConfig { * @return PaginationInterceptor */ @Bean + @ConditionalOnMissingBean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); List sqlParserList = new ArrayList<>(); @@ -63,6 +65,7 @@ public class MybatisPlusConfig { * @return DataScopeInterceptor */ @Bean + @ConditionalOnMissingBean public DataScopeInterceptor dataScopeInterceptor(DataSource dataSource) { return new DataScopeInterceptor(dataSource); } @@ -73,6 +76,7 @@ public class MybatisPlusConfig { * @return LogicSqlInjector */ @Bean + @ConditionalOnMissingBean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } diff --git a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories index de96a918e..b13fe1565 100644 --- a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories @@ -1,4 +1,3 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.pig4cloud.pigx.common.security.feign.PigxFeignClientConfiguration,\ - com.pig4cloud.pigx.common.data.tenant.PigxFeignTenantConfiguration,\ com.pig4cloud.pigx.common.security.service.PigxUserDetailsServiceImpl From 04f570868105ef742c963b444a039678c5edd218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Fri, 28 Dec 2018 18:15:06 +0800 Subject: [PATCH 12/29] :sparkles: Introducing new features. add mybatis plus meta object handler --- .../mybatis/MybatisPlusMetaObjectHandler.java | 51 +++++++++++++++++++ .../main/resources/META-INF/spring.factories | 3 +- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusMetaObjectHandler.java diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusMetaObjectHandler.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusMetaObjectHandler.java new file mode 100644 index 000000000..0aa879ee8 --- /dev/null +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusMetaObjectHandler.java @@ -0,0 +1,51 @@ +package com.pig4cloud.pigx.common.data.mybatis; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.pig4cloud.pigx.common.security.util.SecurityUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.Optional; + +/** + * Mybatis Plus的参数填充器 + * @author lishangbu + * @date 2018/12/28 + * 利用Mybatis Plus的参数填充器设置一些公共信息参数 + * setFieldValByName方法传入的字段名称是Java Bean的属性 + * 其接口默认方法会自行进行判空之类的预处理,因此不需要我们进一步操作 + * MP 3.0.7将会变更这个方法 + */ +@Component +@Slf4j +public class MybatisPlusMetaObjectHandler implements MetaObjectHandler { + private static final String CREATE_USER = "createUser"; + private static final String UPDATE_USER = "updateUser"; + private static final String CREATE_TIME = "createTime"; + private static final String UPDATE_TIME = "updateTime"; + + @Override + public void insertFill(MetaObject metaObject) { + this.setFieldValByName(CREATE_TIME, LocalDateTime.now(),metaObject); + this.setFieldValByName(CREATE_USER,getUserName(),metaObject); + } + + @Override + public void updateFill(MetaObject metaObject) { + this.setFieldValByName(UPDATE_TIME,LocalDateTime.now(),metaObject); + this.setFieldValByName(UPDATE_USER,getUserName(),metaObject); + } + + /** + * 获取用户名信息 + * 开启details属性的情况下,通过用户实体获取用户名 + * 反之直接获取用户名 + * @return + */ + private String getUserName(){ + return Optional.ofNullable(SecurityUtils.getUser().getUsername()) + .orElse(SecurityUtils.getUsername()); + } +} diff --git a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories index 5de28f3dc..b05acce7b 100644 --- a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories @@ -4,4 +4,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.pig4cloud.pigx.common.data.cache.RedisCacheAutoConfiguration,\ com.pig4cloud.pigx.common.data.tenant.TenantContextHolderFilter,\ com.pig4cloud.pigx.common.data.tenant.PigxFeignTenantConfiguration,\ - com.pig4cloud.pigx.common.data.mybatis.MybatisPlusConfig \ No newline at end of file + com.pig4cloud.pigx.common.data.mybatis.MybatisPlusConfig,\ + com.pig4cloud.pigx.common.data.mybatis.MybatisPlusMetaObjectHandler \ No newline at end of file From 70bc5100b348c78b03761f4b947c93d7c60669bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Fri, 28 Dec 2018 19:01:09 +0800 Subject: [PATCH 13/29] :heavy_minus_sign: Removing a dependency.exclude mybatis in activiti --- pigx-visual/pigx-activiti/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pigx-visual/pigx-activiti/pom.xml b/pigx-visual/pigx-activiti/pom.xml index 1a5f4cd19..87d1ca384 100644 --- a/pigx-visual/pigx-activiti/pom.xml +++ b/pigx-visual/pigx-activiti/pom.xml @@ -70,6 +70,12 @@ org.activiti activiti-spring-boot-starter-basic ${activiti.version} + + + org.mybatis + mybatis + + mysql From c8658f0fbdac02625b9935c30a297b495723035f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Fri, 28 Dec 2018 21:41:53 +0800 Subject: [PATCH 14/29] :recycle: Refactoring code. @Inner --- .../pigx/auth/endpoint/PigxTokenEndpoint.java | 7 ++- .../mybatis/MybatisPlusMetaObjectHandler.java | 51 ------------------- .../main/resources/META-INF/spring.factories | 3 +- .../admin/api/feign/RemoteTokenService.java | 10 ++-- .../RemoteTokenServiceFallbackImpl.java | 6 ++- .../admin/controller/TokenController.java | 5 +- 6 files changed, 15 insertions(+), 67 deletions(-) delete mode 100644 pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusMetaObjectHandler.java diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java index 92d9f7001..165ac881e 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java @@ -26,7 +26,7 @@ import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; +import com.pig4cloud.pigx.common.security.annotation.Inner; import com.pig4cloud.pigx.common.security.service.PigxUser; import lombok.AllArgsConstructor; import org.springframework.cache.CacheManager; @@ -110,6 +110,7 @@ public class PigxTokenEndpoint { * @param token token * @return */ + @Inner @DeleteMapping("/{token}") public R delToken(@PathVariable("token") String token) { return new R<>(redisTemplate.delete(PIGX_OAUTH_ACCESS + token)); @@ -122,6 +123,7 @@ public class PigxTokenEndpoint { * @param params 分页参数 * @return */ + @Inner @PostMapping("/page") public R tokenList(@RequestBody Map params) { List> list = new ArrayList<>(); @@ -169,9 +171,6 @@ public class PigxTokenEndpoint { private boolean extractToken(Map map, Object principal) { if (principal instanceof PigxUser) { PigxUser user = (PigxUser) principal; - if (!user.getTenantId().equals(TenantContextHolder.getTenantId())) { - return true; - } map.put("user_id", user.getId() + ""); map.put("user_name", user.getUsername() + ""); } diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusMetaObjectHandler.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusMetaObjectHandler.java deleted file mode 100644 index 0aa879ee8..000000000 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/mybatis/MybatisPlusMetaObjectHandler.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.pig4cloud.pigx.common.data.mybatis; - -import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; -import com.pig4cloud.pigx.common.security.util.SecurityUtils; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.reflection.MetaObject; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; -import java.util.Optional; - -/** - * Mybatis Plus的参数填充器 - * @author lishangbu - * @date 2018/12/28 - * 利用Mybatis Plus的参数填充器设置一些公共信息参数 - * setFieldValByName方法传入的字段名称是Java Bean的属性 - * 其接口默认方法会自行进行判空之类的预处理,因此不需要我们进一步操作 - * MP 3.0.7将会变更这个方法 - */ -@Component -@Slf4j -public class MybatisPlusMetaObjectHandler implements MetaObjectHandler { - private static final String CREATE_USER = "createUser"; - private static final String UPDATE_USER = "updateUser"; - private static final String CREATE_TIME = "createTime"; - private static final String UPDATE_TIME = "updateTime"; - - @Override - public void insertFill(MetaObject metaObject) { - this.setFieldValByName(CREATE_TIME, LocalDateTime.now(),metaObject); - this.setFieldValByName(CREATE_USER,getUserName(),metaObject); - } - - @Override - public void updateFill(MetaObject metaObject) { - this.setFieldValByName(UPDATE_TIME,LocalDateTime.now(),metaObject); - this.setFieldValByName(UPDATE_USER,getUserName(),metaObject); - } - - /** - * 获取用户名信息 - * 开启details属性的情况下,通过用户实体获取用户名 - * 反之直接获取用户名 - * @return - */ - private String getUserName(){ - return Optional.ofNullable(SecurityUtils.getUser().getUsername()) - .orElse(SecurityUtils.getUsername()); - } -} diff --git a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories index b05acce7b..5de28f3dc 100644 --- a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories @@ -4,5 +4,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.pig4cloud.pigx.common.data.cache.RedisCacheAutoConfiguration,\ com.pig4cloud.pigx.common.data.tenant.TenantContextHolderFilter,\ com.pig4cloud.pigx.common.data.tenant.PigxFeignTenantConfiguration,\ - com.pig4cloud.pigx.common.data.mybatis.MybatisPlusConfig,\ - com.pig4cloud.pigx.common.data.mybatis.MybatisPlusMetaObjectHandler \ No newline at end of file + com.pig4cloud.pigx.common.data.mybatis.MybatisPlusConfig \ No newline at end of file diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java index 2cd380c1c..9b2689e41 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/RemoteTokenService.java @@ -19,13 +19,11 @@ package com.pig4cloud.pigx.admin.api.feign; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.admin.api.feign.factory.RemoteTokenServiceFallbackFactory; +import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants; import com.pig4cloud.pigx.common.core.util.R; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.*; import java.util.Map; @@ -42,7 +40,7 @@ public interface RemoteTokenService { * @return page */ @PostMapping("/token/page") - R getTokenPage(@RequestBody Map params); + R getTokenPage(@RequestBody Map params,@RequestHeader(SecurityConstants.FROM) String from); /** * 删除token @@ -51,5 +49,5 @@ public interface RemoteTokenService { * @return */ @DeleteMapping("/token/{token}") - R removeTokenById(@PathVariable("token") String token); + R removeTokenById(@PathVariable("token") String token,@RequestHeader(SecurityConstants.FROM) String from); } diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java index 7c500be90..a57ad391b 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/feign/fallback/RemoteTokenServiceFallbackImpl.java @@ -41,10 +41,11 @@ public class RemoteTokenServiceFallbackImpl implements RemoteTokenService { * 分页查询token 信息 * * @param params 分页参数 + * @param from 内部调用标志 * @return page */ @Override - public R getTokenPage(Map params) { + public R getTokenPage(Map params, String from) { log.error("调用认证中心查询token 失败", cause); return null; } @@ -53,10 +54,11 @@ public class RemoteTokenServiceFallbackImpl implements RemoteTokenService { * 删除token * * @param token + * @param from 内部调用标志 * @return */ @Override - public R removeTokenById(String token) { + public R removeTokenById(String token, String from) { log.error("删除token 失败 {}", token, cause); return null; } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java index b837d310a..6c19b0b7e 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/TokenController.java @@ -18,6 +18,7 @@ package com.pig4cloud.pigx.admin.controller; import com.pig4cloud.pigx.admin.api.feign.RemoteTokenService; +import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; import com.pig4cloud.pigx.common.log.annotation.SysLog; import io.swagger.annotations.Api; @@ -47,7 +48,7 @@ public class TokenController { */ @GetMapping("/page") public R getTokenPage(@RequestParam Map params) { - return remoteTokenService.getTokenPage(params); + return remoteTokenService.getTokenPage(params, SecurityConstants.FROM_IN); } /** @@ -60,6 +61,6 @@ public class TokenController { @DeleteMapping("/{token}") @PreAuthorize("@pms.hasPermission('sys_token_del')") public R removeById(@PathVariable String token) { - return remoteTokenService.removeTokenById(token); + return remoteTokenService.removeTokenById(token, SecurityConstants.FROM_IN); } } From 5a159f8d45ff53aaee11ac62c640b40ae14fa289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Fri, 28 Dec 2018 21:47:07 +0800 Subject: [PATCH 15/29] :bug: Fixing a bug. refresh_token not filter --- .../pigx/common/core/constant/SecurityConstants.java | 12 ++++++++---- .../gateway/filter/ValidateCodeGatewayFilter.java | 8 ++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java index 3453bb8a8..22935a874 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/SecurityConstants.java @@ -24,6 +24,10 @@ package com.pig4cloud.pigx.common.core.constant; * @date 2017-12-18 */ public interface SecurityConstants { + /** + * 刷新 + */ + String REFRESH_TOKEN = "refresh_token"; /** * 验证码有效期 */ @@ -82,7 +86,7 @@ public interface SecurityConstants { * 微信获取OPENID */ String WX_AUTHORIZATION_CODE_URL = "https://api.weixin.qq.com/sns/oauth2/access_token" + - "?appid=%s&secret=%s&code=%s&grant_type=authorization_code"; + "?appid=%s&secret=%s&code=%s&grant_type=authorization_code"; /** * {bcrypt} 加密的特征码 @@ -92,14 +96,14 @@ public interface SecurityConstants { * sys_oauth_client_details 表的字段,不包括client_id、client_secret */ String CLIENT_FIELDS = "client_id, CONCAT('{noop}',client_secret) as client_secret, resource_ids, scope, " - + "authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, " - + "refresh_token_validity, additional_information, autoapprove"; + + "authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, " + + "refresh_token_validity, additional_information, autoapprove"; /** * JdbcClientDetailsService 查询语句 */ String BASE_FIND_STATEMENT = "select " + CLIENT_FIELDS - + " from sys_oauth_client_details"; + + " from sys_oauth_client_details"; /** * 默认的查询语句 diff --git a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java index ba5d1e855..7c7f4ee6d 100644 --- a/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java +++ b/pigx-gateway/src/main/java/com/pig4cloud/pigx/gateway/filter/ValidateCodeGatewayFilter.java @@ -61,13 +61,13 @@ public class ValidateCodeGatewayFilter extends AbstractGatewayFilterFactory { return chain.filter(exchange); } - // 终端设置不校验, 直接向下执行(1. 从请求参数中获取 2.从header取) - String clientId = request.getQueryParams().getFirst("client_id"); - if (StrUtil.isNotBlank(clientId) - && filterIgnorePropertiesConfig.getClients().contains(clientId)) { + // 刷新token,直接向下执行 + String grantType = request.getQueryParams().getFirst("grant_type"); + if (StrUtil.equals(SecurityConstants.REFRESH_TOKEN, grantType)) { return chain.filter(exchange); } + // 终端设置不校验, 直接向下执行 try { String[] clientInfos = WebUtils.getClientId(request); if (filterIgnorePropertiesConfig.getClients().contains(clientInfos[0])) { From bc89441349295238f7c94d2f293eb862b66d1b20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Sat, 29 Dec 2018 16:57:27 +0800 Subject: [PATCH 16/29] :bug: Fixing a bug.fix sys role validate --- .../java/com/pig4cloud/pigx/admin/api/entity/SysRole.java | 3 ++- .../com/pig4cloud/pigx/admin/controller/RoleController.java | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java index e08f8e23f..9cf07859b 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/entity/SysRole.java @@ -28,6 +28,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.io.Serializable; import java.time.LocalDateTime; @@ -58,7 +59,7 @@ public class SysRole extends Model { @NotBlank(message = "角色描述 不能为空") private String roleDesc; - @NotBlank(message = "数据权限类型 不能为空") + @NotNull(message = "数据权限类型 不能为空") private Integer dsType; private String dsScope; diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/RoleController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/RoleController.java index cf42d5438..a477b90df 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/RoleController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/RoleController.java @@ -31,6 +31,8 @@ import lombok.AllArgsConstructor; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + /** * @author lengleng * @date 2017/11/5 @@ -63,7 +65,7 @@ public class RoleController { @SysLog("添加角色") @PostMapping @PreAuthorize("@pms.hasPermission('sys_role_add')") - public R save(@RequestBody SysRole sysRole) { + public R save(@Valid @RequestBody SysRole sysRole) { return new R<>(sysRoleService.save(sysRole)); } @@ -76,7 +78,7 @@ public class RoleController { @SysLog("修改角色") @PutMapping @PreAuthorize("@pms.hasPermission('sys_role_edit')") - public R update(@RequestBody SysRole sysRole) { + public R update(@Valid @RequestBody SysRole sysRole) { return new R<>(sysRoleService.updateById(sysRole)); } From 72c26ec747f7af7c31e5e00154c75bfb0b164409 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Sat, 29 Dec 2018 17:06:50 +0800 Subject: [PATCH 17/29] :bug: Fixing a bug.mapped sys menu column 'keep_alive' --- .../pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml index 596e8518f..a89d0707f 100644 --- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml +++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysMenuMapper.xml @@ -32,7 +32,7 @@ - + @@ -47,7 +47,7 @@ - + From 72654046a87f4d649e495a01dbb432bbc62f0d6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Mon, 31 Dec 2018 02:42:48 +0800 Subject: [PATCH 18/29] =?UTF-8?q?:sparkles:=20minio=20=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E3=80=81=E8=8E=B7=E5=8F=96=20=E7=BB=93?= =?UTF-8?q?=E5=90=88=E9=80=9A=E8=BF=87=E5=A4=B4=E5=83=8F=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=8F=8A=E5=85=B6=E5=89=8D=E7=AB=AFimg=20=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/md/modules.md | 1 + .../common/core/constant/CommonConstants.java | 9 +- .../resources/config/pigx-upms-biz-dev.yml | 7 ++ pigx-upms/pigx-upms-biz/pom.xml | 6 ++ .../pigx/admin/controller/FileController.java | 96 +++++++++++++++++++ 5 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java diff --git a/doc/md/modules.md b/doc/md/modules.md index 19fc31d39..f54e5dd25 100644 --- a/doc/md/modules.md +++ b/doc/md/modules.md @@ -8,6 +8,7 @@ pigx ├ ├── pigx-common-data -- 数据相关 ├ ├── pigx-common-job -- 定时任务 ├ ├── pigx-common-log -- 日志服务 +├ ├── pigx-common-minio -- 文件系统 ├ └── pigx-common-security -- 安全工具类 ├ └── pigx-common-swagger -- Swagger Api文档生成 ├ └── pigx-common-transaction -- 分布式事务工具包 diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java index a13489b24..b08e7da6d 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/CommonConstants.java @@ -80,9 +80,14 @@ public interface CommonConstants { /** * 成功标记 */ - Integer SUCCESS=0; + Integer SUCCESS = 0; /** * 失败标记 */ - Integer FAIL=1; + Integer FAIL = 1; + + /** + * 默认存储bucket + */ + String BUCKET_NAME = "lengleng"; } diff --git a/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml b/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml index 27883ad06..c944f8ee2 100644 --- a/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml +++ b/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml @@ -33,6 +33,13 @@ swagger: description: 'read all' - scope: 'write' description: 'access all' + +# 文件系统 +minio: + url: http://139.224.200.249:9090 + access-key: lengleng + secret-key: lengleng + # Logger Config logging: level: diff --git a/pigx-upms/pigx-upms-biz/pom.xml b/pigx-upms/pigx-upms-biz/pom.xml index 74881c42b..33cd42eb0 100644 --- a/pigx-upms/pigx-upms-biz/pom.xml +++ b/pigx-upms/pigx-upms-biz/pom.xml @@ -62,6 +62,12 @@ pigx-common-swagger 2.0.0 + + + com.pig4cloud + pigx-common-minio + 2.0.0 + org.springframework.cloud diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java new file mode 100644 index 000000000..d2f7f28e2 --- /dev/null +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.admin.controller; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.pig4cloud.common.minio.service.MinioTemplate; +import com.pig4cloud.pigx.common.core.constant.CommonConstants; +import com.pig4cloud.pigx.common.core.util.R; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * @author lengleng + * @date 2018-12-30 + *

+ * 文件管理 + */ +@Slf4j +@RestController +@AllArgsConstructor +@RequestMapping("/file") +public class FileController { + private final MinioTemplate minioTemplate; + + /** + * 上传文件 + * + * @param file 资源 + * @return R(bucketName, filename) + */ + @PostMapping("/upload") + public R upload(@RequestParam("file") MultipartFile file) { + String originalFilename = file.getOriginalFilename(); + String newName = RandomUtil.randomString(16) + originalFilename; + + Map resultMap = new HashMap<>(4); + resultMap.put("bucketName", CommonConstants.BUCKET_NAME); + resultMap.put("fileName", newName); + + try { + minioTemplate.putObject(CommonConstants.BUCKET_NAME, newName, file.getInputStream()); + } catch (Exception e) { + log.error("上传失败", e); + return R.builder().code(CommonConstants.FAIL) + .msg(e.getLocalizedMessage()).build(); + } + return R.builder().data(resultMap).build(); + } + + /** + * 获取文件 + * + * @param fileName 文件空间/名称 + * @param response + * @return + */ + @GetMapping("/{fileName}") + public R file(@PathVariable String fileName, HttpServletResponse response) { + String[] nameArray = StrUtil.split(fileName, StrUtil.DASHED); + + try (InputStream inputStream = minioTemplate.getObject(nameArray[0], nameArray[1])) { + response.setContentType("application/octet-stream; charset=UTF-8"); + IoUtil.copy(inputStream, response.getOutputStream()); + } catch (Exception e) { + log.error("文件读取异常", e); + return R.builder().code(CommonConstants.FAIL) + .msg(e.getLocalizedMessage()).build(); + } + + return R.builder().build(); + } +} From b26ebaaf4477ee8e003ba6a8ccfa6b5590d9a155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Mon, 31 Dec 2018 17:59:28 +0800 Subject: [PATCH 19/29] :fire: Removing code or files. gencode import --- .../src/main/resources/template/Controller.java.vm | 5 +---- .../src/main/resources/template/Entity.java.vm | 2 +- .../src/main/resources/template/Service.java.vm | 2 -- .../src/main/resources/template/ServiceImpl.java.vm | 3 +-- .../pigx-codegen/src/main/resources/template/menu.sql.vm | 8 ++++---- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/Controller.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/Controller.java.vm index 958d72980..9bd08062c 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/Controller.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/Controller.java.vm @@ -16,8 +16,7 @@ */ package ${package}.${moduleName}.controller; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.common.core.util.R; import com.pig4cloud.pigx.common.log.annotation.SysLog; @@ -26,8 +25,6 @@ import ${package}.${moduleName}.service.${className}Service; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.Map; - /** * ${comments} diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/Entity.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/Entity.java.vm index 0b2d23611..dfcc4a293 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/Entity.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/Entity.java.vm @@ -34,8 +34,8 @@ import java.time.LocalDateTime; * @date ${datetime} */ @Data -@EqualsAndHashCode(callSuper = true) @TableName("${tableName}") +@EqualsAndHashCode(callSuper = true) public class ${className} extends Model<${className}> { private static final long serialVersionUID = 1L; diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/Service.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/Service.java.vm index d1ca0db44..b5c347de6 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/Service.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/Service.java.vm @@ -16,8 +16,6 @@ */ package ${package}.${moduleName}.service; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import ${package}.${moduleName}.entity.${className}; diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm index e0f7181fe..616862dd6 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm @@ -16,10 +16,9 @@ */ package ${package}.${moduleName}.service.impl; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import ${package}.${moduleName}.entity.${className}; +import ${package}.${moduleName}.mapper.${className}Mapper; import ${package}.${moduleName}.service.${className}Service; import org.springframework.stereotype.Service; diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/menu.sql.vm b/pigx-visual/pigx-codegen/src/main/resources/template/menu.sql.vm index bb76c5b6f..44ac11a3d 100644 --- a/pigx-visual/pigx-codegen/src/main/resources/template/menu.sql.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/menu.sql.vm @@ -1,13 +1,13 @@ -- 该脚本不要执行,请完善 ID 对应关系,注意层级关系 !!!! -- 菜单SQL -insert into `pigx`.`sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) +insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) values ( '父菜单ID', 'views/${moduleName}/${pathName}/index', '', '0', '${pathName}', 'icon-bangzhushouji', '菜单ID', '0', '2018-01-20 13:17:19', '8', '2018-07-29 13:38:19', '${comments}管理'); -- 菜单对应按钮SQL -insert into `pigx`.`sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) +insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) values ( '菜单ID', null, '${moduleName}_${pathName}_add', '1', null, '1', '子按钮ID1', '0', '2018-05-15 21:35:18', '0', '2018-07-29 13:38:59', '${comments}新增'); -insert into `pigx`.`sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) +insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) values ( '菜单ID', null, '${moduleName}_${pathName}_edit', '1', null, '1', '子按钮ID2', '0', '2018-05-15 21:35:18', '1', '2018-07-29 13:38:59', '${comments}修改'); -insert into `pigx`.`sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) +insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`) values ( '菜单ID', null, '${moduleName}_${pathName}_del', '1', null, '1', '子按钮ID3', '0', '2018-05-15 21:35:18', '2', '2018-07-29 13:38:59', '${comments}删除'); From 7f963998389f1d01f37c2cf28409173767b991fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Tue, 1 Jan 2019 22:14:00 +0800 Subject: [PATCH 20/29] :memo: Writing docs.update swagger doc --- doc/md/swagger.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/doc/md/swagger.md b/doc/md/swagger.md index 0ea810ba9..e0b49613b 100644 --- a/doc/md/swagger.md +++ b/doc/md/swagger.md @@ -203,12 +203,6 @@ windows平台下可以打开redis-cli.exe,然后执行```flushdb```或者```fl 排除所有不可能,剩下的那个不管多不可思议,都是事实真相。除开这两个原因,还有可能会出问题的,只有一种情况,那就是出现了跨域问题。 -如果本地启动出现了问题,可以观察请求头里是否存在跨域,如果是OPTIONS请求基本就是跨域了。然后从以下两个解决方案中选择一个适合的: +如果本地启动出现了问题,可以观察请求头里是否存在跨域,如果是OPTIONS请求基本就是跨域了。 -- 方案一 - -处理配置中心的```application-dev.yml```中的Spring Security Oauth相关的地址配置```security.auth.server```,修改掉认证中心的地址。 - -- 方案二 - -解决方案就是启动前端工程利用VUE的路由处理掉跨域,或者配置nginx添加反向代理。 +在目前的项目机制下,开发时解决跨域的最简单的一个方案就是不要通过```http://localhost:9999/swagger-ui.html```或者```http://127.0.0.1:9999/swagger-ui.html```去访问网关上的swagger,而是直接通过```http://pigx-gateway:9999/swagger-ui.html```去访问,这样就能避免跨域的问题。 From ea54fed43afdf550d47b6e21ce8c8cd4ade37ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Wed, 2 Jan 2019 10:45:46 +0800 Subject: [PATCH 21/29] =?UTF-8?q?:bug:=20Fixing=20a=20bug.=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E7=9F=AD=E4=BF=A1=E7=99=BB=E5=BD=95=E4=B8=8D=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E7=94=A8=E6=88=B7=E7=8A=B6=E6=80=81=E5=92=8C=20?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=8F=91=E9=80=81=E5=BC=82=E5=B8=B8=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PigxPreAuthenticationChecks.java | 63 +++++++++++++++++++ .../ResourceAuthExceptionEntryPoint.java | 4 +- .../mobile/MobileAuthenticationFilter.java | 1 - .../mobile/MobileAuthenticationProvider.java | 12 +++- .../service/PigxUserDetailsServiceImpl.java | 2 +- 5 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxPreAuthenticationChecks.java diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxPreAuthenticationChecks.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxPreAuthenticationChecks.java new file mode 100644 index 000000000..f46e7c4ea --- /dev/null +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxPreAuthenticationChecks.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.common.security.component; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.support.MessageSourceAccessor; +import org.springframework.security.authentication.AccountExpiredException; +import org.springframework.security.authentication.DisabledException; +import org.springframework.security.authentication.LockedException; +import org.springframework.security.core.SpringSecurityMessageSource; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsChecker; + +/** + * @author lengleng + * @date 2019-01-02 + */ +@Slf4j +public class PigxPreAuthenticationChecks implements UserDetailsChecker { + private MessageSourceAccessor messages = SpringSecurityMessageSource.getAccessor(); + + @Override + public void check(UserDetails user) { + if (!user.isAccountNonLocked()) { + log.debug("User account is locked"); + + throw new LockedException(messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.locked", + "User account is locked")); + } + + if (!user.isEnabled()) { + log.debug("User account is disabled"); + + throw new DisabledException(messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.disabled", + "User is disabled")); + } + + if (!user.isAccountNonExpired()) { + log.debug("User account is expired"); + + throw new AccountExpiredException(messages.getMessage( + "AbstractUserDetailsAuthenticationProvider.expired", + "User account has expired")); + } + } +} diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java index 69f5b54c2..0bc6dde08 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java @@ -51,9 +51,9 @@ public class ResourceAuthExceptionEntryPoint implements AuthenticationEntryPoint response.setCharacterEncoding(CommonConstants.UTF8); response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE); R result = new R<>(); - result.setCode(HttpStatus.HTTP_UNAUTHORIZED); + result.setCode(CommonConstants.FAIL); if (authException != null) { - result.setMsg("error"); + result.setMsg(authException.getMessage()); result.setData(authException.getMessage()); } response.setStatus(HttpStatus.HTTP_UNAUTHORIZED); diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java index 2b0230ac1..db6d75a0d 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationFilter.java @@ -86,7 +86,6 @@ public class MobileAuthenticationFilter extends AbstractAuthenticationProcessing authResult = this.getAuthenticationManager().authenticate(mobileAuthenticationToken); logger.debug("Authentication success: " + authResult); - eventPublisher.publishAuthenticationSuccess(authResult); SecurityContextHolder.getContext().setAuthentication(authResult); } catch (Exception failed) { diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationProvider.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationProvider.java index 4a855deca..4896835af 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationProvider.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/mobile/MobileAuthenticationProvider.java @@ -17,6 +17,7 @@ package com.pig4cloud.pigx.common.security.mobile; +import com.pig4cloud.pigx.common.security.component.PigxPreAuthenticationChecks; import com.pig4cloud.pigx.common.security.service.PigxUserDetailsService; import lombok.Getter; import lombok.Setter; @@ -28,6 +29,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.SpringSecurityMessageSource; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsChecker; /** * @author lengleng @@ -38,6 +40,8 @@ import org.springframework.security.core.userdetails.UserDetails; @Slf4j public class MobileAuthenticationProvider implements AuthenticationProvider { private MessageSourceAccessor messages = SpringSecurityMessageSource.getAccessor(); + private UserDetailsChecker detailsChecker = new PigxPreAuthenticationChecks(); + @Getter @Setter private PigxUserDetailsService userDetailsService; @@ -52,11 +56,13 @@ public class MobileAuthenticationProvider implements AuthenticationProvider { log.debug("Authentication failed: no credentials provided"); throw new BadCredentialsException(messages.getMessage( - "AbstractUserDetailsAuthenticationProvider.noopBindAccount", - "Noop Bind Account")); - + "AbstractUserDetailsAuthenticationProvider.noopBindAccount", + "Noop Bind Account")); } + // 检查账号状态 + detailsChecker.check(userDetails); + MobileAuthenticationToken authenticationToken = new MobileAuthenticationToken(userDetails, userDetails.getAuthorities()); authenticationToken.setDetails(mobileAuthenticationToken.getDetails()); return authenticationToken; diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java index 4855de67d..15d00bffc 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java @@ -108,7 +108,7 @@ public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { Collection authorities = AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0])); SysUser user = info.getSysUser(); - boolean enabled = StrUtil.equals(user.getDelFlag(), CommonConstants.STATUS_NORMAL); + boolean enabled = StrUtil.equals(user.getLockFlag(), CommonConstants.STATUS_NORMAL); // 构造security用户 return new PigxUser(user.getUserId(), user.getDeptId(), user.getTenantId(), user.getUsername(), SecurityConstants.BCRYPT + user.getPassword(), enabled, From 7d162e018f04ca481e75f90be3e1dc4210e37958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Wed, 2 Jan 2019 18:08:47 +0800 Subject: [PATCH 22/29] :fire: Removing code or files.remove deprecated property in template --- pigx-visual/pigx-codegen/src/main/resources/template/crud.js.vm | 1 - 1 file changed, 1 deletion(-) diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/crud.js.vm b/pigx-visual/pigx-codegen/src/main/resources/template/crud.js.vm index 16394d48b..c9e692c4b 100644 --- a/pigx-visual/pigx-codegen/src/main/resources/template/crud.js.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/crud.js.vm @@ -25,7 +25,6 @@ export const tableOption = { editBtn: false, delBtn: false, addBtn: false, - dic: [], column: [ #foreach ($column in $columns) { From b4abebbe1921585d67c1ee9f922e58f0696c61a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Wed, 2 Jan 2019 19:00:24 +0800 Subject: [PATCH 23/29] :arrow_up: Upgrading dependencies.upgrade mybatis plus 3.0.7,hutool 4.3.2 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a57e66274..a00b04fa9 100644 --- a/pom.xml +++ b/pom.xml @@ -49,8 +49,8 @@ 1.8 1.8 2.0.4 - 4.3.0 - 3.0.6 + 4.3.2 + 3.0.7 0.0.9 2.9.2 2.10.0 From 94f2b1d0049b5bc3900304b0872a7f03ab775aa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Thu, 3 Jan 2019 11:13:14 +0800 Subject: [PATCH 24/29] :fire: Removing code or files.remove code in template --- .../pigx-codegen/src/main/resources/template/Mapper.java.vm | 2 -- .../src/main/resources/template/ServiceImpl.java.vm | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm index 5ef3ca60e..8e20b7f27 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm @@ -17,8 +17,6 @@ package ${package}.${moduleName}.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import ${package}.${moduleName}.entity.${className}; import org.apache.ibatis.annotations.Param; diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm index 616862dd6..bce38eeea 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/ServiceImpl.java.vm @@ -28,7 +28,7 @@ import org.springframework.stereotype.Service; * @author ${author} * @date ${datetime} */ -@Service("${classname}Service") +@Service public class ${className}ServiceImpl extends ServiceImpl<${className}Mapper, ${className}> implements ${className}Service { } From 6ea0188ce4d35b3e1424e585fe6044ab29c1c95b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Thu, 3 Jan 2019 11:14:56 +0800 Subject: [PATCH 25/29] :fire: Removing code or files.remove code in template --- .../pigx-codegen/src/main/resources/template/Mapper.java.vm | 1 - 1 file changed, 1 deletion(-) diff --git a/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm b/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm index 8e20b7f27..ed44ab231 100755 --- a/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm +++ b/pigx-visual/pigx-codegen/src/main/resources/template/Mapper.java.vm @@ -18,7 +18,6 @@ package ${package}.${moduleName}.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import ${package}.${moduleName}.entity.${className}; -import org.apache.ibatis.annotations.Param; /** * ${comments} From 58b25756e7550009c2d61fa63f5ff93bc6f1db92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Wed, 9 Jan 2019 11:12:04 +0800 Subject: [PATCH 26/29] :bookmark: Releasing / Version tags. v2.1.0 --- README.md | 15 +++-- doc/db/2pigxx.sql | 35 ++++------ doc/db/3pigxx_ac.sql | 52 ++++++++++----- pigx-auth/pom.xml | 8 +-- .../config/AuthorizationServerConfig.java | 10 +++ .../pigx/auth/endpoint/PigxTokenEndpoint.java | 66 +++++-------------- pigx-common/pigx-common-core/pom.xml | 2 +- pigx-common/pigx-common-data/pom.xml | 6 +- .../data/cache/RedisAutoCacheManager.java | 9 +-- .../cache/RedisCacheAutoConfiguration.java | 6 +- pigx-common/pigx-common-gateway/pom.xml | 4 +- pigx-common/pigx-common-job/pom.xml | 2 +- pigx-common/pigx-common-log/pom.xml | 6 +- pigx-common/pigx-common-minio/pom.xml | 2 +- pigx-common/pigx-common-security/pom.xml | 6 +- pigx-common/pigx-common-swagger/pom.xml | 2 +- pigx-common/pigx-common-transaction/pom.xml | 4 +- pigx-common/pom.xml | 2 +- pigx-config/pom.xml | 2 +- pigx-eureka/pom.xml | 2 +- pigx-gateway/pom.xml | 6 +- pigx-upms/pigx-upms-api/pom.xml | 4 +- .../pigx/admin/api/dto/UserInfo.java | 1 - pigx-upms/pigx-upms-biz/pom.xml | 16 ++--- .../pigx/admin/controller/FileController.java | 6 +- pigx-upms/pom.xml | 2 +- pigx-visual/pigx-activiti/pom.xml | 14 ++-- pigx-visual/pigx-codegen/pom.xml | 10 +-- pigx-visual/pigx-daemon/pom.xml | 12 ++-- pigx-visual/pigx-monitor/pom.xml | 4 +- pigx-visual/pigx-sso-client-demo/pom.xml | 2 +- pigx-visual/pigx-tx-manager/pom.xml | 4 +- pigx-visual/pom.xml | 2 +- pom.xml | 4 +- 34 files changed, 155 insertions(+), 173 deletions(-) diff --git a/README.md b/README.md index e8c730d00..52863a401 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ -## pigx 2.0 -[pigx 2.0 部署文档](doc/md/deploy.md) -[pigx 2.0 新特性说明 ](https://www.bilibili.com/video/av37786337) -[pigx 2.0 从检出到启动](https://www.bilibili.com/video/av37695530) +## 当前版本 +V2.1.0 +## pigx pro +[pigx pro 部署文档](doc/md/deploy.md) +[pigx pro 新特性说明 ](https://www.bilibili.com/video/av37786337) +[pigx pro 从检出到启动](https://www.bilibili.com/video/av37695530) [pigx pro新建微服务模块(一)](https://www.bilibili.com/video/av37737139) [pigx pro新建微服务模块(二)](https://www.bilibili.com/video/av37740030) [pigx pro新建微服务模块(三)](https://www.bilibili.com/video/av37743341) @@ -11,6 +13,7 @@ ## 协议和授权 pigX并非一个开源软件,作者保留全部的权利。 +擅自窃用,即属严重侵权行为,与盗窃无异。产生的一切任何后果责任由侵权者自负。 ### 🌹权益 @@ -22,6 +25,10 @@ pigX并非一个开源软件,作者保留全部的权利。 1. 将本项目的部分或全部代码和资源进行任何形式的再发行(尤其上传GitHub、Gitee ) 2. 利用本项目的部分或全部代码和资源进行`任何商业行为` +### 免责声明 + +PigX 未对任何组织、团队,书面授权商业使用。如若出现任何商业后果、纠纷和本人无关,特此声明 + ## 贡献代码 pigX并非一个开源项目,也不是社区共同创造,其全部功能由作者独立完成。 diff --git a/doc/db/2pigxx.sql b/doc/db/2pigxx.sql index a40c8cf4a..5dbac2092 100644 --- a/doc/db/2pigxx.sql +++ b/doc/db/2pigxx.sql @@ -11,7 +11,7 @@ Target Server Version : 50723 File Encoding : utf-8 - Date: 12/10/2018 21:57:20 PM + Date: 01/09/2019 11:08:30 AM */ USE pigxx; @@ -37,13 +37,6 @@ CREATE TABLE `job_execution_log` ( PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='任务日志表'; --- ---------------------------- --- Records of `job_execution_log` --- ---------------------------- -BEGIN; -INSERT INTO `job_execution_log` VALUES ('071eab5d-cf95-4d4e-9346-5570e5a9303b', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('0ac3bde4-f47e-4632-a03a-2c40e99ddb93', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('0ce99951-d056-4224-8f73-73cdcc93faf2', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('171a4207-afac-43be-ba81-7a584c906caa', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('18d59cb5-e897-4aca-bea1-6b7e108446d3', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('1b1c5846-1552-4a8e-91bd-e6d3de5d94c1', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('1b1fcad5-4c7f-41d3-b1f8-1d3860f026b4', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('266ab0de-1874-479a-885c-e9781abd9b9e', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('2a27c1a5-d3ad-44ed-a2ab-148819373e85', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('3faf189f-5314-4e0e-8d6a-c928aebcb38b', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('438f7c31-8259-4958-8c90-100aed490b49', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('504febd1-b31a-4d38-a170-efd3db6bea2f', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('51fe65cf-0737-4e48-9eb2-44ea13e32ed0', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('53109268-cd42-4907-a8c5-19fa09f37415', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('55619ab3-c175-4715-9b04-d113b36fe22c', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('57178f63-87ca-40eb-9c20-aa8354e38c9d', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('596d2c37-a0a3-4b41-9116-47698ae0db4a', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('59d0d17f-7123-442b-97ce-f204efbcaf0a', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('5c142495-165e-44f9-b474-62a073ffc2e4', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('5c354343-2ec4-4a6e-8b2b-e155a9579ebf', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('60c7c895-530f-4b11-9951-ceb62420d9a0', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('691621ca-ad2b-4488-9c05-467c06b488d4', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('69bc4ba5-edeb-4a06-ae25-b1bca551fa44', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('6b574430-c288-41eb-ab47-e761742e31ff', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('6cce85aa-9692-4cc8-ae36-bf5e716582fe', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('72840364-617f-4311-a48f-977fe199ad66', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('72f5b255-6253-491f-bfef-bb738244f448', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('7327be6f-8601-4f4b-adc0-ae656a243a8e', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('7630f8d1-6d7e-470b-9b86-21d74bee4392', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('790c91ac-ff55-4f42-b13e-a987e89feb40', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('7d2f9cbb-2bb4-4277-9f2d-ef9ab4e77a9c', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('7e904a07-6f2b-40e5-a5ee-6b3c32b14497', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('7f8c2fda-81ef-4fcc-b996-a5b8090ace9f', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('7faf9f13-f0b1-4042-a725-8896ff74da2b', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('809b4c76-0ff8-4dc6-b10b-c437bea1decc', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('82554f27-d1d9-484e-b207-36bafbfe894b', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('86b33862-7086-4790-869f-238cf228e36e', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('86c1800b-657c-4d47-9ce8-befe5da31935', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('885de21d-7a38-47ad-91da-b61fcd75e7ba', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('8af99ddb-1ec3-444a-b9ba-da5989310385', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('8bcaf102-f0ec-4730-8646-5f13b35134ad', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('923058d6-f53e-46b8-92cb-893249f88a08', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('9299b690-5022-4f17-b9d8-d6d4995554e7', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('9928945a-d584-44a9-b133-02e5829d8f5c', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('9b63ec53-8d9f-4f62-8a23-87e328910065', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('9d83ee87-0745-44ee-b660-579bb769b8d0', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('a8ec9925-0b4a-4f03-8d29-76714094ebc6', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('a968ac8b-9aa0-4500-b6fc-5929965cde41', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('ab0da059-a96a-4e99-9387-d07b76cc1300', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('ac80cdab-cbe4-4683-aa09-dc07590b5ace', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('ae342af0-fd6d-4929-904a-60eee112736a', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('b0665ad9-a420-47ba-a852-ab134bec2a74', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('b99a0133-5cba-4996-ac08-787739134e1e', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('baa7adf6-0bdb-42f8-b680-e94aa6882aa5', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('bac7d872-cb8d-4d99-a976-2275e732d0bb', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('bb183cd3-c57c-4dd6-9247-5f811db63b37', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 14:00:00', '2018-12-03 14:00:00'), ('bca778bc-09cf-4fcb-a6c4-707e4186ad20', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('bd0b97cb-1966-476f-9ebe-13ddb723af31', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('c4bf2626-c548-489b-b64f-ed4ebd8c10b2', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('c8268aed-ca12-4d8f-8f97-93c49425e291', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('d0c11201-5712-48c3-bd1b-2e1fd815c51f', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('d5bb2743-1e22-42f4-9c93-c1915c4f3aa6', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('d8cad708-e95a-49e5-b7ed-65169e6b9175', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-11-30 14:00:00', '2018-11-30 14:00:00'), ('dda0f80c-21d9-467e-83cd-49471f43baeb', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-12-03 17:00:01', '2018-12-03 17:00:01'), ('e8a59495-8237-44c2-8a42-57c34794e4ee', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('e8f23a9b-6679-4df8-a776-c8b0feab2613', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('ecb02f59-ec25-40ed-8900-fd6e609335b2', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '1', 'NORMAL_TRIGGER', null, '1', '2018-12-03 16:00:00', '2018-12-03 16:00:00'), ('ededf2f8-9c55-4578-947c-d45fd9e23fc1', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 15:00:00', '2018-11-30 15:00:00'), ('ee078952-505c-4071-9894-4dd512725a7e', 'spring-simple-job2', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '0', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'), ('f178ef4e-1e3f-41a5-9b4a-1accab86856e', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-12-03 15:00:00', '2018-12-03 15:00:00'), ('ff720b81-a956-4e7a-9aaa-4c7cf3cb2f4a', 'spring-dataflow-job', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 12:00:01', '2018-11-30 12:00:01'), ('ffd0eef2-a967-405c-aaa4-2018886665ec', 'spring-simple-job', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', 'lengleng', '192.168.0.58', '2', 'NORMAL_TRIGGER', null, '1', '2018-11-30 13:00:00', '2018-11-30 13:00:00'); -COMMIT; - -- ---------------------------- -- Table structure for `job_status_trace_log` -- ---------------------------- @@ -60,17 +53,9 @@ CREATE TABLE `job_status_trace_log` ( `state` varchar(20) NOT NULL, `message` varchar(4000) DEFAULT NULL, `creation_time` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE, - KEY `TASK_ID_STATE_INDEX` (`task_id`,`state`) USING BTREE + PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='任务轨迹表'; --- ---------------------------- --- Records of `job_status_trace_log` --- ---------------------------- -BEGIN; -INSERT INTO `job_status_trace_log` VALUES ('04212978-c410-45ed-8c4f-e68387d0fd05', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-11-30 13:00:00'), ('06429f8d-84d0-4a44-83a0-d058a2925ac7', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-11-30 15:00:00'), ('09c1eda3-3384-4fc5-af62-33e39cc9df48', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 15:00:00'), ('0aedb2f8-3b7d-47ad-b76b-1065d71daca6', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 13:00:00'), ('0c0c9168-29c8-4b51-b78a-c97066fdf3ea', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 14:00:00'), ('130f458d-a6e9-41f7-9415-b5d051924ef6', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 14:00:00'), ('1b6fdc3a-819c-4dc2-970d-8aa01a4b879c', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-12-03 15:00:00'), ('20f69404-609a-47ed-b1af-d0dae2e24594', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 13:00:00'), ('21705123-1fd9-4e4a-b7d3-63b7c16bf5ff', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-11-30 15:00:00'), ('24dde237-c186-44c2-b93a-81edd6a9c1b8', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 12:00:01'), ('2f5fd775-0c73-439e-ad1a-14853890a210', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 17:00:01'), ('3066d315-36a3-4ae4-9e78-b8ea683bbd3a', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 14:00:00'), ('31efd4c7-c6f1-406b-a07c-ab39b128b3f2', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 12:00:01'), ('35f60634-3beb-466e-b236-7348984b96a8', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 16:00:00'), ('402b0c76-e256-44cb-b554-358a1f0dd68b', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 14:00:00'), ('4d951975-e4e2-46ba-b59f-719989ece5a1', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 15:00:00'), ('4d95fa7d-c47d-48d4-b910-744469ce2e01', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 15:00:00'), ('4dc571c7-7785-4631-b5ab-e5b9d78f5a7e', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-11-30 14:00:00'), ('4f6a9f13-4cd6-431f-959c-7c117fea3702', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 12:00:01'), ('59d0b4c8-f58f-4f4a-91be-5602dd202631', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-11-30 13:00:00'), ('5db6982f-146e-400b-b8bd-ab9c7dee4b24', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 15:00:00'), ('5e46b4fb-8166-41dc-94a4-0d65323deb24', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-12-03 16:00:00'), ('5f00c386-520e-4ba9-816d-e6e01009c9e5', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 16:00:00'), ('6035f623-afa8-4a5b-9ed2-de2824cf631d', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 15:00:00'), ('6a4e7703-c1cf-4c5d-b7f2-d4529714ec5e', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 13:00:00'), ('6c393f32-31a9-44c5-8164-ea0f6bb9b79a', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-12-03 14:00:00'), ('716b674c-cdd7-4176-ba25-9e1d55230714', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 17:00:01'), ('71c36e5f-c554-427b-ac8c-2aa04b725a9a', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-11-30 12:00:00'), ('73d6934a-8ac4-4e3b-ad2e-c69e37496206', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 16:00:00'), ('7516172b-b4fd-41a5-96c8-386cc9391a6d', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 17:00:01'), ('7780a559-2596-4673-9301-b45313a58ae0', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 16:00:00'), ('7a411e61-2e8d-4037-a699-84492cde28a6', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 15:00:00'), ('7b9d9b0f-03dc-4425-84a5-28c24a66c754', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 16:00:00'), ('809c5aef-72f9-4955-bdc9-4dbe497e2477', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-11-30 14:00:00'), ('821d5639-9a0c-41d9-9a42-9239adee34c3', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 12:00:01'), ('86e8d5e8-9c00-4529-a38a-6f518b8ab305', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 15:00:00'), ('8d0fb85c-f9f8-4ccd-9223-51aeeb4e5a7f', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 14:00:00'), ('8f1411fc-6fe4-49f8-abab-5f0184b951d5', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 14:00:00'), ('939ede1c-6be1-4e54-95bc-0799de9a1d1a', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-11-30 12:00:00'), ('9a509a91-6f07-45db-bbf6-402e1c471ee1', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 12:00:01'), ('a4a76ea3-2742-4036-bce9-f27b0980fca3', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-11-30 14:00:00'), ('b46d9c6f-358e-40c0-8f1f-b215ab455a9b', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 15:00:00'), ('b82ee56d-4d46-486b-b26a-f50fb2c8fc6f', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 15:00:00'), ('b931a6fe-85ae-4b18-a857-f7ecdd933d35', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 12:00:01'), ('bbed07d3-b5cb-4b63-be6e-28a642562e7c', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 15:00:00'), ('bd407b0c-0a73-4b86-b194-5f33ba03a14a', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-12-03 16:00:00'), ('c22be05b-efa2-44d6-938c-3deb7ab0edba', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 14:00:00'), ('c38949bc-40fb-4af0-824e-2e85be00462e', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 17:00:01'), ('c45024e9-a34c-4894-963f-ced333440153', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-11-30 13:00:00'), ('c51477ac-c37d-48fb-807d-4aafb1800f6f', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 17:00:01'), ('c7aa10d3-9823-490f-aa24-92ce68037836', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 17:00:00'), ('c94c32a7-df68-4c96-809f-fcbcd7f212de', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-12-03 14:00:00'), ('cc4534e9-33d9-4353-9f34-67ff36e25d4b', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-12-03 15:00:00'), ('cf0b6d50-63f2-4a7d-8582-9bc69138ac92', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-11-30 12:00:00'), ('d00a44a8-4f35-476a-9b9b-998ac1808a21', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-12-03 17:00:00'), ('d88bf0d6-f101-4f88-a686-bff101777d78', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 16:00:00'), ('d8ccabdb-39fc-4fec-8369-be846c9d3e03', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 13:00:00'), ('d9566403-8757-454e-97dd-f67f42c4aed0', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-12-03 17:00:00'), ('d9963ad2-c071-48ec-a869-d0eb4e2e0451', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-12-03 14:00:00'), ('dd452030-55b1-4eb1-b25d-6cd434d15e47', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 14:00:00'), ('de8b7872-d35b-4054-8794-fcd03989c8f7', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-11-30 15:00:00'), ('df184862-58e5-4158-a390-6bcbf25dbef6', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-dataflow-job\' execute begin.', '2018-12-03 16:00:00'), ('e6014183-c712-4887-afe5-7e653388e6f8', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-12-03 14:00:00'), ('ec5f1bdb-5a2c-4977-a275-ec87db535114', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@24646', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job2\' execute begin.', '2018-12-03 17:00:00'), ('ed1f5448-b266-403e-93e6-28100919ccac', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_STAGING', 'Job \'spring-simple-job\' execute begin.', '2018-12-03 15:00:00'), ('eef1f5e9-95ad-4eff-a2e5-e431015afc6b', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 14:00:00'), ('f460fd48-451e-4a9a-8cb4-19c9a4af5daa', 'spring-dataflow-job', '', 'spring-dataflow-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 13:00:00'), ('f9cd13ef-2f33-4e08-b91c-e7c193ea12b2', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 13:00:00'), ('fa1a6947-e005-4ffd-98bc-c9de5f4ce7e2', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 15:00:00'), ('fa6c3023-7379-470e-9064-d4b9b0ae06de', 'spring-simple-job', '', 'spring-simple-job@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-11-30 15:00:00'), ('fde44f13-c1b9-466c-9899-c2606ba0a721', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@20168', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_RUNNING', '', '2018-12-03 14:00:00'), ('fef44c10-9d86-4410-b723-a92464c5e4ad', 'spring-simple-job2', '', 'spring-simple-job2@-@0,1,2@-@READY@-@192.168.0.58@-@59736', '192.168.0.58', 'LITE_EXECUTOR', 'READY', '[0, 1, 2]', 'TASK_FINISHED', '', '2018-11-30 14:00:00'); -COMMIT; - -- ---------------------------- -- Table structure for `sys_dept` -- ---------------------------- @@ -91,7 +76,7 @@ CREATE TABLE `sys_dept` ( -- Records of `sys_dept` -- ---------------------------- BEGIN; -INSERT INTO `sys_dept` VALUES ('1', '山东农信', null, '2018-01-22 19:00:23', '2018-09-13 01:46:29', '0', '0', '1'), ('2', '沙县国际', null, '2018-01-22 19:00:38', '2018-09-13 01:46:30', '0', '0', '1'), ('3', '潍坊农信', null, '2018-01-22 19:00:44', '2018-09-13 01:46:31', '0', '1', '1'), ('4', '高新农信', null, '2018-01-22 19:00:52', '2018-10-06 10:41:52', '0', '3', '1'), ('5', '院校农信', null, '2018-01-22 19:00:57', '2018-10-06 10:42:51', '0', '4', '1'), ('6', '潍坊学院农信', null, '2018-01-22 19:01:06', '2018-09-13 03:29:10', '1', '5', '1'), ('7', '山东沙县', null, '2018-01-22 19:01:57', '2018-09-13 01:46:42', '0', '2', '1'), ('8', '潍坊沙县', null, '2018-01-22 19:02:03', '2018-09-13 01:46:43', '0', '7', '1'), ('9', '高新沙县', null, '2018-01-22 19:02:14', '2018-09-13 01:46:44', '1', '8', '1'), ('10', '租户2', null, '2018-11-18 13:27:11', '2018-11-18 13:42:19', '0', '0', '2'), ('11', '院校沙县', null, '2018-12-10 21:19:26', null, '0', '8', '1'); +INSERT INTO `sys_dept` VALUES ('1', '山东农信', null, '2018-01-22 19:00:23', '2018-09-13 01:46:29', '0', '0', '1'), ('2', '沙县国际', null, '2018-01-22 19:00:38', '2018-09-13 01:46:30', '0', '0', '1'), ('3', '潍坊农信', null, '2018-01-22 19:00:44', '2018-09-13 01:46:31', '0', '1', '1'), ('4', '高新农信', null, '2018-01-22 19:00:52', '2018-10-06 10:41:52', '0', '3', '1'), ('5', '院校农信', null, '2018-01-22 19:00:57', '2018-10-06 10:42:51', '0', '4', '1'), ('6', '潍院农信', null, '2018-01-22 19:01:06', '2019-01-09 10:58:18', '1', '5', '1'), ('7', '山东沙县', null, '2018-01-22 19:01:57', '2018-09-13 01:46:42', '0', '2', '1'), ('8', '潍坊沙县', null, '2018-01-22 19:02:03', '2018-09-13 01:46:43', '0', '7', '1'), ('9', '高新沙县', null, '2018-01-22 19:02:14', '2018-09-13 01:46:44', '1', '8', '1'), ('10', '租户2', null, '2018-11-18 13:27:11', '2018-11-18 13:42:19', '0', '0', '2'), ('11', '院校沙县', null, '2018-12-10 21:19:26', null, '0', '8', '1'); COMMIT; -- ---------------------------- @@ -196,7 +181,7 @@ CREATE TABLE `sys_menu` ( -- Records of `sys_menu` -- ---------------------------- BEGIN; -INSERT INTO `sys_menu` VALUES ('1000', '权限管理', null, '/upms', '-1', 'icon-quanxianguanli', 'Layout', '0', '0', '0', '2018-09-28 08:29:53', '2018-09-28 08:53:01', '0', '1'), ('1100', '用户管理', null, 'user', '1000', 'icon-yonghuguanli', 'views/admin/user/index', '1', '0', '0', '2017-11-02 22:24:37', '2018-09-28 09:00:41', '0', '1'), ('1101', '用户新增', 'sys_user_add', null, '1100', null, null, null, '0', '1', '2017-11-08 09:52:09', '2018-09-28 09:06:34', '0', '1'), ('1102', '用户修改', 'sys_user_edit', null, '1100', null, null, null, '0', '1', '2017-11-08 09:52:48', '2018-09-28 09:06:37', '0', '1'), ('1103', '用户删除', 'sys_user_del', null, '1100', null, null, null, '0', '1', '2017-11-08 09:54:01', '2018-09-28 09:06:42', '0', '1'), ('1200', '菜单管理', null, 'menu', '1000', 'icon-caidanguanli', 'views/admin/menu/index', '2', '0', '0', '2017-11-08 09:57:27', '2018-09-28 09:00:45', '0', '1'), ('1201', '菜单新增', 'sys_menu_add', null, '1200', null, null, null, '0', '1', '2017-11-08 10:15:53', '2018-09-28 09:07:16', '0', '1'), ('1202', '菜单修改', 'sys_menu_edit', null, '1200', null, null, null, '0', '1', '2017-11-08 10:16:23', '2018-09-28 09:07:18', '0', '1'), ('1203', '菜单删除', 'sys_menu_del', null, '1200', null, null, null, '0', '1', '2017-11-08 10:16:43', '2018-09-28 09:07:22', '0', '1'), ('1300', '角色管理', null, 'role', '1000', 'icon-jiaoseguanli', 'views/admin/role/index', '3', '0', '0', '2017-11-08 10:13:37', '2018-09-28 09:00:48', '0', '1'), ('1301', '角色新增', 'sys_role_add', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:18', '2018-09-28 09:07:46', '0', '1'), ('1302', '角色修改', 'sys_role_edit', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:41', '2018-09-28 09:07:49', '0', '1'), ('1303', '角色删除', 'sys_role_del', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:59', '2018-09-28 09:07:53', '0', '1'), ('1304', '分配权限', 'sys_role_perm', null, '1300', null, null, null, '0', '1', '2018-04-20 07:22:55', '2018-09-28 09:13:23', '0', '1'), ('1400', '部门管理', null, 'dept', '1000', 'icon-web-icon-', 'views/admin/dept/index', '4', '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:12', '0', '1'), ('1401', '部门新增', 'sys_dept_add', null, '1400', null, null, null, '0', '1', '2018-01-20 14:56:16', '2018-09-28 09:08:13', '0', '1'), ('1402', '部门修改', 'sys_dept_edit', null, '1400', null, null, null, '0', '1', '2018-01-20 14:56:59', '2018-09-28 09:08:16', '0', '1'), ('1403', '部门删除', 'sys_dept_del', null, '1400', null, null, null, '0', '1', '2018-01-20 14:57:28', '2018-09-28 09:08:18', '0', '1'), ('2000', '系统管理', null, '/admin', '-1', 'icon-xitongguanli', 'Layout', '1', '0', '0', '2017-11-07 20:56:00', '2018-09-28 08:53:18', '0', '1'), ('2100', '日志管理', null, 'log', '2000', 'icon-rizhiguanli', 'views/admin/log/index', '5', '0', '0', '2017-11-20 14:06:22', '2018-09-28 09:01:52', '0', '1'), ('2101', '日志删除', 'sys_log_del', null, '2100', null, null, null, '0', '1', '2017-11-20 20:37:37', '2018-09-28 09:08:44', '0', '1'), ('2200', '字典管理', null, 'dict', '2000', 'icon-navicon-zdgl', 'views/admin/dict/index', '6', '0', '0', '2017-11-29 11:30:52', '2018-09-28 09:01:47', '0', '1'), ('2201', '字典删除', 'sys_dict_del', null, '2200', null, null, null, '0', '1', '2017-11-29 11:30:11', '2018-09-28 09:09:10', '0', '1'), ('2202', '字典新增', 'sys_dict_add', null, '2200', null, null, null, '0', '1', '2018-05-11 22:34:55', '2018-09-28 09:09:12', '0', '1'), ('2203', '字典修改', 'sys_dict_edit', null, '2200', null, null, null, '0', '1', '2018-05-11 22:36:03', '2018-09-28 09:09:16', '0', '1'), ('2300', '代码生成', '', 'gen', '2000', 'icon-weibiaoti46', 'views/gen/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 05:21:01', '0', '1'), ('2400', '终端管理', '', 'client', '2000', 'icon-shouji', 'views/admin/client/index', '9', '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:43', '0', '1'), ('2401', '客户端新增', 'sys_client_add', null, '2400', '1', null, null, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:10:25', '0', '1'), ('2402', '客户端修改', 'sys_client_edit', null, '2400', null, null, null, '0', '1', '2018-05-15 21:37:06', '2018-09-28 09:10:27', '0', '1'), ('2403', '客户端删除', 'sys_client_del', null, '2400', null, null, null, '0', '1', '2018-05-15 21:39:16', '2018-09-28 09:10:30', '0', '1'), ('2500', '密钥管理', '', 'social', '2000', 'icon-miyue', 'views/admin/social/index', '10', '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:41', '0', '1'), ('2501', '密钥新增', 'generator_syssocialdetails_add', null, '2500', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:02', '0', '1'), ('2502', '密钥修改', 'generator_syssocialdetails_edit', null, '2500', '1', null, '1', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:04', '0', '1'), ('2503', '密钥删除', 'generator_syssocialdetails_del', null, '2500', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:06', '0', '1'), ('2600', '令牌管理', null, 'token', '2000', 'icon-denglvlingpai', 'views/admin/token/index', '11', '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0', '1'), ('2601', '令牌删除', 'sys_token_del', null, '2600', null, null, '1', '0', '1', '2018-09-04 05:59:50', '2018-09-28 09:11:24', '0', '1'), ('2700', '动态路由', null, 'route', '2000', 'icon-luyou', 'views/admin/route/index', '12', '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0', '1'), ('3000', '系统监控', null, '/daemon', '-1', 'icon-msnui-supervise', 'Layout', '2', '0', '0', '2018-07-27 01:13:21', '2018-09-28 08:53:24', '0', '1'), ('3100', '服务监控', null, 'http://127.0.0.1:5001', '3000', 'icon-server', null, '0', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:03:40', '0', '1'), ('3200', '接口文档', null, 'http://139.224.200.249:19999/swagger-ui.html', '3000', 'icon-wendang', null, '1', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:05:16', '0', '1'), ('3300', '事务监控', null, 'tx', '3000', 'icon-gtsquanjushiwufuwuGTS', 'views/tx/index', '5', '0', '0', '2018-08-19 11:02:39', '2018-11-23 14:25:08', '0', '1'), ('3400', '在线事务', null, 'model', '3000', 'icon-online', 'views/tx/model', '6', '0', '0', '2018-08-19 11:32:04', '2018-11-23 14:25:14', '0', '1'), ('3500', '任务监控', null, 'http://139.224.200.249:8899', '3000', 'icon-msnui-supervise', null, '7', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:03:33', '0', '1'), ('3600', '任务轨迹', '', 'status-trace-log', '3000', 'icon-guiji', 'views/daemon/status-trace-log/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0', '1'), ('3601', '删除任务轨迹', 'daemon_status_trace_log_del', null, '3600', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:37:31', '0', '1'), ('3700', '调用拓扑', null, 'http://139.224.200.249:8081', '3000', 'icon-line', null, '10', '0', '0', '2018-01-25 11:08:52', '2018-09-28 09:04:29', '0', '1'), ('3800', '缓存状态', null, 'http://139.224.200.249:8585', '3000', 'icon-qingchuhuancun', null, '12', '0', '0', '2018-01-23 10:56:11', '2018-09-28 09:13:56', '0', '1'), ('3900', '任务日志', '', 'execution-log', '3000', 'icon-guiji', 'views/daemon/execution-log/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0', '1'), ('3901', '删除日志', 'daemon_execution_log_del', null, '3900', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:39:03', '0', '1'), ('4000', '协同管理', null, '/activti', '-1', 'icon-kuaisugongzuoliu_o', 'Layout', '3', '0', '0', '2018-09-26 01:38:13', '2018-09-28 08:58:24', '0', '1'), ('4100', '模型管理', null, 'activiti', '4000', 'icon-weibiaoti13', 'views/activiti/index', '1', '0', '0', '2018-09-26 01:39:07', '2018-12-09 16:35:16', '0', '1'), ('4101', '模型管理', 'act_model_manage', null, '4100', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4200', '流程管理', null, 'process', '4000', 'icon-liucheng', 'views/activiti/process', '2', '0', '0', '2018-09-26 06:41:05', '2018-11-23 14:25:33', '0', '1'), ('4201', '流程管理', 'act_process_manage', null, '4200', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4300', '请假管理', '', 'leavebill', '4000', 'icon-qingjia', 'views/activiti/leave', '3', '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:20', '0', '1'), ('4301', '请假新增', 'act_leavebill_add', null, '4300', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4302', '请假修改', 'act_leavebill_edit', null, '4300', '1', null, '1', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:09', '0', '1'), ('4303', '请假删除', 'act_leavebill_del', null, '4300', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:14', '0', '1'), ('4400', '待办任务', null, 'task', '4000', 'icon-renwu', 'views/activiti/task', '4', '0', '0', '2018-09-27 09:52:31', '2018-12-09 16:35:26', '0', '1'), ('4401', '流程管理', 'act_task_manage', null, '4400', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('5000', '多级菜单', null, '/crud', '-1', 'icon-caidanguanli', '', '4', '0', '0', '2018-08-28 01:50:22', '2018-09-28 08:58:20', '0', '1'), ('5001', '一级菜单', null, 'index', '5000', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-08-28 01:50:48', '2018-11-21 17:48:19', '1', '1'), ('5002', '二级菜单', null, 'crud', '5001', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-08-28 01:51:23', '2018-11-21 17:47:40', '1', '1'), ('5003', '一级菜单', null, '', '5000', 'icon-caidanguanli', '', '1', '0', '0', '2018-11-21 17:49:18', '2018-11-21 17:53:25', '0', null), ('5004', '二级菜单', null, 'index', '5003', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-11-21 17:53:51', '2018-11-21 17:54:04', '0', null), ('6000', '系统官网', null, 'https://pig4cloud.com#', '-1', 'icon-guanwang', '', '5', '0', '0', '2018-09-27 02:26:36', '2018-11-17 16:18:50', '1', '1'); +INSERT INTO `sys_menu` VALUES ('1000', '权限管理', null, '/upms', '-1', 'icon-quanxianguanli', 'Layout', '0', '0', '0', '2018-09-28 08:29:53', '2018-09-28 08:53:01', '0', '1'), ('1100', '用户管理', null, 'user', '1000', 'icon-yonghuguanli', 'views/admin/user/index', '1', '0', '0', '2017-11-02 22:24:37', '2018-09-28 09:00:41', '0', '1'), ('1101', '用户新增', 'sys_user_add', null, '1100', null, null, null, '0', '1', '2017-11-08 09:52:09', '2018-09-28 09:06:34', '0', '1'), ('1102', '用户修改', 'sys_user_edit', null, '1100', null, null, null, '0', '1', '2017-11-08 09:52:48', '2018-09-28 09:06:37', '0', '1'), ('1103', '用户删除', 'sys_user_del', null, '1100', null, null, null, '0', '1', '2017-11-08 09:54:01', '2018-09-28 09:06:42', '0', '1'), ('1200', '菜单管理', null, 'menu', '1000', 'icon-caidanguanli', 'views/admin/menu/index', '2', '0', '0', '2017-11-08 09:57:27', '2018-09-28 09:00:45', '0', '1'), ('1201', '菜单新增', 'sys_menu_add', null, '1200', null, null, null, '0', '1', '2017-11-08 10:15:53', '2018-09-28 09:07:16', '0', '1'), ('1202', '菜单修改', 'sys_menu_edit', null, '1200', null, null, null, '0', '1', '2017-11-08 10:16:23', '2018-09-28 09:07:18', '0', '1'), ('1203', '菜单删除', 'sys_menu_del', null, '1200', null, null, null, '0', '1', '2017-11-08 10:16:43', '2018-09-28 09:07:22', '0', '1'), ('1300', '角色管理', null, 'role', '1000', 'icon-jiaoseguanli', 'views/admin/role/index', '3', '0', '0', '2017-11-08 10:13:37', '2018-09-28 09:00:48', '0', '1'), ('1301', '角色新增', 'sys_role_add', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:18', '2018-09-28 09:07:46', '0', '1'), ('1302', '角色修改', 'sys_role_edit', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:41', '2018-09-28 09:07:49', '0', '1'), ('1303', '角色删除', 'sys_role_del', null, '1300', null, null, null, '0', '1', '2017-11-08 10:14:59', '2018-09-28 09:07:53', '0', '1'), ('1304', '分配权限', 'sys_role_perm', null, '1300', null, null, null, '0', '1', '2018-04-20 07:22:55', '2018-09-28 09:13:23', '0', '1'), ('1400', '部门管理', null, 'dept', '1000', 'icon-web-icon-', 'views/admin/dept/index', '4', '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:12', '0', '1'), ('1401', '部门新增', 'sys_dept_add', null, '1400', null, null, null, '0', '1', '2018-01-20 14:56:16', '2018-09-28 09:08:13', '0', '1'), ('1402', '部门修改', 'sys_dept_edit', null, '1400', null, null, null, '0', '1', '2018-01-20 14:56:59', '2018-09-28 09:08:16', '0', '1'), ('1403', '部门删除', 'sys_dept_del', null, '1400', null, null, null, '0', '1', '2018-01-20 14:57:28', '2018-09-28 09:08:18', '0', '1'), ('2000', '系统管理', null, '/admin', '-1', 'icon-xitongguanli', 'Layout', '1', '0', '0', '2017-11-07 20:56:00', '2018-09-28 08:53:18', '0', '1'), ('2100', '日志管理', null, 'log', '2000', 'icon-rizhiguanli', 'views/admin/log/index', '5', '0', '0', '2017-11-20 14:06:22', '2018-09-28 09:01:52', '0', '1'), ('2101', '日志删除', 'sys_log_del', null, '2100', null, null, null, '0', '1', '2017-11-20 20:37:37', '2018-09-28 09:08:44', '0', '1'), ('2200', '字典管理', null, 'dict', '2000', 'icon-navicon-zdgl', 'views/admin/dict/index', '6', '0', '0', '2017-11-29 11:30:52', '2018-09-28 09:01:47', '0', '1'), ('2201', '字典删除', 'sys_dict_del', null, '2200', null, null, null, '0', '1', '2017-11-29 11:30:11', '2018-09-28 09:09:10', '0', '1'), ('2202', '字典新增', 'sys_dict_add', null, '2200', null, null, null, '0', '1', '2018-05-11 22:34:55', '2018-09-28 09:09:12', '0', '1'), ('2203', '字典修改', 'sys_dict_edit', null, '2200', null, null, null, '0', '1', '2018-05-11 22:36:03', '2018-09-28 09:09:16', '0', '1'), ('2300', '代码生成', '', 'gen', '2000', 'icon-weibiaoti46', 'views/gen/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 05:21:01', '0', '1'), ('2400', '终端管理', '', 'client', '2000', 'icon-shouji', 'views/admin/client/index', '9', '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:43', '0', '1'), ('2401', '客户端新增', 'sys_client_add', null, '2400', '1', null, null, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:10:25', '0', '1'), ('2402', '客户端修改', 'sys_client_edit', null, '2400', null, null, null, '0', '1', '2018-05-15 21:37:06', '2018-09-28 09:10:27', '0', '1'), ('2403', '客户端删除', 'sys_client_del', null, '2400', null, null, null, '0', '1', '2018-05-15 21:39:16', '2018-09-28 09:10:30', '0', '1'), ('2500', '密钥管理', '', 'social', '2000', 'icon-miyue', 'views/admin/social/index', '10', '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:41', '0', '1'), ('2501', '密钥新增', 'generator_syssocialdetails_add', null, '2500', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:02', '0', '1'), ('2502', '密钥修改', 'generator_syssocialdetails_edit', null, '2500', '1', null, '1', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:04', '0', '1'), ('2503', '密钥删除', 'generator_syssocialdetails_del', null, '2500', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:06', '0', '1'), ('2600', '令牌管理', null, 'token', '2000', 'icon-denglvlingpai', 'views/admin/token/index', '11', '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0', '1'), ('2601', '令牌删除', 'sys_token_del', null, '2600', null, null, '1', '0', '1', '2018-09-04 05:59:50', '2018-09-28 09:11:24', '0', '1'), ('2700', '动态路由', null, 'route', '2000', 'icon-luyou', 'views/admin/route/index', '12', '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0', '1'), ('3000', '系统监控', null, '/daemon', '-1', 'icon-msnui-supervise', 'Layout', '2', '0', '0', '2018-07-27 01:13:21', '2018-09-28 08:53:24', '0', '1'), ('3100', '服务监控', null, 'http://139.224.200.249:15001', '3000', 'icon-server', null, '0', '0', '0', '2018-06-26 10:50:32', '2018-12-11 17:17:07', '0', '1'), ('3200', '接口文档', null, 'http://139.224.200.249:19999/swagger-ui.html', '3000', 'icon-wendang', null, '1', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:05:16', '0', '1'), ('3300', '事务监控', null, 'tx', '3000', 'icon-gtsquanjushiwufuwuGTS', 'views/tx/index', '5', '0', '0', '2018-08-19 11:02:39', '2018-11-23 14:25:08', '0', '1'), ('3400', '在线事务', null, 'model', '3000', 'icon-online', 'views/tx/model', '6', '0', '0', '2018-08-19 11:32:04', '2018-11-23 14:25:14', '0', '1'), ('3500', '任务监控', null, 'http://139.224.200.249:8899', '3000', 'icon-msnui-supervise', null, '7', '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:03:33', '0', '1'), ('3600', '任务轨迹', '', 'status-trace-log', '3000', 'icon-guiji', 'views/daemon/status-trace-log/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0', '1'), ('3601', '删除任务轨迹', 'daemon_status_trace_log_del', null, '3600', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:37:31', '0', '1'), ('3700', '调用拓扑', null, 'http://139.224.200.249:8081', '3000', 'icon-line', null, '10', '0', '0', '2018-01-25 11:08:52', '2018-09-28 09:04:29', '0', '1'), ('3800', '缓存状态', null, 'http://139.224.200.249:8585', '3000', 'icon-qingchuhuancun', null, '12', '0', '0', '2018-01-23 10:56:11', '2018-09-28 09:13:56', '0', '1'), ('3900', '任务日志', '', 'execution-log', '3000', 'icon-guiji', 'views/daemon/execution-log/index', '8', '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0', '1'), ('3901', '删除日志', 'daemon_execution_log_del', null, '3900', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:39:03', '0', '1'), ('4000', '协同管理', null, '/activti', '-1', 'icon-kuaisugongzuoliu_o', 'Layout', '3', '0', '0', '2018-09-26 01:38:13', '2018-09-28 08:58:24', '0', '1'), ('4100', '模型管理', null, 'activiti', '4000', 'icon-weibiaoti13', 'views/activiti/index', '1', '0', '0', '2018-09-26 01:39:07', '2018-12-09 16:35:16', '0', '1'), ('4101', '模型管理', 'act_model_manage', null, '4100', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4200', '流程管理', null, 'process', '4000', 'icon-liucheng', 'views/activiti/process', '2', '0', '0', '2018-09-26 06:41:05', '2018-11-23 14:25:33', '0', '1'), ('4201', '流程管理', 'act_process_manage', null, '4200', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4300', '请假管理', '', 'leavebill', '4000', 'icon-qingjia', 'views/activiti/leave', '3', '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:20', '0', '1'), ('4301', '请假新增', 'act_leavebill_add', null, '4300', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('4302', '请假修改', 'act_leavebill_edit', null, '4300', '1', null, '1', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:09', '0', '1'), ('4303', '请假删除', 'act_leavebill_del', null, '4300', '1', null, '2', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:14', '0', '1'), ('4400', '待办任务', null, 'task', '4000', 'icon-renwu', 'views/activiti/task', '4', '0', '0', '2018-09-27 09:52:31', '2018-12-09 16:35:26', '0', '1'), ('4401', '流程管理', 'act_task_manage', null, '4400', '1', null, '0', '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0', '1'), ('5000', '多级菜单', null, '/crud', '-1', 'icon-caidanguanli', '', '4', '0', '0', '2018-08-28 01:50:22', '2018-09-28 08:58:20', '0', '1'), ('5001', '一级菜单', null, 'index', '5000', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-08-28 01:50:48', '2018-11-21 17:48:19', '1', '1'), ('5002', '二级菜单', null, 'crud', '5001', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-08-28 01:51:23', '2018-11-21 17:47:40', '1', '1'), ('5003', '一级菜单', null, '', '5000', 'icon-caidanguanli', '', '1', '0', '0', '2018-11-21 17:49:18', '2018-11-21 17:53:25', '0', null), ('5004', '二级菜单', null, 'index', '5003', 'icon-caidanguanli', 'views/crud/index', '1', '0', '0', '2018-11-21 17:53:51', '2018-12-20 14:26:53', '1', null), ('6000', '系统官网', null, 'https://pig4cloud.com#', '-1', 'icon-guanwang', '', '5', '0', '0', '2018-09-27 02:26:36', '2018-11-17 16:18:50', '1', '1'); COMMIT; -- ---------------------------- @@ -235,19 +220,21 @@ CREATE TABLE `sys_role` ( `role_name` varchar(64) COLLATE utf8mb4_bin NOT NULL, `role_code` varchar(64) COLLATE utf8mb4_bin NOT NULL, `role_desc` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, + `ds_type` char(1) COLLATE utf8mb4_bin NOT NULL DEFAULT '2' COMMENT '数据权限类型', + `ds_scope` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '数据权限范围', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, `del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标识(0-正常,1-删除)', `tenant_id` int(11) DEFAULT NULL, PRIMARY KEY (`role_id`) USING BTREE, UNIQUE KEY `role_idx1_role_code` (`role_code`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='系统角色表'; +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='系统角色表'; -- ---------------------------- -- Records of `sys_role` -- ---------------------------- BEGIN; -INSERT INTO `sys_role` VALUES ('1', 'admin', 'ROLE_ADMIN', '超级管理员', '2017-10-29 15:45:51', '2018-09-13 01:46:01', '0', '1'), ('2', 'ROLE_CQQ', 'ROLE_CQQ', 'ROLE_CQQ', '2018-11-11 19:42:26', '2018-11-11 20:26:01', '0', '2'); +INSERT INTO `sys_role` VALUES ('1', '管理员', 'ROLE_ADMIN', '管理员', '2', '2', '2017-10-29 15:45:51', '2018-12-26 14:09:11', '0', '1'), ('2', 'ROLE_CQQ', 'ROLE_CQQ', 'ROLE_CQQ', '2', null, '2018-11-11 19:42:26', '2018-12-26 14:09:07', '0', '2'); COMMIT; -- ---------------------------- @@ -264,7 +251,7 @@ CREATE TABLE `sys_role_menu` ( -- Records of `sys_role_menu` -- ---------------------------- BEGIN; -INSERT INTO `sys_role_menu` VALUES ('1', '1000'), ('1', '1100'), ('1', '1101'), ('1', '1102'), ('1', '1103'), ('1', '1200'), ('1', '1201'), ('1', '1202'), ('1', '1203'), ('1', '1300'), ('1', '1301'), ('1', '1302'), ('1', '1303'), ('1', '1304'), ('1', '1400'), ('1', '1401'), ('1', '1402'), ('1', '1403'), ('1', '2000'), ('1', '2100'), ('1', '2101'), ('1', '2200'), ('1', '2201'), ('1', '2202'), ('1', '2203'), ('1', '2300'), ('1', '2400'), ('1', '2401'), ('1', '2402'), ('1', '2403'), ('1', '2500'), ('1', '2501'), ('1', '2502'), ('1', '2503'), ('1', '2600'), ('1', '2601'), ('1', '2700'), ('1', '3000'), ('1', '3100'), ('1', '3200'), ('1', '3300'), ('1', '3400'), ('1', '3500'), ('1', '3600'), ('1', '3601'), ('1', '3700'), ('1', '3800'), ('1', '3900'), ('1', '3901'), ('1', '4000'), ('1', '4100'), ('1', '4101'), ('1', '4200'), ('1', '4201'), ('1', '4300'), ('1', '4301'), ('1', '4302'), ('1', '4303'), ('1', '4400'), ('1', '4401'), ('2', '1000'), ('2', '1100'), ('2', '1101'), ('2', '1102'), ('2', '1103'), ('2', '1200'), ('2', '1201'), ('2', '1202'), ('2', '1203'), ('2', '1300'), ('2', '1301'), ('2', '1302'), ('2', '1303'), ('2', '1304'), ('2', '1400'), ('2', '1401'), ('2', '1402'), ('2', '1403'); +INSERT INTO `sys_role_menu` VALUES ('1', '1000'), ('1', '1100'), ('1', '1101'), ('1', '1102'), ('1', '1103'), ('1', '1200'), ('1', '1201'), ('1', '1202'), ('1', '1203'), ('1', '1300'), ('1', '1301'), ('1', '1302'), ('1', '1303'), ('1', '1304'), ('1', '1400'), ('1', '1401'), ('1', '1402'), ('1', '1403'), ('1', '2000'), ('1', '2100'), ('1', '2101'), ('1', '2200'), ('1', '2201'), ('1', '2202'), ('1', '2203'), ('1', '2300'), ('1', '2400'), ('1', '2401'), ('1', '2402'), ('1', '2403'), ('1', '2500'), ('1', '2501'), ('1', '2502'), ('1', '2503'), ('1', '2600'), ('1', '2601'), ('1', '2700'), ('1', '3000'), ('1', '3100'), ('1', '3200'), ('1', '3300'), ('1', '3400'), ('1', '3500'), ('1', '3600'), ('1', '3601'), ('1', '3700'), ('1', '3800'), ('1', '4000'), ('1', '4100'), ('1', '4101'), ('1', '4200'), ('1', '4201'), ('1', '4300'), ('1', '4301'), ('1', '4302'), ('1', '4303'), ('1', '4400'), ('1', '4401'), ('2', '1000'), ('2', '1100'), ('2', '1101'), ('2', '1102'), ('2', '1103'), ('2', '1200'), ('2', '1201'), ('2', '1202'), ('2', '1203'), ('2', '1300'), ('2', '1301'), ('2', '1302'), ('2', '1303'), ('2', '1304'), ('2', '1400'), ('2', '1401'), ('2', '1402'), ('2', '1403'); COMMIT; -- ---------------------------- @@ -340,13 +327,13 @@ CREATE TABLE `sys_user` ( KEY `user_wx_openid` (`wx_openid`) USING BTREE, KEY `user_qq_openid` (`qq_openid`) USING BTREE, KEY `user_idx1_username` (`username`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='用户表'; +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='用户表'; -- ---------------------------- -- Records of `sys_user` -- ---------------------------- BEGIN; -INSERT INTO `sys_user` VALUES ('1', 'admin', '$2a$10$RpFJjxYiXdEsAGnWp/8fsOetMuOON96Ntk/Ym2M/RKRyU0GZseaDC', null, '17034642888', null, '1', '2018-04-20 07:15:18', '2018-11-16 23:31:30', '0', '0', 'o_0FT0uyg_H1vVy2H0JpSwlVGhWQ', null, '1'), ('2', 'admin', '$2a$10$RpFJjxYiXdEsAGnWp/8fsOetMuOON96Ntk/Ym2M/RKRyU0GZseaDC', null, '17034642888', null, '10', '2018-04-20 07:15:18', '2018-11-18 13:43:03', '0', '0', 'o_0FT0uyg_H1vVy2H0JpSwlVGhWQ', null, '2'); +INSERT INTO `sys_user` VALUES ('1', 'admin', '$2a$10$QOfWxxFyAMmEEmnuw9UI/..1s4B4eF/u9PzE2ZaGO.ij9YfmcUy.u', null, '17034642888', 'lengleng-oxjkuoy361p6x5snlogo.png', '1', '2018-04-20 07:15:18', '2019-01-05 17:11:20', '0', '0', 'o_0FT0uyg_H1vVy2H0JpSwlVGhWQ', null, '1'), ('2', 'admin', '$2a$10$RpFJjxYiXdEsAGnWp/8fsOetMuOON96Ntk/Ym2M/RKRyU0GZseaDC', null, '17034642887', null, '10', '2018-04-20 07:15:18', '2019-01-09 11:06:24', '0', '0', 'o_0FT0uyg_H1vVy2H0JpSwlVGhWQ', null, '2'); COMMIT; -- ---------------------------- diff --git a/doc/db/3pigxx_ac.sql b/doc/db/3pigxx_ac.sql index 7c708afda..31aa36dca 100644 --- a/doc/db/3pigxx_ac.sql +++ b/doc/db/3pigxx_ac.sql @@ -11,7 +11,7 @@ Target Server Version : 50723 File Encoding : utf-8 - Date: 12/11/2018 21:39:50 PM + Date: 01/09/2019 11:09:48 AM */ USE pigxx_ac; @@ -58,8 +58,7 @@ CREATE TABLE `ACT_GE_BYTEARRAY` ( -- Records of `ACT_GE_BYTEARRAY` -- ---------------------------- BEGIN; -INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('12510', '1', '请教流程.bpmn20.xml', '12509', 0x3c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e0a3c646566696e6974696f6e7320786d6c6e733d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f4d4f44454c2220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e63652220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a61637469766974693d22687474703a2f2f61637469766974692e6f72672f62706d6e2220786d6c6e733a62706d6e64693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f44492220786d6c6e733a6f6d6764633d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44432220786d6c6e733a6f6d6764693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44492220747970654c616e67756167653d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222065787072657373696f6e4c616e67756167653d22687474703a2f2f7777772e77332e6f72672f313939392f585061746822207461726765744e616d6573706163653d22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566223e0a20203c70726f636573732069643d224c6561766542696c6c22206e616d653d224c6561766542696c6c2220697345786563757461626c653d2274727565223e0a202020203c73746172744576656e742069643d227369642d33414335453536332d453645332d343737372d423434362d30343736443838344331314422206e616d653d22e68f90e4baa4222f3e0a202020203c757365725461736b2069643d227369642d38433845373242432d353330322d343041372d413031372d30344542394641393136444122206e616d653d22e794a8e688b7e68f90e4baa4223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522206e616d653d22e7bb84e995bfe5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c656e644576656e742069643d227369642d30353539313044422d314445362d344243342d423532372d32334641373139444532363522206e616d653d22e7bb93e69d9f222f3e0a202020203c73657175656e6365466c6f772069643d227369642d32424346433631362d374438412d343134312d414633462d3841433138454131303044462220736f757263655265663d227369642d33414335453536332d453645332d343737372d423434362d30343736443838344331314422207461726765745265663d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222f3e0a202020203c73657175656e6365466c6f772069643d227369642d45464334383546312d414543392d343536392d423430312d44313644453538463637333722206e616d653d22e5aea1e689b92220736f757263655265663d227369642d38433845373242432d353330322d343041372d413031372d30344542394641393136444122207461726765745265663d227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222f3e0a202020203c73657175656e6365466c6f772069643d227369642d38344242323430352d384530322d344442392d384632392d45394242423033324330443922206e616d653d22e9a9b3e59b9e2220736f757263655265663d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522207461726765745265663d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d36393830363236352d423636302d344239322d423744392d38444532413535433530373922206e616d653d22e5aea1e689b92220736f757263655265663d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522207461726765745265663d227369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635222f3e0a20203c2f70726f636573733e0a20203c62706d6e64693a42504d4e4469616772616d2069643d2242504d4e4469616772616d5f4c6561766542696c6c223e0a202020203c62706d6e64693a42504d4e506c616e652062706d6e456c656d656e743d224c6561766542696c6c222069643d2242504d4e506c616e655f4c6561766542696c6c223e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144222069643d2242504d4e53686170655f7369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2233302e30222077696474683d2233302e302220783d223134322e352220793d223134322e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222069643d2242504d4e53686170655f7369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223231372e352220793d223131372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222069643d2242504d4e53686170655f7369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223336322e352220793d223131362e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635222069643d2242504d4e53686170655f7369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2232382e30222077696474683d2232382e302220783d223533332e383931363934363530313935372220793d223134322e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d36393830363236352d423636302d344239322d423744392d384445324135354335303739222069643d2242504d4e456467655f7369642d36393830363236352d423636302d344239322d423744392d384445324135354335303739223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223436322e352220793d223135362e3939393939393939393939393937222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223533332e383931363934363530313935372220793d223135362e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222069643d2242504d4e456467655f7369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137322e352220793d223135372e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223231372e352220793d223135372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222069643d2242504d4e456467655f7369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331372e352220793d223135372e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223336322e352220793d223135372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222069643d2242504d4e456467655f7369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431322e352220793d223139362e3939393939393939393939393937222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431322e352220793d223234382e3532343239303531313436323134222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236372e352220793d223234382e3532343239303531313436323134222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236372e352220793d223139372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a202020203c2f62706d6e64693a42504d4e506c616e653e0a20203c2f62706d6e64693a42504d4e4469616772616d3e0a3c2f646566696e6974696f6e733e, '0'), ('12511', '1', '请教流程.LeaveBill.png', '12509', 0x89504e470d0a1a0a0000000d494844520000023b000001020806000000184b16a3000015b44944415478daeddd0b90d565dd07f02e567677ba5a59515ad94d9bd272eaadacb7d2511b995e9945965814850c184161527c515e8c8a904ca4042f195a8a59ed241a88dc84b80c9a9262a8d08a5c5a6e020aba80c0f3fe7fffd9b31d161616d8cb39ebe733f38ce7ec397b16cff9edfebee7799effffbcea55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af6029a5236a6a6aee5eb060c1aee9d3a7a7071e78c068e3316ddab4347bf6ec0dd9e8ae2201342a8daa8545fdcc993327ad5bb72e6ddfbedd68a7b17efdfaf4e0830f3e9fd5d339feb20168541a550b8aa0ac7e4aa68eb667017a89bf6c001a9546d5826246d0eb573a23aba197fd6503d0a834aa16144b715ebb92aaa1e42f1b8046a551b5430d6ddd5c9b6a1eba353d316d783ee2727ccdebae8600342a8daaec6b68cba6d569f1fd43d33fee1bbcc788afc56d5e7b610740a3d2a8caba86563e71cf5ef55318ab9e98e4b5177600342a8daabc6b68c9cc914dd650dce6b5177600342a8daaac6b68f103c39aaca1b8cd6b2fec0068541a951a32841d008d4aa32ad51a8a4ded4dd550dce6b5177600342a8daaac6b68e9dcb14dd650dce6b5177600342a8daaac6be8b9d58fa5c553afda7b6630fb5adce6b5177600342a8daaac6b28c6330fdfb6570dc5d7bcee6a0840a3d2a8cabf86b66d4b4be7ddb0f7cc60f6b5b8cd6b2fec0068541a55d9d6509c78f2e9b9d737b9141ab73939a5b003a0516954e557435910ae5d3a233d3e654893f55318719fb8aff02cec0068541a5559d4d08142b2f0ac8600342a8daaac6ba83921797fe1592d083b001a954655d23574a8f553186a41d801d0a834aa92ae21430d01685486b063a821008d4aa3524386b003a05169546ac8107600342a8d4a0da921e01569ead4a9ff3d6edcb8eaabafbebab67ffffe3baaaaaa7677edda357dfffbdf4f7dfbf67d79f8f0e1ebc68e1d7bdf8c19334e13760c8d4a0da9a18eafb2b2f2988a8a8a7e592fb83b1b4bb3b125fa4236eab2f14c765b75f6df41713fcf16256df4e8d183860e1dba69c0800169fcf8f169c1820569f5ead5a9aeae2e85f8efba75ebd2dffffef73461c28414f7bbe28a2b5e183972e47061c7d0a8d4901aea78ce3df7dcced978a03ed4a4668e99d9f774f7ec5152468d1a75c2e5975fbe7ad0a041bb23c8ecdcb93335d7a2458bd290214352f6bdebafb9e69a93851d43a352436aa8fc6581a55336261f44c0d9d798d3a54b97e33c9b9442d0b9aa4f9f3ebb264d9a745021a7b12953a6a4789c2cf08c10760c8d4a0da9a1f255515191e594aeeb8b834b656565fae94f7f9a66cc989156ac58915e78e185fc6fff8b2fbe98af00cc9d3b375d7bedb5f97687e2efebd6addb8b66796857e3c68dfbdf7efdfaed7efae9a7534b58be7c798ac71b3d7af41861c71076d4901a2acba0735616525e2e0e39bffbddeff22d0ccdb169d3a6fcfef17dc5a1270b3c177876697343870ebd240b26bb9a5bc0cd158f178f3b6cd8b0cb841d43d8f1daa9a1b29bd169083a975c72493e8b7328e2fb060f1edc38f098e1a1edf4eeddfbd80b2fbc70474bcde8ec6b86271e3ffb453951d831841d430d95befa3d3a0d4b57575d7555c352d5a18a25ae112346345ed23adeb34d9b183060c0d3b147a735c51e9efefdfb2f17760c61c75043a5affe88ab86199dc30d3ac581a7d10ccf1ccf36ad2e0b2095975e7ae9ce1d3b76a4d69615f8ceece75d24ec18c28ea1864a3ae8742edea373a84b57fb5bd22adec363398b569725f6657178795b78ecb1c7d2c5175fbc42d831841d430d95c7ac4e6c2e6e0d77de79a7d91dda469cd9f2a28b2eda7e3887981fac380373ac0597da2f7636fe4ba3d2a8d4901a7a250499fdd56af485c2a6e4987d79eeb9e75aa517c4515a8d0e4befa42bd32afaf6ed3be4a69b6eda95da50bc4bc802d6ff95d2f3503495fa404545c5291a9546a586d4504775a05aadff0888fc3e3ffff9cf5bb51fc479788ac2ce205d995671f1c517cf8f8f80684bb164d6bf7fff874bf197bf684c6efcce47a3d2a8d4901aea4861a7a95aadffacabfcb659b366b56a3f88130f16fd3b26e9cab48af3cf3f7f6d6d6d6d9b869d38ef4e5555d5c612ffe56f78e753f823a05169546a480d75d0b0b347add67fa867feb596de98dc589c69b9e8dfb05257a65574efde7d7be1433ddb4afcbc6eddbabd5c0ebffcc5ef7c342a8daa5c6b28de60b4e6e34743bcfffefb9bbc7dcd9a35e9d1471fcd2f6fd8b0213f84b9f0efdaba75ab1a2abd5add59b8dc52879befef30f4a29f5ba72bd36a45df1e0ef383e4da659453d88906326ddab4266f8f8613d3c7dbb66d3ba8c75dbb766dfe3c6cd9b2a524c28e1a3af078e9a597d2fbdffffe74ebadb7e6d7cf3aebac74d24927358cef7ce73b7bdc7fe4c891e984134ed8e36b2b57ae4c7dfbf64d1b376eccaf3ff5d453e917bff845bedf22c6b7bffded74e49147a6d1a347377c2d6e7ff2c927f3fbc751371ffef087f3cb9ffbdce7d2af7ffdebfcf2bbdffdeef4d7bffe550d95f068eb7ea02bd35a333bdbda6966674799bcd379283e17e6d4534f3da23d1ad515575c913efde94fa7cf7ce633fb1cc71f7f7c43032a1e4f3cf1447ae31bdf98eebdf7de7d3eeeecd9b3d311471c915f1e346850fad8c73e963efef18f378c2e5dbae4b7c55118cf3efb6c8aa5ce187162c8ece94a4b972e6df85abcab8ffb99d929cd1a9a3061423ae69863d2e6cd9bf3eb9ffce427f313c4dd75d75de9ca2baf4c9d3a75dae3fe11543ef5a94f35bcfef1418f6f7ffbdbd329a79c921e7ffcf1fceb53a74e4daf7ffdeb63d9231fd9ff5f1ea2ea9742f2f18637bc214d9e3c39d5d4d4e42128fe0d8b172fce1fe7c61b6fcc1f2742d8f4e9d3f3101deff0cdec9446ad66ffdd6266870ee5bcf3ceab6d8f3d3b3d7af4d850e2bffc0d0daa709ff668543ffce10fd3d7bef6b574c71d77e42302ca8f7ffce3fc723490081ecf3fff7c438039f3cc33d377bffbdd7c1c7df4d1f93bf7b81c5f1f3f7e7c7ebf082a71399a557c4f9f3e7dd257bef295bcf1c588fb7eeb5bdfcaef7bf3cd37e73fe340a3f0d8c24e69d5502c1f4598b9edb6dbe2f3e9f290124166cc9831293e1a26befe918f7c64afb013013b66fe8e3aeaa8f4894f7c22fdfef7bfdfe33e71beac5ebd7aa565cb96a57ffdeb5ff91256d4411c7c10d7e3eb175e78615ab468511ed8dff296b7a4d7bce635e9ab5ffd6a1e76a25ea28946d889e7246a2e4295b0531ab56acf0e1d4e5555d5a4f9f3e7ef6ccbb0137f10b39f3bb5447ff9e7c799438b1b547b869d1ffce007e9b4d34e4b0f3ef8603e5ef7bad7e58d222edf7efbed7b849d98c58930148dacf138eeb8e3f2a613f7bbeebaebf277d9af7ef5abd3b1c71e9b879d68403ffad18ff2113faf1076623620c269bcf3ce026a1e8ee2dd7e7575751a3060407e396e2fcc1a083ba55543975e7a69fe3ac76cdd9bdffce6f4cf7ffe330f3b117463e62f665f0a6127c247bccb2eccecc41267fc7b63192c2ec788db0b4b98f1d8f118ef7bdffbf2e5a8a8c508d8713d96b4e2f6c2bfe30f7ff843fae8473f9a5f8e5a8bfb9e7cf2c979d8899f154b5bebd7af17764aa4561d8d458713e753183b76ec736d19767ef39bdf6c2ab5f329eceb5d7829849d78771c4b081156624493f8e0073f985ffed0873eb447d88925a6685efb7a9c981d2a849d18f107a670dff3cf3f3f6f5af12e3e4634c5ec79d863cf47dce7031ff8405ab56a55feb5689aef7ad7bbe27c49edb67fa704c34ec9d550ecadc97edff2d7fab7bffd6dfeb5081713274e6c588e2a849d98316cce2cde4f7ef293fcfe975f7e791e8c1f7ef8e1f4e73fff39bfed6f7ffb5b7e3dc272dc5ef877c49e9d77bef39df9cc61849d98958c7d401176befce52fe7cba16aa8746ad57976e870e24c99bd7af5dad4966750ce1af873e578a6ccf6083b7176d198dd295c8f77e4f3e6cdcb2fc7fe89e2b0f3a73ffd29bffd97bffce55e2366708ac3ce7df7dd972f2bc4bbeb6840c3870fdf63c4a71bc7ec512c477cf18b5fcc1b626c508d65adf8fe5b6eb9253ef6230f5db1dfa770a48d46555a35f4c8238fe4b33a9ffdec67f33a8afd3b11767af6ec996f208eb05a083b31431761f6eaabafce97aee2f2cc9933f33af9cb5ffe925f8f258d98e52b849d0830115e4e3cf1c486d99ab81e5f2f849d085131e3184b59b1497a5f7b761c8d557a7dc11994e970ba77ef3e73e1c285cfb745d059b468d196ece72d28c7e7a93dc24ee7ce9df33051d8f4198d27de4dc7e5d8e7501c76e21d7c3494f89ec6236661860c19d270b44d7cdf6b5ffbda7ccf46ec0b8a4dcab16f279a5c5c1e387060de08e28f515c8e0677c30d37a4b7bef5adf9d7a399c5725a6c8e8e77faed31bb23ec1c78c4f2511c0515b512af7f84d2083b319b129bd0bffef5af37b967a7703dfb7dcdaf375e668a30f38d6f7c233fea2f668da2a62244c7f578dc42d8899f193552bc8cd538ecc4f735b5995e0db50f9f8d45472ceace7dfaf4a96d8bd99dacb1ae2ad74fb76d8fb0f3f9cf7f3e3fca25a692634440e9dfbf7f7e39424971d88977d01158f6f538d148e6cf9f9f5f8e8da993264d6a58c68a23692ebbecb2346cd8b07c1620666c6216a0f161e971fd8c33cec8f7809c7df6d9ceb35326355458cefad5af7e95eebefbee2697b1f61576962c5992cf20c6517f5ffad297d2f2e5cb1bee3778f0e0f4def7be375fb28aba8b5a8cf013d7dff39ef7e4b737b567273623df73cf3d0d6167c48811f992ad1a2aadbee053cfe988853d2bfb03b8bc35834e7575f5caece7ccdddf9e068d6acf73dac45e9a680acd59c68a7d3611549af3d8853d3bf1bd6f7bdbdbd2f7bef7bd7c99eb0b5ff8421a3b766cbec4511c7662df4e34c1d83f14330531c3130dab70723861a7346b28424d61f3702c65c5ace03bdef18efcdc3a1168e348bd78fd63d6aef03d1164638630c2496c888fa5acd85f134b5571dfc20cccc2850bf30deb71390e298f9f113381713d9640e3f6b81c4ba1b1541a4ba911b8629631427bfcfcd80716212796bf22c0aba1d29285909985303270e0c05d2d75187a6c748f305c3cab53ae7d81f22bea4e59ca5effe4934f6e698da0f3cc33cfbc188f9f859de3cbf5396aeb4615cb4d11768a376f46f38946124d236662622f449c4030f65444038943820ff4b8b1b938de4947d889c387e31d7b34bf37bde94df95131f1d87104579c23254e0a17872cc75136d134633abb70487a34cd687ee79c734ebe3155a32abd1a8aa011cb9b1156e2faf5d75f9fcf0846a3298cb81ef7297c4fecd78a0012e7e1295eba8a3a1b356a5443a069bc37289636fffdef7fef75db1ffff8c73c38c5cfb9e69a6bf2cdc971eea6b82d827504aedebd7be787c9aba1d2eb0bd9585f08255968dd7db88127824efcfd290a3a5bcab92f50862a2a2aba565555ad59bb76edb6960c3af178d9e3ae2df769cab66e54112022d014aec7c91863092b9624621f450494c29131f10e3b4e14d79cc78d2367626fce79e79d974f23c7b950e2b163ffce05175c90cff29c7efae979b38b9f15fb3b627f4ee32617fb7562af46fc3be29dbd4655bacb5886b073387da1b059b97e8667f7a12e69c5f7359ad1b17c45bb25f99e3d7af4a85db264c98696083a3535351be2f1b25f98cbcafdb9d1a8342a35a4865ea97da138f074ebd66d77ccf2c61ba0e61e75159b918bf7e8c4e8087d81324ff259dade3061c284470f67d3f2c48913ff91fd52ac8d5f948ef0bc68541a951a5243afe4be908d4dc56125c24becb58a130fc6ac4d61892b96aae2ccc8b1373096c4e354078dced8bca5a3f405ca3fc9778a430fabaaaa96cd9b376ff1c1849c850b173ed5ab57afc5b1e9ac23adc56a541a951a5243fac27f0e493fc431c71e1d4ab1b8cf89e2eedebdfbea61c386cd9b3973e623ab327575755beb3fd4736b6d6dedca2c10fde3673ffbd99c1e3d7aac88628ed4ded176d76b541a951a5243fca72f142f6d3527e474c4be40071367d4cc8a7b40fd67a63c139f4e5bf894daf8f0b6f84c9338d577473e03a646a551a9213584be001d9a46a551a921350420ec181a951a524300c28e21ec186a0840a332841d430d0168541a951a32841d008d4aa3524386b003a05169546a480d01083b1a9546a586d41080b06368546a480d01083b86b063a821008dca10760c3504a05169546ac8107600342a8d4a0d19c20e8046a551a921350420ec68541a951a524300c28ea151a921350420ec18c28ea18600342a43d831d4108046a551a92143d801d0a8342a3564083b001a9546d5faa64f9feeb52b9d5197d5d0cbfeb20168541a550b9a3d7b76edba75ebbc7e253056af5e3d31aba125feb20168541a550b9a3163c6d9b366cddabc76edda97bc8eed1794a37ea64d9bf66c36cef1970d40a3d2a85a58f6ef3e2b0b6a0fc5cc542cc595e3a8aeae4ee5fa6faf7fde97083a001db451dd79e79da96bd7ae1a15872c0bfbff3366cc98a8a34e9e0d004a4ed6a02645d839f5d4538ff06c70b0524a476edcb8715326f5eeddfb5ecf080025a5a2a2e2942ce8bc1c61e7dc73cf3ddd33c2c15ab972e5eda9debc79f3566775d4d9b3024029859dea083af5e321cf080763ebd6ad27eedab56b772a3262c488953d7bf63ccab30340bbcbc2cd4985599dc2c8c2cf599e199a6bcd9a3535a991cd9b37afa9acacbcceb3034029849d49c541a730bb63ef0ecdb162c58aa1a909d5d5d56b224c7b960068cfa0b3d7ac4e61d873c1816479e6e86ddbb6ed682aececdebd7bfbc081031f139c0168cfb033795f41a77eccf70cb13fab56ad9a9f0ea0a6a66665169c0778b600688fa0d3e4ac8ebd3b34c7dcb9730f9475525d5dddaca8a59e3d7b1ee91903a0adc3cea4fd051d47667120575e7965dffd2d6345d6193264c85d66760028a500943c0b1c8c8913273ed554d259b66cd9b8580eb56707006187b2d5a54b97e3b25053b78fcdc98b2b2b2b173b1a0b006187b2376ad4a8ebb370b3ab38ecdc7cf3cdb75454545cebd90140d8a1ecc532d5942953d6159d50f08eac96963a833200c20e1d46bf7efdbeb969d3a66df51f043acd799a001076e870c68f1f3f79cc983171ca826acf0600c20e1d4e2c5b450dc5a665cf0600c20e6a0800342ad410006854a82100d0a8504300a051a18600d0a8400d01a051a1860040a3420d018046851a02008d0a3504001a156a0800342ad410001a15a82100342ad410006854a82100d0a8504300a051a1860040a3420d01a0516954a82100342a5043006854a82100d0a8504300a051a1860040a3420d018046851a0240a3d2a85043006854a08600d0a8504300a051a1860040a3420d018046851a02008d0a35048046a551a18600d0a8400d0150b68dca300e77f84d0200000000000000000000000000000000000000a0d9fe1fde31e90f44aa0a800000000049454e44ae426082, '1'), ('2', '10', 'source', null, 0x7b227265736f757263654964223a2231222c2270726f70657274696573223a7b2270726f636573735f6964223a224c6561766542696c6c222c226e616d65223a224c6561766542696c6c222c22646f63756d656e746174696f6e223a22222c2270726f636573735f617574686f72223a226d6164652062792070696778222c2270726f636573735f76657273696f6e223a22222c2270726f636573735f6e616d657370616365223a22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566222c22657865637574696f6e6c697374656e657273223a22222c226576656e746c697374656e657273223a22222c227369676e616c646566696e6974696f6e73223a22222c226d657373616765646566696e6974696f6e73223a22227d2c227374656e63696c223a7b226964223a2242504d4e4469616772616d227d2c226368696c64536861706573223a5b7b227265736f757263654964223a227369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144222c2270726f70657274696573223a7b226f766572726964656964223a227374617274222c226e616d65223a22e5bc80e5a78b222c22646f63756d656e746174696f6e223a22222c22657865637574696f6e6c697374656e657273223a22222c22696e69746961746f72223a22222c22666f726d6b6579646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22227d2c227374656e63696c223a7b226964223a2253746172744e6f6e654576656e74227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a37352c2279223a3131352e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a34352c2279223a38352e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222c2270726f70657274696573223a7b226f766572726964656964223a2275736572222c226e616d65223a22e794a8e688b7e68f90e4baa4222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a6e756c6c2c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3232302c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3132302c2279223a36302e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222c2270726f70657274696573223a7b226f766572726964656964223a22706d222c226e616d65223a22e7bb84e995bfe5aea1e689b9222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a6e756c6c2c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439227d2c7b227265736f757263654964223a227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3336352c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3236352c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a6e756c6c2c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3131392e31353632352c2279223a3130302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a37352e3630393337352c2279223a3130302e30303030303030303030303030337d7d2c22646f636b657273223a5b7b2278223a31352c2279223a31357d2c7b2278223a35302c2279223a34307d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a6e756c6c2c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3236342e31353632352c2279223a3130302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3232302e38343337352c2279223a3130302e30303030303030303030303030337d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34307d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445227d7d2c7b227265736f757263654964223a227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e9a9b3e59b9e222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e9a9b3e59b9e27297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3331352c2279223a3139312e35323432393035313134363231377d2c2275707065724c656674223a7b2278223a3137302c2279223a3134302e333236383433353739313433397d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a3331352c2279223a3139312e35323432393035313134363231377d2c7b2278223a3137302c2279223a3139312e35323432393035313134363231377d2c7b2278223a35302c2279223a37397d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c2273657175656e6365666c6f776f72646572223a22227d2c227374656e63696c223a7b226964223a224578636c757369766547617465776179227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435227d2c7b227265736f757263654964223a227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3435302c2279223a3132302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3431302c2279223a38302e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e7bb8fe79086e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a22222c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830227d2c7b227265736f757263654964223a227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3539352c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3439352c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e4babae58a9be68aa5e5a487222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a22222c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3734302c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3634302c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22657865637574696f6e6c697374656e657273223a22227d2c227374656e63696c223a7b226964223a22456e644e6f6e654576656e74227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3831332c2279223a3131342e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3738352c2279223a38367d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3430392e36343834343638373030303735352c2279223a3130302e34303937333335333632333338337d2c2275707065724c656674223a7b2278223a3336352e36323838393638373939393234352c2279223a3130302e32313931373237313337363632337d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a32302e352c2279223a32302e357d5d2c22746172676574223a7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030227d7d2c7b227265736f757263654964223a227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3633392e31353632352c2279223a3130302e30303030303030303030303030317d2c2275707065724c656674223a7b2278223a3539352e38343337352c2279223a3130302e30303030303030303030303030317d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d7d2c7b227265736f757263654964223a227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3738342e3337352c2279223a3130302e30303030303030303030303030317d2c2275707065724c656674223a7b2278223a3734302e3339303632352c2279223a3130302e30303030303030303030303030317d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a31342c2279223a31342e3030303030303030303030303031367d5d2c22746172676574223a7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246227d7d2c7b227265736f757263654964223a227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b646179733c3d31307d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3639302c2279223a3139322e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3433302e352c2279223a3132302e30383539333735303030303030337d7d2c22646f636b657273223a5b7b2278223a32302e352c2279223a32302e357d2c7b2278223a3433302e352c2279223a3139322e30303030303030303030303030337d2c7b2278223a3639302c2279223a3139322e30303030303030303030303030337d2c7b2278223a35302c2279223a37392e30303030303030303030303030367d5d2c22746172676574223a7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d7d2c7b227265736f757263654964223a227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b646179733e31307d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3439342e38303037393037383433383831342c2279223a3130302e34313336303139373934303738347d2c2275707065724c656674223a7b2278223a3435302e32383531343637313536313138362c2279223a3130302e32313932313035323035393232317d7d2c22646f636b657273223a5b7b2278223a32302e352c2279223a32302e357d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743227d7d2c7b227265736f757263654964223a227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e9a9b3e59b9e222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e9a9b3e59b9e27297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3534352c2279223a36302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3137302c2279223a32397d7d2c22646f636b657273223a5b7b2278223a35302c2279223a317d2c7b2278223a3534352c2279223a32397d2c7b2278223a3137302c2279223a32397d2c7b2278223a35302c2279223a317d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a313030302c2279223a313035307d2c2275707065724c656674223a7b2278223a302c2279223a307d7d2c227374656e63696c736574223a7b2275726c223a227374656e63696c736574732f62706d6e322e302f62706d6e322e302e6a736f6e222c226e616d657370616365223a22687474703a2f2f62336d6e2e6f72672f7374656e63696c7365742f62706d6e322e3023227d2c227373657874656e73696f6e73223a5b5d7d, null), ('25002', '1', '请假流程.bpmn20.xml', '25001', 0x3c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e0a3c646566696e6974696f6e7320786d6c6e733d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f4d4f44454c2220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e63652220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a61637469766974693d22687474703a2f2f61637469766974692e6f72672f62706d6e2220786d6c6e733a62706d6e64693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f44492220786d6c6e733a6f6d6764633d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44432220786d6c6e733a6f6d6764693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44492220747970654c616e67756167653d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222065787072657373696f6e4c616e67756167653d22687474703a2f2f7777772e77332e6f72672f313939392f585061746822207461726765744e616d6573706163653d22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566223e0a20203c70726f636573732069643d224c6561766542696c6c22206e616d653d224c6561766542696c6c2220697345786563757461626c653d2274727565223e0a202020203c73746172744576656e742069643d22737461727422206e616d653d22e5bc80e5a78b222f3e0a202020203c757365725461736b2069643d227573657222206e616d653d22e794a8e688b7e68f90e4baa4223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d22706d22206e616d653d22e7bb84e995bfe5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c73657175656e6365466c6f772069643d227369642d32424346433631362d374438412d343134312d414633462d3841433138454131303044462220736f757263655265663d22737461727422207461726765745265663d2275736572222f3e0a202020203c73657175656e6365466c6f772069643d227369642d45464334383546312d414543392d343536392d423430312d44313644453538463637333722206e616d653d22e5aea1e689b92220736f757263655265663d227573657222207461726765745265663d22706d222f3e0a202020203c73657175656e6365466c6f772069643d227369642d38344242323430352d384530322d344442392d384632392d45394242423033324330443922206e616d653d22e9a9b3e59b9e2220736f757263655265663d22706d22207461726765745265663d2275736572223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c6578636c7573697665476174657761792069643d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222f3e0a202020203c757365725461736b2069643d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322206e616d653d22e7bb8fe79086e5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d227369642d41313341394141382d434338462d344233332d383136362d45463737353746364142444222206e616d653d22e4babae58a9be68aa5e5a487223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c656e644576656e742069643d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222f3e0a202020203c73657175656e6365466c6f772069643d227369642d35344233354332332d303138422d344642412d393643322d37454634354430313444444422206e616d653d22e5aea1e689b92220736f757263655265663d22706d22207461726765745265663d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222f3e0a202020203c73657175656e6365466c6f772069643d227369642d30334436303037342d303738332d344333422d384345302d37334234334546433531383022206e616d653d22e5aea1e689b92220736f757263655265663d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322207461726765745265663d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222f3e0a202020203c73657175656e6365466c6f772069643d227369642d42303041324138322d334131352d343934352d423430312d38444534444438373241383822206e616d653d22e5aea1e689b92220736f757263655265663d227369642d41313341394141382d434338462d344233332d383136362d45463737353746364142444222207461726765745265663d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222f3e0a202020203c73657175656e6365466c6f772069643d227369642d41443932373633302d373545442d344437372d383743462d4544303333303733454143362220736f757263655265663d227369642d37443342413043432d304531342d343031412d393937422d45354235373739384436303022207461726765745265663d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b646179733c3d31307d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d42304144324538452d363634312d343437322d394431332d4638383244413341463944352220736f757263655265663d227369642d37443342413043432d304531342d343031412d393937422d45354235373739384436303022207461726765745265663d227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b646179733e31307d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d36314637383245322d304132452d343144322d383042372d38313630413932444143393922206e616d653d22e9a9b3e59b9e2220736f757263655265663d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322207461726765745265663d2275736572223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a20203c2f70726f636573733e0a20203c62706d6e64693a42504d4e4469616772616d2069643d2242504d4e4469616772616d5f4c6561766542696c6c223e0a202020203c62706d6e64693a42504d4e506c616e652062706d6e456c656d656e743d224c6561766542696c6c222069643d2242504d4e506c616e655f4c6561766542696c6c223e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227374617274222069643d2242504d4e53686170655f7374617274223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2233302e30222077696474683d2233302e302220783d2234352e302220793d2238352e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d2275736572222069643d2242504d4e53686170655f75736572223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223132302e302220793d2236302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d22706d222069643d2242504d4e53686170655f706d223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223236352e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222069643d2242504d4e53686170655f7369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2234302e30222077696474683d2234302e302220783d223431302e302220793d2238302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743222069643d2242504d4e53686170655f7369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223439352e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222069643d2242504d4e53686170655f7369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223634302e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222069643d2242504d4e53686170655f7369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2232382e3030303030303030303030303033222077696474683d2232382e302220783d223738352e302220793d2238362e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838222069643d2242504d4e456467655f7369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223734302e302220793d223130302e3030303030303030303030303031222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223738352e302220793d223130302e3030303030303030303030303031222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222069643d2242504d4e456467655f7369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446223e0a20202020202020203c6f6d6764693a776179706f696e7420783d2237352e302220793d223130302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223132302e302220793d223130302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444222069643d2242504d4e456467655f7369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223336352e302220793d223130302e3231363435303231363435303233222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431302e343133303433343738323630392220793d223130302e34313330343334373832363039222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222069643d2242504d4e456467655f7369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223232302e302220793d223130302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236352e302220793d223130302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222069643d2242504d4e456467655f7369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331352e302220793d223134302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331352e302220793d223139312e3532343239303531313436323137222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d223139312e3532343239303531313436323137222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d223134302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435222069643d2242504d4e456467655f7369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223434392e353833333333333333333333332220793d223130302e3431363636363636363636363639222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223439352e302220793d223130302e3231383334303631313335333734222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830222069643d2242504d4e456467655f7369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223539352e302220793d223130302e3030303030303030303030303031222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223634302e302220793d223130302e3030303030303030303030303031222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336222069643d2242504d4e456467655f7369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223433302e352220793d223131392e3530303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223433302e352220793d223139322e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223639302e302220793d223139322e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223639302e302220793d223134302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939222069643d2242504d4e456467655f7369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223534352e302220793d2236302e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223534352e302220793d2232392e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d2232392e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d2236302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a202020203c2f62706d6e64693a42504d4e506c616e653e0a20203c2f62706d6e64693a42504d4e4469616772616d3e0a3c2f646566696e6974696f6e733e, '0'), ('25003', '1', '请假流程.LeaveBill.png', '25001', 0x89504e470d0a1a0a0000000d4948445200000337000000ca08060000009835be800000222c4944415478daeddd09985575fdc7712a2bdb7dda172b2b2bdb372bdbeddf46656525210ce984066ea9a43e997b2aa99151d86669659b96191a9a28b82b9a962969e6122e8022966818602ae77f3ee7e1f05c8619988161e6de3baff7f37c1fcebdf7cc9de19ccfeff3fb7d7fdb19360c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da85edb7dfbe104208d17ea18603000cc9e4c6550000de0e00800a1000c0db010050010200783b00002a4000006f070040050800bc1d000015200080b70300a0020400f076000054800000de0e00800a1000783b00002a4000006f070040050800e0ed0000a8000100bc1d0000152000f076000054800000de0e00800a10003078dc7df7dd9f9d32654a51fafb66ae06004072030068498aa2d8f8de7bef5d54528c1b37ee4c57040020b90100b42473e7cefd45b18259b366cd1f356ad4b6ae0a004072030068291e78e081373cf2c823cb8b06264e9c38b7b3b3731357070020b90100b40c0b162c985374e1befbee5bd0d1d1f11d57070020b90100b40477dc71c7c1450f4c9d3a7541e9f55bba4a0080764b64a62599594b5ce54a0140eb50e62fcf5db66cd9ff7a4a6e962f5ffee0840913666fbdf5d61bb95a0080764a6eb62ce3a135253723478edcc6950280d661debc7997176b61ce9c3973478d1ab5b7ab050068b704e7ec35243797ebd90380d6e2b2cb2e5b5b6e532c5dbaf4c2f87c6767e7c6ae1800a09d929b2d7b4a6e6c190a00adc721871cb2fb9aa6a525b739e080037e63e40600d0ae094e776b6fae326a0300adc929a79c72634f99cd2db7dcf24323f30080764e6e565b7b63ad0d00b42e23468cd8bc4c629676b399c0751d1d1dd7d92d0d00d0d694c9cc54a33600d03e4c9a34e9b8329979a431b939e184134e2cfd7eb2ab030068f7e466ab86b536c35d1100686dd249357dfaf4850d0ff0fc75e9f1377776766ee2ea0000da9e7aed8d511b00680ff6d8638fff5bb468d1b2328a71e3c6cdb4510c0060282537d5ce69ae0400b40fc71f7ffcd953a64cc95acaa9ae0600a0571445b1d19c39734ebde28a2b1e39efbcf38a193366b46424b969d5bf7de6cc99c5c5175ffcaf32c6d090188a1a8272d95d9c75d65995b79f76da69ca250df17600bd23c675c92597140b172e2c1e7cf041314871cf3df714175d74d1fda5916d474362a86908ca654f317ffe7ce59286783b6f077a4f7a641857d318d8833366ccb88186c450d310944be59286046f07fa850c35338ee689d2bc1ea22131d43404e552b9a421c1db817e21733a9946539957414362a86908caa572494382b703036a5e0fdc775731e7aa9f16d7cf3cbc8a1ce73d86c3bc688886a05c0ade4e433404b48c792d5e34bfb8ee9c838b6bcfda6f95c87bf98ce9a800698886a05c0ade4e433404b48479cdbdfe0fab19571df3ae9fc6745480344443502e056fa7211a025ac3bc6eb8e0981ecd2b9f311d15200dd110944bc1db698886809630afeb661cd6a379e533a6a302a4211a827229783b0dd110c0bc840a90865480502e954b1a12bc1d1828f3caee273d99573e633a2a401aa221289782b7d3100d012d615e375ff6dd1ecd2b9f311d15200dd110944bc1db698886809630af7fcf9f5d5c77eea1ab0f3997efe533a6a302a4211a827229783b0dd110d012e695b8f5cf3f5fcdbcf21ec3615e344443502e056fa7211a025ac7bc962d2b6e9ef583d5879ccbf7f219d35101d2100d41b914bc9d866808687af3ca13866fbaecb81ee7d4e6334f215601d2100d41b914bc9d866808685ef35ab6acb8ebe6f38bbf4d3fa047e3aa23e7e45cbd342a401aa221289782b7d3100d014d655e6beb8dd14bc3bc688886a05c0ade4e433404b48479f5a637664dbd344c480548433434c86cc2db954be592866808500156b1aec65507135201d2100d0d22c3cb2856fccbdb954be59286680818ea15a0605e3444432dca07cb5854c6e415ff6ec3db857249433404a80005f3a2211a6ad5c4669b86119c7b866a82a35c2a9734444380e446302f1aa2a1f6486cd6f63e6f17ca250dd110a00214cc8b8668a8e918be9604a6fe7c386f17ca250dd110da96a228369e3d7bf6f8934e3ae9a2a38f3efafe3df7dcf3a1cecece62fbedb72fc68c19b37cd75d777df0c0030f9c73cc31c7fcb28c57aa0005f3a2211a6adac4666d89cb901bc1512e954b1aa2a156a0a3a363d3912347ee51b6bf4f2de3e63216a72d5ec6d2326e2d3f9b5afebb6fce93bdac21a939edb4d37e7ec411473cb4f7de7b17c71f7f7c71c5155714f3e7cf2f962e5d5a84fcbb70e1c2e22f7ff94b51263fc55e7bedb57cc28409b78d1b376e6715a0605e3444434dc107fb3822d3d7f379bbe0edee1d0d6d20468d1ab56d1933ca78704532d39bb8a03c7f8c6ca6813289197be491472edb6fbffdaac4e5e1871f2e7acb35d75c53ecbffffe0f8f1f3ffe861123466cae0214cc8b866868d0139b6dd6e1e7160f850447b9542e6988869a913241d9ac4c50a6f721a1e92e2e69a7b6f8ba8ed66c74c619679cbfcb2ebb14d3a64deb5352d395e9d3a71763c78e5dd22ea338cc8b79d1100d0d91c4a6bf7e5eb914bc5dd0d03a3072e4c8ed478f1e7d6f63a2d2d1d1511c75d451c5f9e79f5fdc71c71dc57ffef39faabdfddffffeb79a5575d965971593274f2e3efff9cf774d70160fd9519c2436175e78e1955ffad2978a9b6ebaa9e80f6ebbedb6a24c9496ecbcf3cebbab00850a90866868c058dbe60103fd3dcaa5e0ed82867a97d86c5326230f372635bffce52fab6520bd61d1a245d5f9f9b9c624a7fcce9d870d35326293c4a6b717afb7e4fbc68d1bd7f25923f3625e3444432d96d8f4d794b2b61ec1512e954b1aa2a1661ab1694c6cbefce52f57a334eb427e2ecb4bba2438436704276b6c3215adbf466cba1bc1d961871d169517750b15a050010a1ada6074dd0ce05165ecb8e2dfbed0f5e7da769301e552b9a4211a6a06b2c6a6712adaa1871eba72ead9ba92296b13274eec3a456d8b61ed4e76453bfcf0c31fcc1a9b0dc959679db5a4a3a3e37215a050010a1adaa089cd360d09ca89b1f915fff636c1e9e9e7da32c1512e954b1aa2a166a04c6c66368ed8ac6f62d398e07419c1b9a4ed939ba953a7fe2affe9fffdef7fc58666b7dd765bd0aa4362cc8b79d1100db55062336cc5c84bd110bd49701a139b3a7668f8bcedd6e02897ca250dd1d06093ed9e1bd7d8aceb54b4354d516b5c83d3d6d3d3326a93e7d864bbe781e0da6baf7db055476f9817f3a2211a6a527a4a38ba4b54d694e07477fe09dd9cdf566b70944be5928668a809929b1975e291cd003604279f7cf2d018bd993d7bf6f86c22b03e5b3ef795b163c72ec8bcc266125419ef665ecc8b8668a8d935b486c466781f1296ee129cde26365d139ce1cddc58502e954b1aa2a166d7504747c7a6f52602195df9f7bfffbd41dadfd945adcb36d19b0d6b474e3ae9a48b4e38e1846220993c79f235e505ddb759ae41c310dd8c9123476ec5bc98170dd150b36a681d138cb525387d4d6c1a7fff3dcd3a82a35c2a97344443ada0a1f2fd3deaf3bef18d6f6ce836786372b3efb076e4e8a38fbeff8a2bae18d0e466d6ac59b79517745ab309af21ceee2ecb665ecc8b866868b035b41e53c37a4a701ebd8e89cddaa6c4299782b70b1aea8586caf74ead3fbff0c20b37681b3c0ffa6cf85ba60d6b47f6dc73cf87eebaebae014d6e162c58b0b0bca0739b58782bb3ec4601322fe645433434d81a5ac7c4664d09ce8deb91d8acefdfa35c0ade2e86bc86cad737d7eff7f746025d993f7f7ee3df3177583bd2d9d9592c5dba7440939bfcbef2822e6d76e13566d9194a645ecc8b866868b035d40f2325dd2538eb93d8f4758a9c722978bba0a1060d95b1a47edd5fdb3faf695be886dfdd346df17ebfe883412f6e76d3452b99d7030f3c50cc9c39b3c7cffff5af7f554393cb962debd3f7de7df7ddd57558bc78f1a0ff1f69a8f7b170e1c20dfafde9693ae79c737afc7cc18205c55ffffad795da8b79d77f57b44a43bd8bcf7ce633751232793dadffd1dd8cd8dcb8e2fdf561b272d9fbc8a261e592b7f7579d9ffb9d86ebdacefdf39fff5c454f9fe73ba64f9fde277d66a1fa2f7ef18b2233819aa10dd48a1aaa63a0dbe06d99dcecb8e38ecb077ae466c992250b5a64e4e6aa9123476eb3f5d65b6f3458c3ce071e7860f19ad7bca678ed6b5fdb6d6cb1c516c5bdf7debbdacf5d7ffdf5c5139ef084e2cc33cfecf67b2fbef8e262a38d36aa8ef7dd77dfe2e52f7f79f18a57bc62658c18316265e57bfbedb757869588e1a52174f3cd37af7c2f86baa12be916ee9919740d95e5ad78fef39f5ffcf4a73fad5e6fb3cd36c5965b6eb9323efce10faf72fe31c71c53bcfef5af5fe5bdb973e716bbefbefb4aaddd78e38dc5b7bef5ad6a6162e2431ffa50b1f1c61b17c71e7beccaf7f2f93ffef18feafc6c3ff9e217bfb83a7ee31bdf587cfffbdfaf8e9ff5ac67157ffce31ff5eef54143c3d6be3bdafa8cdcf4e5419fad3c7233e8e532f5eea69b6e5a9c74d249d5eb5d76d9659524f6b7bffd6df5fe77bffbdd62f8f0e1c5c73ef6b1e2031ff840b5d351cae71bdef08695913a226552b91c5a1a6a8c4b2fbdb42ac3d1c0dacefde4273f597cf6b39fedf1f324b9f9aebffffdefc5d7bef6b5d5f4f6a94f7d6a95f3efbbefbee2e31fff78d5a6d875d75d8bbdf7debbc82ebc679f7d360df55243e5f1622337fd4829c007077acdcd9d77de796393afb9e9da9818b439b5bbedb65bf1def7beb7f8f5af7f5d45cce3c8238fac8e5361c580eebffffe95094b0ce6139ff84415cf7dee73abc66b8ef3fef1c71f5f9d97c424c78f7bdce3aa9f193f7e7cf1ae77bdab38e49043aac8b91ffce007ab73b3935e0f8da055a2fe6ee6d57c1a4ae3298da8544079fdaa57bdaa7af2f16f7ef39bea7e6fb6d966ab9c9f06d0ab5ffdea95c9ed51471d553ced694f2bb6da6aabe26f7ffb5bf5feb9e79e5be967d4a8515594ffd72a695a318fb88ac73ffef155e53667ce9c4aabf91baebbeebaea7b7ef4a31f55df93a4ebbcf3ceab46047bd3e34843ab24128b37d09a9b7549705a65cd4dd394cbdffffef7c5d39ffef46ac424af274d9a541c76d861c557bef295aa6ca58198f72fb9e49262cf3df72c9ef39ce754e526debccf3efb147bedb5575596ce3aebaceabedd74d34dcae510d35063fce10f7fa874507b7463648646ee77ee6746e5a2896823c789bc5f8fb824f19d366d5af55da9ff93742749ce4c90c417bff8c5e2fdef7fffcaef4e129c4ed6473ffad155d2f3939ffca4183d7a74d556c9b35a2437bdd3903537fdccc1071f7cf340ef9676ce39e7fcb149774bbb3c4f88eda1313128e61563f9c8473e525c74d145553cf6b18fad12891c6708b831b9c9284d0c65ca9429abc5e69b6f5e8d02e5bcef7ce73b5585f6a8473daa78d9cb5e562537a9d852a926f2fbeae4260de2dafc76d861872a194a8377ead4a955e59be37c5e379c9957736928d34e92bcfcfce73f2ff6d8638faaf193c4259a486328efbfe4252f592db9494f70a62d6eb2c926c52b5ff9cae257bffad52ae7cc9e3dbbd869a79d8a5b6eb9a5f8e73fff594d7d8916f330e0bccefba904afb9e69a4a774f7ef293abcaef3def794fa5b56838bd536944e59a24a14e1245436bd7d07a8c94f4b4dd7377bba5f525c16985ddd29aaa5c46fb6f7ef39b8baf7ffdeb95c727d1a94759d3f04cf9aba788254e3ffdf46a743dc76968befded6f2fdefad6b756e5e7739ffb5c75cf52e694cba1d53ee8eadbb9d7dd4d43cc88fbda3a28dff18e7754e7fee0073f285ef8c21756ef25a1ce2c8e3163c6543338d231f694a73ca5d87ffffdab736fbdf5d6aa0d91df9d76e4f39ef7bcaa33f699cf7ce61aa743d2d0ea1ab25b5a3f3369d2a41306fa3937871e7ae8594df69c9b35f5900eaa79a5224aaf799293440c27c693e317bde845ab24379932965eb9eebe27865327378988bb3e77ecd8b1d514b63464134f7ad2938af25aac32ad29e7bce0052f28e6cd9b57bd97e1ea185886a0076bfd4d939957536a283dbc496233d530f735f72dc94d7a7773cfa3813ab949a326bdb4f5c84d7afbf2f7e6fee73891cfebfb9defce77a442cb34966831a385799da930f9bcfe3b32c5e6a52f7d69759c4654cead1b67f95d991273cf3df7d0502f34b48e23266b7b8e4d6f1ff4d9952d8735f7736e9ab25c66aa59ae717abce3efe96d4f3d9ca426befec4273eb1f8f4a73f5d252519b9c988cb339ef18ce2b8e38eab929b8cda649ae8dbdef6b6aaa3a94e6e94cba1d53e688c745ee5fe65da61775320a3b13ae9cd3d4f7b20c78968e97def7bdf2aeb77f25d19c599306142a5b9f3cf3fbff8def7be57fcf8c73f2eaebaeaaa95ebb432c2f7cd6f7eb378f7bbdf5d25cbdb6ebb6da5df4c9b4f12f4bbdffdae1a89a0a1356bc8736efa99830e3ae86565a178e4e1871f1eb0cdd2468f1efdcf567c2aea609857e657a767af7e9d46e9ac59b3aae39855637273da69a7559f7ffbdbdf5e2dd2bbd298dc642a437aec5291656ad2e1871fbe4a940968353a14334c059a06700c3015707efec4134fac2ad82459e951ac17a50e55f36a560d65fe75a6092489f9d9cf7e56bd9746cb29a79cb2727a599ddc64ba636fa620a6b739e77ff5ab5fad46f9b230353dcff92cf3bef33a237ff9bcfe3b32b73f8db3682d8da84c87c93a9e34a2def9ce770eda22d456d4d03a8c9cf4f6019d7d4d70eaa971dbb6fa051ce872995ef0f49027d9886fa7d328bde2291fe964488333094d1a93175c704195e8640a5b1a9159779391964c254e47d78e3beeb8725a9a7239b4da078dc9cbeb5ef7ba2a9254ace9dcccb2c80c8fc6355599a6fcd18f7e749511ffe826d3cf3272138da4932c754712f0cc20a93710489b23494dce8b96930425a149c339c97512edbc4f436ba6a3a363d3f29a3d94eb561e57b3623604b96f63c68c59de90dc6c36ac5d29857d4b7a8806684ada2fcb8b79890ab077915e90240ff57ce92424a9b8729c29038dc94d1ab175cf49d7c828cb01071cb072c1787eee318f794c352d29eb7ab2a9402acb4c41ca717a6bf2ff4d41c871a6a5a532ce9074de8fd9650a4386bbd3d81d8cd11b15e0dae3eaabafae466d52e92549cefa9b5450d9023e3d7c1979ab939b4c2f4c23eb88238ea87490e334aca2b933ce38a37a9d1eb868a16e4445076914659169ddeb9bd779bf6e4425694a651a6d665383eee6f69bbab0def43482d3dbc4a6af094efdfbb66d878b37189d0e29636f7ad39baa4ea72421f1f424317564d177fcb7ebb4b42424e979cd74b43434d37995b29c06a9723934939b6c0491fa3c232a4926e2d73d9d9b8424e734eea0997aa0de60205ac8774537197949fb20d3d232329329ed897a9427a3fa575e7965756e3db531c7498cf33ac799ae4643bd23cfbda9938eac57da10c43f1a129b4b86b5333bedb4d3887df6d9e7a10118bd59347af4e8abcb1b384605d8bbc8bcecccc1ce306522a6935d48729c24a431b949659504a5bbefc97a9ccb2fbfbc3a4e0f5f160cd6d3d2b2b0302696c5ac69086744260de1aedb44e77576ec490f4ed7dd529857736a28d34eb21b5212e124b719614b7293ca273d6da9a47a5a7353bf4ec596d75da7a7a491949ebd2c32cda850b49811c1bccef7d68da8fcce24c08dd35fba36a2f2733dedec47437d1ac1e93a456cc7617d7f8e4d7709ce0e7d1829e2ed6b89787192958ca48c1b37ae9a7a9651f189132756d7fb873ffc613575adee344a7293a965e9618fef27f9496294f7721c3fae1b91cae5d04a6ed2d9941192ccf2a87758cdfdcb7a98aee7a6832ad3cbb37eb6f1fdedb6dbae5aab556f1f9e246958c3b4b4d401497aa2958c0c656a5afdb3d75e7b6d756e667ca41d91e3830e3aa8ea244b5b211d6cda07bd4e6eb6ad138f8cdef4f7c602f9beb20dbebce121a26386b53be3c78f9f9d06ef8624eb7b9229f6714ef99035af98567a58b20b4a6fa6a5659d4c1293de7c77bde6263ffbd4a73eb5da7a34a6f896b7bca5aa54d313d898dca487268ddecc0f4f633923385968dab8e89579356f05989ee24c7139f5d4537b9c96d65d7273c30d37543acbda802c62beedb6db569eb7df7efb550b4ed3404b525d4f63c8eb673ffbd9d5e73dcded8f76a2ebba1195465dd697d150bf24388d9b0c34262a7d7940674f3fd774db3db772b94c0334a336f533c9d298cc35cf34a3fa9c4cf1c9da974c614b2f7aeae98cb87fe10b5fa8decf719298ba31ab5c0e1d0da58d90fb960d82eebcf3ce956b2733953c53d1b3c6b23e37bba4a6532bf5777d6e1d49949390f4b4e626c94d4611934465ed663d7adf98dca4fd9073731c8de5fb24377da76c235f50271fe9cce8af6da1b35e769f7df679b871d4a655dbe27dbda09b8d1d3b76497af53704b367cf3ea3fc1d779599e2162ac0de45a68f25b9699cf79cb9ae590b93866a465a32ad20469461e88cea64b79cb57d6f0c2f9556929bf4d6a4d19a679d6411602acb7c7776d3ca76a131b72c544c0f618caddeda31bd8c99039ec428bd3e99d3cdbc9a4f434962ea45c5999a96298db96fb9df199dcb36e1b987997258ff4c7a813355258d9ee82d53d3320f3f535c726edd939be908d93d2fc7d94a36bfa39e46138de6f31c67dd56e6f4a7b28db63245325acdef4f2f621a4f993693d1481aea17ba4e517bd48a9197be6eefdcf5e7d6f7f93aca65c334a2242b29334924b29e31233219c5c97b39cec2ff8cd8c473e3d7d9be359bc66447cbf490e7d93759f398e3bc97e946cae5d0d1507e5f3689c8bdca7d6efc2c5a4907553a23a3a1e826f57bee759d6ca4cd901dd292f4462375276ada07a9fff35ed67e2561c994b47c5f92a0cc0248dd907aa11e01ccb99961928d07721c6de6758ed7f4b0501aeabe2d5ec63d751292f5cfeb9be024b1293da4719dcde2566e8bf799323bef183f7efc7f3317b33f99376fdea5a3478fbebdd587c006dabc92302481695c34982969e9854f4f4a1aa8f5e2ee5466c9f27bfb7c85ccf74ecf5f863eb32d68be3b3d803befbc73358a1373ca7350f2bbd2db93f5357505d9b8bd647a0cf377743557e6d51c1a4a03266bb1929ce475765b4ac3293d6b75e475cea97f26669a864dee7fe354b424d1791647571dd46b7b329fbf6b8f60ddf39cca30bf270ba2b368390baaeb5da39260a55157af19a0a10d92e0f4c78850d3ee8ad66ae532be9ac6655d2efff4a73f55cfb2c9f6fa756414bede22ba8e8cdae4fdc6f3ea73b3c98b723974349491baacd3ea6927b2d4cfa9cf33da9ec6717cbdf181df99a276f0c107574974e3f368529727e9c92322ea698e796e4df4593ff728a332f5287ed66b2769caae7d5d23c9779d4cd350ef193972e4f6f5e602f508ceba4e51cbcf7519b1191ad3d1ba523676c79686b6b8bf4670326293c4a6bc59fbab00850a908668a8e5129ca67c40a772a95cd29068576f2f9390cec604271dd14942d3b9d8db5dd1b27940e31a9b443bb4c5d72b6b1c3366ccfda79f7efa03ebb1c9c0a2638f3df6a7998a969ba40214cc8b866868c059dfa9646d3b154db9542e6988869abd2d5ec6a2c6e424494ea68ae6419f1995a9a7ac65442dd311b39e3ad30a77dc71c7471a7f2e53d1daa52dbebe59e36665c677def8f1e3175c7df5d54bfaf21c9b73cf3df7e43239ba2a0b96da695e1ff3625e3444432d9ce0f475e4a52d370f502e954b1aa2a1566a8b376e11bd8e71c9905a63d3cb0bbb5d929ccecece85471f7df4f5975e7ae9ed65767857d66884254b962cb8f3ce3b6f9c3973e699871d76d8d96556392717321962bbedc4c0bc98170dd1508bd2d7a9656d3f154db9542e6988865aa92dbe22c979a82f494d3bb6c5fb953c3db5bcb07b9717ead4326e2d63e98a8b977fe79631ad8c7ddbf969a7cc8b79d1100d0d810467cb32160f6b9307742a97ca250dd190b638c0bc98170dd1507b327c45e2327c0d9fdf3394121be552b9a4211a0224378279d1100db5df08ce909a8aa65c2a9734444380e48679312f1aa2a1f64c70866c62a35c2a9734444380e446302f1aa2a1f64970260fe5c446b9542e69888600c98d605e344443edc1f02c461d3604b67b562e954b1aa22100cc8b79d1100db5392b921bdeae3c2897344443800a50302f1aa221c90d6f17bc9d86680850010a15a0a021c98d722978bba02180790915a050014a6e944be59286046f079817f3a221a10294dc2897ca250dd110a002641acc8b86684872c3db857249433404a800850a9086684872a35c0ade2e6808605e420528684872a35c2a973424783bc0bc98170d0915a0e446b9542e69888600302fe645433424b9e1ed42b9a4211a0254808279d1100d496e944bc1db050d01cc4ba800050d496e944be59286046f079817f3a221a10294dc2897ca250dd11000e6c5bc6888862437bc5d2897344443800a50302f1aa221c98d722978bba02180790915a0a021c98d72a95cd290e0edc00070de79e7318de689a5a5793d444362a8694872a35c2a973424783bd02f5c7cf1c5772d5cb890713441cc9f3fff94d2bc6ea02131d43424b9512e954b1a12bc1de817ce3ffffc4f5d78e185f7dd7df7dd4b18c8e0f5c8c4b866ce9c797b19dbd1d0a0551e3424b9e1ed42b9a4211a025a9db2c06c3363c68cab32e499399dad16279f7c7291c64c2bfeed2b22d7fd865636ae56d7d095575e594c9932a5983a752a0d496e78bb502e698886000c6a43665a1a335b6fbdf546ae06fa4a51141bdf7befbd8b4a8a71e3c69de98a486e00681f00c0a03072e4c8ad4ae37a28e6356ad4a8e1ae08facadcb9737f51ac60d6ac59f34b1d6debaa486e00681f00c06098d7d418d78ab8ca15415f78e08107def0c8238f2c2f1a983871e2dccecece4d5c1dc90d00ed030018c806cc9675af4c1da5996de3caa0b72c58b0604ed185fbeebb6f414747c7775c1dc90d00ed03001848f39ad6685c75ef8cb9b5e80d77dc71c7c1450f4c9d3a75412a475749720340fb000006c2b856eb95a9c39a09ac8d327f79eeb265cbfed75372b37cf9f207274c98305b4528b901a07d000003615e6777675c2be27257086b62debc7997176b61ce9c3973cb8a706f574b720340fb000036a471f5d82b636e2d7ac365975db6b6dca658ba74e985d1526767e7c6ae98e40680f601006c28f39ab626e3b2330ad6c621871cb2fb9aa6a525b739e080037e63e446720340fb00003466d0f49c72ca2937f694d9dc72cb2d3fccf4056b6ef801007e0000cc0b4dcf881123362f9398a5dd6c26705d4747c775764be30700f80100302fb40c93264d3aae4c661e694c6e4e38e18413478e1c39d9d5e10700f80100302fb40c9976367dfaf4850d0ff0fc75a9a59b3b3b3b377175f801007e0000cc0b2dc51e7becf17f8b162d5a5646316edcb8999e83c00f00f00300605e68598e3ffef8b3a74c99922d42a7ba1afc00003f0000e6859625d3d0a2a16c32e06af00300fc000098176808ee25007e0000cc0b3404f712003f0000e6051a827b09801f00605e000db99700f80100302fd010dc4b00fc000098176808ee25007e0000cc0b3404f712003f00c0bc001a722f01f00300605ea021b89700f80100302fd010dc4b00fc000098176808ee25007e0080790134e45e02e00700c0bc4043702f01f00300605ea021b89700f80100302fd010dc4b00fc0000f30268c8bd04007e0080798186e05e02e00700c0bc4043702f01f00300605ea021b89700f80100e6c5bc4043702f01f00300cc0ba021f712003f0000e6051a827b09801f0000f3020dc1bd04c00f0080798186e05e02e0070098174043ee25007e0000cc0b3404f712003f0000e6051a827b09801f0000f3020dc1bd04c00f00302f8086dc4b00fc000098176808ee25007e0000cc0b3404f712003f0000e6051a827b09801f00605e000db99700f80100302fd010dc4b00fc000006c9bc8458df5092346600f0030000009d1d42081d570000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d8fc3f33aa47abeca30e3c0000000049454e44ae426082, '1'); -INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('3', '1', 'source-extra', null, '', null); +INSERT INTO `ACT_GE_BYTEARRAY` VALUES ('12510', '1', '请教流程.bpmn20.xml', '12509', 0x3c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e0a3c646566696e6974696f6e7320786d6c6e733d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f4d4f44454c2220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e63652220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a61637469766974693d22687474703a2f2f61637469766974692e6f72672f62706d6e2220786d6c6e733a62706d6e64693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f44492220786d6c6e733a6f6d6764633d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44432220786d6c6e733a6f6d6764693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44492220747970654c616e67756167653d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222065787072657373696f6e4c616e67756167653d22687474703a2f2f7777772e77332e6f72672f313939392f585061746822207461726765744e616d6573706163653d22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566223e0a20203c70726f636573732069643d224c6561766542696c6c22206e616d653d224c6561766542696c6c2220697345786563757461626c653d2274727565223e0a202020203c73746172744576656e742069643d227369642d33414335453536332d453645332d343737372d423434362d30343736443838344331314422206e616d653d22e68f90e4baa4222f3e0a202020203c757365725461736b2069643d227369642d38433845373242432d353330322d343041372d413031372d30344542394641393136444122206e616d653d22e794a8e688b7e68f90e4baa4223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522206e616d653d22e7bb84e995bfe5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c656e644576656e742069643d227369642d30353539313044422d314445362d344243342d423532372d32334641373139444532363522206e616d653d22e7bb93e69d9f222f3e0a202020203c73657175656e6365466c6f772069643d227369642d32424346433631362d374438412d343134312d414633462d3841433138454131303044462220736f757263655265663d227369642d33414335453536332d453645332d343737372d423434362d30343736443838344331314422207461726765745265663d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222f3e0a202020203c73657175656e6365466c6f772069643d227369642d45464334383546312d414543392d343536392d423430312d44313644453538463637333722206e616d653d22e5aea1e689b92220736f757263655265663d227369642d38433845373242432d353330322d343041372d413031372d30344542394641393136444122207461726765745265663d227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222f3e0a202020203c73657175656e6365466c6f772069643d227369642d38344242323430352d384530322d344442392d384632392d45394242423033324330443922206e616d653d22e9a9b3e59b9e2220736f757263655265663d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522207461726765745265663d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d36393830363236352d423636302d344239322d423744392d38444532413535433530373922206e616d653d22e5aea1e689b92220736f757263655265663d227369642d33354144463030362d353743302d343745302d394235422d41463432344530413745344522207461726765745265663d227369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635222f3e0a20203c2f70726f636573733e0a20203c62706d6e64693a42504d4e4469616772616d2069643d2242504d4e4469616772616d5f4c6561766542696c6c223e0a202020203c62706d6e64693a42504d4e506c616e652062706d6e456c656d656e743d224c6561766542696c6c222069643d2242504d4e506c616e655f4c6561766542696c6c223e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144222069643d2242504d4e53686170655f7369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2233302e30222077696474683d2233302e302220783d223134322e352220793d223134322e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222069643d2242504d4e53686170655f7369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223231372e352220793d223131372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222069643d2242504d4e53686170655f7369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223336322e352220793d223131362e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635222069643d2242504d4e53686170655f7369642d30353539313044422d314445362d344243342d423532372d323346413731394445323635223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2232382e30222077696474683d2232382e302220783d223533332e383931363934363530313935372220793d223134322e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d36393830363236352d423636302d344239322d423744392d384445324135354335303739222069643d2242504d4e456467655f7369642d36393830363236352d423636302d344239322d423744392d384445324135354335303739223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223436322e352220793d223135362e3939393939393939393939393937222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223533332e383931363934363530313935372220793d223135362e3939393939393939393939393937222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222069643d2242504d4e456467655f7369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137322e352220793d223135372e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223231372e352220793d223135372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222069643d2242504d4e456467655f7369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331372e352220793d223135372e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223336322e352220793d223135372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222069643d2242504d4e456467655f7369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431322e352220793d223139362e3939393939393939393939393937222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431322e352220793d223234382e3532343239303531313436323134222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236372e352220793d223234382e3532343239303531313436323134222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236372e352220793d223139372e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a202020203c2f62706d6e64693a42504d4e506c616e653e0a20203c2f62706d6e64693a42504d4e4469616772616d3e0a3c2f646566696e6974696f6e733e, '0'), ('12511', '1', '请教流程.LeaveBill.png', '12509', 0x89504e470d0a1a0a0000000d494844520000023b000001020806000000184b16a3000015b44944415478daeddd0b90d565dd07f02e567677ba5a59515ad94d9bd272eaadacb7d2511b995e9945965814850c184161527c515e8c8a904ca4042f195a8a59ed241a88dc84b80c9a9262a8d08a5c5a6e020aba80c0f3fe7fffd9b31d161616d8cb39ebe733f38ce7ec397b16cff9edfebee7799effffbcea55000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af6029a5236a6a6aee5eb060c1aee9d3a7a7071e78c068e3316ddab4347bf6ec0dd9e8ae2201342a8daa8545fdcc993327ad5bb72e6ddfbedd68a7b17efdfaf4e0830f3e9fd5d339feb20168541a550b8aa0ac7e4aa68eb667017a89bf6c001a9546d5826246d0eb573a23aba197fd6503d0a834aa16144b715ebb92aaa1e42f1b8046a551b5430d6ddd5c9b6a1eba353d316d783ee2727ccdebae8600342a8daaec6b68cba6d569f1fd43d33fee1bbcc788afc56d5e7b610740a3d2a8caba86563e71cf5ef55318ab9e98e4b5177600342a8daabc6b68c9cc914dd650dce6b5177600342a8daaac6b68f103c39aaca1b8cd6b2fec0068541a951a32841d008d4aa32ad51a8a4ded4dd550dce6b5177600342a8daaac6b68e9dcb14dd650dce6b5177600342a8daaac6be8b9d58fa5c553afda7b6630fb5adce6b5177600342a8daaac6b28c6330fdfb6570dc5d7bcee6a0840a3d2a8cabf86b66d4b4be7ddb0f7cc60f6b5b8cd6b2fec0068541a55d9d6509c78f2e9b9d737b9141ab73939a5b003a0516954e557435910ae5d3a233d3e654893f55318719fb8aff02cec0068541a5559d4d08142b2f0ac8600342a8daaac6ba83921797fe1592d083b001a954655d23574a8f553186a41d801d0a834aa92ae21430d01685486b063a821008d4aa3524386b003a05169546ac8107600342a8d4a0da921e01569ead4a9ff3d6edcb8eaabafbebab67ffffe3baaaaaa7677edda357dfffbdf4f7dfbf67d79f8f0e1ebc68e1d7bdf8c19334e13760c8d4a0da9a18eafb2b2f2988a8a8a7e592fb83b1b4bb3b125fa4236eab2f14c765b75f6df41713fcf16256df4e8d183860e1dba69c0800169fcf8f169c1820569f5ead5a9aeae2e85f8efba75ebd2dffffef73461c28414f7bbe28a2b5e183972e47061c7d0a8d4901aea78ce3df7dcced978a03ed4a4668e99d9f774f7ec5152468d1a75c2e5975fbe7ad0a041bb23c8ecdcb93335d7a2458bd290214352f6bdebafb9e69a93851d43a352436aa8fc6581a55336261f44c0d9d798d3a54b97e33c9b9442d0b9aa4f9f3ebb264d9a745021a7b12953a6a4789c2cf08c10760c8d4a0da9a1f255515191e594aeeb8b834b656565fae94f7f9a66cc989156ac58915e78e185fc6fff8b2fbe98af00cc9d3b375d7bedb5f97687e2efebd6addb8b66796857e3c68dfbdf7efdfaed7efae9a7534b58be7c798ac71b3d7af41861c71076d4901a2acba0735616525e2e0e39bffbddeff22d0ccdb169d3a6fcfef17dc5a1270b3c177876697343870ebd240b26bb9a5bc0cd158f178f3b6cd8b0cb841d43d8f1daa9a1b29bd169083a975c72493e8b7328e2fb060f1edc38f098e1a1edf4eeddfbd80b2fbc70474bcde8ec6b86271e3ffb453951d831841d430d95befa3d3a0d4b57575d7555c352d5a18a25ae112346345ed23adeb34d9b183060c0d3b147a735c51e9efefdfb2f17760c61c75043a5affe88ab86199dc30d3ac581a7d10ccf1ccf36ad2e0b2095975e7ae9ce1d3b76a4d69615f8ceece75d24ec18c28ea1864a3ae8742edea373a84b57fb5bd22adec363398b569725f6657178795b78ecb1c7d2c5175fbc42d831841d430d95c7ac4e6c2e6e0d77de79a7d91dda469cd9f2a28b2eda7e3887981fac380373ac0597da2f7636fe4ba3d2a8d4901a7a250499fdd56af485c2a6e4987d79eeb9e75aa517c4515a8d0e4befa42bd32afaf6ed3be4a69b6eda95da50bc4bc802d6ff95d2f3503495fa404545c5291a9546a586d4504775a05aadff0888fc3e3ffff9cf5bb51fc479788ac2ce205d995671f1c517cf8f8f80684bb164d6bf7fff874bf197bf684c6efcce47a3d2a8d4901aea4861a7a95aadffacabfcb659b366b56a3f88130f16fd3b26e9cab48af3cf3f7f6d6d6d6d9b869d38ef4e5555d5c612ffe56f78e753f823a05169546a480d75d0b0b347add67fa867feb596de98dc589c69b9e8dfb05257a65574efde7d7be1433ddb4afcbc6eddbabd5c0ebffcc5ef7c342a8daa5c6b28de60b4e6e34743bcfffefb9bbc7dcd9a35e9d1471fcd2f6fd8b0213f84b9f0efdaba75ab1a2abd5add59b8dc52879befef30f4a29f5ba72bd36a45df1e0ef383e4da659453d88906326ddab4266f8f8613d3c7dbb66d3ba8c75dbb766dfe3c6cd9b2a524c28e1a3af078e9a597d2fbdffffe74ebadb7e6d7cf3aebac74d24927358cef7ce73b7bdc7fe4c891e984134ed8e36b2b57ae4c7dfbf64d1b376eccaf3ff5d453e917bff845bedf22c6b7bffded74e49147a6d1a347377c2d6e7ff2c927f3fbc751371ffef087f3cb9ffbdce7d2af7ffdebfcf2bbdffdeef4d7bffe550d95f068eb7ea02bd35a333bdbda6966674799bcd379283e17e6d4534f3da23d1ad515575c913efde94fa7cf7ce633fb1cc71f7f7c43032a1e4f3cf1447ae31bdf98eebdf7de7d3eeeecd9b3d311471c915f1e346850fad8c73e963efef18f378c2e5dbae4b7c55118cf3efb6c8aa5ce187162c8ece94a4b972e6df85abcab8ffb99d929cd1a9a3061423ae69863d2e6cd9bf3eb9ffce427f313c4dd75d75de9ca2baf4c9d3a75dae3fe11543ef5a94f35bcfef1418f6f7ffbdbd329a79c921e7ffcf1fceb53a74e4daf7ffdeb63d9231fd9ff5f1ea2ea9742f2f18637bc214d9e3c39d5d4d4e42128fe0d8b172fce1fe7c61b6fcc1f2742d8f4e9d3f3101deff0cdec9446ad66ffdd6266870ee5bcf3ceab6d8f3d3b3d7af4d850e2bffc0d0daa709ff668543ffce10fd3d7bef6b574c71d77e42302ca8f7ffce3fc723490081ecf3fff7c438039f3cc33d377bffbdd7c1c7df4d1f93bf7b81c5f1f3f7e7c7ebf082a71399a557c4f9f3e7dd257bef295bcf1c588fb7eeb5bdfcaef7bf3cd37e73fe340a3f0d8c24e69d5502c1f4598b9edb6dbe2f3e9f290124166cc9831293e1a26befe918f7c64afb013013b66fe8e3aeaa8f4894f7c22fdfef7bfdfe33e71beac5ebd7aa565cb96a57ffdeb5ff91256d4411c7c10d7e3eb175e78615ab468511ed8dff296b7a4d7bce635e9ab5ffd6a1e76a25ea28946d889e7246a2e4295b0531ab56acf0e1d4e5555d5a4f9f3e7ef6ccbb0137f10b39f3bb5447ff9e7c799438b1b547b869d1ffce007e9b4d34e4b0f3ef8603e5ef7bad7e58d222edf7efbed7b849d98c58930148dacf138eeb8e3f2a613f7bbeebaebf277d9af7ef5abd3b1c71e9b879d68403ffad18ff2113faf1076623620c269bcf3ce026a1e8ee2dd7e7575751a3060407e396e2fcc1a083ba55543975e7a69fe3ac76cdd9bdffce6f4cf7ffe330f3b117463e62f665f0a6127c247bccb2eccecc41267fc7b63192c2ec788db0b4b98f1d8f118ef7bdffbf2e5a8a8c508d8713d96b4e2f6c2bfe30f7ff843fae8473f9a5f8e5a8bfb9e7cf2c979d8899f154b5bebd7af17764aa4561d8d458713e753183b76ec736d19767ef39bdf6c2ab5f329eceb5d7829849d78771c4b081156624493f8e0073f985ffed0873eb447d88925a6685efb7a9c981d2a849d18f107a670dff3cf3f3f6f5af12e3e4634c5ec79d863cf47dce7031ff8405ab56a55feb5689aef7ad7bbe27c49edb67fa704c34ec9d550ecadc97edff2d7fab7bffd6dfeb5081713274e6c588e2a849d98316cce2cde4f7ef293fcfe975f7e791e8c1f7ef8e1f4e73fff39bfed6f7ffb5b7e3dc272dc5ef877c49e9d77bef39df9cc61849d98958c7d401176befce52fe7cba16aa8746ad57976e870e24c99bd7af5dad4966750ce1af873e578a6ccf6083b7176d198dd295c8f77e4f3e6cdcb2fc7fe89e2b0f3a73ffd29bffd97bffce55e2366708ac3ce7df7dd972f2bc4bbeb6840c3870fdf63c4a71bc7ec512c477cf18b5fcc1b626c508d65adf8fe5b6eb9253ef6230f5db1dfa770a48d46555a35f4c8238fe4b33a9ffdec67f33a8afd3b11767af6ec996f208eb05a083b31431761f6eaabafce97aee2f2cc9933f33af9cb5ffe925f8f258d98e52b849d0830115e4e3cf1c486d99ab81e5f2f849d085131e3184b59b1497a5f7b761c8d557a7dc11994e970ba77ef3e73e1c285cfb745d059b468d196ece72d28c7e7a93dc24ee7ce9df33051d8f4198d27de4dc7e5d8e7501c76e21d7c3494f89ec6236661860c19d270b44d7cdf6b5ffbda7ccf46ec0b8a4dcab16f279a5c5c1e387060de08e28f515c8e0677c30d37a4b7bef5adf9d7a399c5725a6c8e8e77faed31bb23ec1c78c4f2511c0515b512af7f84d2083b319b129bd0bffef5af37b967a7703dfb7dcdaf375e668a30f38d6f7c233fea2f668da2a62244c7f578dc42d8899f193552bc8cd538ecc4f735b5995e0db50f9f8d45472ceace7dfaf4a96d8bd99dacb1ae2ad74fb76d8fb0f3f9cf7f3e3fca25a692634440e9dfbf7f7e39424971d88977d01158f6f538d148e6cf9f9f5f8e8da993264d6a58c68a23692ebbecb2346cd8b07c1620666c6216a0f161e971fd8c33cec8f7809c7df6d9ceb35326355458cefad5af7e95eebefbee2697b1f61576962c5992cf20c6517f5ffad297d2f2e5cb1bee3778f0e0f4def7be375fb28aba8b5a8cf013d7dff39ef7e4b737b567273623df73cf3d0d6167c48811f992ad1a2aadbee053cfe988853d2bfb03b8bc35834e7575f5caece7ccdddf9e068d6acf73dac45e9a680acd59c68a7d3611549af3d8853d3bf1bd6f7bdbdbd2f7bef7bd7c99eb0b5ff8421a3b766cbec4511c7662df4e34c1d83f14330531c3130dab70723861a7346b28424d61f3702c65c5ace03bdef18efcdc3a1168e348bd78fd63d6aef03d1164638630c2496c888fa5acd85f134b5571dfc20cccc2850bf30deb71390e298f9f113381713d9640e3f6b81c4ba1b1541a4ba911b8629631427bfcfcd80716212796bf22c0aba1d29285909985303270e0c05d2d75187a6c748f305c3cab53ae7d81f22bea4e59ca5effe4934f6e698da0f3cc33cfbc188f9f859de3cbf5396aeb4615cb4d11768a376f46f38946124d236662622f449c4030f65444038943820ff4b8b1b938de4947d889c387e31d7b34bf37bde94df95131f1d87104579c23254e0a17872cc75136d134633abb70487a34cd687ee79c734ebe3155a32abd1a8aa011cb9b1156e2faf5d75f9fcf0846a3298cb81ef7297c4fecd78a0012e7e1295eba8a3a1b356a5443a069bc37289636fffdef7fef75db1ffff8c73c38c5cfb9e69a6bf2cdc971eea6b82d827504aedebd7be787c9aba1d2eb0bd9585f08255968dd7db88127824efcfd290a3a5bcab92f50862a2a2aba565555ad59bb76edb6960c3af178d9e3ae2df769cab66e54112022d014aec7c91863092b9624621f450494c29131f10e3b4e14d79cc78d2367626fce79e79d974f23c7b950e2b163ffce05175c90cff29c7efae979b38b9f15fb3b627f4ee32617fb7562af46fc3be29dbd4655bacb5886b073387da1b059b97e8667f7a12e69c5f7359ad1b17c45bb25f99e3d7af4a85db264c98696083a3535351be2f1b25f98cbcafdb9d1a8342a35a4865ea97da138f074ebd66d77ccf2c61ba0e61e75159b918bf7e8c4e8087d81324ff259dade3061c284470f67d3f2c48913ff91fd52ac8d5f948ef0bc68541a951a5243afe4be908d4dc56125c24becb58a130fc6ac4d61892b96aae2ccc8b1373096c4e354078dced8bca5a3f405ca3fc9778a430fabaaaa96cd9b376ff1c1849c850b173ed5ab57afc5b1e9ac23adc56a541a951a5243fac27f0e493fc431c71e1d4ab1b8cf89e2eedebdfbea61c386cd9b3973e623ab327575755beb3fd4736b6d6dedca2c10fde3673ffbd99c1e3d7aac88628ed4ded176d76b541a951a5243fca72f142f6d3527e474c4be40071367d4cc8a7b40fd67a63c139f4e5bf894daf8f0b6f84c9338d577473e03a646a551a9213584be001d9a46a551a921350420ec181a951a524300c28e21ec186a0840a332841d430d0168541a951a32841d008d4aa3524386b003a05169546a480d01083b1a9546a586d41080b06368546a480d01083b86b063a821008dca10760c3504a05169546ac8107600342a8d4a0d19c20e8046a551a921350420ec68541a951a524300c28ea151a921350420ec18c28ea18600342a43d831d4108046a551a92143d801d0a8342a3564083b001a9546d5faa64f9feeb52b9d5197d5d0cbfeb20168541a550b9a3d7b76edba75ebbc7e253056af5e3d31aba125feb20168541a550b9a3163c6d9b366cddabc76edda97bc8eed1794a37ea64d9bf66c36cef1970d40a3d2a85a58f6ef3e2b0b6a0fc5cc542cc595e3a8aeae4ee5fa6faf7fde97083a001db451dd79e79da96bd7ae1a15872c0bfbff3366cc98a8a34e9e0d004a4ed6a02645d839f5d4538ff06c70b0524a476edcb8715326f5eeddfb5ecf080025a5a2a2e2942ce8bc1c61e7dc73cf3ddd33c2c15ab972e5eda9debc79f3566775d4d9b3024029859dea083af5e321cf080763ebd6ad27eedab56b772a3262c488953d7bf63ccab30340bbcbc2cd4985599dc2c8c2cf599e199a6bcd9a3535a991cd9b37afa9acacbcceb3034029849d49c541a730bb63ef0ecdb162c58aa1a909d5d5d56b224c7b960068cfa0b3d7ac4e61d873c1816479e6e86ddbb6ed682aececdebd7bfbc081031f139c0168cfb033795f41a77eccf70cb13fab56ad9a9f0ea0a6a66665169c0778b600688fa0d3e4ac8ebd3b34c7dcb9730f9475525d5dddaca8a59e3d7b1ee91903a0adc3cea4fd051d47667120575e7965dffd2d6345d6193264c85d66760028a500943c0b1c8c8913273ed554d259b66cd9b8580eb56707006187b2d5a54b97e3b25053b78fcdc98b2b2b2b173b1a0b006187b2376ad4a8ebb370b3ab38ecdc7cf3cdb75454545cebd90140d8a1ecc532d5942953d6159d50f08eac96963a833200c20e1d46bf7efdbeb969d3a66df51f043acd799a001076e870c68f1f3f79cc983171ca826acf0600c20e1d4e2c5b450dc5a665cf0600c20e6a0800342ad410006854a82100d0a8504300a051a18600d0a8400d01a051a1860040a3420d018046851a02008d0a3504001a156a0800342ad410001a15a82100342ad410006854a82100d0a8504300a051a1860040a3420d01a0516954a82100342a5043006854a82100d0a8504300a051a1860040a3420d018046851a0240a3d2a85043006854a08600d0a8504300a051a1860040a3420d018046851a02008d0a35048046a551a18600d0a8400d0150b68dca300e77f84d0200000000000000000000000000000000000000a0d9fe1fde31e90f44aa0a800000000049454e44ae426082, '1'), ('2', '11', 'source', null, 0x7b227265736f757263654964223a2231222c2270726f70657274696573223a7b2270726f636573735f6964223a224c6561766542696c6c222c226e616d65223a224c6561766542696c6c222c22646f63756d656e746174696f6e223a22222c2270726f636573735f617574686f72223a226d6164652062792070696778222c2270726f636573735f76657273696f6e223a22222c2270726f636573735f6e616d657370616365223a22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566222c22657865637574696f6e6c697374656e657273223a22222c226576656e746c697374656e657273223a22222c227369676e616c646566696e6974696f6e73223a22222c226d657373616765646566696e6974696f6e73223a22227d2c227374656e63696c223a7b226964223a2242504d4e4469616772616d227d2c226368696c64536861706573223a5b7b227265736f757263654964223a227369642d33414335453536332d453645332d343737372d423434362d303437364438383443313144222c2270726f70657274696573223a7b226f766572726964656964223a227374617274222c226e616d65223a22e5bc80e5a78b222c22646f63756d656e746174696f6e223a22222c22657865637574696f6e6c697374656e657273223a22222c22696e69746961746f72223a22222c22666f726d6b6579646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22227d2c227374656e63696c223a7b226964223a2253746172744e6f6e654576656e74227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a37352c2279223a3131352e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a34352c2279223a38352e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441222c2270726f70657274696573223a7b226f766572726964656964223a2275736572222c226e616d65223a22e794a8e688b7e68f90e4baa4222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a6e756c6c2c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3232302c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3132302c2279223a36302e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445222c2270726f70657274696573223a7b226f766572726964656964223a22706d222c226e616d65223a22e7bb84e995bfe5aea1e689b9222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a6e756c6c2c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439227d2c7b227265736f757263654964223a227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3336352c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3236352c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a6e756c6c2c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3131392e31353632352c2279223a3130302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a37352e3630393337352c2279223a3130302e30303030303030303030303030337d7d2c22646f636b657273223a5b7b2278223a31352c2279223a31357d2c7b2278223a35302c2279223a34307d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a6e756c6c2c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3236342e31353632352c2279223a3130302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3232302e38343337352c2279223a3130302e30303030303030303030303030337d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34307d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d33354144463030362d353743302d343745302d394235422d414634323445304137453445227d7d2c7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c2273657175656e6365666c6f776f72646572223a22227d2c227374656e63696c223a7b226964223a224578636c757369766547617465776179227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435227d2c7b227265736f757263654964223a227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3435302c2279223a3132302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3431302c2279223a38302e30303030303030303030303030337d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e7bb8fe79086e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a22222c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830227d2c7b227265736f757263654964223a227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3539352c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3439352c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e4babae58a9be68aa5e5a487222c22646f63756d656e746174696f6e223a22222c226173796e6368726f6e6f7573646566696e6974696f6e223a2266616c7365222c226578636c7573697665646566696e6974696f6e223a2266616c7365222c22657865637574696f6e6c697374656e657273223a22222c226d756c7469696e7374616e63655f74797065223a224e6f6e65222c226d756c7469696e7374616e63655f63617264696e616c697479223a22222c226d756c7469696e7374616e63655f636f6c6c656374696f6e223a22222c226d756c7469696e7374616e63655f7661726961626c65223a22222c226d756c7469696e7374616e63655f636f6e646974696f6e223a22222c226973666f72636f6d70656e736174696f6e223a2266616c7365222c22757365727461736b61737369676e6d656e74223a22222c22666f726d6b6579646566696e6974696f6e223a22222c2264756564617465646566696e6974696f6e223a22222c227072696f72697479646566696e6974696f6e223a22222c22666f726d70726f70657274696573223a22222c227461736b6c697374656e657273223a7b227461736b4c697374656e657273223a5b7b226576656e74223a22637265617465222c22696d706c656d656e746174696f6e223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c22636c6173734e616d65223a22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222c2265787072657373696f6e223a22222c2264656c656761746545787072657373696f6e223a22227d5d7d7d2c227374656e63696c223a7b226964223a22557365725461736b227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3734302c2279223a3134302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3634302c2279223a36307d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22657865637574696f6e6c697374656e657273223a22227d2c227374656e63696c223a7b226964223a22456e644e6f6e654576656e74227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3831332c2279223a3131347d2c2275707065724c656674223a7b2278223a3738352c2279223a38367d7d2c22646f636b657273223a5b5d7d2c7b227265736f757263654964223a227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3738342e3337352c2279223a3130307d2c2275707065724c656674223a7b2278223a3734302e3339303632352c2279223a3130307d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a31342c2279223a31342e3030303030303030303030303030327d5d2c22746172676574223a7b227265736f757263654964223a227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246227d7d2c7b227265736f757263654964223a227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b646179733c3d31307d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3639302c2279223a3139322e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3433302e352c2279223a3132302e30383539333735303030303030337d7d2c22646f636b657273223a5b7b2278223a32302e352c2279223a32302e357d2c7b2278223a3433302e352c2279223a3139322e30303030303030303030303030337d2c7b2278223a3639302c2279223a3139322e30303030303030303030303030337d2c7b2278223a35302c2279223a37392e30303030303030303030303030367d5d2c22746172676574223a7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d7d2c7b227265736f757263654964223a227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b646179733e31307d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3439342e38303037393037383433383831342c2279223a3130302e34313336303139373934303738347d2c2275707065724c656674223a7b2278223a3435302e32383531343637313536313138362c2279223a3130302e32313932313035323035393232317d7d2c22646f636b657273223a5b7b2278223a32302e352c2279223a32302e357d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743227d7d2c7b227265736f757263654964223a227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e9a9b3e59b9e222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e9a9b3e59b9e27297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3534352c2279223a36302e30303030303030303030303030337d2c2275707065724c656674223a7b2278223a3137302c2279223a32397d7d2c22646f636b657273223a5b7b2278223a35302c2279223a317d2c7b2278223a3534352c2279223a32397d2c7b2278223a3137302c2279223a32397d2c7b2278223a35302c2279223a317d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e9a9b3e59b9e222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e9a9b3e59b9e27297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365222c2273686f776469616d6f6e646d61726b6572223a66616c73657d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3331352c2279223a3139312e35323432393035313134363231377d2c2275707065724c656674223a7b2278223a3137302c2279223a3134302e333236383433353739313433397d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a3331352c2279223a3139312e35323432393035313134363231377d2c7b2278223a3137302c2279223a3139312e35323432393035313134363231377d2c7b2278223a35302c2279223a37397d5d2c22746172676574223a7b227265736f757263654964223a227369642d38433845373242432d353330322d343041372d413031372d303445423946413931364441227d7d2c7b227265736f757263654964223a227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e5aea1e689b927297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3430392e36343834343638373030303735352c2279223a3130302e34303937333335333632333338337d2c2275707065724c656674223a7b2278223a3336352e36323838393638373939393234352c2279223a3130302e32313931373237313337363632337d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a32302e352c2279223a32302e357d5d2c22746172676574223a7b227265736f757263654964223a227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030227d7d2c7b227265736f757263654964223a227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830222c2270726f70657274696573223a7b226f766572726964656964223a22222c226e616d65223a22e5aea1e689b9222c22646f63756d656e746174696f6e223a22222c22636f6e646974696f6e73657175656e6365666c6f77223a22247b666c61672e657175616c732827e5aea1e689b927297d222c22657865637574696f6e6c697374656e657273223a22222c2264656661756c74666c6f77223a2266616c7365227d2c227374656e63696c223a7b226964223a2253657175656e6365466c6f77227d2c226368696c64536861706573223a5b5d2c226f7574676f696e67223a5b7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a3633392e31353632352c2279223a3130302e30303030303030303030303030317d2c2275707065724c656674223a7b2278223a3539352e38343337352c2279223a3130302e30303030303030303030303030317d7d2c22646f636b657273223a5b7b2278223a35302c2279223a34302e3030303030303030303030303031347d2c7b2278223a35302c2279223a34302e3030303030303030303030303031347d5d2c22746172676574223a7b227265736f757263654964223a227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442227d7d5d2c22626f756e6473223a7b226c6f7765725269676874223a7b2278223a313230302c2279223a313035307d2c2275707065724c656674223a7b2278223a302c2279223a307d7d2c227374656e63696c736574223a7b2275726c223a227374656e63696c736574732f62706d6e322e302f62706d6e322e302e6a736f6e222c226e616d657370616365223a22687474703a2f2f62336d6e2e6f72672f7374656e63696c7365742f62706d6e322e3023227d2c227373657874656e73696f6e73223a5b5d7d, null), ('3', '1', 'source-extra', null, '', null), ('30102', '1', '请假流程.bpmn20.xml', '30101', 0x3c3f786d6c2076657273696f6e3d27312e302720656e636f64696e673d275554462d38273f3e0a3c646566696e6974696f6e7320786d6c6e733d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f4d4f44454c2220786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612d696e7374616e63652220786d6c6e733a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220786d6c6e733a61637469766974693d22687474703a2f2f61637469766974692e6f72672f62706d6e2220786d6c6e733a62706d6e64693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f42504d4e2f32303130303532342f44492220786d6c6e733a6f6d6764633d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44432220786d6c6e733a6f6d6764693d22687474703a2f2f7777772e6f6d672e6f72672f737065632f44442f32303130303532342f44492220747970654c616e67756167653d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222065787072657373696f6e4c616e67756167653d22687474703a2f2f7777772e77332e6f72672f313939392f585061746822207461726765744e616d6573706163653d22687474703a2f2f7777772e61637469766974692e6f72672f70726f63657373646566223e0a20203c70726f636573732069643d224c6561766542696c6c22206e616d653d224c6561766542696c6c2220697345786563757461626c653d2274727565223e0a202020203c73746172744576656e742069643d22737461727422206e616d653d22e5bc80e5a78b222f3e0a202020203c757365725461736b2069643d227573657222206e616d653d22e794a8e688b7e68f90e4baa4223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d22706d22206e616d653d22e7bb84e995bfe5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c73657175656e6365466c6f772069643d227369642d32424346433631362d374438412d343134312d414633462d3841433138454131303044462220736f757263655265663d22737461727422207461726765745265663d2275736572222f3e0a202020203c73657175656e6365466c6f772069643d227369642d45464334383546312d414543392d343536392d423430312d44313644453538463637333722206e616d653d22e5aea1e689b92220736f757263655265663d227573657222207461726765745265663d22706d222f3e0a202020203c6578636c7573697665476174657761792069643d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222f3e0a202020203c757365725461736b2069643d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322206e616d653d22e7bb8fe79086e5aea1e689b9223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c757365725461736b2069643d227369642d41313341394141382d434338462d344233332d383136362d45463737353746364142444222206e616d653d22e4babae58a9be68aa5e5a487223e0a2020202020203c657874656e73696f6e456c656d656e74733e0a20202020202020203c61637469766974693a7461736b4c697374656e6572206576656e743d226372656174652220636c6173733d22636f6d2e70696734636c6f75642e706967782e6163742e6c697374656e65722e4c6561766550726f636573735461736b4c697374656e6572222f3e0a2020202020203c2f657874656e73696f6e456c656d656e74733e0a202020203c2f757365725461736b3e0a202020203c656e644576656e742069643d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222f3e0a202020203c73657175656e6365466c6f772069643d227369642d42303041324138322d334131352d343934352d423430312d38444534444438373241383822206e616d653d22e5aea1e689b92220736f757263655265663d227369642d41313341394141382d434338462d344233332d383136362d45463737353746364142444222207461726765745265663d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222f3e0a202020203c73657175656e6365466c6f772069643d227369642d41443932373633302d373545442d344437372d383743462d4544303333303733454143362220736f757263655265663d227369642d37443342413043432d304531342d343031412d393937422d45354235373739384436303022207461726765745265663d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b646179733c3d31307d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d42304144324538452d363634312d343437322d394431332d4638383244413341463944352220736f757263655265663d227369642d37443342413043432d304531342d343031412d393937422d45354235373739384436303022207461726765745265663d227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b646179733e31307d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d36314637383245322d304132452d343144322d383042372d38313630413932444143393922206e616d653d22e9a9b3e59b9e2220736f757263655265663d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322207461726765745265663d2275736572223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d38344242323430352d384530322d344442392d384632392d45394242423033324330443922206e616d653d22e9a9b3e59b9e2220736f757263655265663d22706d22207461726765745265663d2275736572223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e9a9b3e59b9e27297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d35344233354332332d303138422d344642412d393643322d37454634354430313444444422206e616d653d22e5aea1e689b92220736f757263655265663d22706d22207461726765745265663d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e5aea1e689b927297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a202020203c73657175656e6365466c6f772069643d227369642d30334436303037342d303738332d344333422d384345302d37334234334546433531383022206e616d653d22e5aea1e689b92220736f757263655265663d227369642d44313931444237442d313042382d344145372d383238342d45303933313238373233374322207461726765745265663d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a2020202020203c636f6e646974696f6e45787072657373696f6e207873693a747970653d2274466f726d616c45787072657373696f6e223e3c215b43444154415b247b666c61672e657175616c732827e5aea1e689b927297d5d5d3e3c2f636f6e646974696f6e45787072657373696f6e3e0a202020203c2f73657175656e6365466c6f773e0a20203c2f70726f636573733e0a20203c62706d6e64693a42504d4e4469616772616d2069643d2242504d4e4469616772616d5f4c6561766542696c6c223e0a202020203c62706d6e64693a42504d4e506c616e652062706d6e456c656d656e743d224c6561766542696c6c222069643d2242504d4e506c616e655f4c6561766542696c6c223e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227374617274222069643d2242504d4e53686170655f7374617274223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2233302e30222077696474683d2233302e302220783d2234352e302220793d2238352e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d2275736572222069643d2242504d4e53686170655f75736572223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e30222077696474683d223130302e302220783d223132302e302220793d2236302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d22706d222069643d2242504d4e53686170655f706d223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223236352e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030222069643d2242504d4e53686170655f7369642d37443342413043432d304531342d343031412d393937422d453542353737393844363030223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2234302e30222077696474683d2234302e302220783d223431302e302220793d2238302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743222069643d2242504d4e53686170655f7369642d44313931444237442d313042382d344145372d383238342d453039333132383732333743223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223439352e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442222069643d2242504d4e53686170655f7369642d41313341394141382d434338462d344233332d383136362d454637373537463641424442223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2238302e3030303030303030303030303033222077696474683d223130302e302220783d223634302e302220793d2236302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e53686170652062706d6e456c656d656e743d227369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246222069643d2242504d4e53686170655f7369642d42413736454331462d423735452d344632382d423839382d464530363636423638314246223e0a20202020202020203c6f6d6764633a426f756e6473206865696768743d2232382e30222077696474683d2232382e302220783d223738352e302220793d2238362e30222f3e0a2020202020203c2f62706d6e64693a42504d4e53686170653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838222069643d2242504d4e456467655f7369642d42303041324138322d334131352d343934352d423430312d384445344444383732413838223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223734302e302220793d223130302e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223738352e302220793d223130302e30222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446222069643d2242504d4e456467655f7369642d32424346433631362d374438412d343134312d414633462d384143313845413130304446223e0a20202020202020203c6f6d6764693a776179706f696e7420783d2237352e302220793d223130302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223132302e302220793d223130302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444222069643d2242504d4e456467655f7369642d35344233354332332d303138422d344642412d393643322d374546343544303134444444223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223336352e302220793d223130302e3231363435303231363435303233222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223431302e343133303433343738323630392220793d223130302e34313330343334373832363039222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337222069643d2242504d4e456467655f7369642d45464334383546312d414543392d343536392d423430312d443136444535384636373337223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223232302e302220793d223130302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223236352e302220793d223130302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435222069643d2242504d4e456467655f7369642d42304144324538452d363634312d343437322d394431332d463838324441334146394435223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223434392e353833333333333333333333332220793d223130302e3431363636363636363636363639222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223439352e302220793d223130302e3231383334303631313335333734222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439222069643d2242504d4e456467655f7369642d38344242323430352d384530322d344442392d384632392d453942424230333243304439223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331352e302220793d223134302e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223331352e302220793d223139312e3532343239303531313436323137222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d223139312e3532343239303531313436323137222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d223134302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336222069643d2242504d4e456467655f7369642d41443932373633302d373545442d344437372d383743462d454430333330373345414336223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223433302e352220793d223131392e3530303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223433302e352220793d223139322e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223639302e302220793d223139322e3030303030303030303030303033222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223639302e302220793d223134302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939222069643d2242504d4e456467655f7369642d36314637383245322d304132452d343144322d383042372d383136304139324441433939223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223534352e302220793d2236302e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223534352e302220793d2232392e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d2232392e30222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223137302e302220793d2236302e3030303030303030303030303033222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a2020202020203c62706d6e64693a42504d4e456467652062706d6e456c656d656e743d227369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830222069643d2242504d4e456467655f7369642d30334436303037342d303738332d344333422d384345302d373342343345464335313830223e0a20202020202020203c6f6d6764693a776179706f696e7420783d223539352e302220793d223130302e3030303030303030303030303031222f3e0a20202020202020203c6f6d6764693a776179706f696e7420783d223634302e302220793d223130302e3030303030303030303030303031222f3e0a2020202020203c2f62706d6e64693a42504d4e456467653e0a202020203c2f62706d6e64693a42504d4e506c616e653e0a20203c2f62706d6e64693a42504d4e4469616772616d3e0a3c2f646566696e6974696f6e733e, '0'), ('30103', '1', '请假流程.LeaveBill.png', '30101', 0x89504e470d0a1a0a0000000d4948445200000337000000ca08060000009835be80000023604944415478daeddd09985575fdc7712a2bdb7ddaf7acac6cdf6cdfecdf4645650b210ce944069a6692fa64e49666695614564a69659652466468a2e0ae685aa6a49962682c8a58824980299cfff99c87c3731967608665e6de3baff7f37c1fcebdf7cc9de19ccfeff3fb7d7fdb19320400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da855d77ddb5104208d17ea18603000ccae4c6550000de0e00800a1000c0db010050010200783b00002a4000006f070040050800bc1d000015200080b70300a0020400f076000054800000de0e00800a1000783b00002a4000006f070040050800e0ed0000a8000100bc1d0000152000f076000054800000de0e00800a10003070dc71c71d1f9f34695251fafbf6ae06004072030068498aa2d8f6aebbee5a5a528c1d3bf64c57040020b90100b4240b162c38a558cbecd9b3178d1c39721757050020b90100b414cb972f7fe5ead5abd7140d1c75d4510b3a3b3bb773750000921b0040cbb078f1e2794517962d5bb6b8a3a3e37bae0e00407203006809e6cf9f7f48d103d3a64d5b5c7afd4eae1200a0dd1299e94966361257b95200d03a94f9cb5357ad5af5bf9e929b356bd6dc3b7efcf8393befbcf336ae1600a09d929b9dcab86f43c9cd88112386b95200d03a2c5cb8f0f26223cc9b376fc1c89123f773b50000ed96e09cbd81e4e6723d7b00d05a5c76d9651bcb6d8a952b575e189fefececdcd6150300b45372b3534fc98d2d4301a0f538f4d043f7ded0b4b4e43613264cf895911b0040bb2638ddadbdb9caa80d00b42653a64cb9b1a7cce6e69b6f3ec1c83c00a09d939b07acbdb1d606005a97e1c387ef5026312bbbd94ce0ba8e8e8eebec960600686bca64669a511b00681f8e3df6d8e3ca646675637273e289279e54fafd44570700d0eec9cd1b1bd6da0c754500a0b54927d58c193396343cc0f3d4d2e3e77676766ee7ea0000da9e7aed8d511b00680ff6d9679fff5bba74e9aa328ab163c7ceb2510c0060302537d5ce69ae0400b40f93274f3e7bd2a449594b39cdd50000f48aa228b699376fdee9575c71c5eaf3ce3baf983973664b46929b56fddb67cd9a555c7cf1c5ff2a63340d89c1a8212897ddc559679d5579fbd4a953954b1ae2ed007a478ceb924b2e29962c5952dc7befbd6280e2ce3bef2c2ebae8a2bb4b23fb040d89c1a62128973dc5a2458b944b1ae2edbc1de83de991615c4d6360f7ce9c39f3061a12834d43502e954b1a12bc1dd82264a89971344f94e6751f0d89c1a6212897ca250d09de0e6c1132a79369349579153424069b86a05c2a973424783bd0afe6b57cd9edc5bcab7e5a5c3feb882a729cf7180ef3a2211a827229783b0dd110d032e675cfd245c575e71c525c7bd681eb45decb674c470548433404e552f0761aa221a025cc6bc1f5bf7f8071d5b1f0fae94c470548433404e552f0761aa221a035cceb860b8ee9d1bcf219d35101d2100d41b914bc9d8668086809f3ba6ee6e13d9a573e633a2a401aa221289782b7d3100d01cc4ba80069480508e552b9a421c1db81fe32afec7ed29379e533a6a302a4211a827229783b0dd110d012e635f7b2eff7685ef98ce9a800698886a05c0ade4e433404b48479fd7bd19ce2ba730f7be09073f95e3e633a2a401aa221289782b7d3100d012d615e895bfef4f3079857de6338cc8b866808caa5e0ed34444340eb98d7aa55c5dcd9c73f70c8b97c2f9f311d15200dd110944bc1db69888680a637af3c61f8a6cb8eeb714e6d3ef3146215200dd110944bc1db69888680e635af55ab8adbe79e5ffc75c6841e8dab8e9c9373f5d2a800698886a05c0ade4e4334043495796dac37462f0df3a2211a827229783b0dd110d012e6d59bde980df5d2302115200dd1d000b31d6f572e954b1aa221400558c5a61a571d4c480548433434800c2da358fb2f6f572e954b1aa22160b057808279d1100db528ef2e63691913d7fe3b8cb70be59286680850010ae6454334d4aa89cdb086119c3b076b82a35c2a9734444380e446302f1aa2a1f6486c36f63e6f17ca250dd110a00214cc8b8668a8e918ba9104a6fe7c286f17ca250dd110da96a228b69d3367ceb8934f3ef9a2a38f3efaee7df7ddf7bececece62d75d772d468f1ebd66afbdf6baf72b5ff9cabc638e39e61765bc48052898170dd150d326361b4b5c06dd088e72a95cd2100db5021d1d1dcf1c3162c43e65fbfbf432e696714fdae265ac2ce396f2b369e5bf07e43cd9cb06929aa953a7fefcc8238fbc6fbffdf62b264f9e5c5c71c515c5a2458b8a952b571621ff2e59b2a4f8f39fff5c94c94ff1852f7c61cdf8f1e36f1d3b76ec1e2a40c1bc6888869a8277f77144a6afe7f376c1dbdd3b1ada4a8c1c39729732669671efda64a637714179fe68d94c03651233e66b5ffbdaaa030f3cb04a5ceebffffea2b75c73cd35c541071d74ffb871e36e183e7cf80e2a40c1bc688886063cb119b6093f77cf604870944be5928668a819291394edcb0465461f129aeee292766a8b6fea68cd36679c71c6f97beeb967317dfaf43e25355d993163463166cc9815ed328ac3bc98170dd1d020496cb6d4cf2b9782b70b1ada04468c18b1eba851a3ee6a4c543a3a3a8a6f7ce31bc5f9e79f5fcc9f3fbff8cf7ffe53b5b7fffbdfff56b3aa2ebbecb262e2c489c5a73ef5a9ae09ce3d8376142789cd85175e78e5e73ffff9e2a69b6e2ab604b7de7a6b51264a2bf6d8638fbd55804205484334d46f6c6cf380fefe1ee552f0764143bd4b6c8695c9c8fd8d49cd2f7ef18b6a19486f58ba7469757e7eae31c929bf738f21838d8cd824b1e9edc5eb2df9beb163c7b67cd6c8bc98170dd1508b25365b6a4a595b8fe02897ca250dd150338dd83426365ffce217ab519a4d213f97e5255d129cc13382933536998ab6a5466cba1bc1d96db7dd969617754715a050010a1ada6a74dd0ce04165ecbef6dfbed0f5e7da769301e552b9a4211a6a06b2c6a6712ada61871db66eead9a692296b471d7554d7296a3b0e6977b22bda11471c716fd6d86c4dce3aebac151d1d1d97ab00850a50d0d0564d6c8635242827c5e6d7fedbdb04a7a79f6bcb0447b9542e6988869a8132b199d53862b3b9894d6382d36504e792b64f6ea64d9bf6cbfca7fff7bfff155b9bcf7dee738b5b75488c79312f1aa2a1164a6c86ac1d79291aa237094e636253c76e0d9fb7dd1a1ce552b9a4211a1a68b2dd73e31a9b4d9d8ab6a1296a8d6b70da7a7a5a466df21c9b6cf7dc1f5c7bedb5f7b6eae80df3625e3434b834b4f3ce3b6fd322d2ea29e1e82e51d95082d3ddf92776737e5badc1512e954b1ad23e6882e466669d78643380adc169a79d3638466fe6cc99332e9b086cce96cf7d65cc98318b33afb0990455c65b9917f3a2211a5adbe9f3d4850b175e9e6d350f3ef8e0fdfba331d55b0d6d20b119da8784a5bb04a7b789cd905699a2a65c2a97344443ade0431d1d1dcfac3711c8e8cabffffdefadd2fece2e6a5db689de7e483b72f2c9275f74e2892716fdc9c48913af292fe801cd720d1a86e8668e1831e28dcc8b79d1d0e0d5d0fcf9f30f59b972e57db55fad5ab5ea7f53a64c99bbf7de7bbfb41934b48909c6c6129cbe26368dbfffce661dc1512e954b1aa2a156f0a1f2fd7deaf3bef9cd6f6eed3678637273c09076e4e8a38fbefb8a2baee8d7e466f6ecd9b79617747ab309af21ceee2ecb665ecc8b86da5743cb972f7fe51d77dc716b4fbe75cb2db7ac2cfdf284cecece6d0752439b3135aca704e7c19b98d86c6c4a9c7229064db9a421ed83cdd150f9dee9f5e7175e78e1566d8367e4b3e16f993ea41dd977df7defbbfdf6dbfb35b959bc78f192f2822e6862e1adcbb21b05c8bc98170db59f86b2ee70c18205a7ac5ebd7acdc6bc6bcd9a35ab67cc98f1aff1e3c77f68a034b48989cd86129c1b3723b1d9dcbf47b9146d512e6948fb60733454be9e5bbfbfa53712e8caa2458b1aff8e0543da91cecece62e5ca95fd9adce4f795177465b30baf31cbce5022f3625e34d45e71e5955716cb962dbb7b13e62daf3afef8e3cf2b2ba627f6b786b6c048497709cee624367d9d22a75c8ab62b9734a47db0391a2a6345fd7a4b6dffbca16da11b7ef7cab64c6ef29f1b087a71b39b2e5ac9bc962f5f5ecc9a35abc7cffff5af7f554393ab56adead3f7de71c71dd575b8e79e7b06fcff4843bd8f254b966cd5ef4f4fd339e79cd3e3e78b172f2efef297bfacd35eccbbfebba2d581b826e9bd9a346952b5c072531665e667fb5b3f1ffbd8c7ea2464e2665aff83bb19b1b971edfb9bc344e5b2f79145c3ca65eb97cb66681fe47ee57ea7e1bab173fff4a73f55d1d3e7f98e193366f4499fb9f6a79c724a919940cdd0066a451faaa3bfdbe06d99dcecbefbee6bfa7be466c58a158b5b64e4e6aa1123460cab77641908f3faca57be52bcf4a52f2d5ef6b297751b3beeb86371d75d773de0e7aebffefae2118f784471e6996776fbbd175f7c71b1cd36db54c7071c7040f18217bca078e10b5fb82e860f1fbeaef2fde73fff59195622869786d0dcb973d7bd1743ddda95740bf7cc0cb886caf2563cfde94f2f7efad39f56af870d1b56ecb4d34eebe2bdef7def7ae71f73cc31c52b5ef18af5de5bb06041b1f7de7bafd3da8d37de587ce73bdfa9162626def39ef714db6ebb6df1ed6f7f7bdd7bf9fcef7fff7b757eb69f7cce739e531dbfea55af2a7ef8c31f56c74f7ad2938a3ffce10f035601feee77bf2bc68e1d7be6ecd9b36f5fb3664dafb68c5cb66cd9a9e3c68dbba0bcafd3b6e44e33bdd5d0908def8eb63923377d79d0672b8fdc0c78b94cbdfbcc673eb338f9e493abd77beeb9e77a49ecaf7ffdebeafdef7ffffbc5d0a1438b0f7ce003c5bbdef5ae6aa7a394cf57bef295eb227544caa4723970e572a0939b4b2fbdb42ac3d1c0c6cefdf0873f5c7cfce31feff1f324b9f9aebffded6fc557bffad507e8ed231ff9c87ae797d7bef8e0073f58b529f6da6baf62bffdf62bb20befd9679f6de4a6971a2a8fef3172b3052905786f7fafb9b9edb6db6e6cf235375d1b130336a7f6739ffb5cf1f6b7bfbd38f5d453ab88797ced6b5fab8e5361c580eebefbee75094b0ce6431ffa50154f7dea53abc66b8ef3fee4c993abf39298e4f8610f7b58f533658550bce52d6f290e3df4d02a72eebbdffdeeeadceca4d7432368bda8bf9b79359f86d2784a232a15505ebff8c52fae9e7cfcab5ffdaabadfdb6fbffd7ae7a701f49297bc645d72fb8d6f7ca378dce31e57bcf18d6f2cfefad7bf56ef9f7beeb9957e468e1c5945f97fad92a6b5f388ab78f8c31f5e556ef3e6cdabb49abfe1baebaeabbee7473ffa51f53d49bace3befbc6a44b0373d8e5b4b4379785a59892f58ba74e9920dccebbfaed4f98f33373ae70f94861a12897bb6d29a9b4d49705a65cd4dd394cbdffef6b7c5e31ffff86ac424af8f3df6d8e2f0c30f2fbef4a52f55652b0dc4bc7fc9259714fbeebb6ff194a73ca52a37f1e6fdf7dfbff8c217be5095a5b3ce3aabba6f37dd7493723980e572a0939bdffffef7950e6a8f6e8cccd0c8fdcefdcca85c34116de43891f7eb119724bed3a74fafbe2bf57f92ee24c9990992f8ec673f5bbcf39def5cf7dd4982d3c9fae0073fb84a7a7ef2939f14a3468daada2a79568be4a6771ab2e6660b73c82187ccedefddd2ce39e79c3f34e96e6997c71c7bda3b7f20cc2bc6f2bef7bdafb8e8a28baa78e8431f5a251239ce1070637293519a184a86e5bbc60e3bec508d02e5bcef7def7b5585f6a0073da878fef39f5f2537a9d852a926f2fbeae4260de2dafc76db6db72a194a8377dab46955e59be37c5e379c9957736928d34e92bcfcfce73f2ff6d9679faaf193c4259a486328ef3ff7b9cf7d4072939ee04c5bdc6ebbed8a17bde845c52f7ff9cbf5ce9933674ef199cf7ca6b8f9e69b8b7ffce31fd5d49768310f03ceebbc9f4af09a6baea974f7e8473fbaaafcdef6b6b7555a8b86d33b954654ae4912ea245103a9a1e1c3873fbaa3a3e37b53a74e5db27af5ea158dcb04cbffcf09e567d79515d2c4cececeed0652439b3152d2d376cfdded96d69704a715764b6baa7219edbfe635af29befef5af571e9f44a71e654dc333e5af9e22568f6464743dc76968bee10d6f285ef7bad755e5e7939ffc6475cf52e694cbc1d53ee8eadbb9d7dd4d43cc88fbc63a28dff4a63755e71e7ffcf1c5b39ef5aceabd24d499c5317af4e86a06473ac61ef398c714071d745075ee2db7dc52b521f2bbd38e7cdad39e5675c63ef1894fdce07448ed83076ac86e695b98638f3df6c4fe7ececd61871d7656933de766433da4036a5ea988d26b9ee42411c389f1e4f8d9cf7ef67ac94da68ca557aebbef89e1d4c94d22e2aecf1d33664c35852d0dd9c4a31ef5a8a2bc16eb4d6bca39cf78c6338a850b1756ef65b83a069621e8815a7fd364e6d5941a4a0f6f92d84c35cc7dcd7d4b7293dedddcf368a04e6ed2a8492f6d3d7293debefcbdb9ff394ee4f3fa7ee7bbf31da9d0328d255acc68615e672a4c3eafff8e4cb179def39e571da7119573ebc6597e57a6c4dc79e79d4da1a1f25eee347efcf839f3e6cd5b54fedf2f9a3061c2af5229e5fd66d0d0268e986cec3936bd7dd06757724d9af939374d592e33d52cd7383ddef1f7f4b6a71e4e52135f7fe4231f597cf4a31fad92928cdc64c4e5094f784271dc71c755c94d466d324df4f5af7f7dd5d1542737cae5e06a1f34463aaf72ff32edb0bb2990d1589df4e69ea73d90e344b4f48e77bc63bdf53bf9ae8ce294d7bcd2dcf9e79f5ffce0073f287efce31f17575d75d5ba755a19e1fbd6b7be55bcf5ad6fad92e55d76d9a5d26fa6cd2709facd6f7e538d44681f6c58439e73b38539f8e0839f5f168ad5f7df7f7f7fe5362b478d1af58f567c2aea409857e657a767af7e9d46e9ecd9b3abe3985563723375ead4eaf3ef7ef7bb0f88f4ae34263799ca901ebb5464999a74c41147ac1765025a8d0ec50c5381a6011c034c059c9f3fe9a493aa0a3649567a14eb45a983d5bc9a5543997f9d690249627ef6b39f55efa5d13265ca9475d3cbeae426d31d7b330531bdcd39ffcb5ffe7235ca9785a9e979ce6799f79dd719f9cbe7f5df91b9fd699c456b6944653a4cd6f1a411f5e637bf79c016a1f6a4a15442658372bfb5d379f6eb8f27a16f061b1b39e9ed033afb9ae0d453e37669f57ab0bfcb657ac1d3439e6423be9d4ea3f48aa77ca493210dce2434694c5e70c10555a293296c694466dd4d465a3295381d5dbbefbefbba6969cae5e06a1f34262f2f7ff9cbab4852b1a17333cb22333c1ad754659af2fbdffffef546fca39b4c3fcbc84d34924eb2d41d49c03383a4de40206d8e2435392f5a4e12948426f728c97512edbcaf7db0613a3a3a9e595eb3fb72ddcae36a56ccd620f76df4e8d16b1a929bed87b42ba5b06f4e0f513f4d49fb4579312f5101f62ed20b92e4a19e2f9d842415578e3365a031b94923b6ee39e91a1965993061c2ba05e3f9b9873ce421d5b4a4acebc9a602a92c330529c7e9adc9ff370521c7999696ca3843d2793f6697290c19ee4e637720466f24371b8fabafbeba1ab549a5972439eb6f5241650bf8f4f065e4ad4e6e32bd308dac238f3cb2d2418ed3b08ae6ce38e38cea757ae0a285ba11151da4519445a675af6f5ee7fdba1195a4299569b4994d0dba9bdbdfac53179a3ca9e9cd084e6f139bbe2638f5efdba51deac081e87448197bf5ab5f5d753a250989a72789a9238bbee3bf5da7a5252149cf6ba6a3a5a199ceab94e5344895cbc199dc642388d4e71951493211bfeee9dc242439a77107cdd403f50603d142be2bbac9c84bda0799969691994c694fd4a33c19d5cfb6dd39b79eda98e324c6799de34c571bec333b7a4b9e7b53271d59afb435887f342436970c69673ef399cf0cdf7ffffdefeb87d19ba5a3468dbababc81a35580bd8bcccbce1cec0c5326623ad98524c749421a939b54564950bafb9eacc7b9fcf2cbabe3f4f065c1603d2d2d0b0b636259cc9a86704664d210eeba4d745e67c79ef4e074dd2d857935a78632ed24bb2125114e729b11b62437a97cd2d3964aaaa73537f5eb546c79dd757a4a1a49e9d9cb22d38c0a458b1911cceb7c6fdd88caef4c02dc38fda56b232a3fd7d3ce7e34d4a7119cae53c4761fd2f7e7d87497e0ecd6879122debe9188172759c948cad8b163aba96719153feaa8a3aaeb7dc209275453d7ea4ea32437995a961ef6f87e929f2446792fc7f1e3ba11a95c0eaee4269d4d1921c92c8f7a87d5dcbfac87e97a6e3aa832bd3ceb671bdfffc4273e51add5aab70f4f92d4382d2d7540929e68252343999a56ffecb5d75e5b9d9b191f6947e4f8e0830fae3ac9d25648079bf641af939b5deac423a3375b7a63817c5fd9065fd3f010d1d143da9d71e3c6cd4983776b92f53dc9145ba8377440cd2ba6951e96ec82d29b6969592793c4a437df5dafb9c9cf3ef6b18fadb61e8d29bef6b5afad2ad5f404362637e9a149a337f3c3d358ce084e169a362e7a655ecd5b01a6a738535c4e3ffdf41ea7a57597dcdc70c30d95ceb236208b986fbdf5d675e71d78e081d582d334d09254d7d318f2fac94f7e72f5794f73fba39de8ba6e44a55197f56534b445129cc64d061a1395be3ca0b3a79f6bbaed9e5bb95ca6019a519bfa9964694ce69a679a517d4ea6f864ed4ba6b0a5173df57446dc3ffde94f57efe738494cdd98552e078f86d246c87dcb0641b7dd76dbbab593994a9ea9e85963599f9b5d52d3a995fabb3eb78e24ca49487a5a7393e426a38849a2b276b31ebd6f4c6ed27ec8b9398ec6f27d929bbe53b6912fa8938f74666ca96da1b35e76fffdf7bfbf71d4a655dbe27dbda0db8f193366457af5b70673e6cc39a3fc1db79799e28e2ac0de45a68f25b9699cf79cb9ae590b93866a465a32ad20469461e88cea64b79c8d7d6f0c2f9556929bf4d6a4d19a679d6411602acb7c7776d3ca76a131b72c544c0f618caddeda31bd8c99039ec428bd3e99d3cdbc9a4f434962ea45c5999a96298db96fb9df199dcb36e1b987997258ff4c7a813355258d9ee82d53d3320f3f535c726edd939be908d93d2fc7d94a36bfa39e46138de6f31c67dd56e6f4a7b28db63245325acdef4f2f621a4f993693d1481ada22749da2f6a0b5232f7ddddeb9ebcf6deef37594cb866944495652669248643d634664328a93f7729c85ff19b189e7c6afb37d6b368dc98e96e921cfb36fb2e631c7792fd38d94cbc1a3a1fcbe6c12917b95fbdcf541a8e9a04a67643414dda47ecfbdae938db419b2435a92de68a4ee444dfb20f57fdecbdaaf242c999296ef4b12945900a91b522fd423803937334cb2f1408ea3cdbccef1861e164a43ddb7c5cbb8b34e42b2fe7973139c2436a58734aeb3b9a795dbe27da6ccce3bc68d1bf7dfccc5dc922c5cb8f0d251a346fdb3d587c0fadbbc92302481695c34982969e9854f4f4a1aa8f5e2ee5466c9f27bfb7c85ccf74ecf5f863eb32d68be3b3d807becb147358a1373ca7350f2bbd2db93f5357505d9b8bd647a0cf377743557e6d51c1a4a03266bb1929ce475765b4ac3293d6b75e475cea97f26669a864dee7fe354b424d1791647571dd46b7b329fbf6b8f60ddf39cca30bf270ba2b368390baaeb5da39260a55157af19a0a1ad92e06c8911a1a6dd15add5ca657c358dcbba5cfef18f7fac9e6593edf5ebc8287cbd45741d19b5c9fb8de7d5e7669317e572f06828237559a7d5d34e64a99f539f67b43d8de3f87ae303bf3345ed90430ea992e8c6e7d1a42e4fd2934744d4d31cf3dc9ae8b37eee514665ea51fcacd74ed2945dfbba4692ef3a99a6a1de3362c4885debcd05ea119c4d9da2969feb32623338a6a375a56cec8e290ded9e2d358293119b2436e5cd3a48052854803444432d97e034e5033a954be5928644bb7a7b998474362638e9884e129acec5deee8a96cd031ad7d824daa12dbe5959e3e8d1a3effeddef7eb77c33361958faed6f7ffba7998a969ba40214cc8b8668a8dfd9dca9646d3b154db9542e6988869abd2d5ec6d2c6e424494ea68ae6419f1995a9a7ac65442dd311b39e3ad30a77df7df7d58d3f97a968edd216dfdcac71fb32e33b6fdcb8718bafbefaea157d798ecdb9e79e7b5a991c5d95054bed34af8f79312f1aa2a1164e70fa3af2d2969b072897ca250dd1502bb5c51bb788dec4b86450adb1e9e585fd44929ccecece25471f7df4f5975e7ae93fcbecf0f6acd1082b56ac587cdb6db7dd386bd6ac330f3ffcf0b3cbac725e2e6432c476db898179312f1aa2a116a5af53cbda7e2a9a72a95cd2100db5525b7c6d92735f5f929a766c8b6f51f2f4d4b54f063ebd8c5bca58b9f6e2e5df05654c2fe380767eda29f3625e3444438320c1d9a98c7b86b4c9033a954be5928668485b1c605ecc8b8668a83d19ba367119ba81cfef1c4c898d72a95cd2100d01921bc1bc688886da6f0467504d45532e954b1aa2214072c3bc98170dd1507b26388336b1512e954b1aa22140722398170dd150fb243813077362a35c2a9734444380e446302f1aa2a1f6606816a30e1904db3d2b97ca250dd11000e6c5bc688886da9cb5c90d6f571e944b1aa22140052898170dd190e486b70bde4e433404a800850a50d090e446b914bc5dd010c0bc840a50a8002537caa572494382b703cc8b79d19050014a6e944be5928668085001320de645433424b9e1ed42b9a4211a025480420548433424b9512e056f173404302fa102143424b9512e954b1a12bc1d605ecc8b86840a5072a35c2a97344443009817f3a2211a92dcf076a15cd2100d012a40c1bc6888862437caa5e0ed828600e625548082862437caa572494382b703cc8b79d19050014a6e944be59286680800f3625e344443921bde2e944b1aa22140052898170dd190e446b914bc5dd010c0bc840a50d090e446b9542e6948f076a01f38efbcf39846f3c4cad2bceea32131d83424b9512e954b1a12bc1dd8225c7cf1c5b72f59b2847134412c5ab4684a695e37d090186c1a92dc2897ca250d09de0e6c11ce3ffffc8f5c78e185cbeeb8e38e150c64e07a64625cb366cdfa67199fa0a101ab3c684872c3db857249433404b43a6581193673e6ccab32e499399dad16a79d765a91c64c2bfeed6b23d7fd865636ae56d7d095575e594c9a34a998366d1a0d496e78bb502e698886000c6843667a1a333befbcf336ae06fa4a5114dbde75d75d4b4b8ab163c79ee98a486e00681f00c0803062c4883796c6755fcc6be4c891435d11f495050b169c52ac65f6ecd98b4a1dede2aa486e00681f00c04098d7b418d7dab8ca15415f58be7cf92b57af5ebda668e0a8a38e5ad0d9d9b99dab23b901a07d0000fdd980d9a9ee95a9a334b361ae0c7acbe2c58be7155d58b66cd9e28e8e8eefb93a921b00da0700d09fe635bdd1b8eade19736bd11be6cf9f7f48d103d3a64d5b9ccad15592dc00d03e0080fe30ae07f4cad461cd04364699bf3c75d5aa55ffeb29b959b366cdbde3c78f9fa32294dc00d03e0080fe30afb3bb33aeb571b92b840db170e1c2cb8b8d306fdebc056545b89fab25b901a07d00005bd3b87aec9531b716bde1b2cb2edb586e53ac5cb9f2c268a9b3b3735b574c720340fb0000b696794ddf9071d919051be3d0430fdd7b43d3d292db4c9830e157466e243700b40f004063064dcf9429536eec29b3b9f9e69b4fc8f4056b6ef801007e0000cc0b4dcff0e1c37728939895dd6c26705d4747c775764be30700f80100302fb40cc71e7bec716532b3ba31b939f1c4134f1a3162c44457871f00e00700c0bcd03264dad98c193396343cc0f3d4524b733b3b3bb77375f801007e0000cc0b2dc53efbecf37f4b972e5d55463176ecd8599e83c00f00f00300605e6859264f9e7cf6a44993b245e83457831f00e00700c0bcd0b2641a5a34944d065c0d7e00801f0000f3020dc1bd04c00f0080798186e05e02e00700c0bc4043702f01f00300cc0ba021f712003f0000e6051a827b09801f0000f3020dc1bd04c00f0080798186e05e02e0070098174043ee25007e0000cc0b3404f712003f0000e6051a827b09801f0000f3020dc1bd04c00f00302f8086dc4b00fc000098176808ee25007e0000cc0b3404f712003f0000e6051a827b09801f00605e000db99700c00f00302fd010dc4b00fc000098176808ee25007e0000cc0b3404f712003f00c0bc98176808ee25007e0080790134e45e02e00700c0bc4043702f01f00300605ea021b89700f80100302fd010dc4b00fc0000f30268c8bd04c00f0080798186e05e02e00700c0bc4043702f01f00300605ea021b89700f80100e605d0907b09801f0000f3020dc1bd04c00f0080798186e05e02e00700c0bc4043702f01f00300cc0ba021f712003f0000e6051a827b09801f00c0009997109b1b4a92c60c007e000000a0b34308a1e30a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000069aff077668140861e716f60000000049454e44ae426082, '1'); COMMIT; -- ---------------------------- @@ -77,7 +76,7 @@ CREATE TABLE `ACT_GE_PROPERTY` ( -- Records of `ACT_GE_PROPERTY` -- ---------------------------- BEGIN; -INSERT INTO `ACT_GE_PROPERTY` VALUES ('next.dbid', '30001', '13'), ('schema.history', 'create(5.22.0.0)', '1'), ('schema.version', '5.22.0.0', '1'); +INSERT INTO `ACT_GE_PROPERTY` VALUES ('next.dbid', '32501', '14'), ('schema.history', 'create(5.22.0.0)', '1'), ('schema.version', '5.22.0.0', '1'); COMMIT; -- ---------------------------- @@ -110,7 +109,7 @@ CREATE TABLE `ACT_HI_ACTINST` ( -- Records of `ACT_HI_ACTINST` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_ACTINST` VALUES ('25006', 'LeaveBill:1:25004', '25005', '25005', 'start', null, null, '开始', 'startEvent', null, '2018-12-03 23:52:38.725', '2018-12-03 23:52:38.746', '21', '1'), ('25007', 'LeaveBill:1:25004', '25005', '25005', 'user', '25008', null, '用户提交', 'userTask', null, '2018-12-03 23:52:38.748', '2018-12-03 23:53:40.532', '61784', '1'), ('25014', 'LeaveBill:1:25004', '25005', '25005', 'pm', '25015', null, '组长审批', 'userTask', null, '2018-12-03 23:53:40.532', '2018-12-03 23:54:09.373', '28841', '1'), ('25018', 'LeaveBill:1:25004', '25005', '25005', 'sid-7D3BA0CC-0E14-401A-997B-E5B57798D600', null, null, null, 'exclusiveGateway', null, '2018-12-03 23:54:09.373', '2018-12-03 23:54:09.384', '11', '1'), ('25019', 'LeaveBill:1:25004', '25005', '25005', 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '25020', null, '人力报备', 'userTask', null, '2018-12-03 23:54:09.384', null, null, '1'), ('25023', 'LeaveBill:1:25004', '25022', '25022', 'start', null, null, '开始', 'startEvent', null, '2018-12-03 23:57:55.883', '2018-12-03 23:57:55.885', '2', '1'), ('25024', 'LeaveBill:1:25004', '25022', '25022', 'user', '25025', null, '用户提交', 'userTask', null, '2018-12-03 23:57:55.885', '2018-12-03 23:58:06.820', '10935', '1'), ('25031', 'LeaveBill:1:25004', '25022', '25022', 'pm', '25032', null, '组长审批', 'userTask', null, '2018-12-03 23:58:06.820', '2018-12-03 23:58:14.514', '7694', '1'), ('25035', 'LeaveBill:1:25004', '25022', '25022', 'sid-7D3BA0CC-0E14-401A-997B-E5B57798D600', null, null, null, 'exclusiveGateway', null, '2018-12-03 23:58:14.514', '2018-12-03 23:58:14.515', '1', '1'), ('25036', 'LeaveBill:1:25004', '25022', '25022', 'sid-D191DB7D-10B8-4AE7-8284-E0931287237C', '25037', null, '经理审批', 'userTask', null, '2018-12-03 23:58:14.515', null, null, '1'), ('27502', 'LeaveBill:1:25004', '27501', '27501', 'start', null, null, '开始', 'startEvent', null, '2018-12-11 13:44:16.165', '2018-12-11 13:44:16.228', '63', '1'), ('27503', 'LeaveBill:1:25004', '27501', '27501', 'user', '27504', null, '用户提交', 'userTask', null, '2018-12-11 13:44:16.230', '2018-12-11 13:45:15.552', '59322', '1'), ('27510', 'LeaveBill:1:25004', '27501', '27501', 'pm', '27511', null, '组长审批', 'userTask', null, '2018-12-11 13:45:15.552', '2018-12-11 13:45:25.721', '10169', '1'), ('27514', 'LeaveBill:1:25004', '27501', '27501', 'sid-7D3BA0CC-0E14-401A-997B-E5B57798D600', null, null, null, 'exclusiveGateway', null, '2018-12-11 13:45:25.721', '2018-12-11 13:45:25.730', '9', '1'), ('27515', 'LeaveBill:1:25004', '27501', '27501', 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '27516', null, '人力报备', 'userTask', null, '2018-12-11 13:45:25.730', '2018-12-11 13:46:08.285', '42555', '1'), ('27519', 'LeaveBill:1:25004', '27501', '27501', 'sid-BA76EC1F-B75E-4F28-B898-FE0666B681BF', null, null, null, 'endEvent', null, '2018-12-11 13:46:08.285', '2018-12-11 13:46:08.285', '0', '1'); +INSERT INTO `ACT_HI_ACTINST` VALUES ('30106', 'LeaveBill:1:30104', '30105', '30105', 'start', null, null, '开始', 'startEvent', null, '2018-12-18 22:51:52.599', '2018-12-18 22:51:52.600', '1', '1'), ('30107', 'LeaveBill:1:30104', '30105', '30105', 'user', '30108', null, '用户提交', 'userTask', null, '2018-12-18 22:51:52.600', '2018-12-18 22:52:05.817', '13217', '1'), ('30114', 'LeaveBill:1:30104', '30105', '30105', 'pm', '30115', null, '组长审批', 'userTask', null, '2018-12-18 22:52:05.817', '2018-12-18 22:52:11.607', '5790', '1'), ('30118', 'LeaveBill:1:30104', '30105', '30105', 'user', '30119', null, '用户提交', 'userTask', null, '2018-12-18 22:52:11.607', null, null, '1'); COMMIT; -- ---------------------------- @@ -153,7 +152,7 @@ CREATE TABLE `ACT_HI_COMMENT` ( -- Records of `ACT_HI_COMMENT` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_COMMENT` VALUES ('25011', 'comment', '2018-12-03 23:53:40.481', 'admin', '25008', '25005', 'AddComment', '组长同意', 0xe7bb84e995bfe5908ce6848f), ('25017', 'comment', '2018-12-03 23:54:09.341', 'admin', '25015', '25005', 'AddComment', '组长审批通过', 0xe7bb84e995bfe5aea1e689b9e9809ae8bf87), ('25028', 'comment', '2018-12-03 23:58:06.803', 'admin', '25025', '25022', 'AddComment', '审批', 0xe5aea1e689b9), ('25034', 'comment', '2018-12-03 23:58:14.496', 'admin', '25032', '25022', 'AddComment', '组长同意', 0xe7bb84e995bfe5908ce6848f), ('27507', 'comment', '2018-12-11 13:45:15.210', 'admin', '27504', '27501', 'AddComment', '11111', 0x3131313131), ('27513', 'comment', '2018-12-11 13:45:25.284', 'admin', '27511', '27501', 'AddComment', '2222', 0x32323232), ('27518', 'comment', '2018-12-11 13:46:02.740', 'admin', '27516', '27501', 'AddComment', '3333', 0x33333333); +INSERT INTO `ACT_HI_COMMENT` VALUES ('30111', 'comment', '2018-12-18 22:52:05.805', 'admin', '30108', '30105', 'AddComment', '1', 0x31), ('30117', 'comment', '2018-12-18 22:52:11.589', 'admin', '30115', '30105', 'AddComment', '2', 0x32); COMMIT; -- ---------------------------- @@ -205,7 +204,7 @@ CREATE TABLE `ACT_HI_IDENTITYLINK` ( -- Records of `ACT_HI_IDENTITYLINK` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('25009', null, 'candidate', 'admin', '25008', null), ('25010', null, 'participant', 'admin', null, '25005'), ('25016', null, 'candidate', 'admin', '25015', null), ('25021', null, 'candidate', 'admin', '25020', null), ('25026', null, 'candidate', 'admin', '25025', null), ('25027', null, 'participant', 'admin', null, '25022'), ('25033', null, 'candidate', 'admin', '25032', null), ('25038', null, 'candidate', 'admin', '25037', null), ('27505', null, 'candidate', 'admin', '27504', null), ('27506', null, 'participant', 'admin', null, '27501'), ('27512', null, 'candidate', 'admin', '27511', null), ('27517', null, 'candidate', 'admin', '27516', null); +INSERT INTO `ACT_HI_IDENTITYLINK` VALUES ('30109', null, 'candidate', 'admin', '30108', null), ('30110', null, 'participant', 'admin', null, '30105'), ('30116', null, 'candidate', 'admin', '30115', null), ('30120', null, 'candidate', 'admin', '30119', null); COMMIT; -- ---------------------------- @@ -237,7 +236,7 @@ CREATE TABLE `ACT_HI_PROCINST` ( -- Records of `ACT_HI_PROCINST` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_PROCINST` VALUES ('25005', '25005', 'LeaveBill_17', 'LeaveBill:1:25004', '2018-12-03 23:52:38.725', null, null, null, 'start', null, null, null, '1', null), ('25022', '25022', 'LeaveBill_18', 'LeaveBill:1:25004', '2018-12-03 23:57:55.883', null, null, null, 'start', null, null, null, '1', null), ('27501', '27501', 'LeaveBill_1', 'LeaveBill:1:25004', '2018-12-11 13:44:16.163', '2018-12-11 13:46:08.311', '112148', null, 'start', 'sid-BA76EC1F-B75E-4F28-B898-FE0666B681BF', null, null, '1', null); +INSERT INTO `ACT_HI_PROCINST` VALUES ('30105', '30105', 'LeaveBill_6', 'LeaveBill:1:30104', '2018-12-18 22:51:52.599', null, null, null, 'start', null, null, null, '1', null); COMMIT; -- ---------------------------- @@ -273,7 +272,7 @@ CREATE TABLE `ACT_HI_TASKINST` ( -- Records of `ACT_HI_TASKINST` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_TASKINST` VALUES ('25008', 'LeaveBill:1:25004', 'user', '25005', '25005', '用户提交', null, null, null, null, '2018-12-03 23:52:38.756', null, '2018-12-03 23:53:40.525', '61769', 'completed', '50', null, null, null, '1'), ('25015', 'LeaveBill:1:25004', 'pm', '25005', '25005', '组长审批', null, null, null, null, '2018-12-03 23:53:40.532', null, '2018-12-03 23:54:09.356', '28824', 'completed', '50', null, null, null, '1'), ('25020', 'LeaveBill:1:25004', 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '25005', '25005', '人力报备', null, null, null, null, '2018-12-03 23:54:09.384', null, null, null, null, '50', null, null, null, '1'), ('25025', 'LeaveBill:1:25004', 'user', '25022', '25022', '用户提交', null, null, null, null, '2018-12-03 23:57:55.886', null, '2018-12-03 23:58:06.818', '10932', 'completed', '50', null, null, null, '1'), ('25032', 'LeaveBill:1:25004', 'pm', '25022', '25022', '组长审批', null, null, null, null, '2018-12-03 23:58:06.820', null, '2018-12-03 23:58:14.507', '7687', 'completed', '50', null, null, null, '1'), ('25037', 'LeaveBill:1:25004', 'sid-D191DB7D-10B8-4AE7-8284-E0931287237C', '25022', '25022', '经理审批', null, null, null, null, '2018-12-03 23:58:14.515', null, null, null, null, '50', null, null, null, '1'), ('27504', 'LeaveBill:1:25004', 'user', '27501', '27501', '用户提交', null, null, null, null, '2018-12-11 13:44:16.257', null, '2018-12-11 13:45:15.530', '59273', 'completed', '50', null, null, null, '1'), ('27511', 'LeaveBill:1:25004', 'pm', '27501', '27501', '组长审批', null, null, null, null, '2018-12-11 13:45:15.552', null, '2018-12-11 13:45:25.685', '10133', 'completed', '50', null, null, null, '1'), ('27516', 'LeaveBill:1:25004', 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '27501', '27501', '人力报备', null, null, null, null, '2018-12-11 13:45:25.730', null, '2018-12-11 13:46:08.268', '42538', 'completed', '50', null, null, null, '1'); +INSERT INTO `ACT_HI_TASKINST` VALUES ('30108', 'LeaveBill:1:30104', 'user', '30105', '30105', '用户提交', null, null, null, null, '2018-12-18 22:51:52.601', null, '2018-12-18 22:52:05.815', '13214', 'completed', '50', null, null, null, '1'), ('30115', 'LeaveBill:1:30104', 'pm', '30105', '30105', '组长审批', null, null, null, null, '2018-12-18 22:52:05.817', null, '2018-12-18 22:52:11.603', '5786', 'completed', '50', null, null, null, '1'), ('30119', 'LeaveBill:1:30104', 'user', '30105', '30105', '用户提交', null, null, null, null, '2018-12-18 22:52:11.607', null, null, null, null, '50', null, null, null, '1'); COMMIT; -- ---------------------------- @@ -305,7 +304,7 @@ CREATE TABLE `ACT_HI_VARINST` ( -- Records of `ACT_HI_VARINST` -- ---------------------------- BEGIN; -INSERT INTO `ACT_HI_VARINST` VALUES ('25012', '25005', '25005', null, 'days', 'integer', '1', null, null, '3', '3', null, '2018-12-03 23:53:40.516', '2018-12-03 23:54:09.351'), ('25013', '25005', '25005', null, 'flag', 'string', '1', null, null, null, '审批', null, '2018-12-03 23:53:40.517', '2018-12-03 23:54:09.352'), ('25029', '25022', '25022', null, 'days', 'integer', '1', null, null, '15', '15', null, '2018-12-03 23:58:06.813', '2018-12-03 23:58:14.504'), ('25030', '25022', '25022', null, 'flag', 'string', '1', null, null, null, '审批', null, '2018-12-03 23:58:06.813', '2018-12-03 23:58:14.505'), ('27508', '27501', '27501', null, 'days', 'integer', '2', null, null, '7', '7', null, '2018-12-11 13:45:15.411', '2018-12-11 13:46:08.313'), ('27509', '27501', '27501', null, 'flag', 'string', '2', null, null, null, '审批', null, '2018-12-11 13:45:15.412', '2018-12-11 13:46:08.311'); +INSERT INTO `ACT_HI_VARINST` VALUES ('30112', '30105', '30105', null, 'days', 'integer', '1', null, null, '11', '11', null, '2018-12-18 22:52:05.813', '2018-12-18 22:52:11.598'), ('30113', '30105', '30105', null, 'flag', 'string', '1', null, null, null, '驳回', null, '2018-12-18 22:52:05.813', '2018-12-18 22:52:11.600'); COMMIT; -- ---------------------------- @@ -398,7 +397,7 @@ CREATE TABLE `ACT_RE_DEPLOYMENT` ( -- Records of `ACT_RE_DEPLOYMENT` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('12509', '请教流程', null, '1', '2018-11-11 01:47:50.296'), ('25001', '请假流程', null, '1', '2018-12-03 23:51:57.877'); +INSERT INTO `ACT_RE_DEPLOYMENT` VALUES ('12509', '请教流程', null, '1', '2018-11-11 01:47:50.296'), ('30101', '请假流程', null, '1', '2018-12-18 22:50:23.963'); COMMIT; -- ---------------------------- @@ -432,7 +431,7 @@ CREATE TABLE `ACT_RE_MODEL` ( -- Records of `ACT_RE_MODEL` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RE_MODEL` VALUES ('1', '11', '请假流程', 'LeaveBill', 'LeaveBill', '2018-11-10 22:52:35.569', '2018-12-03 23:45:57.654', '1', '{\"name\":\"请假流程\",\"revision\":1,\"description\":\"内置请假流程。\"}', null, '2', '3', '1'); +INSERT INTO `ACT_RE_MODEL` VALUES ('1', '13', '请假流程', 'LeaveBill', 'LeaveBill', '2018-11-10 22:52:35.569', '2018-12-18 22:47:07.638', '1', '{\"name\":\"请假流程\",\"revision\":1,\"description\":\"内置请假流程。\"}', null, '2', '3', '1'); COMMIT; -- ---------------------------- @@ -462,7 +461,7 @@ CREATE TABLE `ACT_RE_PROCDEF` ( -- Records of `ACT_RE_PROCDEF` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RE_PROCDEF` VALUES ('LeaveBill:1:25004', '2', 'LeaveBill', 'LeaveBill', 'LeaveBill', '1', '25001', '请假流程.bpmn20.xml', '请假流程.LeaveBill.png', null, '0', '1', '1', '1'); +INSERT INTO `ACT_RE_PROCDEF` VALUES ('LeaveBill:1:30104', '2', 'LeaveBill', 'LeaveBill', 'LeaveBill', '1', '30101', '请假流程.bpmn20.xml', '请假流程.LeaveBill.png', null, '0', '1', '1', '1'); COMMIT; -- ---------------------------- @@ -525,7 +524,7 @@ CREATE TABLE `ACT_RU_EXECUTION` ( -- Records of `ACT_RU_EXECUTION` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RU_EXECUTION` VALUES ('25005', '3', '25005', 'LeaveBill_17', null, 'LeaveBill:1:25004', null, 'sid-A13A9AA8-CC8F-4B33-8166-EF7757F6ABDB', '1', '0', '1', '0', '1', '2', '1', null, null), ('25022', '3', '25022', 'LeaveBill_18', null, 'LeaveBill:1:25004', null, 'sid-D191DB7D-10B8-4AE7-8284-E0931287237C', '1', '0', '1', '0', '1', '2', '1', null, null); +INSERT INTO `ACT_RU_EXECUTION` VALUES ('30105', '3', '30105', 'LeaveBill_6', null, 'LeaveBill:1:30104', null, 'user', '1', '0', '1', '0', '1', '2', '1', null, null); COMMIT; -- ---------------------------- @@ -552,6 +551,13 @@ CREATE TABLE `ACT_RU_IDENTITYLINK` ( CONSTRAINT `ACT_FK_TSKASS_TASK` FOREIGN KEY (`TASK_ID_`) REFERENCES `ACT_RU_TASK` (`ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +-- ---------------------------- +-- Records of `ACT_RU_IDENTITYLINK` +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RU_IDENTITYLINK` VALUES ('30110', '1', null, 'participant', 'admin', null, '30105', null), ('30120', '1', null, 'candidate', 'admin', '30119', null, null); +COMMIT; + -- ---------------------------- -- Table structure for `ACT_RU_JOB` -- ---------------------------- @@ -613,6 +619,13 @@ CREATE TABLE `ACT_RU_TASK` ( CONSTRAINT `ACT_FK_TASK_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `ACT_RU_EXECUTION` (`ID_`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +-- ---------------------------- +-- Records of `ACT_RU_TASK` +-- ---------------------------- +BEGIN; +INSERT INTO `ACT_RU_TASK` VALUES ('30119', '1', '30105', '30105', 'LeaveBill:1:30104', '用户提交', null, null, 'user', null, null, null, '50', '2018-12-18 22:52:11.607', null, null, '1', '1', null); +COMMIT; + -- ---------------------------- -- Table structure for `ACT_RU_VARIABLE` -- ---------------------------- @@ -644,7 +657,7 @@ CREATE TABLE `ACT_RU_VARIABLE` ( -- Records of `ACT_RU_VARIABLE` -- ---------------------------- BEGIN; -INSERT INTO `ACT_RU_VARIABLE` VALUES ('25012', '1', 'integer', 'days', '25005', '25005', null, null, null, '3', '3', null), ('25013', '1', 'string', 'flag', '25005', '25005', null, null, null, null, '审批', null), ('25029', '1', 'integer', 'days', '25022', '25022', null, null, null, '15', '15', null), ('25030', '1', 'string', 'flag', '25022', '25022', null, null, null, null, '审批', null); +INSERT INTO `ACT_RU_VARIABLE` VALUES ('30112', '1', 'integer', 'days', '30105', '30105', null, null, null, '11', '11', null), ('30113', '2', 'string', 'flag', '30105', '30105', null, null, null, null, '驳回', null); COMMIT; -- ---------------------------- @@ -663,6 +676,13 @@ CREATE TABLE `oa_leave_bill` ( `del_flag` char(50) DEFAULT '0' COMMENT '删除标识', `tenant_id` int(11) NOT NULL COMMENT '所属租户', PRIMARY KEY (`leave_id`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Records of `oa_leave_bill` +-- ---------------------------- +BEGIN; +INSERT INTO `oa_leave_bill` VALUES ('2', 'admin', '16', '2018-12-19 12:00', '1', '2018-12-19 12:00:00', '2018-12-18 22:35:45', '2018-12-18 22:37:13', '0', '1'), ('3', 'admin', '20', '2018-12-22 12:00', '1', '2018-12-22 12:00:00', '2018-12-18 22:41:11', '2018-12-18 22:41:27', '0', '1'), ('4', 'admin', '22', '111', '1', '2018-12-03 12:00:00', '2018-12-18 22:42:45', '2018-12-18 22:42:50', '0', '1'), ('5', 'admin', '20', '11111', '1', '2018-12-12 12:00:00', '2018-12-18 22:45:30', '2018-12-18 22:45:34', '0', '1'), ('6', 'admin', '11', '12', '1', '2018-12-04 12:00:00', '2018-12-18 22:51:19', '2018-12-18 22:51:52', '0', '1'); +COMMIT; SET FOREIGN_KEY_CHECKS = 1; diff --git a/pigx-auth/pom.xml b/pigx-auth/pom.xml index 0fa7c5236..8a5bfef19 100644 --- a/pigx-auth/pom.xml +++ b/pigx-auth/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-auth @@ -42,13 +42,13 @@ com.pig4cloud pigx-upms-api - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 @@ -60,7 +60,7 @@ com.pig4cloud pigx-common-data - 2.0.0 + 2.1.0 diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java index 4d1f932fe..993d5fb93 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java @@ -20,6 +20,7 @@ package com.pig4cloud.pigx.auth.config; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.common.security.component.PigxWebResponseExceptionTranslator; import com.pig4cloud.pigx.common.security.service.PigxClientDetailsService; import com.pig4cloud.pigx.common.security.service.PigxUser; @@ -36,6 +37,8 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.A import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; +import org.springframework.security.oauth2.provider.OAuth2Authentication; +import org.springframework.security.oauth2.provider.token.DefaultAuthenticationKeyGenerator; import org.springframework.security.oauth2.provider.token.TokenEnhancer; import org.springframework.security.oauth2.provider.token.TokenStore; import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore; @@ -90,6 +93,12 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap public TokenStore tokenStore() { RedisTokenStore tokenStore = new RedisTokenStore(redisConnectionFactory); tokenStore.setPrefix(SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX); + tokenStore.setAuthenticationKeyGenerator(new DefaultAuthenticationKeyGenerator() { + @Override + public String extractKey(OAuth2Authentication authentication) { + return super.extractKey(authentication) + ":" + TenantContextHolder.getTenantId(); + } + }); return tokenStore; } @@ -99,6 +108,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap final Map additionalInfo = new HashMap<>(8); PigxUser pigxUser = (PigxUser) authentication.getUserAuthentication().getPrincipal(); additionalInfo.put("user_id", pigxUser.getId()); + additionalInfo.put("username", pigxUser.getUsername()); additionalInfo.put("dept_id", pigxUser.getDeptId()); additionalInfo.put("tenant_id", pigxUser.getTenantId()); additionalInfo.put("license", SecurityConstants.PIGX_LICENSE); diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java index 165ac881e..96e57982d 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/endpoint/PigxTokenEndpoint.java @@ -26,27 +26,25 @@ import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.constant.PaginationConstants; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.common.security.annotation.Inner; -import com.pig4cloud.pigx.common.security.service.PigxUser; import lombok.AllArgsConstructor; import org.springframework.cache.CacheManager; import org.springframework.data.redis.core.ConvertingCursor; import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ScanOptions; +import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.http.HttpHeaders; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.common.OAuth2AccessToken; import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.security.oauth2.provider.token.TokenStore; -import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -59,7 +57,8 @@ import java.util.Map; @AllArgsConstructor @RequestMapping("/token") public class PigxTokenEndpoint { - private static final String PIGX_OAUTH_ACCESS = SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX + "access:"; + private static final String PIGX_OAUTH_ACCESS = SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX + "auth_to_access:"; + private static final String PIGX__ACCESS = SecurityConstants.PIGX_PREFIX + SecurityConstants.OAUTH_PREFIX + "access:"; private final TokenStore tokenStore; private final RedisTemplate redisTemplate; private final CacheManager cacheManager; @@ -113,7 +112,9 @@ public class PigxTokenEndpoint { @Inner @DeleteMapping("/{token}") public R delToken(@PathVariable("token") String token) { - return new R<>(redisTemplate.delete(PIGX_OAUTH_ACCESS + token)); + OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(token); + tokenStore.removeAccessToken(oAuth2AccessToken); + return new R<>(); } @@ -126,56 +127,19 @@ public class PigxTokenEndpoint { @Inner @PostMapping("/page") public R tokenList(@RequestBody Map params) { - List> list = new ArrayList<>(); //根据分页参数获取对应数据 - List pages = findKeysForPage(PIGX_OAUTH_ACCESS + "*", MapUtil.getInt(params, PaginationConstants.CURRENT), MapUtil.getInt(params, PaginationConstants.SIZE)); - - for (String page : pages) { - String accessToken = StrUtil.subAfter(page, PIGX_OAUTH_ACCESS, true); - OAuth2AccessToken token = tokenStore.readAccessToken(accessToken); - Map map = new HashMap<>(8); - - - map.put("token_type", token.getTokenType()); - map.put("token_value", token.getValue()); - map.put("expires_in", token.getExpiresIn() + ""); - - - OAuth2Authentication oAuth2Auth = tokenStore.readAuthentication(token); - Authentication authentication = oAuth2Auth.getUserAuthentication(); - - map.put("client_id", oAuth2Auth.getOAuth2Request().getClientId()); - map.put("grant_type", oAuth2Auth.getOAuth2Request().getGrantType()); - - if (authentication instanceof UsernamePasswordAuthenticationToken) { - UsernamePasswordAuthenticationToken authenticationToken = (UsernamePasswordAuthenticationToken) authentication; - if (extractToken(map, authenticationToken.getPrincipal())) { - continue; - } - } else if (authentication instanceof PreAuthenticatedAuthenticationToken) { - //刷新token方式 - PreAuthenticatedAuthenticationToken authenticationToken = (PreAuthenticatedAuthenticationToken) authentication; - if (extractToken(map, authenticationToken.getPrincipal())) { - continue; - } - } - list.add(map); - } + String key = String.format("%s*:%s", PIGX_OAUTH_ACCESS, TenantContextHolder.getTenantId()); + List pages = findKeysForPage(key, MapUtil.getInt(params, PaginationConstants.CURRENT) + , MapUtil.getInt(params, PaginationConstants.SIZE)); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); Page result = new Page(MapUtil.getInt(params, PaginationConstants.CURRENT), MapUtil.getInt(params, PaginationConstants.SIZE)); - result.setRecords(list); - result.setTotal(Long.valueOf(redisTemplate.keys(PIGX_OAUTH_ACCESS + "*").size())); + result.setRecords(redisTemplate.opsForValue().multiGet(pages)); + result.setTotal(Long.valueOf(redisTemplate.keys(key).size())); return new R<>(result); } - private boolean extractToken(Map map, Object principal) { - if (principal instanceof PigxUser) { - PigxUser user = (PigxUser) principal; - map.put("user_id", user.getId() + ""); - map.put("user_name", user.getUsername() + ""); - } - return false; - } private List findKeysForPage(String patternKey, int pageNum, int pageSize) { ScanOptions options = ScanOptions.scanOptions().match(patternKey).build(); diff --git a/pigx-common/pigx-common-core/pom.xml b/pigx-common/pigx-common-core/pom.xml index 891bc187f..24cb1f78b 100644 --- a/pigx-common/pigx-common-core/pom.xml +++ b/pigx-common/pigx-common-core/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-core diff --git a/pigx-common/pigx-common-data/pom.xml b/pigx-common/pigx-common-data/pom.xml index 56cd4ccce..b95218ec1 100644 --- a/pigx-common/pigx-common-data/pom.xml +++ b/pigx-common/pigx-common-data/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-data @@ -38,7 +38,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 @@ -50,7 +50,7 @@ com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java index dbec2bb1d..3c679c95d 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisAutoCacheManager.java @@ -53,20 +53,21 @@ public class RedisAutoCacheManager extends RedisCacheManager { if (StrUtil.isBlank(name) || !name.contains(SPLIT_FLAG)) { return super.createRedisCache(name, cacheConfig); } + String[] cacheArray = name.split(SPLIT_FLAG); if (cacheArray.length < CACHE_LENGTH) { return super.createRedisCache(name, cacheConfig); } - String cacheName = cacheArray[0] + ":" + TenantContextHolder.getTenantId(); + if (cacheConfig != null) { - long cacheAge = Long.getLong(cacheArray[1], -1); + long cacheAge = Long.parseLong(cacheArray[1]); cacheConfig = cacheConfig.entryTtl(Duration.ofSeconds(cacheAge)); } - return super.createRedisCache(cacheName, cacheConfig); + return super.createRedisCache(name, cacheConfig); } @Override public Cache getCache(String name) { - return super.getCache(name + ":" + TenantContextHolder.getTenantId()); + return super.getCache(name + SPLIT_FLAG + TenantContextHolder.getTenantId()); } } diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java index d4f5d5894..6858ebcc2 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisCacheAutoConfiguration.java @@ -75,11 +75,9 @@ public class RedisCacheAutoConfiguration { cacheNames.forEach(it -> cacheConfigMap.put(it, cacheConfiguration)); initialCaches.putAll(cacheConfigMap); } - boolean allowInFlightCacheCreation = true; - boolean enableTransactions = false; RedisAutoCacheManager cacheManager = new RedisAutoCacheManager(redisCacheWriter, cacheConfiguration, - initialCaches, allowInFlightCacheCreation); - cacheManager.setTransactionAware(enableTransactions); + initialCaches, true); + cacheManager.setTransactionAware(false); return this.customizerInvoker.customize(cacheManager); } diff --git a/pigx-common/pigx-common-gateway/pom.xml b/pigx-common/pigx-common-gateway/pom.xml index 0068db85e..5e5320340 100644 --- a/pigx-common/pigx-common-gateway/pom.xml +++ b/pigx-common/pigx-common-gateway/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-gateway @@ -36,7 +36,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 org.springframework.cloud diff --git a/pigx-common/pigx-common-job/pom.xml b/pigx-common/pigx-common-job/pom.xml index b3a7b2a4a..6277445f8 100644 --- a/pigx-common/pigx-common-job/pom.xml +++ b/pigx-common/pigx-common-job/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-job diff --git a/pigx-common/pigx-common-log/pom.xml b/pigx-common/pigx-common-log/pom.xml index 52cd3863b..3ed585fcf 100644 --- a/pigx-common/pigx-common-log/pom.xml +++ b/pigx-common/pigx-common-log/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-log @@ -38,13 +38,13 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 com.pig4cloud pigx-upms-api - 2.0.0 + 2.1.0 diff --git a/pigx-common/pigx-common-minio/pom.xml b/pigx-common/pigx-common-minio/pom.xml index 07505a9bf..c503c8149 100755 --- a/pigx-common/pigx-common-minio/pom.xml +++ b/pigx-common/pigx-common-minio/pom.xml @@ -6,7 +6,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-minio diff --git a/pigx-common/pigx-common-security/pom.xml b/pigx-common/pigx-common-security/pom.xml index 9f43c2c22..73b3d31b4 100644 --- a/pigx-common/pigx-common-security/pom.xml +++ b/pigx-common/pigx-common-security/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-security @@ -38,7 +38,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 @@ -49,7 +49,7 @@ com.pig4cloud pigx-upms-api - 2.0.0 + 2.1.0 diff --git a/pigx-common/pigx-common-swagger/pom.xml b/pigx-common/pigx-common-swagger/pom.xml index 725acf8d6..f2a3502ae 100644 --- a/pigx-common/pigx-common-swagger/pom.xml +++ b/pigx-common/pigx-common-swagger/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-swagger diff --git a/pigx-common/pigx-common-transaction/pom.xml b/pigx-common/pigx-common-transaction/pom.xml index 9e67e8703..18b484a25 100644 --- a/pigx-common/pigx-common-transaction/pom.xml +++ b/pigx-common/pigx-common-transaction/pom.xml @@ -5,7 +5,7 @@ com.pig4cloud pigx-common - 2.0.0 + 2.1.0 pigx-common-transaction @@ -17,7 +17,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 diff --git a/pigx-common/pom.xml b/pigx-common/pom.xml index 80415e4c8..bbe24ac1d 100644 --- a/pigx-common/pom.xml +++ b/pigx-common/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-common diff --git a/pigx-config/pom.xml b/pigx-config/pom.xml index bd07d985b..ec3912059 100644 --- a/pigx-config/pom.xml +++ b/pigx-config/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-config diff --git a/pigx-eureka/pom.xml b/pigx-eureka/pom.xml index 64622473f..2307b3d86 100644 --- a/pigx-eureka/pom.xml +++ b/pigx-eureka/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-eureka diff --git a/pigx-gateway/pom.xml b/pigx-gateway/pom.xml index fc5f50835..327f8cbfe 100644 --- a/pigx-gateway/pom.xml +++ b/pigx-gateway/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-gateway @@ -46,7 +46,7 @@ com.pig4cloud pigx-common-gateway - 2.0.0 + 2.1.0 @@ -63,7 +63,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 diff --git a/pigx-upms/pigx-upms-api/pom.xml b/pigx-upms/pigx-upms-api/pom.xml index d08bd3f11..465107410 100644 --- a/pigx-upms/pigx-upms-api/pom.xml +++ b/pigx-upms/pigx-upms-api/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-upms - 2.0.0 + 2.1.0 pigx-upms-api @@ -38,7 +38,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java index f7a7e6072..c0f0df0e6 100644 --- a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java +++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/dto/UserInfo.java @@ -21,7 +21,6 @@ package com.pig4cloud.pigx.admin.api.dto; import com.pig4cloud.pigx.admin.api.entity.SysUser; import lombok.Data; -import lombok.ToString; import java.io.Serializable; diff --git a/pigx-upms/pigx-upms-biz/pom.xml b/pigx-upms/pigx-upms-biz/pom.xml index 33cd42eb0..932a53c26 100644 --- a/pigx-upms/pigx-upms-biz/pom.xml +++ b/pigx-upms/pigx-upms-biz/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-upms - 2.0.0 + 2.1.0 pigx-upms-biz @@ -37,13 +37,13 @@ com.pig4cloud pigx-upms-api - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-log - 2.0.0 + 2.1.0 @@ -54,19 +54,19 @@ com.pig4cloud pigx-common-data - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-minio - 2.0.0 + 2.1.0 @@ -82,13 +82,13 @@ com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-gateway - 2.0.0 + 2.1.0 diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java index d2f7f28e2..bc2458de7 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java @@ -79,7 +79,7 @@ public class FileController { * @return */ @GetMapping("/{fileName}") - public R file(@PathVariable String fileName, HttpServletResponse response) { + public void file(@PathVariable String fileName, HttpServletResponse response) { String[] nameArray = StrUtil.split(fileName, StrUtil.DASHED); try (InputStream inputStream = minioTemplate.getObject(nameArray[0], nameArray[1])) { @@ -87,10 +87,6 @@ public class FileController { IoUtil.copy(inputStream, response.getOutputStream()); } catch (Exception e) { log.error("文件读取异常", e); - return R.builder().code(CommonConstants.FAIL) - .msg(e.getLocalizedMessage()).build(); } - - return R.builder().build(); } } diff --git a/pigx-upms/pom.xml b/pigx-upms/pom.xml index 388a9859e..7f78826fb 100644 --- a/pigx-upms/pom.xml +++ b/pigx-upms/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-upms diff --git a/pigx-visual/pigx-activiti/pom.xml b/pigx-visual/pigx-activiti/pom.xml index 87d1ca384..4f3a274b1 100644 --- a/pigx-visual/pigx-activiti/pom.xml +++ b/pigx-visual/pigx-activiti/pom.xml @@ -23,7 +23,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-activiti @@ -41,18 +41,18 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-data - 2.0.0 + 2.1.0 com.pig4cloud pigx-upms-api - 2.0.0 + 2.1.0 @@ -63,7 +63,7 @@ com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 @@ -128,12 +128,12 @@ com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pigx-codegen/pom.xml b/pigx-visual/pigx-codegen/pom.xml index 051afb09e..4ea65ece1 100755 --- a/pigx-visual/pigx-codegen/pom.xml +++ b/pigx-visual/pigx-codegen/pom.xml @@ -6,7 +6,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-codegen @@ -24,7 +24,7 @@ com.pig4cloud pigx-common-data - 2.0.0 + 2.1.0 @@ -41,19 +41,19 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pigx-daemon/pom.xml b/pigx-visual/pigx-daemon/pom.xml index 87267a4b1..18745ba11 100644 --- a/pigx-visual/pigx-daemon/pom.xml +++ b/pigx-visual/pigx-daemon/pom.xml @@ -23,7 +23,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-daemon @@ -41,18 +41,18 @@ com.pig4cloud pigx-common-job - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-data - 2.0.0 + 2.1.0 @@ -80,13 +80,13 @@ com.pig4cloud pigx-common-swagger - 2.0.0 + 2.1.0 com.pig4cloud pigx-common-security - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pigx-monitor/pom.xml b/pigx-visual/pigx-monitor/pom.xml index 9c9d699ac..bf786adcd 100644 --- a/pigx-visual/pigx-monitor/pom.xml +++ b/pigx-visual/pigx-monitor/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-monitor @@ -36,7 +36,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 org.springframework.boot diff --git a/pigx-visual/pigx-sso-client-demo/pom.xml b/pigx-visual/pigx-sso-client-demo/pom.xml index 3fbe8212d..263fcfe3d 100644 --- a/pigx-visual/pigx-sso-client-demo/pom.xml +++ b/pigx-visual/pigx-sso-client-demo/pom.xml @@ -29,7 +29,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pigx-tx-manager/pom.xml b/pigx-visual/pigx-tx-manager/pom.xml index 0f8755dcc..e743f0eff 100644 --- a/pigx-visual/pigx-tx-manager/pom.xml +++ b/pigx-visual/pigx-tx-manager/pom.xml @@ -5,7 +5,7 @@ com.pig4cloud pigx-visual - 2.0.0 + 2.1.0 pigx-tx-manager @@ -63,7 +63,7 @@ com.pig4cloud pigx-common-core - 2.0.0 + 2.1.0 diff --git a/pigx-visual/pom.xml b/pigx-visual/pom.xml index 42d9634b4..0260ed23c 100644 --- a/pigx-visual/pom.xml +++ b/pigx-visual/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 pigx-visual diff --git a/pom.xml b/pom.xml index a00b04fa9..872020a61 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ com.pig4cloud pigx - 2.0.0 + 2.1.0 ${project.artifactId} pom @@ -50,7 +50,7 @@ 1.8 2.0.4 4.3.2 - 3.0.7 + 3.0.6 0.0.9 2.9.2 2.10.0 From 2e0fd2e05413054a2d2cebb81a365c6ecf914f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Wed, 9 Jan 2019 11:23:09 +0800 Subject: [PATCH 27/29] :bookmark: Releasing / Version tags. v2.1.0 --- .editorconfig | 1 + .gitignore | 1 + LICENSE | 4 ++++ docker-compose.yml | 5 +++++ 4 files changed, 11 insertions(+) diff --git a/.editorconfig b/.editorconfig index 9bc93587c..2f2262bb1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,3 +1,4 @@ +# 开发组IDE 编辑器标准 V2.1.0 root = true [*.{adoc, bat, groovy, html, java, js, jsp, kt, kts, md, properties, py, rb, sh, sql, svg, txt, xml, xsd}] diff --git a/.gitignore b/.gitignore index 942584dd7..290129e4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +# 忽略匹配下列规则的Git 提交 V2.1.0 ### gradle ### .gradle /build/ diff --git a/LICENSE b/LICENSE index aab94402c..c9655a5e5 100644 --- a/LICENSE +++ b/LICENSE @@ -11,4 +11,8 @@ pigX并非一个开源软件,作者保留全部的权利。 将本项目的部分或全部代码和资源进行任何形式的再发行(尤其上传GitHub、Gitee ) 利用本项目的部分或全部代码和资源进行任何商业行为 +免责声明 + +PigX 未对任何组织、团队,书面授权商业使用。如若出现任何商业后果、纠纷和本人无关,特此声明 + Author: lengleng (wangiegie@gmail.com) diff --git a/docker-compose.yml b/docker-compose.yml index f3c536a0a..c51477111 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,8 @@ +# 使用说明 V2.1.0 +# 1. 使用docker-compose 宿主机不需要配置host来发现 +# 2. 无需修改源码,根目录 docker-compose up 即可 +# 3. 静静等待服务启动 + version: '2' services: pigx-mysql: From 25db6f32bcf82f0d5475a68afb916f42631283ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Thu, 10 Jan 2019 17:12:21 +0800 Subject: [PATCH 28/29] :bug: Fixing a bug.fix potential parse error,use uuid instead of customized file name rule --- .../pigx/admin/controller/FileController.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java index bc2458de7..4c44c8dcd 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java @@ -18,7 +18,7 @@ package com.pig4cloud.pigx.admin.controller; import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.pig4cloud.common.minio.service.MinioTemplate; import com.pig4cloud.pigx.common.core.constant.CommonConstants; @@ -48,21 +48,19 @@ public class FileController { /** * 上传文件 - * + * 文件名采用uuid,避免原始文件名中带"-"符号导致下载的时候解析出现异常 * @param file 资源 * @return R(bucketName, filename) */ @PostMapping("/upload") public R upload(@RequestParam("file") MultipartFile file) { - String originalFilename = file.getOriginalFilename(); - String newName = RandomUtil.randomString(16) + originalFilename; - + String fileName = IdUtil.simpleUUID(); Map resultMap = new HashMap<>(4); resultMap.put("bucketName", CommonConstants.BUCKET_NAME); - resultMap.put("fileName", newName); + resultMap.put("fileName", fileName); try { - minioTemplate.putObject(CommonConstants.BUCKET_NAME, newName, file.getInputStream()); + minioTemplate.putObject(CommonConstants.BUCKET_NAME, fileName, file.getInputStream()); } catch (Exception e) { log.error("上传失败", e); return R.builder().code(CommonConstants.FAIL) From 7859041c966d5bdd2941891df87ec631671e1b7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E8=90=8C=E5=93=92Sakura=E9=85=B1?= Date: Thu, 10 Jan 2019 17:36:45 +0800 Subject: [PATCH 29/29] :beers: Writing code drunkenly.add file extension name --- .../com/pig4cloud/pigx/admin/controller/FileController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java index 4c44c8dcd..d70702119 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/FileController.java @@ -17,6 +17,7 @@ package com.pig4cloud.pigx.admin.controller; +import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; @@ -54,7 +55,7 @@ public class FileController { */ @PostMapping("/upload") public R upload(@RequestParam("file") MultipartFile file) { - String fileName = IdUtil.simpleUUID(); + String fileName = IdUtil.simpleUUID()+StrUtil.DOT+ FileUtil.extName(file.getOriginalFilename()); Map resultMap = new HashMap<>(4); resultMap.put("bucketName", CommonConstants.BUCKET_NAME); resultMap.put("fileName", fileName);