从http://zhuguifei@192.168.19.200:1111/r/lb-boot-master.git迁移
原仓库最后提交:2024-09-05 49db69
¶Ô±ÈÐÂÎļþ |
| | |
| | | *.js linguist-language=Java |
| | | *.css linguist-language=Java |
| | | *.html linguist-language=Java |
| | | *.vue linguist-language=Java |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /target/ |
| | | /.idea/ |
| | | *.iml |
| | | rebel.xml |
¶Ô±ÈÐÂÎļþ |
| | |
| | | MIT License |
| | | |
| | | Copyright (c) 2019 jeecg-boot |
| | | |
| | | Permission is hereby granted, free of charge, to any person obtaining a copy |
| | | of this software and associated documentation files (the "Software"), to deal |
| | | in the Software without restriction, including without limitation the rights |
| | | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| | | copies of the Software, and to permit persons to whom the Software is |
| | | furnished to do so, subject to the following conditions: |
| | | |
| | | The above copyright notice and this permission notice shall be included in all |
| | | copies or substantial portions of the Software. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| | | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| | | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| | | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| | | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| | | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| | | SOFTWARE. |
¶Ô±ÈÐÂÎļþ |
| | |
| | | Jeecg-Boot ä½ä»£ç å¼åå¹³å° |
| | | =============== |
| | | |
| | | å½åææ°çæ¬ï¼ 3.0ï¼å叿¥æï¼2021-11-01ï¼ |
| | | |
| | | |
| | | ## åç«¯ææ¯æ¶æ |
| | | - åºç¡æ¡æ¶ï¼Spring Boot 2.3.5.RELEASE |
| | | |
| | | - æä¹
屿¡æ¶ï¼Mybatis-plus 3.4.3.1 |
| | | |
| | | - å®å
¨æ¡æ¶ï¼Apache Shiro 1.7.0ï¼Jwt 3.11.0 |
| | | |
| | | - æ°æ®åºè¿æ¥æ± ï¼é¿éå·´å·´Druid 1.1.22 |
| | | |
| | | - ç¼åæ¡æ¶ï¼redis |
| | | |
| | | - æ¥å¿æå°ï¼logback |
| | | |
| | | - å
¶ä»ï¼fastjsonï¼poiï¼Swagger-uiï¼quartz, lombokï¼ç®å代ç ï¼çã |
| | | |
| | | |
| | | |
| | | ## å¼åç¯å¢ |
| | | |
| | | - è¯è¨ï¼Java 8 |
| | | |
| | | - IDE(JAVA)ï¼ Eclipseå®è£
lombokæä»¶ æè
IDEA |
| | | |
| | | - ä¾èµç®¡çï¼Maven |
| | | |
| | | - æ°æ®åºï¼MySQL5.7+ & Oracle 11g & SqlServer & postgresql & å½äº§çæ´å¤æ°æ®åº |
| | | |
| | | - ç¼åï¼Redis |
| | | |
| | | |
| | | ## ææ¯ææ¡£ |
| | | |
| | | |
| | | - å¨çº¿æ¼ç¤º ï¼ [http://boot.jeecg.com](http://boot.jeecg.com) |
| | | |
| | | - å¨çº¿ææ¡£ï¼ [http://doc.jeecg.com](http://doc.jeecg.com) |
| | | |
| | | - 常è§é®é¢ï¼ [http://jeecg.com/doc/qa](http://jeecg.com/doc/qa) |
| | | |
| | | - QQ交æµç¾¤ ï¼ â¤860162132ãâ£774126647(满)ãâ¢816531124(满)ãâ¡769925425(满)ãâ 284271917(满) |
| | | |
| | | |
| | | ## ä¸é¡¹ææ¡£ |
| | | |
| | | #### ä¸ãæ¥è¯¢è¿æ»¤å¨ç¨æ³ |
| | | |
| | | ``` |
| | | QueryWrapper<?> queryWrapper = QueryGenerator.initQueryWrapper(?, req.getParameterMap()); |
| | | ``` |
| | | |
| | | 代ç 示ä¾ï¼ |
| | | |
| | | ``` |
| | | |
| | | @GetMapping(value = "/list") |
| | | public Result<IPage<JeecgDemo>> list(JeecgDemo jeecgDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, |
| | | @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, |
| | | HttpServletRequest req) { |
| | | Result<IPage<JeecgDemo>> result = new Result<IPage<JeecgDemo>>(); |
| | | |
| | | //è°ç¨QueryGeneratorçinitQueryWrapper |
| | | QueryWrapper<JeecgDemo> queryWrapper = QueryGenerator.initQueryWrapper(jeecgDemo, req.getParameterMap()); |
| | | |
| | | Page<JeecgDemo> page = new Page<JeecgDemo>(pageNo, pageSize); |
| | | IPage<JeecgDemo> pageList = jeecgDemoService.page(page, queryWrapper); |
| | | result.setSuccess(true); |
| | | result.setResult(pageList); |
| | | return result; |
| | | } |
| | | |
| | | ``` |
| | | |
| | | |
| | | |
| | | - æ¥è¯¢è§å (æ¬è§åä¸éç¨äºé«çº§æ¥è¯¢,é«çº§æ¥è¯¢æèªå·±å¯¹åºçæ¥è¯¢ç±»åå¯ä»¥éæ© ) |
| | | |
| | | | æ¥è¯¢æ¨¡å¼ | ç¨æ³ | 说æ | |
| | | |---------- |-------------------------------------------------------|------------------| |
| | | | æ¨¡ç³æ¥è¯¢ | æ¯æå·¦å³æ¨¡ç³åå
¨æ¨¡ç³ éè¦å¨æ¥è¯¢è¾å
¥æ¡å
åæå带\*ææ¯ååå
¨é¨å¸¦\* | | |
| | | | åéæ¥è¯¢ | 卿¥è¯¢è¾å
¥æ¡åé¢è¾å
¥! åæ¥è¯¢è¯¥åæ®µä¸çäºè¾å
¥å¼çæ°æ®(æ°å¼ç±»å䏿¯ææ¤ç§æ¥è¯¢,å¯ä»¥å°æ°å¼å段å®ä¹ä¸ºå符串类åç) | | |
| | | | \> \>= < <= | ååéæ¥è¯¢ å¨è¾å
¥æ¡åé¢è¾å
¥å¯¹åºç¹æ®å符å³è¡¨ç¤ºèµ°å¯¹åºè§åæ¥è¯¢ | | |
| | | | inæ¥è¯¢ | è¥ä¼ å
¥çæ°æ®å¸¦,(éå·) å表示该æ¥è¯¢ä¸ºinæ¥è¯¢ | | |
| | | | å¤éåæ®µæ¨¡ç³æ¥è¯¢ | ä¸è¿°4 æä¸ä¸ªç¹ä¾ï¼è¥æä¸æ¥è¯¢å段ååé½å¸¦éå· åä¼å°å
¶è§ä¸ºèµ°è¿ç§æ¥è¯¢æ¹å¼ ,该æ¥è¯¢æ¹å¼æ¯å°æ¥è¯¢æ¡ä»¶ä»¥éå·åå²åéåæ°ç» å°æ¯ä¸ªå
ç´ ä½likeæ¥è¯¢ ç¨oræ¼æ¥,ä¾å¦ ç°å¨nameä¼ å
¥å¼ ,a,b,c, é£ä¹ç»æsqlå°±æ¯ name like '%a%' or name like '%b%' or name like '%c%' | | |
| | | |
| | | |
| | | #### äºãAutoPoi(EXCELå·¥å
·ç±»-EasyPOIè¡åå级éæçæ¬ï¼ |
| | | |
| | | [å¨çº¿ææ¡£](https://github.com/zhangdaiscott/autopoi) |
| | | |
| | | |
| | | |
| | | #### ä¸ã代ç çæå¨ |
| | | |
| | | > åè½è¯´æï¼ ä¸é®çæç代ç ï¼å
æ¬ï¼controllerãserviceãdaoãmapperãentityãvueï¼ |
| | | |
| | | - 模æ¿ä½ç½®ï¼ src/main/resources/jeecg/code-template |
| | | - ææ¯ææ¡£ï¼ http://doc.jeecg.com/2043916 |
| | | |
| | | |
| | | |
| | | #### åãç¼ç æé使ç¨ç¤ºä¾ |
| | | |
| | | é夿 ¡éªææï¼ |
| | |  |
| | | |
| | | 1.å¼å
¥æéæ¥å£,代ç å¦ä¸: |
| | | |
| | | ``` |
| | | import { duplicateCheck } from '@/api/api' |
| | | ``` |
| | | 2.æ¾å°ç¼ç å¿
å¡«æ ¡éªè§åçå端代ç ,代ç å¦ä¸: |
| | | |
| | | ``` |
| | | <a-input placeholder="请è¾å
¥ç¼ç " v-decorator="['code', validatorRules.code ]"/> |
| | | |
| | | code: { |
| | | rules: [ |
| | | { required: true, message: '请è¾å
¥ç¼ç !' }, |
| | | {validator: this.validateCode} |
| | | ] |
| | | }, |
| | | ``` |
| | | 3.æ¾å°rulesévalidator对åºçæ¹æ³å¨åªé,ç¶å使ç¨ç¬¬ä¸æ¥ä¸å¼å
¥çæéæ ¡éªæ¥å£. |
| | | ä»¥ç¨æ·online表åç¼ç 为示ä¾,å
¶ä¸å个å¿
ä¼ çåæ°æ: |
| | | |
| | | ``` |
| | | {tableName:表å,fieldName:åæ®µå,fieldVal:åæ®µå¼,dataId:表ç主é®}, |
| | | ``` |
| | | å
·ä½ä½¿ç¨ä»£ç å¦ä¸: |
| | | |
| | | ``` |
| | | validateCode(rule, value, callback){ |
| | | let pattern = /^[a-z|A-Z][a-z|A-Z|\d|_|-]{0,}$/; |
| | | if(!pattern.test(value)){ |
| | | callback('ç¼ç å¿
须以忝å¼å¤´ï¼å¯å
嫿°åãä¸åçº¿ãæ¨ªæ '); |
| | | } else { |
| | | var params = { |
| | | tableName: "onl_cgreport_head", |
| | | fieldName: "code", |
| | | fieldVal: value, |
| | | dataId: this.model.id |
| | | }; |
| | | duplicateCheck(params).then((res)=>{ |
| | | if(res.success){ |
| | | callback(); |
| | | }else{ |
| | | callback(res.message); |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | ``` |
| | | |
| | | |
| | | ## dockeréåç¨æ³ |
| | | ææ¡£ï¼ http://doc.jeecg.com/2043889 |
| | | |
| | | ``` |
| | | 注æï¼ 妿æ¬å°å®è£
äºmysqlåredis,å¯å¨å®¹å¨åå
åææ¬å°æå¡ï¼ä¸ç¶ä¼ç«¯å£å²çªã |
| | | net stop redis |
| | | net stop mysql |
| | | |
| | | # 1.é
ç½®host |
| | | |
| | | # jeecgboot |
| | | 127.0.0.1 jeecg-boot-redis |
| | | 127.0.0.1 jeecg-boot-mysql |
| | | 127.0.0.1 jeecg-boot-system |
| | | |
| | | # 2.ä¿®æ¹é¡¹ç®é
ç½®æä»¶ application.yml |
| | | active: dev |
| | | |
| | | # 3.ä¿®æ¹application-dev.ymlæä»¶çæ°æ®åºåredis龿¥ |
| | | ä¿®æ¹æ°æ®åºè¿æ¥åredisè¿æ¥ï¼å°è¿æ¥æ¹æhostæ¹å¼ |
| | | |
| | | # 4.å
è¿JAVA项ç®jeecg-bootæ ¹è·¯å¾ mavenæå
|
| | | mvn clean package |
| | | |
| | | |
| | | # 5.æå»ºéå__容å¨ç»ï¼å½ä½ æ¹åæ¬å°ä»£ç ï¼ä¹å¯éæ°æå»ºéåï¼ |
| | | docker-compose build |
| | | |
| | | |
| | | # 6.å¯å¨éå__容å¨ç»ï¼ä¹å¯å代è¿è¡ä¸çéåï¼ |
| | | docker-compose up -d |
| | | |
| | | # 7.访é®åå°é¡¹ç®ï¼æ³¨æè¦å¼å¯swaggerï¼ |
| | | http://localhost:8080/jeecg-boot/doc.html |
| | | ``` |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | Navicat Premium Data Transfer |
| | | |
| | | Source Server : æ¬å° |
| | | Source Server Type : MySQL |
| | | Source Server Version : 80028 |
| | | Source Host : localhost:3306 |
| | | Source Schema : nacos |
| | | |
| | | Target Server Type : MySQL |
| | | Target Server Version : 80028 |
| | | File Encoding : 65001 |
| | | |
| | | Date: 06/05/2022 09:00:12 |
| | | */ |
| | | |
| | | SET NAMES utf8mb4; |
| | | SET FOREIGN_KEY_CHECKS = 0; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_info |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_info`; |
| | | CREATE TABLE `config_info` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', |
| | | `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'md5', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | `src_user` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'source user', |
| | | `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip', |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '' COMMENT 'ç§æ·å段', |
| | | `c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `c_schema` text CHARACTER SET utf8 COLLATE utf8_bin, |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='config_info'; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`) VALUES (1, 'jeecg-dev.yaml', 'DEFAULT_GROUP', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid: # å
¨å±druidåæ°ï¼ç»å¤§é¨åå¼åé»è®¤ä¿æä¸è´ã(ç°å·²æ¯æçåæ°å¦ä¸,䏿¸
æ¥å«ä¹ä¸è¦ä¹±è®¾ç½®)\n # è¿æ¥æ± çé
置信æ¯\n # åå§å大å°ï¼æå°ï¼æå¤§\n initial-size: 5\n min-idle: 5\n maxActive: 20\n # é
ç½®è·åè¿æ¥çå¾
è¶
æ¶çæ¶é´\n maxWait: 60000\n # é
ç½®é´éå¤ä¹
æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å
³éç空é²è¿æ¥ï¼å使¯æ¯«ç§\n timeBetweenEvictionRunsMillis: 60000\n # é
ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n # æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheç大å°\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n # é
ç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼\'wall\'ç¨äºé²ç«å¢\n filters: stat,wall,slf4j\n # éè¿connectProperties屿§æ¥æå¼mergeSqlåè½ï¼æ
¢SQLè®°å½\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://lb-boot-mysql:3306/lb-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n # 夿°æ®æºé
ç½®\n #multi-datasource1:\n #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n #username: root\n #password: root\n #driver-class-name: com.mysql.cj.jdbc.Driver\n #redis é
ç½®\n redis:\n database: 0\n host: lb-boot-redis\n lettuce:\n pool:\n max-active: 8 #æå¤§è¿æ¥æ°æ®åºè¿æ¥æ°,设 0 为没æéå¶\n max-idle: 8 #æå¤§çå¾
è¿æ¥ä¸çæ°é,设 0 为没æéå¶\n max-wait: -1ms #æå¤§å»ºç«è¿æ¥çå¾
æ¶é´ã妿è¶
è¿æ¤æ¶é´å°æ¥å°å¼å¸¸ã设为-1表示æ éå¶ã\n min-idle: 0 #æå°çå¾
è¿æ¥ä¸çæ°é,设 0 为没æéå¶\n shutdown-timeout: 100ms\n password:\n port: 6379\n #rabbitmqé
ç½®\n rabbitmq:\n host: 127.0.0.1\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n #æ¶è´¹è
çæå°æ°é\n concurrency: 1\n #æ¶è´¹è
çæå¤§æ°é\n max-concurrency: 1\n #æ¯å¦æ¯æéè¯\n retry:\n enabled: true\n#jeecgä¸ç¨é
ç½®\nminidao :\n base-package: org.jeecg.modules.jmreport.*\njeecg :\n # ç¾åå¯é¥ä¸²(åå端è¦ä¸è´ï¼æ£å¼åå¸è¯·èªè¡ä¿®æ¹)\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n # æ¬å°ï¼local\\Minioï¼minio\\é¿éäºï¼alioss\n uploadType: local\n path :\n #æä»¶ä¸ä¼ æ ¹ç®å½ 设置\n upload: D://opt//upFiles\n #webappæä»¶è·¯å¾\n webapp: D://opt//webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n #é¿éäºossåå¨é
ç½®\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n # ElasticSearch 6设置\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n # 表å设计å¨é
ç½®\n desform:\n # 主é¢é¢è²ï¼ä»
æ¯æ 16è¿å¶é¢è²ä»£ç ï¼\n theme-color: \"#1890ff\"\n # æä»¶ãå¾çä¸ä¼ æ¹å¼ï¼å¯é项ï¼qiniuï¼ä¸çäºï¼ãsystemï¼è·éç³»ç»é
ç½®ï¼\n upload-type: system\n map:\n # é
ç½®ç¾åº¦å°å¾çAKï¼ç³è¯·å°åï¼https://lbs.baidu.com/apiconsole/key?application=key#/home\n baidu: ??\n # å¨çº¿é¢è§æä»¶æå¡å¨å°åé
ç½®\n file-view-domain: 127.0.0.1:8012\n # minioæä»¶ä¸ä¼ \n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n #大屿¥è¡¨åæ°è®¾ç½®\n jmreport:\n mode: dev\n #æ¯å¦éè¦æ ¡éªtoken\n is_verify_token: false\n #å¿
é¡»æ ¡éªæ¹æ³\n verify_methods: remove,delete,save,add,update\n #Wpså¨çº¿ææ¡£\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n #xxl-jobé
ç½®\n xxljob:\n enabled: false\n adminAddresses: http://lb-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n #èªå®ä¹è·¯ç±é
ç½® yml nacos database\n route:\n config:\n data-id: jeecg-gateway-router\n group: DEFAULT_GROUP\n data-type: database\n #åå¸å¼éé
ç½®\n redisson:\n address: lb-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\n#Mybatisè¾åºsqlæ¥å¿\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\n#casåç¹ç»å½\ncas:\n prefixUrl: http://localhost:8888/cas\n#swagger\nknife4j:\n #å¼å¯ç产ç¯å¢å±è½\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\n\n#ç¬¬ä¸æ¹ç»å½\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: 1000002\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\n#ç¬¬ä¸æ¹APP对æ¥\nthird-app:\n enabled: false\n type:\n #ä¼ä¸å¾®ä¿¡\n WECHAT_ENTERPRISE:\n enabled: false\n #CORP_ID\n client-id: ??\n #SECRET\n client-secret: ??\n agent-id: ??\n #èªå»ºåºç¨ç§é¥ï¼æ°çä¼å¾®éè¦é
ç½®ï¼\n # agent-app-secret: ??\n #éé\n DINGTALK:\n enabled: false\n # appKey\n client-id: ??\n # appSecret\n client-secret: ??\n agent-id: ??', '5e6a666311eeed333a6e41d18b5a6b76', '2021-03-03 13:01:11', '2022-03-31 06:35:26', NULL, '127.0.0.1', '', '', '', '', '', 'yaml', ''); |
| | | INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`) VALUES (2, 'jeecg.yaml', 'DEFAULT_GROUP', 'server:\n tomcat:\n max-swallow-size: -1\n error:\n include-exception: true\n include-stacktrace: ALWAYS\n include-message: ALWAYS\n compression:\n enabled: true\n min-response-size: 1024\n mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*\nmanagement:\n health:\n mail:\n enabled: false\n endpoints:\n web:\n exposure:\n include: \"*\" #æ´é²ææèç¹\n health:\n sensitive: true #å
³éè¿æ»¤ææä¿¡æ¯\n endpoint:\n health:\n show-details: ALWAYS #æ¾ç¤ºè¯¦ç»ä¿¡æ¯\nspring:\n servlet:\n multipart:\n max-file-size: 10MB\n max-request-size: 10MB\n mail:\n host: smtp.163.com\n username: jeecgos@163.com\n password: ??\n properties:\n mail:\n smtp:\n auth: true\n starttls:\n enable: true\n required: true\n ## quartz宿¶ä»»å¡,éç¨æ°æ®åºæ¹å¼\n quartz:\n job-store-type: jdbc\n initialize-schema: embedded\n #设置èªå¨å¯å¨ï¼é»è®¤ä¸º true\n auto-startup: false\n #å¯å¨æ¶æ´æ°å·±åå¨çJob\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.quartz.impl.jdbcjobstore.JobStoreTX\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 60000\n clusterCheckinInterval: 10000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\n #json æ¶é´æ³ç»ä¸è½¬æ¢\n jackson:\n date-format: yyyy-MM-dd HH:mm:ss\n time-zone: GMT+8\n aop:\n proxy-target-class: true\n activiti:\n check-process-definitions: false\n #å¯ç¨ä½ä¸æ§è¡å¨\n async-executor-activate: false\n #å¯ç¨å¼æ¥æ§è¡å¨\n job-executor-activate: false\n jpa:\n open-in-view: false\n #é
ç½®freemarker\n freemarker:\n # 设置模æ¿åç¼å\n suffix: .ftl\n # è®¾ç½®ææ¡£ç±»å\n content-type: text/html\n # 设置页é¢ç¼ç æ ¼å¼\n charset: UTF-8\n # 设置页é¢ç¼å\n cache: false\n prefer-file-system-access: false\n # 设置ftlæä»¶è·¯å¾\n template-loader-path:\n - classpath:/templates\n # è®¾ç½®éææä»¶è·¯å¾ï¼js,cssç\n mvc:\n static-path-pattern: /**\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\n#mybatis plus 设置\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n # å
³éMP3.0èªå¸¦çbanner\n banner: false\n db-config:\n #主é®ç±»å 0:\"æ°æ®åºIDèªå¢\",1:\"该类å为æªè®¾ç½®ä¸»é®ç±»å\", 2:\"ç¨æ·è¾å
¥ID\",3:\"å
¨å±å¯ä¸ID (æ°åç±»åå¯ä¸ID)\", 4:\"å
¨å±å¯ä¸ID UUID\",5:\"å符串å
¨å±å¯ä¸ID (idWorker çå符串表示)\";\n id-type: ASSIGN_ID\n # é»è®¤æ°æ®åºè¡¨ä¸å线å½å\n table-underline: true\n configuration:\n # è¿ä¸ªé
ç½®ä¼å°æ§è¡çsqlæå°åºæ¥ï¼å¨å¼åææµè¯çæ¶åå¯ä»¥ç¨\n #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\n # è¿åç±»å为Map,æ¾ç¤ºnull对åºçåæ®µ\n call-setters-on-nulls: true', '411f9c73fc519225add2f7c992279f6f', '2021-03-03 13:01:42', '2021-06-28 07:13:40', NULL, '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); |
| | | INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`) VALUES (3, 'jeecg-gateway-router.json', 'DEFAULT_GROUP', '[{\r\n \"id\": \"jeecg-system\",\r\n \"order\": 0,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/sys/**\",\r\n \"_genkey_1\": \"/eoa/**\",\r\n \"_genkey_2\": \"/joa/**\",\r\n \"_genkey_3\": \"/jmreport/**\",\r\n \"_genkey_4\": \"/bigscreen/**\",\r\n \"_genkey_5\": \"/desform/**\",\r\n \"_genkey_6\": \"/online/**\",\r\n \"_genkey_8\": \"/act/**\",\r\n \"_genkey_9\": \"/plug-in/**\",\r\n \"_genkey_10\": \"/generic/**\",\r\n \"_genkey_11\": \"/v1/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb://jeecg-system\"\r\n}, {\r\n \"id\": \"jeecg-demo\",\r\n \"order\": 1,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/mock/**\",\r\n \"_genkey_1\": \"/test/**\",\r\n \"_genkey_2\": \"/bigscreen/template1/**\",\r\n \"_genkey_3\": \"/bigscreen/template2/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb://jeecg-demo\"\r\n}, {\r\n \"id\": \"jeecg-system-websocket\",\r\n \"order\": 2,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/websocket/**\",\r\n \"_genkey_1\": \"/eoaSocket/**\",\r\n \"_genkey_2\": \"/newsWebsocket/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb:ws://jeecg-system\"\r\n}, {\r\n \"id\": \"jeecg-demo-websocket\",\r\n \"order\": 3,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/vxeSocket/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb:ws://jeecg-demo\"\r\n}]', '82f4033ef6a51ce2ab6ce505be1b729a', '2021-03-03 13:02:14', '2021-03-03 13:02:14', NULL, '172.17.0.1', '', '', NULL, NULL, NULL, 'json', NULL); |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_info_aggr |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_info_aggr`; |
| | | CREATE TABLE `config_info_aggr` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', |
| | | `datum_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'datum_id', |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'å
容', |
| | | `gmt_modified` datetime NOT NULL COMMENT 'ä¿®æ¹æ¶é´', |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '' COMMENT 'ç§æ·å段', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='å¢å ç§æ·å段'; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info_aggr |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_info_beta |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_info_beta`; |
| | | CREATE TABLE `config_info_beta` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name', |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', |
| | | `beta_ips` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'betaIps', |
| | | `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'md5', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | `src_user` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'source user', |
| | | `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '' COMMENT 'ç§æ·å段', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='config_info_beta'; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info_beta |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_info_tag |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_info_tag`; |
| | | CREATE TABLE `config_info_tag` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_id', |
| | | `tag_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_id', |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name', |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', |
| | | `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'md5', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | `src_user` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'source user', |
| | | `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='config_info_tag'; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info_tag |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_tags_relation |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_tags_relation`; |
| | | CREATE TABLE `config_tags_relation` ( |
| | | `id` bigint NOT NULL COMMENT 'id', |
| | | `tag_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_name', |
| | | `tag_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'tag_type', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_id', |
| | | `nid` bigint NOT NULL AUTO_INCREMENT, |
| | | PRIMARY KEY (`nid`) USING BTREE, |
| | | UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`) USING BTREE, |
| | | KEY `idx_tenant_id` (`tenant_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='config_tag_relation'; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_tags_relation |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for group_capacity |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `group_capacity`; |
| | | CREATE TABLE `group_capacity` ( |
| | | `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主é®ID', |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group IDï¼ç©ºå符表示æ´ä¸ªé群', |
| | | `quota` int unsigned NOT NULL DEFAULT '0' COMMENT 'é
é¢ï¼0表示使ç¨é»è®¤å¼', |
| | | `usage` int unsigned NOT NULL DEFAULT '0' COMMENT '使ç¨é', |
| | | `max_size` int unsigned NOT NULL DEFAULT '0' COMMENT 'å个é
置大å°ä¸éï¼åä½ä¸ºåèï¼0表示使ç¨é»è®¤å¼', |
| | | `max_aggr_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'èååé
ç½®æå¤§ä¸ªæ°ï¼ï¼0表示使ç¨é»è®¤å¼', |
| | | `max_aggr_size` int unsigned NOT NULL DEFAULT '0' COMMENT 'å个èåæ°æ®çåé
置大å°ä¸éï¼åä½ä¸ºåèï¼0表示使ç¨é»è®¤å¼', |
| | | `max_history_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'æå¤§åæ´å岿°é', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_group_id` (`group_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='é群ãåGroup容éä¿¡æ¯è¡¨'; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of group_capacity |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for his_config_info |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `his_config_info`; |
| | | CREATE TABLE `his_config_info` ( |
| | | `id` bigint unsigned NOT NULL, |
| | | `nid` bigint unsigned NOT NULL AUTO_INCREMENT, |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name', |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, |
| | | `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | `src_user` text CHARACTER SET utf8 COLLATE utf8_bin, |
| | | `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `op_type` char(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '' COMMENT 'ç§æ·å段', |
| | | PRIMARY KEY (`nid`) USING BTREE, |
| | | KEY `idx_gmt_create` (`gmt_create`) USING BTREE, |
| | | KEY `idx_gmt_modified` (`gmt_modified`) USING BTREE, |
| | | KEY `idx_did` (`data_id`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='å¤ç§æ·æ¹é '; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of his_config_info |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | INSERT INTO `his_config_info` (`id`, `nid`, `data_id`, `group_id`, `app_name`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `op_type`, `tenant_id`) VALUES (1, 3, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid: # å
¨å±druidåæ°ï¼ç»å¤§é¨åå¼åé»è®¤ä¿æä¸è´ã(ç°å·²æ¯æçåæ°å¦ä¸,䏿¸
æ¥å«ä¹ä¸è¦ä¹±è®¾ç½®)\n # è¿æ¥æ± çé
置信æ¯\n # åå§å大å°ï¼æå°ï¼æå¤§\n initial-size: 5\n min-idle: 5\n maxActive: 20\n # é
ç½®è·åè¿æ¥çå¾
è¶
æ¶çæ¶é´\n maxWait: 60000\n # é
ç½®é´éå¤ä¹
æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å
³éç空é²è¿æ¥ï¼å使¯æ¯«ç§\n timeBetweenEvictionRunsMillis: 60000\n # é
ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n # æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheç大å°\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n # é
ç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼\'wall\'ç¨äºé²ç«å¢\n filters: stat,wall,slf4j\n # éè¿connectProperties屿§æ¥æå¼mergeSqlåè½ï¼æ
¢SQLè®°å½\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://lb-boot-mysql:3306/lb-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n # 夿°æ®æºé
ç½®\n #multi-datasource1:\n #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n #username: root\n #password: root\n #driver-class-name: com.mysql.cj.jdbc.Driver\n #redis é
ç½®\n redis:\n database: 0\n host: lb-boot-redis\n lettuce:\n pool:\n max-active: 8 #æå¤§è¿æ¥æ°æ®åºè¿æ¥æ°,设 0 为没æéå¶\n max-idle: 8 #æå¤§çå¾
è¿æ¥ä¸çæ°é,设 0 为没æéå¶\n max-wait: -1ms #æå¤§å»ºç«è¿æ¥çå¾
æ¶é´ã妿è¶
è¿æ¤æ¶é´å°æ¥å°å¼å¸¸ã设为-1表示æ éå¶ã\n min-idle: 0 #æå°çå¾
è¿æ¥ä¸çæ°é,设 0 为没æéå¶\n shutdown-timeout: 100ms\n password:\n port: 6379\n #rabbitmqé
ç½®\n rabbitmq:\n host: 127.0.0.1\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n #æ¶è´¹è
çæå°æ°é\n concurrency: 1\n #æ¶è´¹è
çæå¤§æ°é\n max-concurrency: 1\n #æ¯å¦æ¯æéè¯\n retry:\n enabled: true\n#jeecgä¸ç¨é
ç½®\nminidao :\n base-package: org.jeecg.modules.jmreport.*\njeecg :\n # ç¾åå¯é¥ä¸²(åå端è¦ä¸è´ï¼æ£å¼åå¸è¯·èªè¡ä¿®æ¹)\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n # æ¬å°ï¼local\\Minioï¼minio\\é¿éäºï¼alioss\n uploadType: local\n path :\n #æä»¶ä¸ä¼ æ ¹ç®å½ 设置\n upload: /opt/upFiles\n #webappæä»¶è·¯å¾\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n #é¿éäºossåå¨é
ç½®\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n # ElasticSearch 6设置\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n # 表å设计å¨é
ç½®\n desform:\n # 主é¢é¢è²ï¼ä»
æ¯æ 16è¿å¶é¢è²ä»£ç ï¼\n theme-color: \"#1890ff\"\n # æä»¶ãå¾çä¸ä¼ æ¹å¼ï¼å¯é项ï¼qiniuï¼ä¸çäºï¼ãsystemï¼è·éç³»ç»é
ç½®ï¼\n upload-type: system\n map:\n # é
ç½®ç¾åº¦å°å¾çAKï¼ç³è¯·å°åï¼https://lbs.baidu.com/apiconsole/key?application=key#/home\n baidu: ??\n # å¨çº¿é¢è§æä»¶æå¡å¨å°åé
ç½®\n file-view-domain: 127.0.0.1:8012\n # minioæä»¶ä¸ä¼ \n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n #大屿¥è¡¨åæ°è®¾ç½®\n jmreport:\n mode: dev\n #æ¯å¦éè¦æ ¡éªtoken\n is_verify_token: false\n #å¿
é¡»æ ¡éªæ¹æ³\n verify_methods: remove,delete,save,add,update\n #Wpså¨çº¿ææ¡£\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n #xxl-jobé
ç½®\n xxljob:\n enabled: false\n adminAddresses: http://lb-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n #èªå®ä¹è·¯ç±é
ç½® yml nacos database\n route:\n config:\n data-id: jeecg-gateway-router\n group: DEFAULT_GROUP\n data-type: database\n #åå¸å¼éé
ç½®\n redisson:\n address: lb-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\n#Mybatisè¾åºsqlæ¥å¿\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\n#casåç¹ç»å½\ncas:\n prefixUrl: http://localhost:8888/cas\n#swagger\nknife4j:\n #å¼å¯ç产ç¯å¢å±è½\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\n\n#ç¬¬ä¸æ¹ç»å½\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: 1000002\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\n#ç¬¬ä¸æ¹APP对æ¥\nthird-app:\n enabled: false\n type:\n #ä¼ä¸å¾®ä¿¡\n WECHAT_ENTERPRISE:\n enabled: false\n #CORP_ID\n client-id: ??\n #SECRET\n client-secret: ??\n agent-id: ??\n #èªå»ºåºç¨ç§é¥ï¼æ°çä¼å¾®éè¦é
ç½®ï¼\n # agent-app-secret: ??\n #éé\n DINGTALK:\n enabled: false\n # appKey\n client-id: ??\n # appSecret\n client-secret: ??\n agent-id: ??', 'f4adb3b7667b140706d989a99181dbb1', '2010-05-05 00:00:00', '2022-03-31 06:35:26', NULL, '127.0.0.1', 'U', ''); |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for permissions |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `permissions`; |
| | | CREATE TABLE `permissions` ( |
| | | `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `resource` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `action` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | UNIQUE KEY `uk_role_permission` (`role`,`resource`,`action`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of permissions |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for roles |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `roles`; |
| | | CREATE TABLE `roles` ( |
| | | `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | UNIQUE KEY `uk_username_role` (`username`,`role`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of roles |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | INSERT INTO `roles` (`username`, `role`) VALUES ('nacos', 'ROLE_ADMIN'); |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for tenant_capacity |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `tenant_capacity`; |
| | | CREATE TABLE `tenant_capacity` ( |
| | | `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主é®ID', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID', |
| | | `quota` int unsigned NOT NULL DEFAULT '0' COMMENT 'é
é¢ï¼0表示使ç¨é»è®¤å¼', |
| | | `usage` int unsigned NOT NULL DEFAULT '0' COMMENT '使ç¨é', |
| | | `max_size` int unsigned NOT NULL DEFAULT '0' COMMENT 'å个é
置大å°ä¸éï¼åä½ä¸ºåèï¼0表示使ç¨é»è®¤å¼', |
| | | `max_aggr_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'èååé
ç½®æå¤§ä¸ªæ°', |
| | | `max_aggr_size` int unsigned NOT NULL DEFAULT '0' COMMENT 'å个èåæ°æ®çåé
置大å°ä¸éï¼åä½ä¸ºåèï¼0表示使ç¨é»è®¤å¼', |
| | | `max_history_count` int unsigned NOT NULL DEFAULT '0' COMMENT 'æå¤§åæ´å岿°é', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_tenant_id` (`tenant_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='ç§æ·å®¹éä¿¡æ¯è¡¨'; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of tenant_capacity |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for tenant_info |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `tenant_info`; |
| | | CREATE TABLE `tenant_info` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `kp` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'kp', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_id', |
| | | `tenant_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_name', |
| | | `tenant_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'tenant_desc', |
| | | `create_source` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'create_source', |
| | | `gmt_create` bigint NOT NULL COMMENT 'å建æ¶é´', |
| | | `gmt_modified` bigint NOT NULL COMMENT 'ä¿®æ¹æ¶é´', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`) USING BTREE, |
| | | KEY `idx_tenant_id` (`tenant_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='tenant_info'; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of tenant_info |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | COMMIT; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for users |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `users`; |
| | | CREATE TABLE `users` ( |
| | | `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `password` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `enabled` tinyint(1) NOT NULL, |
| | | PRIMARY KEY (`username`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of users |
| | | -- ---------------------------- |
| | | BEGIN; |
| | | INSERT INTO `users` (`username`, `password`, `enabled`) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', 1); |
| | | COMMIT; |
| | | |
| | | SET FOREIGN_KEY_CHECKS = 1; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | FROM mysql:8.0.19 |
| | | |
| | | MAINTAINER jeecgos@163.com |
| | | |
| | | ENV TZ=Asia/Shanghai |
| | | |
| | | RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone |
| | | |
| | | COPY ./tables_nacos.sql /docker-entrypoint-initdb.d |
| | | |
| | | COPY ./jeecgboot-mysql-5.7.sql /docker-entrypoint-initdb.d |
| | | |
| | | COPY ./tables_xxl_job.sql /docker-entrypoint-initdb.d |
¶Ô±ÈÐÂÎļþ |
| | |
| | | CREATE database if NOT EXISTS `nacos` default character set utf8mb4 collate utf8mb4_general_ci; |
| | | use `nacos`; |
| | | |
| | | /* |
| | | Navicat Premium Data Transfer |
| | | |
| | | Source Server : mysql5.7 |
| | | Source Server Type : MySQL |
| | | Source Server Version : 50727 |
| | | Source Host : 127.0.0.1:3306 |
| | | Source Schema : nacos |
| | | |
| | | Target Server Type : MySQL |
| | | Target Server Version : 50727 |
| | | File Encoding : 65001 |
| | | |
| | | Date: 20/12/2021 11:16:39 |
| | | */ |
| | | |
| | | SET NAMES utf8mb4; |
| | | SET FOREIGN_KEY_CHECKS = 0; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_info |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_info`; |
| | | CREATE TABLE `config_info` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', |
| | | `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user', |
| | | `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip', |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'ç§æ·å段', |
| | | `c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `c_schema` text CHARACTER SET utf8 COLLATE utf8_bin NULL, |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info' ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info |
| | | -- ---------------------------- |
| | | INSERT INTO `config_info` VALUES (1, 'jeecg-dev.yaml', 'DEFAULT_GROUP', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid: # å
¨å±druidåæ°ï¼ç»å¤§é¨åå¼åé»è®¤ä¿æä¸è´ã(ç°å·²æ¯æçåæ°å¦ä¸,䏿¸
æ¥å«ä¹ä¸è¦ä¹±è®¾ç½®)\n # è¿æ¥æ± çé
置信æ¯\n # åå§å大å°ï¼æå°ï¼æå¤§\n initial-size: 5\n min-idle: 5\n maxActive: 20\n # é
ç½®è·åè¿æ¥çå¾
è¶
æ¶çæ¶é´\n maxWait: 60000\n # é
ç½®é´éå¤ä¹
æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å
³éç空é²è¿æ¥ï¼å使¯æ¯«ç§\n timeBetweenEvictionRunsMillis: 60000\n # é
ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n # æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheç大å°\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n # é
ç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼\'wall\'ç¨äºé²ç«å¢\n filters: stat,wall,slf4j\n # éè¿connectProperties屿§æ¥æå¼mergeSqlåè½ï¼æ
¢SQLè®°å½\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://lb-boot-mysql:3306/lb-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n # 夿°æ®æºé
ç½®\n #multi-datasource1:\n #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n #username: root\n #password: root\n #driver-class-name: com.mysql.cj.jdbc.Driver\n #redis é
ç½®\n redis:\n database: 0\n host: lb-boot-redis\n lettuce:\n pool:\n max-active: 8 #æå¤§è¿æ¥æ°æ®åºè¿æ¥æ°,设 0 为没æéå¶\n max-idle: 8 #æå¤§çå¾
è¿æ¥ä¸çæ°é,设 0 为没æéå¶\n max-wait: -1ms #æå¤§å»ºç«è¿æ¥çå¾
æ¶é´ã妿è¶
è¿æ¤æ¶é´å°æ¥å°å¼å¸¸ã设为-1表示æ éå¶ã\n min-idle: 0 #æå°çå¾
è¿æ¥ä¸çæ°é,设 0 为没æéå¶\n shutdown-timeout: 100ms\n password:\n port: 6379\n #rabbitmqé
ç½®\n rabbitmq:\n host: 127.0.0.1\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n #æ¶è´¹è
çæå°æ°é\n concurrency: 1\n #æ¶è´¹è
çæå¤§æ°é\n max-concurrency: 1\n #æ¯å¦æ¯æéè¯\n retry:\n enabled: true\n#jeecgä¸ç¨é
ç½®\nminidao :\n base-package: org.jeecg.modules.jmreport.*\njeecg :\n # ç¾åå¯é¥ä¸²(åå端è¦ä¸è´ï¼æ£å¼åå¸è¯·èªè¡ä¿®æ¹)\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n # æ¬å°ï¼local\\Minioï¼minio\\é¿éäºï¼alioss\n uploadType: local\n path :\n #æä»¶ä¸ä¼ æ ¹ç®å½ 设置\n upload: /opt/upFiles\n #webappæä»¶è·¯å¾\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n #é¿éäºossåå¨é
ç½®\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n # ElasticSearch 6设置\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n # 表å设计å¨é
ç½®\n desform:\n # 主é¢é¢è²ï¼ä»
æ¯æ 16è¿å¶é¢è²ä»£ç ï¼\n theme-color: \"#1890ff\"\n # æä»¶ãå¾çä¸ä¼ æ¹å¼ï¼å¯é项ï¼qiniuï¼ä¸çäºï¼ãsystemï¼è·éç³»ç»é
ç½®ï¼\n upload-type: system\n map:\n # é
ç½®ç¾åº¦å°å¾çAKï¼ç³è¯·å°åï¼https://lbs.baidu.com/apiconsole/key?application=key#/home\n baidu: ??\n # å¨çº¿é¢è§æä»¶æå¡å¨å°åé
ç½®\n file-view-domain: 127.0.0.1:8012\n # minioæä»¶ä¸ä¼ \n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n #大屿¥è¡¨åæ°è®¾ç½®\n jmreport:\n mode: dev\n #æ¯å¦éè¦æ ¡éªtoken\n is_verify_token: false\n #å¿
é¡»æ ¡éªæ¹æ³\n verify_methods: remove,delete,save,add,update\n #Wpså¨çº¿ææ¡£\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n #xxl-jobé
ç½®\n xxljob:\n enabled: false\n adminAddresses: http://lb-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n #èªå®ä¹è·¯ç±é
ç½® yml nacos database\n route:\n config:\n data-id: jeecg-gateway-router\n group: DEFAULT_GROUP\n data-type: database\n #åå¸å¼éé
ç½®\n redisson:\n address: lb-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\n#Mybatisè¾åºsqlæ¥å¿\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\n#casåç¹ç»å½\ncas:\n prefixUrl: http://localhost:8888/cas\n#swagger\nknife4j:\n #å¼å¯ç产ç¯å¢å±è½\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\n\n#ç¬¬ä¸æ¹ç»å½\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: 1000002\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\n#ç¬¬ä¸æ¹APP对æ¥\nthird-app:\n enabled: false\n type:\n #ä¼ä¸å¾®ä¿¡\n WECHAT_ENTERPRISE:\n enabled: false\n #CORP_ID\n client-id: ??\n #SECRET\n client-secret: ??\n agent-id: ??\n #èªå»ºåºç¨ç§é¥ï¼æ°çä¼å¾®éè¦é
ç½®ï¼\n # agent-app-secret: ??\n #éé\n DINGTALK:\n enabled: false\n # appKey\n client-id: ??\n # appSecret\n client-secret: ??\n agent-id: ??', '8b05ed4ee8ecbc4e7a4d425190b60273', '2021-03-03 13:01:11', '2021-08-17 10:14:56', NULL, '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); |
| | | INSERT INTO `config_info` VALUES (2, 'jeecg.yaml', 'DEFAULT_GROUP', 'server:\n tomcat:\n max-swallow-size: -1\n error:\n include-exception: true\n include-stacktrace: ALWAYS\n include-message: ALWAYS\n compression:\n enabled: true\n min-response-size: 1024\n mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*\nmanagement:\n health:\n mail:\n enabled: false\n endpoints:\n web:\n exposure:\n include: \"*\" #æ´é²ææèç¹\n health:\n sensitive: true #å
³éè¿æ»¤ææä¿¡æ¯\n endpoint:\n health:\n show-details: ALWAYS #æ¾ç¤ºè¯¦ç»ä¿¡æ¯\nspring:\n servlet:\n multipart:\n max-file-size: 10MB\n max-request-size: 10MB\n mail:\n host: smtp.163.com\n username: jeecgos@163.com\n password: ??\n properties:\n mail:\n smtp:\n auth: true\n starttls:\n enable: true\n required: true\n ## quartz宿¶ä»»å¡,éç¨æ°æ®åºæ¹å¼\n quartz:\n job-store-type: jdbc\n initialize-schema: embedded\n #设置èªå¨å¯å¨ï¼é»è®¤ä¸º true\n auto-startup: false\n #å¯å¨æ¶æ´æ°å·±åå¨çJob\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.quartz.impl.jdbcjobstore.JobStoreTX\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 60000\n clusterCheckinInterval: 10000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\n #json æ¶é´æ³ç»ä¸è½¬æ¢\n jackson:\n date-format: yyyy-MM-dd HH:mm:ss\n time-zone: GMT+8\n aop:\n proxy-target-class: true\n activiti:\n check-process-definitions: false\n #å¯ç¨ä½ä¸æ§è¡å¨\n async-executor-activate: false\n #å¯ç¨å¼æ¥æ§è¡å¨\n job-executor-activate: false\n jpa:\n open-in-view: false\n #é
ç½®freemarker\n freemarker:\n # 设置模æ¿åç¼å\n suffix: .ftl\n # è®¾ç½®ææ¡£ç±»å\n content-type: text/html\n # 设置页é¢ç¼ç æ ¼å¼\n charset: UTF-8\n # 设置页é¢ç¼å\n cache: false\n prefer-file-system-access: false\n # 设置ftlæä»¶è·¯å¾\n template-loader-path:\n - classpath:/templates\n # è®¾ç½®éææä»¶è·¯å¾ï¼js,cssç\n mvc:\n static-path-pattern: /**\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\n#mybatis plus 设置\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n # å
³éMP3.0èªå¸¦çbanner\n banner: false\n db-config:\n #主é®ç±»å 0:\"æ°æ®åºIDèªå¢\",1:\"该类å为æªè®¾ç½®ä¸»é®ç±»å\", 2:\"ç¨æ·è¾å
¥ID\",3:\"å
¨å±å¯ä¸ID (æ°åç±»åå¯ä¸ID)\", 4:\"å
¨å±å¯ä¸ID UUID\",5:\"å符串å
¨å±å¯ä¸ID (idWorker çå符串表示)\";\n id-type: ASSIGN_ID\n # é»è®¤æ°æ®åºè¡¨ä¸å线å½å\n table-underline: true\n configuration:\n # è¿ä¸ªé
ç½®ä¼å°æ§è¡çsqlæå°åºæ¥ï¼å¨å¼åææµè¯çæ¶åå¯ä»¥ç¨\n #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\n # è¿åç±»å为Map,æ¾ç¤ºnull对åºçåæ®µ\n call-setters-on-nulls: true', '411f9c73fc519225add2f7c992279f6f', '2021-03-03 13:01:42', '2021-06-28 07:13:40', NULL, '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); |
| | | INSERT INTO `config_info` VALUES (3, 'jeecg-gateway-router.json', 'DEFAULT_GROUP', '[{\r\n \"id\": \"jeecg-system\",\r\n \"order\": 0,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/sys/**\",\r\n \"_genkey_1\": \"/eoa/**\",\r\n \"_genkey_2\": \"/joa/**\",\r\n \"_genkey_3\": \"/jmreport/**\",\r\n \"_genkey_4\": \"/bigscreen/**\",\r\n \"_genkey_5\": \"/desform/**\",\r\n \"_genkey_6\": \"/online/**\",\r\n \"_genkey_8\": \"/act/**\",\r\n \"_genkey_9\": \"/plug-in/**\",\r\n \"_genkey_10\": \"/generic/**\",\r\n \"_genkey_11\": \"/v1/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb://jeecg-system\"\r\n}, {\r\n \"id\": \"jeecg-demo\",\r\n \"order\": 1,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/mock/**\",\r\n \"_genkey_1\": \"/test/**\",\r\n \"_genkey_2\": \"/bigscreen/template1/**\",\r\n \"_genkey_3\": \"/bigscreen/template2/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb://jeecg-demo\"\r\n}, {\r\n \"id\": \"jeecg-system-websocket\",\r\n \"order\": 2,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/websocket/**\",\r\n \"_genkey_1\": \"/eoaSocket/**\",\r\n \"_genkey_2\": \"/newsWebsocket/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb:ws://jeecg-system\"\r\n}, {\r\n \"id\": \"jeecg-demo-websocket\",\r\n \"order\": 3,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/vxeSocket/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb:ws://jeecg-demo\"\r\n}]', '82f4033ef6a51ce2ab6ce505be1b729a', '2021-03-03 13:02:14', '2021-03-03 13:02:14', NULL, '172.17.0.1', '', '', NULL, NULL, NULL, 'json', NULL); |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_info_aggr |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_info_aggr`; |
| | | CREATE TABLE `config_info_aggr` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', |
| | | `datum_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'datum_id', |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'å
容', |
| | | `gmt_modified` datetime NOT NULL COMMENT 'ä¿®æ¹æ¶é´', |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'ç§æ·å段', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE INDEX `uk_configinfoaggr_datagrouptenantdatum`(`data_id`, `group_id`, `tenant_id`, `datum_id`) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'å¢å ç§æ·å段' ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_info_beta |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_info_beta`; |
| | | CREATE TABLE `config_info_beta` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name', |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', |
| | | `beta_ips` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'betaIps', |
| | | `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user', |
| | | `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'ç§æ·å段', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE INDEX `uk_configinfobeta_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_beta' ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_info_tag |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_info_tag`; |
| | | CREATE TABLE `config_info_tag` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id', |
| | | `tag_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_id', |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name', |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', |
| | | `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user', |
| | | `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE INDEX `uk_configinfotag_datagrouptenanttag`(`data_id`, `group_id`, `tenant_id`, `tag_id`) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_tag' ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for config_tags_relation |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `config_tags_relation`; |
| | | CREATE TABLE `config_tags_relation` ( |
| | | `id` bigint(20) NOT NULL COMMENT 'id', |
| | | `tag_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_name', |
| | | `tag_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tag_type', |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id', |
| | | `nid` bigint(20) NOT NULL AUTO_INCREMENT, |
| | | PRIMARY KEY (`nid`) USING BTREE, |
| | | UNIQUE INDEX `uk_configtagrelation_configidtag`(`id`, `tag_name`, `tag_type`) USING BTREE, |
| | | INDEX `idx_tenant_id`(`tenant_id`) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_tag_relation' ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for group_capacity |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `group_capacity`; |
| | | CREATE TABLE `group_capacity` ( |
| | | `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主é®ID', |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group IDï¼ç©ºå符表示æ´ä¸ªé群', |
| | | `quota` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'é
é¢ï¼0表示使ç¨é»è®¤å¼', |
| | | `usage` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使ç¨é', |
| | | `max_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'å个é
置大å°ä¸éï¼åä½ä¸ºåèï¼0表示使ç¨é»è®¤å¼', |
| | | `max_aggr_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'èååé
ç½®æå¤§ä¸ªæ°ï¼ï¼0表示使ç¨é»è®¤å¼', |
| | | `max_aggr_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'å个èåæ°æ®çåé
置大å°ä¸éï¼åä½ä¸ºåèï¼0表示使ç¨é»è®¤å¼', |
| | | `max_history_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'æå¤§åæ´å岿°é', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE INDEX `uk_group_id`(`group_id`) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'é群ãåGroup容éä¿¡æ¯è¡¨' ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for his_config_info |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `his_config_info`; |
| | | CREATE TABLE `his_config_info` ( |
| | | `id` bigint(64) UNSIGNED NOT NULL, |
| | | `nid` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, |
| | | `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, |
| | | `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, |
| | | `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name', |
| | | `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, |
| | | `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00', |
| | | `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL, |
| | | `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `op_type` char(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'ç§æ·å段', |
| | | PRIMARY KEY (`nid`) USING BTREE, |
| | | INDEX `idx_gmt_create`(`gmt_create`) USING BTREE, |
| | | INDEX `idx_gmt_modified`(`gmt_modified`) USING BTREE, |
| | | INDEX `idx_did`(`data_id`) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'å¤ç§æ·æ¹é ' ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for permissions |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `permissions`; |
| | | CREATE TABLE `permissions` ( |
| | | `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `resource` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `action` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | UNIQUE INDEX `uk_role_permission`(`role`, `resource`, `action`) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for roles |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `roles`; |
| | | CREATE TABLE `roles` ( |
| | | `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | UNIQUE INDEX `uk_username_role`(`username`, `role`) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of roles |
| | | -- ---------------------------- |
| | | INSERT INTO `roles` VALUES ('nacos', 'ROLE_ADMIN'); |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for tenant_capacity |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `tenant_capacity`; |
| | | CREATE TABLE `tenant_capacity` ( |
| | | `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主é®ID', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID', |
| | | `quota` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'é
é¢ï¼0表示使ç¨é»è®¤å¼', |
| | | `usage` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使ç¨é', |
| | | `max_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'å个é
置大å°ä¸éï¼åä½ä¸ºåèï¼0表示使ç¨é»è®¤å¼', |
| | | `max_aggr_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'èååé
ç½®æå¤§ä¸ªæ°', |
| | | `max_aggr_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'å个èåæ°æ®çåé
置大å°ä¸éï¼åä½ä¸ºåèï¼0表示使ç¨é»è®¤å¼', |
| | | `max_history_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'æå¤§åæ´å岿°é', |
| | | `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'å建æ¶é´', |
| | | `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT 'ä¿®æ¹æ¶é´', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE INDEX `uk_tenant_id`(`tenant_id`) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'ç§æ·å®¹éä¿¡æ¯è¡¨' ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for tenant_info |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `tenant_info`; |
| | | CREATE TABLE `tenant_info` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', |
| | | `kp` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'kp', |
| | | `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id', |
| | | `tenant_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_name', |
| | | `tenant_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tenant_desc', |
| | | `create_source` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'create_source', |
| | | `gmt_create` bigint(20) NOT NULL COMMENT 'å建æ¶é´', |
| | | `gmt_modified` bigint(20) NOT NULL COMMENT 'ä¿®æ¹æ¶é´', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp`, `tenant_id`) USING BTREE, |
| | | INDEX `idx_tenant_id`(`tenant_id`) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_info' ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for users |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `users`; |
| | | CREATE TABLE `users` ( |
| | | `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `password` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `enabled` tinyint(1) NOT NULL, |
| | | PRIMARY KEY (`username`) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of users |
| | | -- ---------------------------- |
| | | INSERT INTO `users` VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', 1); |
| | | |
| | | SET FOREIGN_KEY_CHECKS = 1; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | # |
| | | # XXL-JOB v2.2.0 |
| | | # Copyright (c) 2015-present, xuxueli. |
| | | |
| | | CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_general_ci; |
| | | use `xxl_job`; |
| | | |
| | | SET NAMES utf8mb4; |
| | | |
| | | CREATE TABLE `xxl_job_info` ( |
| | | `id` int(11) NOT NULL AUTO_INCREMENT, |
| | | `job_group` int(11) NOT NULL COMMENT 'æ§è¡å¨ä¸»é®ID', |
| | | `job_cron` varchar(128) NOT NULL COMMENT '任塿§è¡CRON', |
| | | `job_desc` varchar(255) NOT NULL, |
| | | `add_time` datetime DEFAULT NULL, |
| | | `update_time` datetime DEFAULT NULL, |
| | | `author` varchar(64) DEFAULT NULL COMMENT 'ä½è
', |
| | | `alarm_email` varchar(255) DEFAULT NULL COMMENT 'æ¥è¦é®ä»¶', |
| | | `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT 'æ§è¡å¨è·¯ç±çç¥', |
| | | `executor_handler` varchar(255) DEFAULT NULL COMMENT 'æ§è¡å¨ä»»å¡handler', |
| | | `executor_param` varchar(512) DEFAULT NULL COMMENT 'æ§è¡å¨ä»»å¡åæ°', |
| | | `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT 'é»å¡å¤ççç¥', |
| | | `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任塿§è¡è¶
æ¶æ¶é´ï¼åä½ç§', |
| | | `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败éè¯æ¬¡æ°', |
| | | `glue_type` varchar(50) NOT NULL COMMENT 'GLUEç±»å', |
| | | `glue_source` mediumtext COMMENT 'GLUEæºä»£ç ', |
| | | `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE夿³¨', |
| | | `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUEæ´æ°æ¶é´', |
| | | `child_jobid` varchar(255) DEFAULT NULL COMMENT 'åä»»å¡IDï¼å¤ä¸ªéå·åé', |
| | | `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'è°åº¦ç¶æï¼0-忢ï¼1-è¿è¡', |
| | | `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '䏿¬¡è°åº¦æ¶é´', |
| | | `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '䏿¬¡è°åº¦æ¶é´', |
| | | PRIMARY KEY (`id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
| | | |
| | | CREATE TABLE `xxl_job_log` ( |
| | | `id` bigint(20) NOT NULL AUTO_INCREMENT, |
| | | `job_group` int(11) NOT NULL COMMENT 'æ§è¡å¨ä¸»é®ID', |
| | | `job_id` int(11) NOT NULL COMMENT 'ä»»å¡ï¼ä¸»é®ID', |
| | | `executor_address` varchar(255) DEFAULT NULL COMMENT 'æ§è¡å¨å°åï¼æ¬æ¬¡æ§è¡çå°å', |
| | | `executor_handler` varchar(255) DEFAULT NULL COMMENT 'æ§è¡å¨ä»»å¡handler', |
| | | `executor_param` varchar(512) DEFAULT NULL COMMENT 'æ§è¡å¨ä»»å¡åæ°', |
| | | `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT 'æ§è¡å¨ä»»å¡åçåæ°ï¼æ ¼å¼å¦ 1/2', |
| | | `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败éè¯æ¬¡æ°', |
| | | `trigger_time` datetime DEFAULT NULL COMMENT 'è°åº¦-æ¶é´', |
| | | `trigger_code` int(11) NOT NULL COMMENT 'è°åº¦-ç»æ', |
| | | `trigger_msg` text COMMENT 'è°åº¦-æ¥å¿', |
| | | `handle_time` datetime DEFAULT NULL COMMENT 'æ§è¡-æ¶é´', |
| | | `handle_code` int(11) NOT NULL COMMENT 'æ§è¡-ç¶æ', |
| | | `handle_msg` text COMMENT 'æ§è¡-æ¥å¿', |
| | | `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'åè¦ç¶æï¼0-é»è®¤ã1-æ éåè¦ã2-åè¦æåã3-åè¦å¤±è´¥', |
| | | PRIMARY KEY (`id`), |
| | | KEY `I_trigger_time` (`trigger_time`), |
| | | KEY `I_handle_code` (`handle_code`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
| | | |
| | | CREATE TABLE `xxl_job_log_report` ( |
| | | `id` int(11) NOT NULL AUTO_INCREMENT, |
| | | `trigger_day` datetime DEFAULT NULL COMMENT 'è°åº¦-æ¶é´', |
| | | `running_count` int(11) NOT NULL DEFAULT '0' COMMENT 'è¿è¡ä¸-æ¥å¿æ°é', |
| | | `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT 'æ§è¡æå-æ¥å¿æ°é', |
| | | `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT 'æ§è¡å¤±è´¥-æ¥å¿æ°é', |
| | | PRIMARY KEY (`id`), |
| | | UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
| | | |
| | | CREATE TABLE `xxl_job_logglue` ( |
| | | `id` int(11) NOT NULL AUTO_INCREMENT, |
| | | `job_id` int(11) NOT NULL COMMENT 'ä»»å¡ï¼ä¸»é®ID', |
| | | `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUEç±»å', |
| | | `glue_source` mediumtext COMMENT 'GLUEæºä»£ç ', |
| | | `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE夿³¨', |
| | | `add_time` datetime DEFAULT NULL, |
| | | `update_time` datetime DEFAULT NULL, |
| | | PRIMARY KEY (`id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
| | | |
| | | CREATE TABLE `xxl_job_registry` ( |
| | | `id` int(11) NOT NULL AUTO_INCREMENT, |
| | | `registry_group` varchar(50) NOT NULL, |
| | | `registry_key` varchar(255) NOT NULL, |
| | | `registry_value` varchar(255) NOT NULL, |
| | | `update_time` datetime DEFAULT NULL, |
| | | PRIMARY KEY (`id`), |
| | | KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
| | | |
| | | CREATE TABLE `xxl_job_group` ( |
| | | `id` int(11) NOT NULL AUTO_INCREMENT, |
| | | `app_name` varchar(64) NOT NULL COMMENT 'æ§è¡å¨AppName', |
| | | `title` varchar(12) NOT NULL COMMENT 'æ§è¡å¨åç§°', |
| | | `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'æ§è¡å¨å°åç±»åï¼0=èªå¨æ³¨åã1=æå¨å½å
¥', |
| | | `address_list` varchar(512) DEFAULT NULL COMMENT 'æ§è¡å¨å°åå表ï¼å¤å°åéå·åé', |
| | | PRIMARY KEY (`id`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
| | | |
| | | CREATE TABLE `xxl_job_user` ( |
| | | `id` int(11) NOT NULL AUTO_INCREMENT, |
| | | `username` varchar(50) NOT NULL COMMENT 'è´¦å·', |
| | | `password` varchar(50) NOT NULL COMMENT 'å¯ç ', |
| | | `role` tinyint(4) NOT NULL COMMENT 'è§è²ï¼0-æ®éç¨æ·ã1-管çå', |
| | | `permission` varchar(255) DEFAULT NULL COMMENT 'æéï¼æ§è¡å¨IDå表ï¼å¤ä¸ªéå·åå²', |
| | | PRIMARY KEY (`id`), |
| | | UNIQUE KEY `i_username` (`username`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
| | | |
| | | CREATE TABLE `xxl_job_lock` ( |
| | | `lock_name` varchar(50) NOT NULL COMMENT 'éåç§°', |
| | | PRIMARY KEY (`lock_name`) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
| | | |
| | | |
| | | INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`) VALUES (1, 'xxl-job-executor-sample', 'ç¤ºä¾æ§è¡å¨', 0, NULL); |
| | | INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_cron`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '0 0 0 * * ? *', 'æµè¯ä»»å¡1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代ç åå§å', '2018-11-03 22:21:31', ''); |
| | | INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL); |
| | | INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock'); |
| | | |
| | | commit; |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -- åæ®µé¿åº¦ä¸è§èï¼å¯¼è´è½¬åºé误Specified key was too long; max key length is 767 bytes |
| | | ALTER TABLE `rep_demo_dxtj` |
| | | MODIFY COLUMN `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主é®' FIRST; |
| | | |
| | | ALTER TABLE `sys_third_account` |
| | | MODIFY COLUMN `third_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ç»å½æ¥æº' AFTER `third_user_id`; |
| | | |
| | | |
| | | -- æ°æ®æºåå
¸sqlæ´ç |
| | | DELETE FROM `sys_dict_item` WHERE dict_id ='1209733563293962241'; |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1209733775114702850', '1209733563293962241', 'MySQL5.5', '1', '', 1, 1, 'admin', '2019-12-25 15:13:02', NULL, NULL); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1334440962954936321', '1209733563293962241', 'MYSQL5.7+', '4', '', 2, 1, 'admin', '2020-12-03 18:16:02', 'admin', '2021-07-15 13:44:29'); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1209733839933476865', '1209733563293962241', 'Oracle', '2', '', 3, 1, 'admin', '2019-12-25 15:13:18', 'admin', '2021-07-15 13:44:08'); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1209733903020003330', '1209733563293962241', 'SQLServer', '3', '', 4, 1, 'admin', '2019-12-25 15:13:33', 'admin', '2021-07-15 13:44:11'); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1414837074500976641', '1209733563293962241', 'postgresql', '6', '', 5, 1, 'admin', '2021-07-13 14:40:20', 'admin', '2021-07-15 13:44:15'); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1415547541091504129', '1209733563293962241', 'marialDB', '5', '', 6, 1, 'admin', '2021-07-15 13:43:28', 'admin', '2021-07-15 13:44:23'); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1418049969003089922', '1209733563293962241', '达梦', '7', '', 7, 1, 'admin', '2021-07-22 11:27:13', 'admin', '2021-07-22 11:27:30'); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1418050017053036545', '1209733563293962241', '人大éä»', '8', '', 8, 1, 'admin', '2021-07-22 11:27:25', NULL, NULL); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1418050075555188737', '1209733563293962241', 'ç¥é', '9', '', 9, 1, 'admin', '2021-07-22 11:27:39', NULL, NULL); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1418050110669901826', '1209733563293962241', 'SQLite', '10', '', 10, 1, 'admin', '2021-07-22 11:27:47', NULL, NULL); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1418050149475602434', '1209733563293962241', 'DB2', '11', '', 11, 1, 'admin', '2021-07-22 11:27:56', NULL, NULL); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1418050209823248385', '1209733563293962241', 'Hsqldb', '12', '', 12, 1, 'admin', '2021-07-22 11:28:11', 'admin', '2021-07-22 11:28:27'); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1418050323111399425', '1209733563293962241', 'Derby', '13', '', 13, 1, 'admin', '2021-07-22 11:28:38', NULL, NULL); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1418117316707590146', '1209733563293962241', 'H2', '14', '', 14, 1, 'admin', '2021-07-22 15:54:50', NULL, NULL); |
| | | INSERT INTO `sys_dict_item` (`id`, `dict_id`, `item_text`, `item_value`, `description`, `sort_order`, `status`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES ('1418491604048449537', '1209733563293962241', 'å
¶ä»æ°æ®åº', '15', '', 15, 1, 'admin', '2021-07-23 16:42:07', NULL, NULL); |
| | | |
| | | |
| | | -- æ°å¢ hideTab åæ®µ |
| | | ALTER TABLE `sys_permission` |
| | | ADD COLUMN `hide_tab` int(2) NULL COMMENT 'æ¯å¦éètab: 0å¦,1æ¯' AFTER `hidden`; |
| | | |
| | | |
| | | |
| | | -- ãonline表åãæ°å¢ low_app_id åæ®µ |
| | | ALTER TABLE `onl_cgform_head` |
| | | ADD COLUMN `low_app_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'å
³èçåºç¨ID' AFTER `des_form_code`; |
| | | |
| | | |
| | | |
| | | -- onlineèæ°æ®,åå¨å符串类åkeyå¼ä¸ä¸è´çæ
åµ,Stringæ¹ä¸ºstring |
| | | UPDATE onl_cgform_field SET db_type = 'string' where binary db_type = 'String'; |
| | | |
| | | -- ç§¯æ¨æ¥è¡¨å级 |
| | | ALTER TABLE `jimu_report` |
| | | MODIFY COLUMN `view_count` bigint(15) NULL DEFAULT 0 COMMENT 'æµè§æ¬¡æ°' AFTER `template`; |
| | | ALTER TABLE `jimu_report` |
| | | MODIFY COLUMN `json_str` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'jsonå符串' AFTER `type`; |
| | | ALTER TABLE `jimu_report_db_field` |
| | | ADD COLUMN `search_format` varchar(50) NULL COMMENT 'æ¥è¯¢æ¶é´æ ¼å¼å表达å¼' AFTER `search_value`; |
| | | ALTER TABLE `jimu_report_db_param` |
| | | ADD COLUMN `search_format` varchar(50) NULL COMMENT 'æ¥è¯¢æ¶é´æ ¼å¼å表达å¼' AFTER `dict_code`; |
| | | UPDATE jimu_report SET json_str=replace(json_str,'"subtotal":"totalField"','"funcname":"SUM"'); |
| | | ALTER TABLE `jimu_report` |
| | | ADD COLUMN `css_str` text NULL COMMENT 'csså¢å¼º' AFTER `view_count`, |
| | | ADD COLUMN `js_str` text NULL COMMENT 'jså¢å¼º' AFTER `css_str`; |
| | | ALTER TABLE `jimu_report_link` |
| | | CHANGE COLUMN `expression` `requirement` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'æ¡ä»¶' AFTER `link_chart_id`; |
| | | ALTER TABLE `jimu_report_db_field` |
| | | ADD COLUMN `ext_json` text NULL COMMENT 'åæ°é
ç½®' AFTER `search_format`; |
| | | ALTER TABLE `jimu_report_db_param` |
| | | ADD COLUMN `ext_json` text NULL COMMENT 'åæ°é
ç½®' AFTER `search_format`; |
| | | ALTER TABLE `jimu_report_db` |
| | | MODIFY COLUMN `is_list` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT 'æ¯å¦æ¯å表0å¦1æ¯ é»è®¤0' AFTER `api_method`; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | çæ¬åçº§æ¹æ³ï¼ |
| | | |
| | | JeecgBootå±äºå¹³å°çº§äº§åï¼æ¯æ¬¡å级æ¹å¨å
容è¾å¤ï¼ç®ååä¸å°å¹³æ»å级ã |
| | | |
| | | è¿éç»ç¨æ·çå级建议æ¯è¿æ ·çï¼ |
| | | 1.代ç å级 => æ¬å°çæ¬éè¿svnæè
gitå好主干ï¼å¨åæ¯ä¸åä¸å¡å¼åï¼jeecgæ¯æ¬¡çæ¬åå¸ï¼å¯ä»¥æå·¥è¦ç主干ç代ç ï¼å¯¹æ¯ä»£ç è¿è¡æäº¤ï¼ |
| | | 2.æ°æ®åºå级 => éå¯¹æ°æ®åºæä»¬æ¯æ¬¡åå¸ä¼æä¾å¢éå级SQLï¼å¯ä»¥éè¿å¢éSQLå®ç°æ°æ®åºçå级ã |
| | | 3.å
¼å®¹é®é¢ => æ¯æ¬¡çæ¬åå¸ä¼é对ä¸å
¼å®¹å°æ¹æ 注说æï¼éè¦æå·¥ä¿®æ¹ä¸å
¼å®¹ç代ç ã |
| | | |
| | | 注æï¼ å级sqlç®ååªæä¾mysqlçæ¬ï¼æ§è¡å®èæ¥åï¼æ°èåéè¦æå·¥è¿è¡è§è²ææï¼å·æ°é¦é¡µæä¼åºç°ã |
¶Ô±ÈÐÂÎļþ |
| | |
| | | #### éåä¸ä¼ |
| | | # ä»åºç§æï¼ 81.70.17.111:5000 |
| | | # ç¬¬ä¸æ¥ï¼ä¸ä¼ éåå°dockerä»åº |
| | | #docker tag jeecg-boot-mysql 81.70.17.111:5000/jeecg-boot-mysql:1.1 |
| | | #docker tag jeecg-boot-system 81.70.17.111:5000/jeecg-boot-system:1.0 |
| | | #docker tag nginxhtml:jeecgboot 81.70.17.111:5000/nginxhtml:1.2 |
| | | |
| | | #docker push 81.70.17.111:5000/jeecg-boot-mysql:1.1 |
| | | #docker push 81.70.17.111:5000/jeecg-boot-system:1.0 |
| | | #docker push 81.70.17.111:5000/nginxhtml:1.2 |
| | | |
| | | # ç¬¬äºæ¥ï¼å°æ¤ymlæä»¶ä¸ä¼ æå¡å¨ï¼æ§è¡å¯å¨å½ä»¤ docker-compose -f ./docker-compose-server.yml up |
| | | version: '2' |
| | | services: |
| | | jeecg-boot-mysql: |
| | | image: 81.70.17.111:5000/jeecg-boot-mysql:1.0 |
| | | environment: |
| | | MYSQL_ROOT_PASSWORD: root |
| | | restart: always |
| | | container_name: jeecg-boot-mysql |
| | | command: |
| | | --character-set-server=utf8mb4 |
| | | --collation-server=utf8mb4_general_ci |
| | | --explicit_defaults_for_timestamp=true |
| | | --lower_case_table_names=1 |
| | | --max_allowed_packet=128M |
| | | ports: |
| | | - 3306:3306 |
| | | |
| | | jeecg-boot-redis: |
| | | image: redis:5.0 |
| | | ports: |
| | | - 6379:6379 |
| | | restart: always |
| | | container_name: jeecg-boot-redis |
| | | |
| | | jeecg-boot-system: |
| | | image: 81.70.17.111:5000/jeecg-boot-system:1.0 |
| | | restart: always |
| | | container_name: jeecg-boot-system |
| | | volumes: |
| | | - /data/config:/jeecg-boot/config |
| | | ports: |
| | | - 8080:8080 |
| | | |
| | | jeecg-boot-nginx: |
| | | image: 81.70.17.111:5000/nginxhtml |
| | | restart: always |
| | | container_name: jeecg-boot-nginx |
| | | ports: |
| | | - 80:80 |
¶Ô±ÈÐÂÎļþ |
| | |
| | | version: '2' |
| | | services: |
| | | jeecg-boot-mysql: |
| | | build: |
| | | context: ./db |
| | | environment: |
| | | MYSQL_ROOT_PASSWORD: root |
| | | MYSQL_ROOT_HOST: '%' |
| | | TZ: Asia/Shanghai |
| | | restart: always |
| | | container_name: jeecg-boot-mysql |
| | | image: jeecg-boot-mysql |
| | | command: |
| | | --character-set-server=utf8mb4 |
| | | --collation-server=utf8mb4_general_ci |
| | | --explicit_defaults_for_timestamp=true |
| | | --lower_case_table_names=1 |
| | | --max_allowed_packet=128M |
| | | --default-authentication-plugin=caching_sha2_password |
| | | ports: |
| | | - 3306:3306 |
| | | |
| | | jeecg-boot-redis: |
| | | image: redis:5.0 |
| | | ports: |
| | | - 6379:6379 |
| | | restart: always |
| | | hostname: jeecg-boot-redis |
| | | container_name: jeecg-boot-redis |
| | | |
| | | jeecg-boot-system: |
| | | build: |
| | | context: ./jeecg-boot-module-system |
| | | restart: on-failure |
| | | depends_on: |
| | | - jeecg-boot-mysql |
| | | - jeecg-boot-redis |
| | | container_name: jeecg-boot-system |
| | | image: jeecg-boot-system |
| | | hostname: jeecg-boot-system |
| | | ports: |
| | | - 8080:8080 |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <artifactId>jeecg-boot-base-api</artifactId> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <version>3.0</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>jeecg-system-cloud-api</artifactId> |
| | | |
| | | <dependencies> |
| | | <!-- feign --> |
| | | <dependency> |
| | | <groupId>org.springframework.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-openfeign</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | </project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.bpm.api; |
| | | |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.constant.ServiceNameConstants; |
| | | import org.jeecg.common.online.api.factory.OnlineBaseExtAPIFallbackFactory; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | /** |
| | | * æµç¨æ¥å£ |
| | | * |
| | | * @author scott |
| | | */ |
| | | @Component |
| | | @FeignClient(contextId = "bpmBaseRemoteApi", value = ServiceNameConstants.SYSTEM_SERVICE, |
| | | fallbackFactory = OnlineBaseExtAPIFallbackFactory.class) |
| | | public interface IBpmBaseExtAPI { |
| | | /** |
| | | * 23. æµç¨æäº¤æ¥å£ï¼onlineï¼èªå®ä¹å¼åï¼ |
| | | * |
| | | * @param flowCode |
| | | * æµç¨ä¸å¡å
³è ä¾å¦ï¼joa_leave_01 |
| | | * @param id |
| | | * 表åä¸å¡æ°æ®data id |
| | | * @param formUrl |
| | | * æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçPC端表åç»ä»¶ï¼å°åï¼ |
| | | * @param formUrlMobile |
| | | * æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçç§»å¨ç«¯è¡¨åç»ä»¶ï¼å°åï¼ |
| | | * @param username |
| | | * æµç¨åèµ·äººè´¦å· |
| | | * @param jsonData |
| | | * Json串ï¼é¢å¤æ©å±çæµç¨åéå¼ ãéå¿
å¡«ã |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @PostMapping(value = "/act/process/extActProcess/startMutilProcess") |
| | | Result<String> startMutilProcess(@RequestParam("flowCode") String flowCode, @RequestParam("id") String id, |
| | | @RequestParam("formUrl") String formUrl, @RequestParam("formUrlMobile") String formUrlMobile, |
| | | @RequestParam("username") String username, @RequestParam("jsonData") String jsonData) throws Exception; |
| | | |
| | | /** |
| | | * 24. æµç¨æäº¤æ¥å£ï¼èªå®ä¹è¡¨å设计å¨ï¼ |
| | | * |
| | | * @param flowCode |
| | | * æµç¨ä¸å¡å
³è ä¾å¦ï¼joa_leave_01 |
| | | * @param id |
| | | * 表åä¸å¡æ°æ®data id |
| | | * @param formUrl |
| | | * æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçPC端表åç»ä»¶ï¼å°åï¼ |
| | | * @param formUrlMobile |
| | | * æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçç§»å¨ç«¯è¡¨åç»ä»¶ï¼å°åï¼ |
| | | * @param username |
| | | * æµç¨åèµ·äººè´¦å· |
| | | * @param jsonData |
| | | * Json串ï¼é¢å¤æ©å±çæµç¨åéå¼ ãéå¿
å¡«ã |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @PostMapping(value = "/act/process/extActProcess/startDesFormMutilProcess") |
| | | Result<String> startDesFormMutilProcess(@RequestParam("flowCode") String flowCode, @RequestParam("id") String id, |
| | | @RequestParam("formUrl") String formUrl, @RequestParam("formUrlMobile") String formUrlMobile, |
| | | @RequestParam("username") String username, @RequestParam("jsonData") String jsonData) throws Exception; |
| | | |
| | | /** |
| | | * 25. ä¿åæµç¨è稿箱æ¥å£ï¼èªå®ä¹å¼å表åãonline表åï¼ |
| | | * |
| | | * @param flowCode |
| | | * æµç¨ä¸å¡å
³è ä¾å¦ï¼joa_leave_01 |
| | | * @param id |
| | | * 表åä¸å¡æ°æ®data id |
| | | * @param formUrl |
| | | * æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçPC端表åç»ä»¶ï¼å°åï¼ ãéå¿
å¡«ã |
| | | * @param formUrlMobile |
| | | * æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçç§»å¨ç«¯è¡¨åç»ä»¶ï¼å°åï¼ ãéå¿
å¡«ã |
| | | * @param username |
| | | * æµç¨åèµ·äººè´¦å· |
| | | * @param jsonData |
| | | * Json串ï¼é¢å¤æ©å±çæµç¨åéå¼ ãéå¿
å¡«ã |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @PostMapping(value = "/act/process/extActProcess/saveMutilProcessDraft") |
| | | Result<String> saveMutilProcessDraft(@RequestParam("flowCode") String flowCode, @RequestParam("id") String id, |
| | | @RequestParam("formUrl") String formUrl, @RequestParam("formUrlMobile") String formUrlMobile, |
| | | @RequestParam("username") String username, @RequestParam("jsonData") String jsonData) throws Exception; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.bpm.api.factory; |
| | | |
| | | import org.jeecg.common.bpm.api.IBpmBaseExtAPI; |
| | | import org.jeecg.common.bpm.api.fallback.BpmBaseExtAPIFallback; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import feign.hystrix.FallbackFactory; |
| | | |
| | | @Component |
| | | public class BpmBaseExtAPIFallbackFactory implements FallbackFactory<IBpmBaseExtAPI> { |
| | | |
| | | @Override |
| | | public IBpmBaseExtAPI create(Throwable throwable) { |
| | | BpmBaseExtAPIFallback fallback = new BpmBaseExtAPIFallback(); |
| | | fallback.setCause(throwable); |
| | | return fallback; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.bpm.api.fallback; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.bpm.api.IBpmBaseExtAPI; |
| | | import org.jeecg.common.online.api.IOnlineBaseExtAPI; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | |
| | | import lombok.Setter; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * è¿å
¥fallbackçæ¹æ³ æ£æ¥æ¯å¦tokenæªè®¾ç½® |
| | | */ |
| | | @Slf4j |
| | | public class BpmBaseExtAPIFallback implements IBpmBaseExtAPI { |
| | | |
| | | @Setter |
| | | private Throwable cause; |
| | | |
| | | @Override |
| | | public Result<String> startMutilProcess(String flowCode, String id, String formUrl, String formUrlMobile, |
| | | String username, String jsonData) throws Exception { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Result<String> startDesFormMutilProcess(String flowCode, String id, String formUrl, String formUrlMobile, |
| | | String username, String jsonData) throws Exception { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Result<String> saveMutilProcessDraft(String flowCode, String id, String formUrl, String formUrlMobile, |
| | | String username, String jsonData) throws Exception { |
| | | return null; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.online.api; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.jeecg.common.constant.ServiceNameConstants; |
| | | import org.jeecg.common.online.api.factory.OnlineBaseExtAPIFallbackFactory; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * ãOnlineãFeign APIæ¥å£ |
| | | */ |
| | | @Component |
| | | @FeignClient(contextId = "onlineBaseRemoteApi", value = ServiceNameConstants.SYSTEM_ONLINE, fallbackFactory = OnlineBaseExtAPIFallbackFactory.class) |
| | | public interface IOnlineBaseExtAPI { |
| | | |
| | | /** |
| | | * ãOnlineã 表å设计å¨ä¸ç¨ï¼åæ¥æ°å¢ |
| | | */ |
| | | @PostMapping(value = "/online/api/cgform/crazyForm/{name}") |
| | | String cgformPostCrazyForm(@PathVariable("name") String tableName, @RequestBody JSONObject jsonObject) throws Exception; |
| | | |
| | | /** |
| | | * ãOnlineã 表å设计å¨ä¸ç¨ï¼åæ¥ç¼è¾ |
| | | */ |
| | | @PutMapping(value = "/online/api/cgform/crazyForm/{name}") |
| | | String cgformPutCrazyForm(@PathVariable("name") String tableName, @RequestBody JSONObject jsonObject) throws Exception; |
| | | |
| | | /** |
| | | * éè¿onlineè¡¨åæ¥è¯¢æ°æ®ï¼åæ¶æ¥è¯¢åºåè¡¨çæ°æ® |
| | | * |
| | | * @param tableName online表å |
| | | * @param dataIds onlineæ°æ®ID |
| | | * @return |
| | | */ |
| | | @GetMapping(value = "/online/api/cgform/queryAllDataByTableName") |
| | | JSONObject cgformQueryAllDataByTableName(@RequestParam("tableName") String tableName, @RequestParam("dataIds") String dataIds); |
| | | |
| | | /** |
| | | * online表åå 餿°æ® |
| | | * |
| | | * @param cgformCode Online表åcode |
| | | * @param dataIds æ°æ®IDï¼å¯éå·åå² |
| | | * @return |
| | | */ |
| | | @DeleteMapping("/online/api/cgform/cgformDeleteDataByCode") |
| | | String cgformDeleteDataByCode(@RequestParam("cgformCode") String cgformCode, @RequestParam("dataIds") String dataIds); |
| | | |
| | | /** |
| | | * ãcgreportãéè¿ head code è·å sqlè¯å¥ï¼å¹¶æ§è¡è¯¥è¯å¥è¿åæ¥è¯¢æ°æ® |
| | | * |
| | | * @param code æ¥è¡¨Codeï¼å¦ææ²¡ä¼ IDå°±éè¿codeæ¥ |
| | | * @param forceKey |
| | | * @param dataList |
| | | * @return |
| | | */ |
| | | @GetMapping("/online/api/cgreportGetData") |
| | | Map<String, Object> cgreportGetData(@RequestParam("code") String code, @RequestParam("forceKey") String forceKey, @RequestParam("dataList") String dataList); |
| | | |
| | | /** |
| | | * ãcgreportã对 cgreportGetData çè¿åå¼åä¼åï¼å°è£
DictModel éå |
| | | * |
| | | * @return |
| | | */ |
| | | @GetMapping("/online/api/cgreportGetDataPackage") |
| | | List<DictModel> cgreportGetDataPackage(@RequestParam("code") String code, @RequestParam("dictText") String dictText, @RequestParam("dictCode") String dictCode, @RequestParam("dataList") String dataList); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.online.api.factory; |
| | | |
| | | import feign.hystrix.FallbackFactory; |
| | | import org.jeecg.common.online.api.IOnlineBaseExtAPI; |
| | | import org.jeecg.common.online.api.fallback.OnlineBaseExtAPIFallback; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | @Component |
| | | public class OnlineBaseExtAPIFallbackFactory implements FallbackFactory<IOnlineBaseExtAPI> { |
| | | |
| | | @Override |
| | | public IOnlineBaseExtAPI create(Throwable throwable) { |
| | | OnlineBaseExtAPIFallback fallback = new OnlineBaseExtAPIFallback(); |
| | | fallback.setCause(throwable); |
| | | return fallback; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.online.api.fallback; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import lombok.Setter; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.online.api.IOnlineBaseExtAPI; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * è¿å
¥fallbackçæ¹æ³ æ£æ¥æ¯å¦tokenæªè®¾ç½® |
| | | */ |
| | | @Slf4j |
| | | public class OnlineBaseExtAPIFallback implements IOnlineBaseExtAPI { |
| | | |
| | | @Setter |
| | | private Throwable cause; |
| | | |
| | | @Override |
| | | public String cgformPostCrazyForm(String tableName, JSONObject jsonObject) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String cgformPutCrazyForm(String tableName, JSONObject jsonObject) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public JSONObject cgformQueryAllDataByTableName(String tableName, String dataIds) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String cgformDeleteDataByCode(String cgformCode, String dataIds) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> cgreportGetData(String code, String forceKey, String dataList) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> cgreportGetDataPackage(String code, String dictText, String dictCode, String dataList) { |
| | | return null; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.api; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.api.dto.OnlineAuthDTO; |
| | | import org.jeecg.common.api.dto.message.*; |
| | | import org.jeecg.common.constant.ServiceNameConstants; |
| | | import org.jeecg.common.system.api.factory.SysBaseAPIFallbackFactory; |
| | | import org.jeecg.common.system.vo.*; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * ç¸æ¯è¾localç |
| | | * 廿äºä¸äºæ¹æ³ï¼ |
| | | * addLog getDatabaseType queryAllDepart |
| | | * queryAllUser(Wrapper wrapper) queryAllUser(String[] userIds, int pageNo, int pageSize) |
| | | * ä¿®æ¹äºä¸äºæ¹æ³ï¼ |
| | | * createLog |
| | | * sendSysAnnouncement åªä¿çäºä¸ä¸ªï¼å
¶ä½å
¨é¨å¹²æ |
| | | * |
| | | * cloudæ¥å£æ°é43 localï¼35 commonï¼9 é¢å¤ä¸ä¸ªç¹æ®queryAllRoleä¸ä¸ªå½ä¸¤ä¸ªç¨ |
| | | */ |
| | | @Component |
| | | @FeignClient(contextId = "sysBaseRemoteApi", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysBaseAPIFallbackFactory.class) |
| | | public interface ISysBaseAPI extends CommonAPI { |
| | | |
| | | /** |
| | | * 1åéç³»ç»æ¶æ¯ |
| | | * @param message ä½¿ç¨æé å¨èµå¼åæ° å¦æä¸è®¾ç½®category(æ¶æ¯ç±»å)åé»è®¤ä¸º2 åéç³»ç»æ¶æ¯ |
| | | */ |
| | | @PostMapping("/sys/api/sendSysAnnouncement") |
| | | void sendSysAnnouncement(@RequestBody MessageDTO message); |
| | | |
| | | /** |
| | | * 2åéæ¶æ¯ é带ä¸å¡åæ° |
| | | * @param message ä½¿ç¨æé å¨èµå¼åæ° |
| | | */ |
| | | @PostMapping("/sys/api/sendBusAnnouncement") |
| | | void sendBusAnnouncement(@RequestBody BusMessageDTO message); |
| | | |
| | | /** |
| | | * 3éè¿æ¨¡æ¿åéæ¶æ¯ |
| | | * @param message ä½¿ç¨æé å¨èµå¼åæ° |
| | | */ |
| | | @PostMapping("/sys/api/sendTemplateAnnouncement") |
| | | void sendTemplateAnnouncement(@RequestBody TemplateMessageDTO message); /** |
| | | * |
| | | */ |
| | | @PostMapping("/sys/api/sendCustomMsg") |
| | | void sendCustomMsg(@RequestBody CustomMessage message); |
| | | |
| | | /** |
| | | * 4éè¿æ¨¡æ¿åéæ¶æ¯ é带ä¸å¡åæ° |
| | | * @param message ä½¿ç¨æé å¨èµå¼åæ° |
| | | */ |
| | | @PostMapping("/sys/api/sendBusTemplateAnnouncement") |
| | | void sendBusTemplateAnnouncement(@RequestBody BusTemplateMessageDTO message); |
| | | |
| | | /** |
| | | * 5éè¿æ¶æ¯ä¸å¿æ¨¡æ¿ï¼çææ¨éå
容 |
| | | * @param templateDTO ä½¿ç¨æé å¨èµå¼åæ° |
| | | * @return |
| | | */ |
| | | @PostMapping("/sys/api/parseTemplateByCode") |
| | | String parseTemplateByCode(@RequestBody TemplateDTO templateDTO); |
| | | |
| | | /** |
| | | * 6æ ¹æ®ç¨æ·idæ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getUserById") |
| | | LoginUser getUserById(@RequestParam("id") String id); |
| | | |
| | | /** |
| | | * 7éè¿ç¨æ·è´¦å·æ¥è¯¢è§è²éå |
| | | * @param username |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getRolesByUsername") |
| | | List<String> getRolesByUsername(@RequestParam("username") String username); |
| | | |
| | | /** |
| | | * 8éè¿ç¨æ·è´¦å·æ¥è¯¢é¨é¨éå |
| | | * @param username |
| | | * @return é¨é¨ id |
| | | */ |
| | | @GetMapping("/sys/api/getDepartIdsByUsername") |
| | | List<String> getDepartIdsByUsername(@RequestParam("username") String username); |
| | | |
| | | /** |
| | | * 9éè¿ç¨æ·è´¦å·æ¥è¯¢é¨é¨ name |
| | | * @param username |
| | | * @return é¨é¨ name |
| | | */ |
| | | @GetMapping("/sys/api/getDepartNamesByUsername") |
| | | List<String> getDepartNamesByUsername(@RequestParam("username") String username); |
| | | |
| | | /** |
| | | * 10è·åæ°æ®åå
¸ |
| | | * @param code |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryDictItemsByCode") |
| | | List<DictModel> queryDictItemsByCode(@RequestParam("code") String code); |
| | | |
| | | /** |
| | | * è·åææçæ°æ®åå
¸é¡¹ |
| | | * @param code |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryEnableDictItemsByCode") |
| | | public List<DictModel> queryEnableDictItemsByCode(@RequestParam("code") String code); |
| | | |
| | | /** 11æ¥è¯¢ææçç¶çº§åå
¸ï¼æç
§create_timeæåº */ |
| | | @GetMapping("/sys/api/queryAllDict") |
| | | List<DictModel> queryAllDict(); |
| | | |
| | | /** |
| | | * 12æ¥è¯¢ææåç±»åå
¸ |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryAllDSysCategory") |
| | | List<SysCategoryModel> queryAllDSysCategory(); |
| | | |
| | | /** |
| | | * 13è·åè¡¨æ°æ®åå
¸ |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryTableDictItemsByCode") |
| | | List<DictModel> queryTableDictItemsByCode(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code); |
| | | |
| | | /** |
| | | * 14æ¥è¯¢ææé¨é¨ ä½ä¸ºåå
¸ä¿¡æ¯ id -->value,departName -->text |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryAllDepartBackDictModel") |
| | | List<DictModel> queryAllDepartBackDictModel(); |
| | | |
| | | /** |
| | | * 15æ ¹æ®ä¸å¡ç±»å busType åä¸å¡ busId ä¿®æ¹æ¶æ¯å·²è¯» |
| | | */ |
| | | @GetMapping("/sys/api/updateSysAnnounReadFlag") |
| | | public void updateSysAnnounReadFlag(@RequestParam("busType") String busType, @RequestParam("busId")String busId); |
| | | |
| | | /** |
| | | * 16æ¥è¯¢è¡¨åå
¸ æ¯æè¿æ»¤æ°æ® |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param filterSql |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryFilterTableDictInfo") |
| | | List<DictModel> queryFilterTableDictInfo(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("filterSql") String filterSql); |
| | | |
| | | /** |
| | | * 17æ¥è¯¢æå®tableç text code è·ååå
¸ï¼å
å«textåvalue |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param keyArray |
| | | * @return |
| | | */ |
| | | @Deprecated |
| | | @GetMapping("/sys/api/queryTableDictByKeys") |
| | | public List<String> queryTableDictByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keyArray") String[] keyArray); |
| | | |
| | | /** |
| | | * 18æ¥è¯¢ææç¨æ· è¿åComboModel |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryAllUserBackCombo") |
| | | public List<ComboModel> queryAllUserBackCombo(); |
| | | |
| | | /** |
| | | * 19å页æ¥è¯¢ç¨æ· è¿åJSONObject |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryAllUser") |
| | | public JSONObject queryAllUser(@RequestParam(name="userIds",required=false)String userIds, @RequestParam(name="pageNo",required=false) Integer pageNo,@RequestParam(name="pageSize",required=false) int pageSize); |
| | | |
| | | |
| | | /** |
| | | * 20è·åææè§è² 带å |
| | | * roleIds é»è®¤éä¸è§è² |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryAllRole") |
| | | public List<ComboModel> queryAllRole(@RequestParam(name = "roleIds",required = false)String[] roleIds); |
| | | |
| | | /** |
| | | * 21éè¿ç¨æ·è´¦å·æ¥è¯¢è§è²Idéå |
| | | * @param username |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getRoleIdsByUsername") |
| | | public List<String> getRoleIdsByUsername(@RequestParam("username")String username); |
| | | |
| | | /** |
| | | * 22éè¿é¨é¨ç¼å·æ¥è¯¢é¨é¨id |
| | | * @param orgCode |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getDepartIdsByOrgCode") |
| | | public String getDepartIdsByOrgCode(@RequestParam("orgCode")String orgCode); |
| | | |
| | | /** |
| | | * 23æ¥è¯¢ææé¨é¨ |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getAllSysDepart") |
| | | public List<SysDepartModel> getAllSysDepart(); |
| | | |
| | | /** |
| | | * 24æ¥æ¾ç¶çº§é¨é¨ |
| | | * @param departId |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getParentDepartId") |
| | | DictModel getParentDepartId(@RequestParam("departId")String departId); |
| | | |
| | | /** |
| | | * 25æ ¹æ®é¨é¨Idè·åé¨é¨è´è´£äºº |
| | | * @param deptId |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getDeptHeadByDepId") |
| | | public List<String> getDeptHeadByDepId(@RequestParam("deptId") String deptId); |
| | | |
| | | /** |
| | | * 26ç»æå®ç¨æ·åæ¶æ¯ |
| | | * @param userIds |
| | | * @param cmd |
| | | */ |
| | | @GetMapping("/sys/api/sendWebSocketMsg") |
| | | public void sendWebSocketMsg(@RequestParam("userIds")String[] userIds, @RequestParam("cmd") String cmd); |
| | | |
| | | /** |
| | | * 27æ ¹æ®idè·åææåä¸ç¨æ· |
| | | * userIds |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryAllUserByIds") |
| | | public List<LoginUser> queryAllUserByIds(@RequestParam("userIds") String[] userIds); |
| | | |
| | | /** |
| | | * 28å°ä¼è®®ç¾å°ä¿¡æ¯æ¨å¨å°é¢è§ |
| | | * userIds |
| | | * @return |
| | | * @param userId |
| | | */ |
| | | @GetMapping("/sys/api/meetingSignWebsocket") |
| | | void meetingSignWebsocket(@RequestParam("userId")String userId); |
| | | |
| | | /** |
| | | * 29æ ¹æ®nameè·åææåä¸ç¨æ· |
| | | * userNames |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryUserByNames") |
| | | List<LoginUser> queryUserByNames(@RequestParam("userNames")String[] userNames); |
| | | |
| | | |
| | | /** |
| | | * 30è·åç¨æ·çè§è²éå |
| | | * @param username |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getUserRoleSet") |
| | | Set<String> getUserRoleSet(@RequestParam("username")String username); |
| | | |
| | | /** |
| | | * 31è·åç¨æ·çæééå |
| | | * @param username |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getUserPermissionSet") |
| | | Set<String> getUserPermissionSet(@RequestParam("username") String username); |
| | | |
| | | /** |
| | | * 32夿æ¯å¦æonline访é®çæé |
| | | * @param onlineAuthDTO |
| | | * @return |
| | | */ |
| | | @PostMapping("/sys/api/hasOnlineAuth") |
| | | boolean hasOnlineAuth(@RequestBody OnlineAuthDTO onlineAuthDTO); |
| | | |
| | | /** |
| | | * 33éè¿é¨é¨idè·åé¨é¨å
¨é¨ä¿¡æ¯ |
| | | */ |
| | | @GetMapping("/sys/api/selectAllById") |
| | | SysDepartModel selectAllById(@RequestParam("id") String id); |
| | | |
| | | /** |
| | | * 34æ ¹æ®ç¨æ·idæ¥è¯¢ç¨æ·æå±å
¬å¸ä¸ææç¨æ·ids |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryDeptUsersByUserId") |
| | | List<String> queryDeptUsersByUserId(@RequestParam("userId") String userId); |
| | | |
| | | |
| | | //--- |
| | | |
| | | /** |
| | | * 35æ¥è¯¢ç¨æ·è§è²ä¿¡æ¯ |
| | | * @param username |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryUserRoles") |
| | | Set<String> queryUserRoles(@RequestParam("username")String username); |
| | | |
| | | /** |
| | | * 36æ¥è¯¢ç¨æ·æéä¿¡æ¯ |
| | | * @param username |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryUserAuths") |
| | | Set<String> queryUserAuths(@RequestParam("username")String username); |
| | | |
| | | /** |
| | | * 37æ ¹æ® id æ¥è¯¢æ°æ®åºä¸åå¨ç DynamicDataSourceModel |
| | | * |
| | | * @param dbSourceId |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getDynamicDbSourceById") |
| | | DynamicDataSourceModel getDynamicDbSourceById(@RequestParam("dbSourceId") String dbSourceId); |
| | | |
| | | /** |
| | | * 38æ ¹æ® code æ¥è¯¢æ°æ®åºä¸åå¨ç DynamicDataSourceModel |
| | | * |
| | | * @param dbSourceCode |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getDynamicDbSourceByCode") |
| | | DynamicDataSourceModel getDynamicDbSourceByCode(@RequestParam("dbSourceCode") String dbSourceCode); |
| | | |
| | | /** |
| | | * 39æ ¹æ®ç¨æ·è´¦å·æ¥è¯¢ç¨æ·ä¿¡æ¯ CommonAPIä¸å®ä¹ |
| | | * @param username |
| | | */ |
| | | @GetMapping("/sys/api/getUserByName") |
| | | LoginUser getUserByName(@RequestParam("username") String username); |
| | | |
| | | /** |
| | | * 40åå
¸è¡¨ç ç¿»è¯ |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param key |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/translateDictFromTable") |
| | | String translateDictFromTable(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("key") String key); |
| | | |
| | | /** |
| | | * 41æ®éåå
¸çç¿»è¯ |
| | | * @param code |
| | | * @param key |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/translateDict") |
| | | String translateDict(@RequestParam("code") String code, @RequestParam("key") String key); |
| | | |
| | | /** |
| | | * 42æ¥è¯¢æ°æ®æé |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryPermissionDataRule") |
| | | List<SysPermissionDataRuleModel> queryPermissionDataRule(@RequestParam("component") String component, @RequestParam("requestPath")String requestPath, @RequestParam("username") String username); |
| | | |
| | | /** |
| | | * 43æ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | * @param username |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getCacheUser") |
| | | SysUserCacheInfo getCacheUser(@RequestParam("username") String username); |
| | | |
| | | /** |
| | | * 36æ ¹æ®å¤ä¸ªç¨æ·è´¦å·(éå·åé)ï¼æ¥è¯¢è¿åå¤ä¸ªç¨æ·ä¿¡æ¯ |
| | | * @param usernames |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryUsersByUsernames") |
| | | List<JSONObject> queryUsersByUsernames(@RequestParam("usernames") String usernames); |
| | | |
| | | /** |
| | | * 37æ ¹æ®å¤ä¸ªç¨æ·ID(éå·åé)ï¼æ¥è¯¢è¿åå¤ä¸ªç¨æ·ä¿¡æ¯ |
| | | * @param ids |
| | | * @return |
| | | */ |
| | | @RequestMapping("/sys/api/queryUsersByIds") |
| | | List<JSONObject> queryUsersByIds(@RequestParam("ids") String ids); |
| | | |
| | | /** |
| | | * 38æ ¹æ®å¤ä¸ªé¨é¨ç¼ç (éå·åé)ï¼æ¥è¯¢è¿åå¤ä¸ªé¨é¨ä¿¡æ¯ |
| | | * @param orgCodes |
| | | * @return |
| | | */ |
| | | @RequestMapping("/sys/api/queryDepartsByOrgcodes") |
| | | List<JSONObject> queryDepartsByOrgcodes(@RequestParam("orgCodes") String orgCodes); |
| | | |
| | | /** |
| | | * 39æ ¹æ®å¤ä¸ªé¨é¨ç¼ç (éå·åé)ï¼æ¥è¯¢è¿åå¤ä¸ªé¨é¨ä¿¡æ¯ |
| | | * @param ids |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryDepartsByOrgIds") |
| | | List<JSONObject> queryDepartsByOrgIds(@RequestParam("ids") String ids); |
| | | |
| | | /** |
| | | * 40åéé®ä»¶æ¶æ¯ |
| | | * @param email |
| | | * @param title |
| | | * @param content |
| | | */ |
| | | @GetMapping("/sys/api/sendEmailMsg") |
| | | void sendEmailMsg(@RequestParam("email")String email,@RequestParam("title")String title,@RequestParam("content")String content); |
| | | /** |
| | | * 41 è·åå
¬å¸ä¸çº§é¨é¨åå
¬å¸ä¸ææç¨æ·id |
| | | * @param orgCode |
| | | */ |
| | | @GetMapping("/sys/api/getDeptUserByOrgCode") |
| | | List<Map> getDeptUserByOrgCode(@RequestParam("orgCode")String orgCode); |
| | | |
| | | /** |
| | | * 42 æ¥è¯¢åç±»åå
¸ç¿»è¯ |
| | | */ |
| | | @GetMapping("/sys/api/loadCategoryDictItem") |
| | | List<String> loadCategoryDictItem(@RequestParam("ids") String ids); |
| | | |
| | | /** |
| | | * 43 æ ¹æ®åå
¸codeå è½½åå
¸text |
| | | * |
| | | * @param dictCode 顺åºï¼tableName,text,code |
| | | * @param keys è¦æ¥è¯¢çkey |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/loadDictItem") |
| | | List<String> loadDictItem(@RequestParam("dictCode") String dictCode, @RequestParam("keys") String keys); |
| | | |
| | | /** |
| | | * 44 æ ¹æ®åå
¸codeæ¥è¯¢åå
¸é¡¹ |
| | | * |
| | | * @param dictCode 顺åºï¼tableName,text,code |
| | | * @param dictCode è¦æ¥è¯¢çkey |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/getDictItems") |
| | | List<DictModel> getDictItems(@RequestParam("dictCode") String dictCode); |
| | | |
| | | /** |
| | | * 45 æ ¹æ®å¤ä¸ªåå
¸codeæ¥è¯¢å¤ä¸ªåå
¸é¡¹ |
| | | * |
| | | * @param dictCodeList |
| | | * @return key = dictCode ï¼ value=对åºçåå
¸é¡¹ |
| | | */ |
| | | @RequestMapping("/sys/api/getManyDictItems") |
| | | Map<String, List<DictModel>> getManyDictItems(@RequestParam("dictCodeList") List<String> dictCodeList); |
| | | |
| | | /** |
| | | * 46 ãJSearchSelectTag䏿æç´¢ç»ä»¶ä¸ç¨æ¥å£ã |
| | | * å¤§æ°æ®éçåå
¸è¡¨ èµ°å¼æ¥å è½½ å³å端è¾å
¥å
å®¹è¿æ»¤æ°æ® |
| | | * |
| | | * @param dictCode åå
¸codeæ ¼å¼ï¼table,text,code |
| | | * @param keyword è¿æ»¤å
³é®å |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/loadDictItemByKeyword") |
| | | List<DictModel> loadDictItemByKeyword(@RequestParam("dictCode") String dictCode, @RequestParam("keyword") String keyword, @RequestParam(value = "pageSize", required = false) Integer pageSize); |
| | | |
| | | /** |
| | | * 47 æ ¹æ®å¤ä¸ªé¨é¨id(éå·åé)ï¼æ¥è¯¢è¿åå¤ä¸ªé¨é¨ä¿¡æ¯ |
| | | * @param ids |
| | | * @return |
| | | */ |
| | | @GetMapping("/sys/api/queryDepartsByIds") |
| | | List<JSONObject> queryDepartsByIds(@RequestParam("ids") String ids); |
| | | |
| | | /** |
| | | * 48 æ®éåå
¸çç¿»è¯ï¼æ ¹æ®å¤ä¸ªdictCodeå夿¡æ°æ®ï¼å¤ä¸ªä»¥éå·åå² |
| | | * @param dictCodes |
| | | * @param keys |
| | | * @return |
| | | */ |
| | | @Override |
| | | @GetMapping("/sys/api/translateManyDict") |
| | | Map<String, List<DictModel>> translateManyDict(@RequestParam("dictCodes") String dictCodes, @RequestParam("keys") String keys); |
| | | |
| | | /** |
| | | * 49 åå
¸è¡¨ç ç¿»è¯ï¼å¯æ¹é |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param keys å¤ä¸ªç¨éå·åå² |
| | | * @return |
| | | */ |
| | | @Override |
| | | @GetMapping("/sys/api/translateDictFromTableByKeys") |
| | | List<DictModel> translateDictFromTableByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keys") String keys); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.api.factory; |
| | | |
| | | import feign.hystrix.FallbackFactory; |
| | | import org.jeecg.common.system.api.ISysBaseAPI; |
| | | import org.jeecg.common.system.api.fallback.SysBaseAPIFallback; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | @Component |
| | | public class SysBaseAPIFallbackFactory implements FallbackFactory<ISysBaseAPI> { |
| | | |
| | | @Override |
| | | public ISysBaseAPI create(Throwable throwable) { |
| | | SysBaseAPIFallback fallback = new SysBaseAPIFallback(); |
| | | fallback.setCause(throwable); |
| | | return fallback; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.api.fallback; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import lombok.Setter; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.api.dto.OnlineAuthDTO; |
| | | import org.jeecg.common.api.dto.message.*; |
| | | import org.jeecg.common.system.api.ISysBaseAPI; |
| | | import org.jeecg.common.system.vo.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * è¿å
¥fallbackçæ¹æ³ æ£æ¥æ¯å¦tokenæªè®¾ç½® |
| | | */ |
| | | @Slf4j |
| | | public class SysBaseAPIFallback implements ISysBaseAPI { |
| | | |
| | | @Setter |
| | | private Throwable cause; |
| | | |
| | | @Override |
| | | public void sendSysAnnouncement(MessageDTO message) { |
| | | log.error("åéæ¶æ¯å¤±è´¥ {}", cause); |
| | | } |
| | | |
| | | @Override |
| | | public void sendBusAnnouncement(BusMessageDTO message) { |
| | | log.error("åéæ¶æ¯å¤±è´¥ {}", cause); |
| | | } |
| | | |
| | | @Override |
| | | public void sendTemplateAnnouncement(TemplateMessageDTO message) { |
| | | log.error("åéæ¶æ¯å¤±è´¥ {}", cause); |
| | | } |
| | | |
| | | @Override |
| | | public void sendCustomMsg(CustomMessage message) { |
| | | log.error("åéæ¶æ¯å¤±è´¥ {}", cause); |
| | | } |
| | | |
| | | @Override |
| | | public void sendBusTemplateAnnouncement(BusTemplateMessageDTO message) { |
| | | log.error("åéæ¶æ¯å¤±è´¥ {}", cause); |
| | | } |
| | | |
| | | @Override |
| | | public String parseTemplateByCode(TemplateDTO templateDTO) { |
| | | log.error("éè¿æ¨¡æ¿è·åæ¶æ¯å
容失败 {}", cause); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public LoginUser getUserById(String id) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getRolesByUsername(String username) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getDepartIdsByUsername(String username) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getDepartNamesByUsername(String username) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryDictItemsByCode(String code) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryEnableDictItemsByCode(String code) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryAllDict() { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<SysCategoryModel> queryAllDSysCategory() { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryTableDictItemsByCode(String table, String text, String code) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryAllDepartBackDictModel() { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public void updateSysAnnounReadFlag(String busType, String busId) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> queryFilterTableDictInfo(String table, String text, String code, String filterSql) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> queryTableDictByKeys(String table, String text, String code, String[] keyArray) { |
| | | log.error("queryTableDictByKeysæ¥è¯¢å¤±è´¥ {}", cause); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<ComboModel> queryAllUserBackCombo() { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public JSONObject queryAllUser(String userIds, Integer pageNo, int pageSize) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<ComboModel> queryAllRole(String[] roleIds) { |
| | | log.error("è·åè§è²ä¿¡æ¯å¤±è´¥ {}", cause); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getRoleIdsByUsername(String username) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String getDepartIdsByOrgCode(String orgCode) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<SysDepartModel> getAllSysDepart() { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public DictModel getParentDepartId(String departId) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getDeptHeadByDepId(String deptId) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public void sendWebSocketMsg(String[] userIds, String cmd) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public List<LoginUser> queryAllUserByIds(String[] userIds) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public void meetingSignWebsocket(String userId) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public List<LoginUser> queryUserByNames(String[] userNames) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Set<String> getUserRoleSet(String username) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Set<String> getUserPermissionSet(String username) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public boolean hasOnlineAuth(OnlineAuthDTO onlineAuthDTO) { |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public SysDepartModel selectAllById(String id) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> queryDeptUsersByUserId(String userId) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Set<String> queryUserRoles(String username) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Set<String> queryUserAuths(String username) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public LoginUser getUserByName(String username) { |
| | | log.error("éè¿ç¨æ·åè·åå½åç»å½ç¨æ·ä¿¡æ¯ {}", cause); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String translateDictFromTable(String table, String text, String code, String key) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String translateDict(String code, String key) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<SysPermissionDataRuleModel> queryPermissionDataRule(String component, String requestPath, String username) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public SysUserCacheInfo getCacheUser(String username) { |
| | | log.error("è·åç¨æ·ä¿¡æ¯å¤±è´¥ {}", cause); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<JSONObject> queryUsersByUsernames(String usernames) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<JSONObject> queryUsersByIds(String ids) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<JSONObject> queryDepartsByOrgcodes(String orgCodes) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<JSONObject> queryDepartsByIds(String ids) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<DictModel>> translateManyDict(String dictCodes, String keys) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> translateDictFromTableByKeys(String table, String text, String code, String keys) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public void sendEmailMsg(String email,String title,String content) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public List<Map> getDeptUserByOrgCode(String orgCode) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<JSONObject> queryDepartsByOrgIds(String ids) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> loadCategoryDictItem(String ids) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<String> loadDictItem(String dictCode, String keys) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> getDictItems(String dictCode) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, List<DictModel>> getManyDictItems(List<String> dictCodeList) { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public List<DictModel> loadDictItemByKeyword(String dictCode, String keyword, Integer pageSize) { |
| | | return null; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.SortedMap; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | import org.jeecg.common.config.mqtoken.UserTokenContext; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.util.DateUtils; |
| | | import org.jeecg.common.util.PathMatcherUtil; |
| | | import org.jeecg.config.sign.interceptor.SignAuthConfiguration; |
| | | import org.jeecg.config.sign.util.HttpUtils; |
| | | import org.jeecg.config.sign.util.SignUtil; |
| | | import org.springframework.beans.factory.ObjectFactory; |
| | | import org.springframework.boot.autoconfigure.AutoConfigureBefore; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; |
| | | import org.springframework.boot.autoconfigure.http.HttpMessageConverters; |
| | | import org.springframework.cloud.openfeign.FeignAutoConfiguration; |
| | | import org.springframework.cloud.openfeign.support.SpringDecoder; |
| | | import org.springframework.cloud.openfeign.support.SpringEncoder; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.context.annotation.Primary; |
| | | import org.springframework.context.annotation.Scope; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.serializer.SerializerFeature; |
| | | import com.alibaba.fastjson.support.config.FastJsonConfig; |
| | | import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; |
| | | import com.alibaba.fastjson.support.springfox.SwaggerJsonSerializer; |
| | | |
| | | import feign.Feign; |
| | | import feign.Logger; |
| | | import feign.RequestInterceptor; |
| | | import feign.codec.Decoder; |
| | | import feign.codec.Encoder; |
| | | import feign.form.spring.SpringFormEncoder; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | @ConditionalOnClass(Feign.class) |
| | | @AutoConfigureBefore(FeignAutoConfiguration.class) |
| | | @Slf4j |
| | | @Configuration |
| | | public class FeignConfig { |
| | | |
| | | @Bean |
| | | public RequestInterceptor requestInterceptor() { |
| | | return requestTemplate -> { |
| | | ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); |
| | | if (null != attributes) { |
| | | HttpServletRequest request = attributes.getRequest(); |
| | | log.debug("Feign request: {}", request.getRequestURI()); |
| | | // å°tokenä¿¡æ¯æ¾å
¥headerä¸ |
| | | String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); |
| | | if(token==null || "".equals(token)){ |
| | | token = request.getParameter("token"); |
| | | } |
| | | log.debug("Feign request token: {}", token); |
| | | requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token); |
| | | |
| | | //æ ¹æ®URLå°åè¿æ»¤è¯·æ± ãåå
¸è¡¨åæ°ç¾åéªè¯ã |
| | | if (PathMatcherUtil.matches(Arrays.asList(SignAuthConfiguration.urlList),requestTemplate.path())) { |
| | | try { |
| | | log.info("============================ [begin] fegin api url ============================"); |
| | | log.info(requestTemplate.path()); |
| | | log.info(requestTemplate.method()); |
| | | String queryLine = requestTemplate.queryLine(); |
| | | if(queryLine!=null && queryLine.startsWith("?")){ |
| | | queryLine = queryLine.substring(1); |
| | | } |
| | | log.info(queryLine); |
| | | if(requestTemplate.body()!=null){ |
| | | log.info(new String(requestTemplate.body())); |
| | | } |
| | | SortedMap<String, String> allParams = HttpUtils.getAllParams(requestTemplate.path(),queryLine,requestTemplate.body(),requestTemplate.method()); |
| | | String sign = SignUtil.getParamsSign(allParams); |
| | | log.info(" Feign request params sign: {}",sign); |
| | | log.info("============================ [end] fegin api url ============================"); |
| | | requestTemplate.header(CommonConstant.X_SIGN, sign); |
| | | requestTemplate.header(CommonConstant.X_TIMESTAMP, DateUtils.getCurrentTimestamp().toString()); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }else{ |
| | | String token = UserTokenContext.getToken(); |
| | | log.debug("Feign request token: {}", token); |
| | | requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token); |
| | | } |
| | | }; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Feign 客æ·ç«¯çæ¥å¿è®°å½ï¼é»è®¤çº§å«ä¸ºNONE |
| | | * Logger.Level çå
·ä½çº§å«å¦ä¸ï¼ |
| | | * NONEï¼ä¸è®°å½ä»»ä½ä¿¡æ¯ |
| | | * BASICï¼ä»
è®°å½è¯·æ±æ¹æ³ãURL以åååºç¶æç åæ§è¡æ¶é´ |
| | | * HEADERSï¼é¤äºè®°å½ BASIC级å«çä¿¡æ¯å¤ï¼è¿ä¼è®°å½è¯·æ±åååºçå¤´ä¿¡æ¯ |
| | | * FULLï¼è®°å½ææè¯·æ±ä¸ååºçæç»ï¼å
æ¬å¤´ä¿¡æ¯ã请æ±ä½ãå
æ°æ® |
| | | */ |
| | | @Bean |
| | | Logger.Level feignLoggerLevel() { |
| | | return Logger.Level.FULL; |
| | | } |
| | | |
| | | /** |
| | | * Feignæ¯ææä»¶ä¸ä¼ |
| | | * @param messageConverters |
| | | * @return |
| | | */ |
| | | @Bean |
| | | @Primary |
| | | @Scope("prototype") |
| | | public Encoder multipartFormEncoder(ObjectFactory<HttpMessageConverters> messageConverters) { |
| | | return new SpringFormEncoder(new SpringEncoder(messageConverters)); |
| | | } |
| | | |
| | | // update-begin--Author:sunjianlei Date:20210604 forï¼ ç» Feign æ·»å FastJson çè§£ææ¯æ ---------- |
| | | @Bean |
| | | public Encoder feignEncoder() { |
| | | return new SpringEncoder(feignHttpMessageConverter()); |
| | | } |
| | | |
| | | @Bean |
| | | public Decoder feignDecoder() { |
| | | return new SpringDecoder(feignHttpMessageConverter()); |
| | | } |
| | | |
| | | /** |
| | | * 设置解ç å¨ä¸ºfastjson |
| | | * |
| | | * @return |
| | | */ |
| | | private ObjectFactory<HttpMessageConverters> feignHttpMessageConverter() { |
| | | final HttpMessageConverters httpMessageConverters = new HttpMessageConverters(this.getFastJsonConverter()); |
| | | return () -> httpMessageConverters; |
| | | } |
| | | |
| | | private FastJsonHttpMessageConverter getFastJsonConverter() { |
| | | FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); |
| | | |
| | | List<MediaType> supportedMediaTypes = new ArrayList<>(); |
| | | MediaType mediaTypeJson = MediaType.valueOf(MediaType.APPLICATION_JSON_VALUE); |
| | | supportedMediaTypes.add(mediaTypeJson); |
| | | converter.setSupportedMediaTypes(supportedMediaTypes); |
| | | FastJsonConfig config = new FastJsonConfig(); |
| | | config.getSerializeConfig().put(JSON.class, new SwaggerJsonSerializer()); |
| | | config.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect); |
| | | converter.setFastJsonConfig(config); |
| | | |
| | | return converter; |
| | | } |
| | | // update-end--Author:sunjianlei Date:20210604 forï¼ ç» Feign æ·»å FastJson çè§£ææ¯æ ---------- |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <artifactId>jeecg-boot-base-api</artifactId> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <version>3.0</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>jeecg-system-local-api</artifactId> |
| | | |
| | | </project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.bpm.api; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | |
| | | /** |
| | | * æµç¨æ¥å£ |
| | | * |
| | | * @author scott |
| | | */ |
| | | public interface IBpmBaseExtAPI { |
| | | /** |
| | | * 23. æµç¨æäº¤æ¥å£ï¼onlineï¼èªå®ä¹å¼åï¼ |
| | | * @param flowCode æµç¨ä¸å¡å
³è ä¾å¦ï¼joa_leave_01 |
| | | * @param id 表åä¸å¡æ°æ®data id |
| | | * @param formUrl æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçPC端表åç»ä»¶ï¼å°åï¼ |
| | | * @param formUrlMobile æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçç§»å¨ç«¯è¡¨åç»ä»¶ï¼å°åï¼ |
| | | * @param username æµç¨åèµ·äººè´¦å· |
| | | * @param jsonData Json串ï¼é¢å¤æ©å±çæµç¨åéå¼ ãéå¿
å¡«ã |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | Result<String> startMutilProcess(String flowCode, String id, String formUrl, String formUrlMobile,String username, String jsonData) throws Exception; |
| | | |
| | | /** |
| | | * 24. æµç¨æäº¤æ¥å£ï¼èªå®ä¹è¡¨å设计å¨ï¼ |
| | | * @param flowCode æµç¨ä¸å¡å
³è ä¾å¦ï¼joa_leave_01 |
| | | * @param id 表åä¸å¡æ°æ®data id |
| | | * @param formUrl æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçPC端表åç»ä»¶ï¼å°åï¼ |
| | | * @param formUrlMobile æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçç§»å¨ç«¯è¡¨åç»ä»¶ï¼å°åï¼ |
| | | * @param username æµç¨åèµ·äººè´¦å· |
| | | * @param jsonData Json串ï¼é¢å¤æ©å±çæµç¨åéå¼ ãéå¿
å¡«ã |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | Result<String> startDesFormMutilProcess(String flowCode, String id, String formUrl, String formUrlMobile,String username,String jsonData) throws Exception; |
| | | /** |
| | | * 25. ä¿åæµç¨è稿箱æ¥å£ï¼èªå®ä¹å¼å表åãonline表åï¼ |
| | | * @param flowCode æµç¨ä¸å¡å
³è ä¾å¦ï¼joa_leave_01 |
| | | * @param id 表åä¸å¡æ°æ®data id |
| | | * @param formUrl æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçPC端表åç»ä»¶ï¼å°åï¼ ãéå¿
å¡«ã |
| | | * @param formUrlMobile æµç¨å®¡æ¹æ¶é件页é¢é»è®¤å±ç¤ºçç§»å¨ç«¯è¡¨åç»ä»¶ï¼å°åï¼ ãéå¿
å¡«ã |
| | | * @param username æµç¨åèµ·äººè´¦å· |
| | | * @param jsonData Json串ï¼é¢å¤æ©å±çæµç¨åéå¼ ãéå¿
å¡«ã |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | Result<String> saveMutilProcessDraft(String flowCode, String id, String formUrl, String formUrlMobile,String username,String jsonData) throws Exception; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.online.api; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 表å设计å¨ãOnlineãç¿»è¯APIæ¥å£ |
| | | * |
| | | * @author sunjianlei |
| | | */ |
| | | public interface IOnlineBaseExtAPI { |
| | | |
| | | /** |
| | | * ãOnlineã 表å设计å¨ä¸ç¨ï¼åæ¥æ°å¢ |
| | | */ |
| | | String cgformPostCrazyForm(String tableName, JSONObject jsonObject) throws Exception; |
| | | |
| | | /** |
| | | * ãOnlineã 表å设计å¨ä¸ç¨ï¼åæ¥ç¼è¾ |
| | | */ |
| | | String cgformPutCrazyForm(String tableName, JSONObject jsonObject) throws Exception; |
| | | |
| | | /** |
| | | * online表åå 餿°æ® |
| | | * |
| | | * @param cgformCode Online表åcode |
| | | * @param dataIds æ°æ®IDï¼å¯éå·åå² |
| | | * @return |
| | | */ |
| | | String cgformDeleteDataByCode(String cgformCode, String dataIds); |
| | | |
| | | /** |
| | | * éè¿onlineè¡¨åæ¥è¯¢æ°æ®ï¼åæ¶æ¥è¯¢åºåè¡¨çæ°æ® |
| | | * |
| | | * @param tableName online表å |
| | | * @param dataIds onlineæ°æ®ID |
| | | * @return |
| | | */ |
| | | JSONObject cgformQueryAllDataByTableName(String tableName, String dataIds); |
| | | |
| | | /** |
| | | * 对 cgreportGetData çè¿åå¼åä¼åï¼å°è£
DictModel éå |
| | | * |
| | | * @return |
| | | */ |
| | | List<DictModel> cgreportGetDataPackage(String code, String dictText, String dictCode, String dataList); |
| | | |
| | | /** |
| | | * ãcgreportãéè¿ head code è·å sqlè¯å¥ï¼å¹¶æ§è¡è¯¥è¯å¥è¿åæ¥è¯¢æ°æ® |
| | | * |
| | | * @param code æ¥è¡¨Codeï¼å¦ææ²¡ä¼ IDå°±éè¿codeæ¥ |
| | | * @param forceKey |
| | | * @param dataList |
| | | * @return |
| | | */ |
| | | Map<String, Object> cgreportGetData(String code, String forceKey, String dataList); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.api; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.api.dto.OnlineAuthDTO; |
| | | import org.jeecg.common.api.dto.message.*; |
| | | import org.jeecg.common.system.vo.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * @Description åºå±å
±éä¸å¡APIï¼æä¾å
¶ä»ç¬ç«æ¨¡åè°ç¨ |
| | | * @Author scott |
| | | * @Date 2019-4-20 |
| | | * @Version V1.0 |
| | | */ |
| | | public interface ISysBaseAPI extends CommonAPI { |
| | | |
| | | |
| | | /** |
| | | * 1åéç³»ç»æ¶æ¯ |
| | | * @param message ä½¿ç¨æé å¨èµå¼åæ° å¦æä¸è®¾ç½®category(æ¶æ¯ç±»å)åé»è®¤ä¸º2 åéç³»ç»æ¶æ¯ |
| | | */ |
| | | void sendSysAnnouncement(MessageDTO message); |
| | | |
| | | /** |
| | | * 2åéæ¶æ¯ é带ä¸å¡åæ° |
| | | * @param message ä½¿ç¨æé å¨èµå¼åæ° |
| | | */ |
| | | void sendBusAnnouncement(BusMessageDTO message); |
| | | |
| | | /** |
| | | * 3éè¿æ¨¡æ¿åéæ¶æ¯ |
| | | * @param message ä½¿ç¨æé å¨èµå¼åæ° |
| | | */ |
| | | void sendTemplateAnnouncement(TemplateMessageDTO message); |
| | | |
| | | /** |
| | | * 4éè¿æ¨¡æ¿åéæ¶æ¯ é带ä¸å¡åæ° |
| | | * @param message ä½¿ç¨æé å¨èµå¼åæ° |
| | | */ |
| | | void sendBusTemplateAnnouncement(BusTemplateMessageDTO message); |
| | | |
| | | /** |
| | | * 5éè¿æ¶æ¯ä¸å¿æ¨¡æ¿ï¼çææ¨éå
容 |
| | | * @param templateDTO ä½¿ç¨æé å¨èµå¼åæ° |
| | | * @return |
| | | */ |
| | | String parseTemplateByCode(TemplateDTO templateDTO); |
| | | |
| | | /** |
| | | * 6æ ¹æ®ç¨æ·idæ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | * @param id |
| | | * @return |
| | | */ |
| | | LoginUser getUserById(String id); |
| | | |
| | | /** |
| | | * 7éè¿ç¨æ·è´¦å·æ¥è¯¢è§è²éå |
| | | * @param username |
| | | * @return |
| | | */ |
| | | List<String> getRolesByUsername(String username); |
| | | |
| | | /** |
| | | * 8éè¿ç¨æ·è´¦å·æ¥è¯¢é¨é¨éå |
| | | * @param username |
| | | * @return é¨é¨ id |
| | | */ |
| | | List<String> getDepartIdsByUsername(String username); |
| | | |
| | | /** |
| | | * 9éè¿ç¨æ·è´¦å·æ¥è¯¢é¨é¨ name |
| | | * @param username |
| | | * @return é¨é¨ name |
| | | */ |
| | | List<String> getDepartNamesByUsername(String username); |
| | | |
| | | |
| | | |
| | | /** 11æ¥è¯¢ææçç¶çº§åå
¸ï¼æç
§create_timeæåº */ |
| | | public List<DictModel> queryAllDict(); |
| | | |
| | | /** |
| | | * 12æ¥è¯¢ææåç±»åå
¸ |
| | | * @return |
| | | */ |
| | | public List<SysCategoryModel> queryAllDSysCategory(); |
| | | |
| | | |
| | | /** |
| | | * 14æ¥è¯¢ææé¨é¨ ä½ä¸ºåå
¸ä¿¡æ¯ id -->value,departName -->text |
| | | * @return |
| | | */ |
| | | public List<DictModel> queryAllDepartBackDictModel(); |
| | | |
| | | /** |
| | | * 15æ ¹æ®ä¸å¡ç±»ååä¸å¡idä¿®æ¹æ¶æ¯å·²è¯» |
| | | * @param busType |
| | | * @param busId |
| | | */ |
| | | public void updateSysAnnounReadFlag(String busType, String busId); |
| | | |
| | | /** |
| | | * 16æ¥è¯¢è¡¨åå
¸ æ¯æè¿æ»¤æ°æ® |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param filterSql |
| | | * @return |
| | | */ |
| | | public List<DictModel> queryFilterTableDictInfo(String table, String text, String code, String filterSql); |
| | | |
| | | /** |
| | | * 17æ¥è¯¢æå®tableç text code è·ååå
¸ï¼å
å«textåvalue |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param keyArray |
| | | * @return |
| | | */ |
| | | @Deprecated |
| | | public List<String> queryTableDictByKeys(String table, String text, String code, String[] keyArray); |
| | | |
| | | /** |
| | | * 18æ¥è¯¢ææç¨æ· è¿åComboModel |
| | | * @return |
| | | */ |
| | | public List<ComboModel> queryAllUserBackCombo(); |
| | | |
| | | /** |
| | | * 19å页æ¥è¯¢ç¨æ· è¿åJSONObject |
| | | * @return |
| | | */ |
| | | public JSONObject queryAllUser(String userIds, Integer pageNo, Integer pageSize); |
| | | |
| | | /** |
| | | * 20è·åææè§è² |
| | | * @return |
| | | */ |
| | | public List<ComboModel> queryAllRole(); |
| | | |
| | | /** |
| | | * 21è·åææè§è² 带å |
| | | * roleIds é»è®¤éä¸è§è² |
| | | * @return |
| | | */ |
| | | public List<ComboModel> queryAllRole(String[] roleIds ); |
| | | |
| | | /** |
| | | * 22éè¿ç¨æ·è´¦å·æ¥è¯¢è§è²Idéå |
| | | * @param username |
| | | * @return |
| | | */ |
| | | public List<String> getRoleIdsByUsername(String username); |
| | | |
| | | /** |
| | | * 23éè¿é¨é¨ç¼å·æ¥è¯¢é¨é¨id |
| | | * @param orgCode |
| | | * @return |
| | | */ |
| | | public String getDepartIdsByOrgCode(String orgCode); |
| | | |
| | | /** |
| | | * 24æ¥è¯¢ææé¨é¨ |
| | | * @return |
| | | */ |
| | | public List<SysDepartModel> getAllSysDepart(); |
| | | |
| | | /** |
| | | * 25æ¥æ¾ç¶çº§é¨é¨ |
| | | * @param departId |
| | | * @return |
| | | */ |
| | | DictModel getParentDepartId(String departId); |
| | | |
| | | /** |
| | | * 26æ ¹æ®é¨é¨Idè·åé¨é¨è´è´£äºº |
| | | * @param deptId |
| | | * @return |
| | | */ |
| | | public List<String> getDeptHeadByDepId(String deptId); |
| | | |
| | | /** |
| | | * 27ç»æå®ç¨æ·åæ¶æ¯ |
| | | * @param userIds |
| | | * @param cmd |
| | | */ |
| | | public void sendWebSocketMsg(String[] userIds, String cmd); |
| | | |
| | | /** |
| | | * 28æ ¹æ®idè·åææåä¸ç¨æ· |
| | | * userIds |
| | | * @return |
| | | */ |
| | | public List<LoginUser> queryAllUserByIds(String[] userIds); |
| | | |
| | | /** |
| | | * 29å°ä¼è®®ç¾å°ä¿¡æ¯æ¨å¨å°é¢è§ |
| | | * userIds |
| | | * @return |
| | | * @param userId |
| | | */ |
| | | void meetingSignWebsocket(String userId); |
| | | |
| | | /** |
| | | * 30æ ¹æ®nameè·åææåä¸ç¨æ· |
| | | * userNames |
| | | * @return |
| | | */ |
| | | List<LoginUser> queryUserByNames(String[] userNames); |
| | | |
| | | |
| | | /** |
| | | * 31è·åç¨æ·çè§è²éå |
| | | * @param username |
| | | * @return |
| | | */ |
| | | Set<String> getUserRoleSet(String username); |
| | | |
| | | /** |
| | | * 32è·åç¨æ·çæééå |
| | | * @param username |
| | | * @return |
| | | */ |
| | | Set<String> getUserPermissionSet(String username); |
| | | |
| | | /** |
| | | * 33夿æ¯å¦æonline访é®çæé |
| | | * @param onlineAuthDTO |
| | | * @return |
| | | */ |
| | | boolean hasOnlineAuth(OnlineAuthDTO onlineAuthDTO); |
| | | |
| | | /** |
| | | * 34éè¿é¨é¨idè·åé¨é¨å
¨é¨ä¿¡æ¯ |
| | | */ |
| | | SysDepartModel selectAllById(String id); |
| | | |
| | | /** |
| | | * 35æ ¹æ®ç¨æ·idæ¥è¯¢ç¨æ·æå±å
¬å¸ä¸ææç¨æ·ids |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | List<String> queryDeptUsersByUserId(String userId); |
| | | |
| | | /** |
| | | * 36æ ¹æ®å¤ä¸ªç¨æ·è´¦å·(éå·åé)ï¼æ¥è¯¢è¿åå¤ä¸ªç¨æ·ä¿¡æ¯ |
| | | * @param usernames |
| | | * @return |
| | | */ |
| | | List<JSONObject> queryUsersByUsernames(String usernames); |
| | | |
| | | /** |
| | | * 37æ ¹æ®å¤ä¸ªç¨æ·ID(éå·åé)ï¼æ¥è¯¢è¿åå¤ä¸ªç¨æ·ä¿¡æ¯ |
| | | * @param ids |
| | | * @return |
| | | */ |
| | | List<JSONObject> queryUsersByIds(String ids); |
| | | |
| | | /** |
| | | * 38æ ¹æ®å¤ä¸ªé¨é¨ç¼ç (éå·åé)ï¼æ¥è¯¢è¿åå¤ä¸ªé¨é¨ä¿¡æ¯ |
| | | * @param orgCodes |
| | | * @return |
| | | */ |
| | | List<JSONObject> queryDepartsByOrgcodes(String orgCodes); |
| | | |
| | | /** |
| | | * 39æ ¹æ®å¤ä¸ªé¨é¨id(éå·åé)ï¼æ¥è¯¢è¿åå¤ä¸ªé¨é¨ä¿¡æ¯ |
| | | * @param ids |
| | | * @return |
| | | */ |
| | | List<JSONObject> queryDepartsByIds(String ids); |
| | | |
| | | /** |
| | | * 40åéé®ä»¶æ¶æ¯ |
| | | * @param email |
| | | * @param title |
| | | * @param content |
| | | */ |
| | | void sendEmailMsg(String email,String title,String content); |
| | | /** |
| | | * 41 è·åå
¬å¸ä¸çº§é¨é¨åå
¬å¸ä¸ææç¨æ·ä¿¡æ¯ |
| | | * @param orgCode |
| | | */ |
| | | List<Map> getDeptUserByOrgCode(String orgCode); |
| | | |
| | | /** |
| | | * æ¥è¯¢åç±»åå
¸ç¿»è¯ |
| | | */ |
| | | List<String> loadCategoryDictItem(String ids); |
| | | |
| | | /** |
| | | * æ ¹æ®åå
¸codeå è½½åå
¸text |
| | | * |
| | | * @param dictCode 顺åºï¼tableName,text,code |
| | | * @param keys è¦æ¥è¯¢çkey |
| | | * @return |
| | | */ |
| | | List<String> loadDictItem(String dictCode, String keys); |
| | | |
| | | /** |
| | | * æ ¹æ®åå
¸codeæ¥è¯¢åå
¸é¡¹ |
| | | * |
| | | * @param dictCode 顺åºï¼tableName,text,code |
| | | * @param dictCode è¦æ¥è¯¢çkey |
| | | * @return |
| | | */ |
| | | List<DictModel> getDictItems(String dictCode); |
| | | |
| | | /** |
| | | * æ ¹æ®å¤ä¸ªåå
¸codeæ¥è¯¢å¤ä¸ªåå
¸é¡¹ |
| | | * @param dictCodeList |
| | | * @return key = dictCode ï¼ value=对åºçåå
¸é¡¹ |
| | | */ |
| | | Map<String, List<DictModel>> getManyDictItems(List<String> dictCodeList); |
| | | |
| | | /** |
| | | * ãJSearchSelectTag䏿æç´¢ç»ä»¶ä¸ç¨æ¥å£ã |
| | | * å¤§æ°æ®éçåå
¸è¡¨ èµ°å¼æ¥å è½½ å³å端è¾å
¥å
å®¹è¿æ»¤æ°æ® |
| | | * |
| | | * @param dictCode åå
¸codeæ ¼å¼ï¼table,text,code |
| | | * @param keyword è¿æ»¤å
³é®å |
| | | * @return |
| | | */ |
| | | List<DictModel> loadDictItemByKeyword(String dictCode, String keyword, Integer pageSize); |
| | | |
| | | SysDepartModel getCompByOrgCode(String orgCode); |
| | | |
| | | UserVO getUserVOById(String userId); |
| | | |
| | | List<RoleVO> getRolesByUserId(String userId); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <artifactId>lb-boot-base</artifactId> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <version>3.0</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>jeecg-boot-base-api</artifactId> |
| | | <packaging>pom</packaging> |
| | | |
| | | <modules> |
| | | <module>jeecg-system-local-api</module> |
| | | <module>jeecg-system-cloud-api</module> |
| | | </modules> |
| | | |
| | | <dependencies> |
| | | <dependency> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <artifactId>jeecg-boot-base-core</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | </project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <artifactId>lb-boot-base</artifactId> |
| | | <version>3.0</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>jeecg-boot-base-core</artifactId> |
| | | |
| | | <repositories> |
| | | <repository> |
| | | <id>aliyun</id> |
| | | <name>aliyun Repository</name> |
| | | <url>https://maven.aliyun.com/repository/public</url> |
| | | <snapshots> |
| | | <enabled>false</enabled> |
| | | </snapshots> |
| | | </repository> |
| | | <repository> |
| | | <id>jeecg</id> |
| | | <name>jeecg Repository</name> |
| | | <url>https://maven.jeecg.org/nexus/content/repositories/jeecg</url> |
| | | <snapshots> |
| | | <enabled>false</enabled> |
| | | </snapshots> |
| | | </repository> |
| | | </repositories> |
| | | |
| | | |
| | | <dependencies> |
| | | <!--jeecg-tools--> |
| | | <dependency> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <artifactId>jeecg-boot-base-tools</artifactId> |
| | | </dependency> |
| | | <!--éæspringmvcæ¡æ¶å¹¶å®ç°èªå¨é
ç½® --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-web</artifactId> |
| | | </dependency> |
| | | <!-- websocket --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-websocket</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-mail</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-aop</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-actuator</artifactId> |
| | | </dependency> |
| | | <!--springboot2.3+ éå¼å
¥validation对åºçå
--> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-validation</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- commons --> |
| | | <dependency> |
| | | <groupId>commons-io</groupId> |
| | | <artifactId>commons-io</artifactId> |
| | | <version>${commons.version}</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>commons-lang</groupId> |
| | | <artifactId>commons-lang</artifactId> |
| | | <version>${commons.version}</version> |
| | | </dependency> |
| | | <!-- freemarker --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-freemarker</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- mybatis-plus --> |
| | | <dependency> |
| | | <groupId>com.baomidou</groupId> |
| | | <artifactId>mybatis-plus-boot-starter</artifactId> |
| | | <version>${mybatis-plus.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- druid --> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>druid-spring-boot-starter</artifactId> |
| | | <version>${druid.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- å¨ææ°æ®æº --> |
| | | <dependency> |
| | | <groupId>com.baomidou</groupId> |
| | | <artifactId>dynamic-datasource-spring-boot-starter</artifactId> |
| | | <version>${dynamic-datasource-spring-boot-starter.version}</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.hibernate</groupId> |
| | | <artifactId>hibernate-core</artifactId> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>commons-collections</groupId> |
| | | <artifactId>commons-collections</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <artifactId>hibernate-re</artifactId> |
| | | <version>3.0.02</version> |
| | | </dependency> |
| | | |
| | | <!-- æ°æ®åºé©±å¨ --> |
| | | <!--mysql--> |
| | | <dependency> |
| | | <groupId>mysql</groupId> |
| | | <artifactId>mysql-connector-java</artifactId> |
| | | <version>${mysql-connector-java.version}</version> |
| | | <scope>runtime</scope> |
| | | </dependency> |
| | | <!-- sqlserver--> |
| | | <dependency> |
| | | <groupId>com.microsoft.sqlserver</groupId> |
| | | <artifactId>sqljdbc4</artifactId> |
| | | <version>${sqljdbc4.version}</version> |
| | | <scope>runtime</scope> |
| | | </dependency> |
| | | <!-- oracleé©±å¨ --> |
| | | <dependency> |
| | | <groupId>com.oracle</groupId> |
| | | <artifactId>ojdbc6</artifactId> |
| | | <version>${ojdbc6.version}</version> |
| | | <scope>runtime</scope> |
| | | </dependency> |
| | | <!-- postgresqlé©±å¨ --> |
| | | <dependency> |
| | | <groupId>org.postgresql</groupId> |
| | | <artifactId>postgresql</artifactId> |
| | | <version>${postgresql.version}</version> |
| | | <scope>runtime</scope> |
| | | </dependency> |
| | | |
| | | <!-- Quartz宿¶ä»»å¡ --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-quartz</artifactId> |
| | | </dependency> |
| | | |
| | | <!--JWT--> |
| | | <dependency> |
| | | <groupId>com.auth0</groupId> |
| | | <artifactId>java-jwt</artifactId> |
| | | <version>${java-jwt.version}</version> |
| | | </dependency> |
| | | |
| | | <!--shiro--> |
| | | <dependency> |
| | | <groupId>org.apache.shiro</groupId> |
| | | <artifactId>shiro-spring-boot-starter</artifactId> |
| | | <version>${shiro.version}</version> |
| | | </dependency> |
| | | <!-- shiro-redis --> |
| | | <dependency> |
| | | <groupId>org.crazycake</groupId> |
| | | <artifactId>shiro-redis</artifactId> |
| | | <version>${shiro-redis.version}</version> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>org.apache.shiro</groupId> |
| | | <artifactId>shiro-core</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | <!-- knife4j --> |
| | | <dependency> |
| | | <groupId>com.github.xiaoymin</groupId> |
| | | <artifactId>knife4j-spring-boot-starter</artifactId> |
| | | <version>${knife4j-spring-boot-starter.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 代ç çæå¨ --> |
| | | <!-- å¦ä¸è½½å¤±è´¥ï¼è¯·åèæ¤ææ¡£ http://doc.jeecg.com/2043876 --> |
| | | <dependency> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <artifactId>codegenerate</artifactId> |
| | | <version>${codegenerate.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- AutoPoi Excelå·¥å
·ç±»--> |
| | | <dependency> |
| | | <groupId>org.jeecgframework</groupId> |
| | | <artifactId>autopoi-web</artifactId> |
| | | <version>${autopoi-web.version}</version> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>commons-codec</groupId> |
| | | <artifactId>commons-codec</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | <!-- miniæä»¶åå¨æå¡ --> |
| | | <dependency> |
| | | <groupId>io.minio</groupId> |
| | | <artifactId>minio</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.google.guava</groupId> |
| | | <artifactId>guava</artifactId> |
| | | <version>${guava.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- é¿éäºçä¿¡ --> |
| | | <dependency> |
| | | <groupId>com.aliyun</groupId> |
| | | <artifactId>aliyun-java-sdk-dysmsapi</artifactId> |
| | | <version>${aliyun-java-sdk-dysmsapi.version}</version> |
| | | </dependency> |
| | | <!-- aliyun oss --> |
| | | <dependency> |
| | | <groupId>com.aliyun.oss</groupId> |
| | | <artifactId>aliyun-sdk-oss</artifactId> |
| | | <version>${aliyun.oss.version}</version> |
| | | </dependency> |
| | | <!-- ç¬¬ä¸æ¹ç»å½ --> |
| | | <dependency> |
| | | <groupId>com.xkcoding.justauth</groupId> |
| | | <artifactId>justauth-spring-boot-starter</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.squareup.okhttp3</groupId> |
| | | <artifactId>okhttp</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>easyexcel</artifactId> |
| | | <version>${aliyun-easyexcel.version}</version> |
| | | </dependency> |
| | | <!--excel导åºå·¥å
·--> |
| | | <dependency> |
| | | <groupId>org.jxls</groupId> |
| | | <artifactId>jxls</artifactId> |
| | | <version>2.13.0</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.jxls</groupId> |
| | | <artifactId>jxls-poi</artifactId> |
| | | <version>2.13.0</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.6tail</groupId> |
| | | <artifactId>lunar</artifactId> |
| | | <version>1.3.13</version> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api; |
| | | |
| | | import org.jeecg.common.system.vo.*; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | public interface CommonAPI { |
| | | |
| | | /** |
| | | * 1æ¥è¯¢ç¨æ·è§è²ä¿¡æ¯ |
| | | * @param username |
| | | * @return |
| | | */ |
| | | Set<String> queryUserRoles(String username); |
| | | |
| | | |
| | | /** |
| | | * 2æ¥è¯¢ç¨æ·æéä¿¡æ¯ |
| | | * @param username |
| | | * @return |
| | | */ |
| | | Set<String> queryUserAuths(String username); |
| | | |
| | | /** |
| | | * 3æ ¹æ® id æ¥è¯¢æ°æ®åºä¸åå¨ç DynamicDataSourceModel |
| | | * |
| | | * @param dbSourceId |
| | | * @return |
| | | */ |
| | | DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId); |
| | | |
| | | /** |
| | | * 4æ ¹æ® code æ¥è¯¢æ°æ®åºä¸åå¨ç DynamicDataSourceModel |
| | | * |
| | | * @param dbSourceCode |
| | | * @return |
| | | */ |
| | | DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode); |
| | | |
| | | /** |
| | | * 5æ ¹æ®ç¨æ·è´¦å·æ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | * @param username |
| | | * @return |
| | | */ |
| | | public LoginUser getUserByName(String username); |
| | | |
| | | |
| | | /** |
| | | * 6åå
¸è¡¨ç ç¿»è¯ |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param key |
| | | * @return |
| | | */ |
| | | String translateDictFromTable(String table, String text, String code, String key); |
| | | |
| | | /** |
| | | * 7æ®éåå
¸çç¿»è¯ |
| | | * @param code |
| | | * @param key |
| | | * @return |
| | | */ |
| | | String translateDict(String code, String key); |
| | | |
| | | /** |
| | | * 8æ¥è¯¢æ°æ®æé |
| | | * @return |
| | | */ |
| | | List<SysPermissionDataRuleModel> queryPermissionDataRule(String component, String requestPath, String username); |
| | | |
| | | |
| | | /** |
| | | * 9æ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | * @param username |
| | | * @return |
| | | */ |
| | | SysUserCacheInfo getCacheUser(String username); |
| | | |
| | | /** |
| | | * 10è·åæ°æ®åå
¸ |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public List<DictModel> queryDictItemsByCode(String code); |
| | | |
| | | /** |
| | | * è·åææçæ°æ®åå
¸é¡¹ |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public List<DictModel> queryEnableDictItemsByCode(String code); |
| | | |
| | | /** |
| | | * 13è·åè¡¨æ°æ®åå
¸ |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @return |
| | | */ |
| | | List<DictModel> queryTableDictItemsByCode(String table, String text, String code); |
| | | |
| | | /** |
| | | * 14 æ®éåå
¸çç¿»è¯ï¼æ ¹æ®å¤ä¸ªdictCodeå夿¡æ°æ®ï¼å¤ä¸ªä»¥éå·åå² |
| | | * @param dictCodes ä¾å¦ï¼user_status,sex |
| | | * @param keys ä¾å¦ï¼1,2,0 |
| | | * @return |
| | | */ |
| | | Map<String, List<DictModel>> translateManyDict(String dictCodes, String keys); |
| | | |
| | | /** |
| | | * 15 åå
¸è¡¨ç ç¿»è¯ï¼å¯æ¹é |
| | | * @param table |
| | | * @param text |
| | | * @param code |
| | | * @param keys å¤ä¸ªç¨éå·åå² |
| | | * @return |
| | | */ |
| | | List<DictModel> translateDictFromTableByKeys(String table, String text, String code, String keys); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * æä»¶ä¸è½½ |
| | | * cloud api ç¨å°çæ¥å£ä¼ è¾å¯¹è±¡ |
| | | */ |
| | | @Data |
| | | public class FileDownDTO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 6749126258686446019L; |
| | | |
| | | private String filePath; |
| | | private String uploadpath; |
| | | private String uploadType; |
| | | private HttpServletResponse response; |
| | | |
| | | public FileDownDTO(){} |
| | | |
| | | public FileDownDTO(String filePath, String uploadpath, String uploadType,HttpServletResponse response){ |
| | | this.filePath = filePath; |
| | | this.uploadpath = uploadpath; |
| | | this.uploadType = uploadType; |
| | | this.response = response; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * æä»¶ä¸ä¼ |
| | | * cloud api ç¨å°çæ¥å£ä¼ è¾å¯¹è±¡ |
| | | */ |
| | | @Data |
| | | public class FileUploadDTO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = -4111953058578954386L; |
| | | |
| | | private MultipartFile file; |
| | | |
| | | private String bizPath; |
| | | |
| | | private String uploadType; |
| | | |
| | | private String customBucket; |
| | | |
| | | public FileUploadDTO(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * ç®åä¸ä¼ æé å¨1 |
| | | * @param file |
| | | * @param bizPath |
| | | * @param uploadType |
| | | */ |
| | | public FileUploadDTO(MultipartFile file,String bizPath,String uploadType){ |
| | | this.file = file; |
| | | this.bizPath = bizPath; |
| | | this.uploadType = uploadType; |
| | | } |
| | | |
| | | /** |
| | | * ç³ææ¡¶ æä»¶ä¸ä¼ æé å¨2 |
| | | * @param file |
| | | * @param bizPath |
| | | * @param uploadType |
| | | * @param customBucket |
| | | */ |
| | | public FileUploadDTO(MultipartFile file,String bizPath,String uploadType,String customBucket){ |
| | | this.file = file; |
| | | this.bizPath = bizPath; |
| | | this.uploadType = uploadType; |
| | | this.customBucket = customBucket; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto; |
| | | import lombok.Data; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * æ¥å¿å¯¹è±¡ |
| | | * cloud api ç¨å°çæ¥å£ä¼ è¾å¯¹è±¡ |
| | | */ |
| | | @Data |
| | | public class LogDTO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 8482720462943906924L; |
| | | |
| | | /**å
容*/ |
| | | private String logContent; |
| | | |
| | | /**æ¥å¿ç±»å(0:æä½æ¥å¿;1:ç»å½æ¥å¿;2:宿¶ä»»å¡) */ |
| | | private Integer logType; |
| | | |
| | | /**æä½ç±»å(1:æ·»å ;2:ä¿®æ¹;3:å é¤;) */ |
| | | private Integer operateType; |
| | | |
| | | /**ç»å½ç¨æ· */ |
| | | private LoginUser loginUser; |
| | | |
| | | private String id; |
| | | private String createBy; |
| | | private Date createTime; |
| | | private Long costTime; |
| | | private String ip; |
| | | |
| | | /**请æ±åæ° */ |
| | | private String requestParam; |
| | | |
| | | /**请æ±ç±»å*/ |
| | | private String requestType; |
| | | |
| | | /**请æ±è·¯å¾*/ |
| | | private String requestUrl; |
| | | |
| | | /**è¯·æ±æ¹æ³ */ |
| | | private String method; |
| | | |
| | | /**æä½äººç¨æ·åç§°*/ |
| | | private String username; |
| | | |
| | | /**æä½äººç¨æ·è´¦æ·*/ |
| | | private String userid; |
| | | |
| | | public LogDTO(){ |
| | | |
| | | } |
| | | |
| | | public LogDTO(String logContent, Integer logType, Integer operatetype){ |
| | | this.logContent = logContent; |
| | | this.logType = logType; |
| | | this.operateType = operatetype; |
| | | } |
| | | |
| | | public LogDTO(String logContent, Integer logType, Integer operatetype, LoginUser loginUser){ |
| | | this.logContent = logContent; |
| | | this.logType = logType; |
| | | this.operateType = operatetype; |
| | | this.loginUser = loginUser; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * online æ¦æªå¨æé夿 |
| | | * cloud api ç¨å°çæ¥å£ä¼ è¾å¯¹è±¡ |
| | | */ |
| | | @Data |
| | | public class OnlineAuthDTO implements Serializable { |
| | | private static final long serialVersionUID = 1771827545416418203L; |
| | | |
| | | |
| | | /** |
| | | * ç¨æ·å |
| | | */ |
| | | private String username; |
| | | |
| | | /** |
| | | * å¯è½ç请æ±å°å |
| | | */ |
| | | private List<String> possibleUrl; |
| | | |
| | | /** |
| | | * onlineå¼åçèåå°å |
| | | */ |
| | | private String onlineFormUrl; |
| | | |
| | | public OnlineAuthDTO(){ |
| | | |
| | | } |
| | | |
| | | public OnlineAuthDTO(String username, List<String> possibleUrl, String onlineFormUrl){ |
| | | this.username = username; |
| | | this.possibleUrl = possibleUrl; |
| | | this.onlineFormUrl = onlineFormUrl; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto.message; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * 带ä¸å¡åæ°çæ¶æ¯ |
| | | */ |
| | | @Data |
| | | public class BusMessageDTO extends MessageDTO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 9104793287983367669L; |
| | | /** |
| | | * ä¸å¡ç±»å |
| | | */ |
| | | private String busType; |
| | | |
| | | /** |
| | | * ä¸å¡id |
| | | */ |
| | | private String busId; |
| | | |
| | | public BusMessageDTO(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æé 带ä¸å¡åæ°çæ¶æ¯ |
| | | * @param fromUser |
| | | * @param toUser |
| | | * @param title |
| | | * @param msgContent |
| | | * @param msgCategory |
| | | * @param busType |
| | | * @param busId |
| | | */ |
| | | public BusMessageDTO(String fromUser, String toUser, String title, String msgContent, String msgCategory, String busType, String busId){ |
| | | super(fromUser, toUser, title, msgContent, msgCategory); |
| | | this.busId = busId; |
| | | this.busType = busType; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto.message; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 带ä¸å¡åæ°çæ¨¡æ¿æ¶æ¯ |
| | | */ |
| | | @Data |
| | | public class BusTemplateMessageDTO extends TemplateMessageDTO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = -4277810906346929459L; |
| | | |
| | | /** |
| | | * ä¸å¡ç±»å |
| | | */ |
| | | private String busType; |
| | | |
| | | /** |
| | | * ä¸å¡id |
| | | */ |
| | | private String busId; |
| | | |
| | | public BusTemplateMessageDTO(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æé 带ä¸å¡åæ°çæ¨¡æ¿æ¶æ¯ |
| | | * @param fromUser |
| | | * @param toUser |
| | | * @param title |
| | | * @param templateParam |
| | | * @param templateCode |
| | | * @param busType |
| | | * @param busId |
| | | */ |
| | | public BusTemplateMessageDTO(String fromUser, String toUser, String title, Map<String, String> templateParam, String templateCode, String busType, String busId){ |
| | | super(fromUser, toUser, title, templateParam, templateCode); |
| | | this.busId = busId; |
| | | this.busType = busType; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto.message; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Map; |
| | | |
| | | @Data |
| | | public class CustomMessage implements Serializable { |
| | | private String userId; |
| | | private Map<String,String> baseMap; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto.message; |
| | | |
| | | import lombok.Data; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * æ®éæ¶æ¯ |
| | | */ |
| | | @Data |
| | | public class MessageDTO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = -5690444483968058442L; |
| | | |
| | | /** |
| | | * åé人(ç¨æ·ç»å½è´¦æ·) |
| | | */ |
| | | protected String fromUser; |
| | | |
| | | /** |
| | | * åéç»(ç¨æ·ç»å½è´¦æ·) |
| | | */ |
| | | protected String toUser; |
| | | |
| | | /** |
| | | * åéç»ææäºº |
| | | */ |
| | | protected boolean toAll; |
| | | |
| | | /** |
| | | * æ¶æ¯ä¸»é¢ |
| | | */ |
| | | protected String title; |
| | | |
| | | /** |
| | | * æ¶æ¯å
容 |
| | | */ |
| | | protected String content; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å 1:æ¶æ¯ 2:ç³»ç»æ¶æ¯ |
| | | */ |
| | | protected String category; |
| | | |
| | | |
| | | public MessageDTO(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æé å¨1 ç³»ç»æ¶æ¯ |
| | | */ |
| | | public MessageDTO(String fromUser,String toUser,String title, String content){ |
| | | this.fromUser = fromUser; |
| | | this.toUser = toUser; |
| | | this.title = title; |
| | | this.content = content; |
| | | //é»è®¤ 齿¯2ç³»ç»æ¶æ¯ |
| | | this.category = CommonConstant.MSG_CATEGORY_2; |
| | | } |
| | | |
| | | /** |
| | | * æé å¨2 æ¯æè®¾ç½®category 1:æ¶æ¯ 2:ç³»ç»æ¶æ¯ |
| | | */ |
| | | public MessageDTO(String fromUser,String toUser,String title, String content, String category){ |
| | | this.fromUser = fromUser; |
| | | this.toUser = toUser; |
| | | this.title = title; |
| | | this.content = content; |
| | | this.category = category; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto.message; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ¶æ¯æ¨¡æ¿dto |
| | | */ |
| | | @Data |
| | | public class TemplateDTO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 5848247133907528650L; |
| | | |
| | | /** |
| | | * 模æ¿ç¼ç |
| | | */ |
| | | protected String templateCode; |
| | | |
| | | /** |
| | | * 模æ¿åæ° |
| | | */ |
| | | protected Map<String, String> templateParam; |
| | | |
| | | /** |
| | | * æé å¨ éè¿è®¾ç½®æ¨¡æ¿åæ°å模æ¿ç¼ç ä½ä¸ºåæ°è·åæ¶æ¯å
容 |
| | | */ |
| | | public TemplateDTO(String templateCode, Map<String, String> templateParam){ |
| | | this.templateCode = templateCode; |
| | | this.templateParam = templateParam; |
| | | } |
| | | |
| | | public TemplateDTO(){ |
| | | |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto.message; |
| | | |
| | | import lombok.Data; |
| | | import java.io.Serializable; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ¨¡æ¿æ¶æ¯ |
| | | */ |
| | | @Data |
| | | public class TemplateMessageDTO extends TemplateDTO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 411137565170647585L; |
| | | |
| | | |
| | | /** |
| | | * åé人(ç¨æ·ç»å½è´¦æ·) |
| | | */ |
| | | protected String fromUser; |
| | | |
| | | /** |
| | | * åéç»(ç¨æ·ç»å½è´¦æ·) |
| | | */ |
| | | protected String toUser; |
| | | |
| | | /** |
| | | * æ¶æ¯ä¸»é¢ |
| | | */ |
| | | protected String title; |
| | | |
| | | |
| | | public TemplateMessageDTO(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æé å¨1 忍¡æ¿æ¶æ¯ç¨ |
| | | */ |
| | | public TemplateMessageDTO(String fromUser, String toUser,String title, Map<String, String> templateParam, String templateCode){ |
| | | super(templateCode, templateParam); |
| | | this.fromUser = fromUser; |
| | | this.toUser = toUser; |
| | | this.title = title; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonIgnore; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ¥å£è¿åæ°æ®æ ¼å¼ |
| | | * @author scott |
| | | * @email jeecgos@163.com |
| | | * @date 2019å¹´1æ19æ¥ |
| | | */ |
| | | @Data |
| | | @ApiModel(value="æ¥å£è¿å对象", description="æ¥å£è¿å对象") |
| | | public class Result<T> implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * æåæ å¿ |
| | | */ |
| | | @ApiModelProperty(value = "æåæ å¿") |
| | | private boolean success = true; |
| | | |
| | | /** |
| | | * è¿åå¤çæ¶æ¯ |
| | | */ |
| | | @ApiModelProperty(value = "è¿åå¤çæ¶æ¯") |
| | | private String message = ""; |
| | | |
| | | /** |
| | | * è¿å代ç |
| | | */ |
| | | @ApiModelProperty(value = "è¿å代ç ") |
| | | private Integer code = 0; |
| | | |
| | | /** |
| | | * è¿åæ°æ®å¯¹è±¡ data |
| | | */ |
| | | @ApiModelProperty(value = "è¿åæ°æ®å¯¹è±¡") |
| | | private T result; |
| | | |
| | | /** |
| | | * è¿åæ°æ®å¯¹è±¡ data |
| | | */ |
| | | @ApiModelProperty(value = "è¿åæ°æ®å¯¹è±¡ ext") |
| | | private List<Map<String,Object>> resultExt; |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @ApiModelProperty(value = "æ¶é´æ³") |
| | | private long timestamp = System.currentTimeMillis(); |
| | | |
| | | public Result() { |
| | | } |
| | | |
| | | /** |
| | | * å
¼å®¹VUE3çtoken失æä¸è·³è½¬ç»å½é¡µé¢ |
| | | * @param code |
| | | * @param message |
| | | */ |
| | | public Result(Integer code,String message) { |
| | | this.code = code; |
| | | this.message = message; |
| | | } |
| | | |
| | | public Result<T> success(String message) { |
| | | this.message = message; |
| | | this.code = CommonConstant.SC_OK_200; |
| | | this.success = true; |
| | | return this; |
| | | } |
| | | |
| | | @Deprecated |
| | | public static Result<Object> ok() { |
| | | Result<Object> r = new Result<Object>(); |
| | | r.setSuccess(true); |
| | | r.setCode(CommonConstant.SC_OK_200); |
| | | return r; |
| | | } |
| | | |
| | | @Deprecated |
| | | public static Result<Object> ok(String msg) { |
| | | Result<Object> r = new Result<Object>(); |
| | | r.setSuccess(true); |
| | | r.setCode(CommonConstant.SC_OK_200); |
| | | r.setMessage(msg); |
| | | return r; |
| | | } |
| | | |
| | | @Deprecated |
| | | public static Result<Object> ok(Object data) { |
| | | Result<Object> r = new Result<Object>(); |
| | | r.setSuccess(true); |
| | | r.setCode(CommonConstant.SC_OK_200); |
| | | r.setResult(data); |
| | | return r; |
| | | } |
| | | |
| | | public static<T> Result<T> OK() { |
| | | Result<T> r = new Result<T>(); |
| | | r.setSuccess(true); |
| | | r.setCode(CommonConstant.SC_OK_200); |
| | | return r; |
| | | } |
| | | |
| | | public static<T> Result<T> OK(String msg) { |
| | | Result<T> r = new Result<T>(); |
| | | r.setSuccess(true); |
| | | r.setCode(CommonConstant.SC_OK_200); |
| | | r.setMessage(msg); |
| | | //Result OK(String msg)æ¹æ³ä¼é æå
¼å®¹æ§é®é¢ issues/I4IP3D |
| | | r.setResult((T) msg); |
| | | return r; |
| | | } |
| | | |
| | | public static<T> Result<T> OK(T data) { |
| | | Result<T> r = new Result<T>(); |
| | | r.setSuccess(true); |
| | | r.setCode(CommonConstant.SC_OK_200); |
| | | r.setResult(data); |
| | | return r; |
| | | } |
| | | |
| | | public static<T> Result<T> OK(String msg, T data) { |
| | | Result<T> r = new Result<T>(); |
| | | r.setSuccess(true); |
| | | r.setCode(CommonConstant.SC_OK_200); |
| | | r.setMessage(msg); |
| | | r.setResult(data); |
| | | return r; |
| | | } |
| | | |
| | | public static<T> Result<T> error(String msg, T data) { |
| | | Result<T> r = new Result<T>(); |
| | | r.setSuccess(false); |
| | | r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500); |
| | | r.setMessage(msg); |
| | | r.setResult(data); |
| | | return r; |
| | | } |
| | | |
| | | public static Result<Object> error(String msg) { |
| | | return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg); |
| | | } |
| | | |
| | | public static Result<Object> error(int code, String msg) { |
| | | Result<Object> r = new Result<Object>(); |
| | | r.setCode(code); |
| | | r.setMessage(msg); |
| | | r.setSuccess(false); |
| | | return r; |
| | | } |
| | | |
| | | public Result<T> error500(String message) { |
| | | this.message = message; |
| | | this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; |
| | | this.success = false; |
| | | return this; |
| | | } |
| | | /** |
| | | * æ æé访é®è¿åç»æ |
| | | */ |
| | | public static Result<Object> noauth(String msg) { |
| | | return error(CommonConstant.SC_JEECG_NO_AUTHZ, msg); |
| | | } |
| | | |
| | | @JsonIgnore |
| | | private String onlTable; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.aspect; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.alibaba.fastjson.serializer.PropertyFilter; |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.aspectj.lang.JoinPoint; |
| | | import org.aspectj.lang.ProceedingJoinPoint; |
| | | import org.aspectj.lang.annotation.Around; |
| | | import org.aspectj.lang.annotation.Aspect; |
| | | import org.aspectj.lang.annotation.Pointcut; |
| | | import org.aspectj.lang.reflect.MethodSignature; |
| | | import org.jeecg.common.api.dto.LogDTO; |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.aspect.annotation.AutoLog; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.enums.ModuleType; |
| | | import org.jeecg.modules.base.service.BaseCommonService; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | import org.jeecg.common.util.IPUtils; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.core.LocalVariableTableParameterNameDiscoverer; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.validation.BindingResult; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.ServletRequest; |
| | | import javax.servlet.ServletResponse; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.lang.reflect.Method; |
| | | import java.util.Date; |
| | | |
| | | |
| | | /** |
| | | * ç³»ç»æ¥å¿ï¼åé¢å¤çç±» |
| | | * |
| | | * @Author scott |
| | | * @email jeecgos@163.com |
| | | * @Date 2018å¹´1æ14æ¥ |
| | | */ |
| | | @Aspect |
| | | @Component |
| | | public class AutoLogAspect { |
| | | |
| | | @Resource |
| | | private BaseCommonService baseCommonService; |
| | | |
| | | @Pointcut("@annotation(org.jeecg.common.aspect.annotation.AutoLog)") |
| | | public void logPointCut() { |
| | | |
| | | } |
| | | |
| | | @Around("logPointCut()") |
| | | public Object around(ProceedingJoinPoint point) throws Throwable { |
| | | long beginTime = System.currentTimeMillis(); |
| | | //æ§è¡æ¹æ³ |
| | | Object result = point.proceed(); |
| | | //æ§è¡æ¶é¿(毫ç§) |
| | | long time = System.currentTimeMillis() - beginTime; |
| | | |
| | | //ä¿åæ¥å¿ |
| | | saveSysLog(point, time, result); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | private void saveSysLog(ProceedingJoinPoint joinPoint, long time, Object obj) { |
| | | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | Method method = signature.getMethod(); |
| | | |
| | | LogDTO dto = new LogDTO(); |
| | | AutoLog syslog = method.getAnnotation(AutoLog.class); |
| | | if(syslog != null){ |
| | | //update-begin-author:taoyan date: |
| | | String content = syslog.value(); |
| | | if(syslog.module()== ModuleType.ONLINE){ |
| | | content = getOnlineLogContent(obj, content); |
| | | } |
| | | //注解ä¸çæè¿°,æä½æ¥å¿å
容 |
| | | dto.setLogType(syslog.logType()); |
| | | dto.setLogContent(content); |
| | | } |
| | | |
| | | //请æ±çæ¹æ³å |
| | | String className = joinPoint.getTarget().getClass().getName(); |
| | | String methodName = signature.getName(); |
| | | dto.setMethod(className + "." + methodName + "()"); |
| | | |
| | | |
| | | //设置æä½ç±»å |
| | | if (dto.getLogType() == CommonConstant.LOG_TYPE_2) { |
| | | dto.setOperateType(getOperateType(methodName, syslog.operateType())); |
| | | } |
| | | |
| | | //è·årequest |
| | | HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); |
| | | //请æ±çåæ° |
| | | dto.setRequestParam(getReqestParams(request,joinPoint)); |
| | | //设置IPå°å |
| | | dto.setIp(IPUtils.getIpAddr(request)); |
| | | //è·åç»å½ç¨æ·ä¿¡æ¯ |
| | | LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
| | | if(sysUser!=null){ |
| | | dto.setUserid(sysUser.getUsername()); |
| | | dto.setUsername(sysUser.getRealname()); |
| | | |
| | | } |
| | | //èæ¶ |
| | | dto.setCostTime(time); |
| | | dto.setCreateTime(new Date()); |
| | | //ä¿åç³»ç»æ¥å¿ |
| | | baseCommonService.addLog(dto); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·åæä½ç±»å |
| | | */ |
| | | private int getOperateType(String methodName,int operateType) { |
| | | if (operateType > 0) { |
| | | return operateType; |
| | | } |
| | | if (methodName.startsWith("list")) { |
| | | return CommonConstant.OPERATE_TYPE_1; |
| | | } |
| | | if (methodName.startsWith("add")) { |
| | | return CommonConstant.OPERATE_TYPE_2; |
| | | } |
| | | if (methodName.startsWith("edit")) { |
| | | return CommonConstant.OPERATE_TYPE_3; |
| | | } |
| | | if (methodName.startsWith("delete")) { |
| | | return CommonConstant.OPERATE_TYPE_4; |
| | | } |
| | | if (methodName.startsWith("import")) { |
| | | return CommonConstant.OPERATE_TYPE_5; |
| | | } |
| | | if (methodName.startsWith("export")) { |
| | | return CommonConstant.OPERATE_TYPE_6; |
| | | } |
| | | return CommonConstant.OPERATE_TYPE_1; |
| | | } |
| | | |
| | | /** |
| | | * @Description: è·å请æ±åæ° |
| | | * @author: scott |
| | | * @date: 2020/4/16 0:10 |
| | | * @param request: request |
| | | * @param joinPoint: joinPoint |
| | | * @Return: java.lang.String |
| | | */ |
| | | private String getReqestParams(HttpServletRequest request, JoinPoint joinPoint) { |
| | | String httpMethod = request.getMethod(); |
| | | String params = ""; |
| | | if ("POST".equals(httpMethod) || "PUT".equals(httpMethod) || "PATCH".equals(httpMethod)) { |
| | | Object[] paramsArray = joinPoint.getArgs(); |
| | | // java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) |
| | | // https://my.oschina.net/mengzhang6/blog/2395893 |
| | | Object[] arguments = new Object[paramsArray.length]; |
| | | for (int i = 0; i < paramsArray.length; i++) { |
| | | if (paramsArray[i] instanceof BindingResult || paramsArray[i] instanceof ServletRequest || paramsArray[i] instanceof ServletResponse || paramsArray[i] instanceof MultipartFile) { |
| | | //ServletRequestä¸è½åºååï¼ä»å
¥åéæé¤ï¼å¦åæ¥å¼å¸¸ï¼java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) |
| | | //ServletResponseä¸è½åºåå ä»å
¥åéæé¤ï¼å¦åæ¥å¼å¸¸ï¼java.lang.IllegalStateException: getOutputStream() has already been called for this response |
| | | continue; |
| | | } |
| | | arguments[i] = paramsArray[i]; |
| | | } |
| | | //update-begin-author:taoyan date:20200724 for:æ¥å¿æ°æ®å¤ªé¿çç´æ¥è¿æ»¤æ |
| | | PropertyFilter profilter = new PropertyFilter() { |
| | | @Override |
| | | public boolean apply(Object o, String name, Object value) { |
| | | if(value!=null && value.toString().length()>500){ |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | }; |
| | | params = JSONObject.toJSONString(arguments, profilter); |
| | | //update-end-author:taoyan date:20200724 for:æ¥å¿æ°æ®å¤ªé¿çç´æ¥è¿æ»¤æ |
| | | } else { |
| | | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | Method method = signature.getMethod(); |
| | | // 请æ±çæ¹æ³åæ°å¼ |
| | | Object[] args = joinPoint.getArgs(); |
| | | // 请æ±çæ¹æ³åæ°åç§° |
| | | LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer(); |
| | | String[] paramNames = u.getParameterNames(method); |
| | | if (args != null && paramNames != null) { |
| | | for (int i = 0; i < args.length; i++) { |
| | | params += " " + paramNames[i] + ": " + args[i]; |
| | | } |
| | | } |
| | | } |
| | | return params; |
| | | } |
| | | |
| | | /** |
| | | * onlineæ¥å¿å
å®¹æ¼æ¥ |
| | | * @param obj |
| | | * @param content |
| | | * @return |
| | | */ |
| | | private String getOnlineLogContent(Object obj, String content){ |
| | | if (Result.class.isInstance(obj)){ |
| | | Result res = (Result)obj; |
| | | String msg = res.getMessage(); |
| | | String tableName = res.getOnlTable(); |
| | | if(oConvertUtils.isNotEmpty(tableName)){ |
| | | content+=",表å:"+tableName; |
| | | } |
| | | if(res.isSuccess()){ |
| | | content+= ","+(oConvertUtils.isEmpty(msg)?"æä½æå":msg); |
| | | }else{ |
| | | content+= ","+(oConvertUtils.isEmpty(msg)?"æä½å¤±è´¥":msg); |
| | | } |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | |
| | | /* private void saveSysLog(ProceedingJoinPoint joinPoint, long time, Object obj) { |
| | | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | Method method = signature.getMethod(); |
| | | |
| | | SysLog sysLog = new SysLog(); |
| | | AutoLog syslog = method.getAnnotation(AutoLog.class); |
| | | if(syslog != null){ |
| | | //update-begin-author:taoyan date: |
| | | String content = syslog.value(); |
| | | if(syslog.module()== ModuleType.ONLINE){ |
| | | content = getOnlineLogContent(obj, content); |
| | | } |
| | | //注解ä¸çæè¿°,æä½æ¥å¿å
容 |
| | | sysLog.setLogContent(content); |
| | | sysLog.setLogType(syslog.logType()); |
| | | } |
| | | |
| | | //请æ±çæ¹æ³å |
| | | String className = joinPoint.getTarget().getClass().getName(); |
| | | String methodName = signature.getName(); |
| | | sysLog.setMethod(className + "." + methodName + "()"); |
| | | |
| | | |
| | | //设置æä½ç±»å |
| | | if (sysLog.getLogType() == CommonConstant.LOG_TYPE_2) { |
| | | sysLog.setOperateType(getOperateType(methodName, syslog.operateType())); |
| | | } |
| | | |
| | | //è·årequest |
| | | HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); |
| | | //请æ±çåæ° |
| | | sysLog.setRequestParam(getReqestParams(request,joinPoint)); |
| | | |
| | | //设置IPå°å |
| | | sysLog.setIp(IPUtils.getIpAddr(request)); |
| | | |
| | | //è·åç»å½ç¨æ·ä¿¡æ¯ |
| | | LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); |
| | | if(sysUser!=null){ |
| | | sysLog.setUserid(sysUser.getUsername()); |
| | | sysLog.setUsername(sysUser.getRealname()); |
| | | |
| | | } |
| | | //èæ¶ |
| | | sysLog.setCostTime(time); |
| | | sysLog.setCreateTime(new Date()); |
| | | //ä¿åç³»ç»æ¥å¿ |
| | | sysLogService.save(sysLog); |
| | | }*/ |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.aspect; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.aspectj.lang.ProceedingJoinPoint; |
| | | import org.aspectj.lang.annotation.Around; |
| | | import org.aspectj.lang.annotation.Aspect; |
| | | import org.aspectj.lang.annotation.Pointcut; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.aspect.annotation.Dict; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @Description: åå
¸aopç±» |
| | | * @Author: dangzhenghui |
| | | * @Date: 2019-3-17 21:50 |
| | | * @Version: 1.0 |
| | | */ |
| | | @Aspect |
| | | @Component |
| | | @Slf4j |
| | | public class DictAspect { |
| | | |
| | | @Autowired |
| | | private CommonAPI commonAPI; |
| | | @Autowired |
| | | public RedisTemplate redisTemplate; |
| | | |
| | | // å®ä¹åç¹Pointcut |
| | | @Pointcut("execution(public * org.jeecg.modules..*.*Controller.*(..))") |
| | | public void excudeService() { |
| | | } |
| | | |
| | | @Around("excudeService()") |
| | | public Object doAround(ProceedingJoinPoint pjp) throws Throwable { |
| | | long time1=System.currentTimeMillis(); |
| | | Object result = pjp.proceed(); |
| | | long time2=System.currentTimeMillis(); |
| | | log.debug("è·åJSONæ°æ® èæ¶ï¼"+(time2-time1)+"ms"); |
| | | long start=System.currentTimeMillis(); |
| | | this.parseDictText(result); |
| | | long end=System.currentTimeMillis(); |
| | | log.debug("注å
¥åå
¸å°JSONæ°æ® èæ¶"+(end-start)+"ms"); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * æ¬æ¹æ³é对è¿å对象为Result çIPageçå页åè¡¨æ°æ®è¿è¡å¨æåå
¸æ³¨å
¥ |
| | | * åå
¸æ³¨å
¥å®ç° éè¿å¯¹å®ä½ç±»æ·»å 注解@dict æ¥æ è¯éè¦çåå
¸å
容,åå
¸å为ååå
¸codeå³å¯ ï¼tableåå
¸ code table texté
å使ç¨ä¸åæ¥jeecgçç¨æ³ç¸å |
| | | * 示ä¾ä¸ºSysUser åæ®µä¸ºsex æ·»å äºæ³¨è§£@Dict(dicCode = "sex") ä¼å¨åå
¸æå¡ç«é©¬æ¥åºæ¥å¯¹åºçtext ç¶åå¨è¯·æ±listçæ¶åå°è¿ä¸ªåå
¸textï¼å·²å段åç§°å _dictTextå½¢å¼è¿åå°å端 |
| | | * ä¾è¾å
¥å½åè¿åå¼çå°±ä¼å¤åºä¸ä¸ªsex_dictTextåæ®µ |
| | | * { |
| | | * sex:1, |
| | | * sex_dictText:"ç·" |
| | | * } |
| | | * åç«¯ç´æ¥åå¼sext_dictTextå¨tableé颿 éåè¿è¡å端çåå
¸è½¬æ¢äº |
| | | * customRender:function (text) { |
| | | * if(text==1){ |
| | | * return "ç·"; |
| | | * }else if(text==2){ |
| | | * return "女"; |
| | | * }else{ |
| | | * return text; |
| | | * } |
| | | * } |
| | | * ç®åvueæ¯è¿ä¹è¿è¡åå
¸æ¸²æå°tableä¸çå¤äºå°±å¾éº»ç¦äº è¿ä¸ªç´æ¥å¨æå¡ç«¯æ¸²æå®æå端å¯ä»¥ç´æ¥ç¨ |
| | | * @param result |
| | | */ |
| | | private void parseDictText(Object result) { |
| | | if (result instanceof Result) { |
| | | if (((Result) result).getResult() instanceof IPage) { |
| | | List<JSONObject> items = new ArrayList<>(); |
| | | |
| | | //step.1 çéåºå äº Dict 注解çåæ®µå表 |
| | | List<Field> dictFieldList = new ArrayList<>(); |
| | | // åå
¸æ°æ®åè¡¨ï¼ key = åå
¸codeï¼value=æ°æ®å表 |
| | | Map<String, List<String>> dataListMap = new HashMap<>(); |
| | | |
| | | for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) { |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | String json="{}"; |
| | | try { |
| | | //è§£å³@JsonFormat注解解æä¸äºçé®é¢è¯¦è§SysAnnouncementç±»ç@JsonFormat |
| | | json = mapper.writeValueAsString(record); |
| | | } catch (JsonProcessingException e) { |
| | | log.error("jsonè§£æå¤±è´¥"+e.getMessage(),e); |
| | | } |
| | | JSONObject item = JSONObject.parseObject(json); |
| | | //update-begin--Author:scott -- Date:20190603 ----forï¼è§£å³ç»§æ¿å®ä½åæ®µæ æ³ç¿»è¯é®é¢------ |
| | | //for (Field field : record.getClass().getDeclaredFields()) { |
| | | // éåææåæ®µï¼æåå
¸Codeååºæ¥ï¼æ¾å° map é |
| | | for (Field field : oConvertUtils.getAllFields(record)) { |
| | | String value = item.getString(field.getName()); |
| | | if (oConvertUtils.isEmpty(value)) { |
| | | continue; |
| | | } |
| | | //update-end--Author:scott -- Date:20190603 ----forï¼è§£å³ç»§æ¿å®ä½åæ®µæ æ³ç¿»è¯é®é¢------ |
| | | if (field.getAnnotation(Dict.class) != null) { |
| | | if (!dictFieldList.contains(field)) { |
| | | dictFieldList.add(field); |
| | | } |
| | | String code = field.getAnnotation(Dict.class).dicCode(); |
| | | String text = field.getAnnotation(Dict.class).dicText(); |
| | | String table = field.getAnnotation(Dict.class).dictTable(); |
| | | |
| | | List<String> dataList; |
| | | String dictCode = code; |
| | | if (!StringUtils.isEmpty(table)) { |
| | | dictCode = String.format("%s,%s,%s", table, text, code); |
| | | } |
| | | dataList = dataListMap.computeIfAbsent(dictCode, k -> new ArrayList<>()); |
| | | this.listAddAllDeduplicate(dataList, Arrays.asList(value.split(","))); |
| | | } |
| | | //dateç±»åé»è®¤è½¬æ¢stringæ ¼å¼åæ¥æ |
| | | if (field.getType().getName().equals("java.util.Date")&&field.getAnnotation(JsonFormat.class)==null&&item.get(field.getName())!=null){ |
| | | SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName())))); |
| | | } |
| | | } |
| | | items.add(item); |
| | | } |
| | | |
| | | //step.2 è°ç¨ç¿»è¯æ¹æ³ï¼ä¸æ¬¡æ§ç¿»è¯ |
| | | Map<String, List<DictModel>> translText = this.translateAllDict(dataListMap); |
| | | |
| | | //step.3 å°ç¿»è¯ç»æå¡«å
å°è¿åç»æé |
| | | for (JSONObject record : items) { |
| | | for (Field field : dictFieldList) { |
| | | String code = field.getAnnotation(Dict.class).dicCode(); |
| | | String text = field.getAnnotation(Dict.class).dicText(); |
| | | String table = field.getAnnotation(Dict.class).dictTable(); |
| | | |
| | | String fieldDictCode = code; |
| | | if (!StringUtils.isEmpty(table)) { |
| | | fieldDictCode = String.format("%s,%s,%s", table, text, code); |
| | | } |
| | | |
| | | String value = record.getString(field.getName()); |
| | | if (oConvertUtils.isNotEmpty(value)) { |
| | | List<DictModel> dictModels = translText.get(fieldDictCode); |
| | | if(dictModels==null || dictModels.size()==0){ |
| | | continue; |
| | | } |
| | | |
| | | String textValue = this.translDictText(dictModels, value); |
| | | log.debug(" åå
¸Val : " + textValue); |
| | | log.debug(" __ç¿»è¯åå
¸å段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + "ï¼ " + textValue); |
| | | |
| | | // TODO-sun æµè¯è¾åºï¼å¾
å |
| | | log.debug(" ---- dictCode: " + fieldDictCode); |
| | | log.debug(" ---- value: " + value); |
| | | log.debug(" ----- text: " + textValue); |
| | | log.debug(" ---- dictModels: " + JSON.toJSONString(dictModels)); |
| | | |
| | | record.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue); |
| | | } |
| | | } |
| | | } |
| | | |
| | | ((IPage) ((Result) result).getResult()).setRecords(items); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * list å»éæ·»å |
| | | */ |
| | | private void listAddAllDeduplicate(List<String> dataList, List<String> addList) { |
| | | // çéåºdataList䏿²¡æçæ°æ® |
| | | List<String> filterList = addList.stream().filter(i -> !dataList.contains(i)).collect(Collectors.toList()); |
| | | dataList.addAll(filterList); |
| | | } |
| | | |
| | | /** |
| | | * 䏿¬¡æ§æææçåå
¸é½ç¿»è¯äº |
| | | * 1. ææçæ®éæ°æ®åå
¸çæææ°æ®åªæ§è¡ä¸æ¬¡SQL |
| | | * 2. 表åå
¸ç¸åçæææ°æ®åªæ§è¡ä¸æ¬¡SQL |
| | | * @param dataListMap |
| | | * @return |
| | | */ |
| | | private Map<String, List<DictModel>> translateAllDict(Map<String, List<String>> dataListMap) { |
| | | // ç¿»è¯åçåå
¸ææ¬ï¼key=dictCode |
| | | Map<String, List<DictModel>> translText = new HashMap<>(); |
| | | // éè¦ç¿»è¯çæ°æ®ï¼æäºå¯ä»¥ä»redisç¼åä¸è·åï¼å°±ä¸èµ°æ°æ®åºæ¥è¯¢ï¼ |
| | | List<String> needTranslData = new ArrayList<>(); |
| | | //step.1 å
éè¿redisä¸è·åç¼ååå
¸æ°æ® |
| | | for (String dictCode : dataListMap.keySet()) { |
| | | List<String> dataList = dataListMap.get(dictCode); |
| | | if (dataList.size() == 0) { |
| | | continue; |
| | | } |
| | | // 表åå
¸éè¦ç¿»è¯çæ°æ® |
| | | List<String> needTranslDataTable = new ArrayList<>(); |
| | | for (String s : dataList) { |
| | | String data = s.trim(); |
| | | if (data.length() == 0) { |
| | | continue; //è·³è¿å¾ªç¯ |
| | | } |
| | | if (dictCode.contains(",")) { |
| | | String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, data); |
| | | if (redisTemplate.hasKey(keyString)) { |
| | | try { |
| | | String text = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); |
| | | List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); |
| | | list.add(new DictModel(data, text)); |
| | | } catch (Exception e) { |
| | | log.warn(e.getMessage()); |
| | | } |
| | | } else if (!needTranslDataTable.contains(data)) { |
| | | // å»éæ·»å |
| | | needTranslDataTable.add(data); |
| | | } |
| | | } else { |
| | | String keyString = String.format("sys:cache:dict::%s:%s", dictCode, data); |
| | | if (redisTemplate.hasKey(keyString)) { |
| | | try { |
| | | String text = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); |
| | | List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); |
| | | list.add(new DictModel(data, text)); |
| | | } catch (Exception e) { |
| | | log.warn(e.getMessage()); |
| | | } |
| | | } else if (!needTranslData.contains(data)) { |
| | | // å»éæ·»å |
| | | needTranslData.add(data); |
| | | } |
| | | } |
| | | |
| | | } |
| | | //step.2 è°ç¨æ°æ®åºç¿»è¯è¡¨åå
¸ |
| | | if (needTranslDataTable.size() > 0) { |
| | | String[] arr = dictCode.split(","); |
| | | String table = arr[0], text = arr[1], code = arr[2]; |
| | | String values = String.join(",", needTranslDataTable); |
| | | log.info("translateDictFromTableByKeys.dictCode:" + dictCode); |
| | | log.info("translateDictFromTableByKeys.values:" + values); |
| | | List<DictModel> texts = commonAPI.translateDictFromTableByKeys(table, text, code, values); |
| | | log.info("translateDictFromTableByKeys.result:" + texts); |
| | | List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); |
| | | list.addAll(texts); |
| | | |
| | | // å redis ç¼å |
| | | for (DictModel dict : texts) { |
| | | String redisKey = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, dict.getValue()); |
| | | try { |
| | | // update-begin-author:taoyan date:20211012 for: åå
¸è¡¨ç¿»è¯æ³¨è§£ç¼åæªæ´æ° issues/3061 |
| | | // ä¿ç5åé |
| | | redisTemplate.opsForValue().set(redisKey, dict.getText(), 300, TimeUnit.SECONDS); |
| | | // update-end-author:taoyan date:20211012 for: åå
¸è¡¨ç¿»è¯æ³¨è§£ç¼åæªæ´æ° issues/3061 |
| | | } catch (Exception e) { |
| | | log.warn(e.getMessage(), e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //step.3 è°ç¨æ°æ®åºè¿è¡ç¿»è¯æ®éåå
¸ |
| | | if (needTranslData.size() > 0) { |
| | | List<String> dictCodeList = Arrays.asList(dataListMap.keySet().toArray(new String[]{})); |
| | | // å°ä¸å
å«éå·çåå
¸codeçéåºæ¥ï¼å 为带éå·çæ¯è¡¨åå
¸ï¼è䏿¯æ®éçæ°æ®åå
¸ |
| | | List<String> filterDictCodes = dictCodeList.stream().filter(key -> !key.contains(",")).collect(Collectors.toList()); |
| | | String dictCodes = String.join(",", filterDictCodes); |
| | | String values = String.join(",", needTranslData); |
| | | log.info("translateManyDict.dictCodes:" + dictCodes); |
| | | log.info("translateManyDict.values:" + values); |
| | | Map<String, List<DictModel>> manyDict = commonAPI.translateManyDict(dictCodes, values); |
| | | log.info("translateManyDict.result:" + manyDict); |
| | | for (String dictCode : manyDict.keySet()) { |
| | | List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); |
| | | List<DictModel> newList = manyDict.get(dictCode); |
| | | list.addAll(newList); |
| | | |
| | | // å redis ç¼å |
| | | for (DictModel dict : newList) { |
| | | String redisKey = String.format("sys:cache:dict::%s:%s", dictCode, dict.getValue()); |
| | | try { |
| | | redisTemplate.opsForValue().set(redisKey, dict.getText()); |
| | | } catch (Exception e) { |
| | | log.warn(e.getMessage(), e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return translText; |
| | | } |
| | | |
| | | /** |
| | | * åå
¸å¼æ¿æ¢ææ¬ |
| | | * |
| | | * @param dictModels |
| | | * @param values |
| | | * @return |
| | | */ |
| | | private String translDictText(List<DictModel> dictModels, String values) { |
| | | List<String> result = new ArrayList<>(); |
| | | |
| | | // å
许å¤ä¸ªéå·åéï¼å
è®¸ä¼ æ°ç»å¯¹è±¡ |
| | | String[] splitVal = values.split(","); |
| | | for (String val : splitVal) { |
| | | String dictText = val; |
| | | for (DictModel dict : dictModels) { |
| | | if (val.equals(dict.getValue())) { |
| | | dictText = dict.getText(); |
| | | break; |
| | | } |
| | | } |
| | | result.add(dictText); |
| | | } |
| | | return String.join(",", result); |
| | | } |
| | | |
| | | /** |
| | | * ç¿»è¯åå
¸ææ¬ |
| | | * @param code |
| | | * @param text |
| | | * @param table |
| | | * @param key |
| | | * @return |
| | | */ |
| | | @Deprecated |
| | | private String translateDictValue(String code, String text, String table, String key) { |
| | | if(oConvertUtils.isEmpty(key)) { |
| | | return null; |
| | | } |
| | | StringBuffer textValue=new StringBuffer(); |
| | | String[] keys = key.split(","); |
| | | for (String k : keys) { |
| | | String tmpValue = null; |
| | | log.debug(" åå
¸ key : "+ k); |
| | | if (k.trim().length() == 0) { |
| | | continue; //è·³è¿å¾ªç¯ |
| | | } |
| | | //update-begin--Author:scott -- Date:20210531 ----forï¼ !56 ä¼åå¾®æå¡åºç¨ä¸åå¨è¡¨å段éè¦åå
¸ç¿»è¯æ¶å è½½ç¼æ
¢é®é¢----- |
| | | if (!StringUtils.isEmpty(table)){ |
| | | log.info("--DictAspect------dicTable="+ table+" ,dicText= "+text+" ,dicCode="+code); |
| | | String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s,%s,%s]",table,text,code,k.trim()); |
| | | if (redisTemplate.hasKey(keyString)){ |
| | | try { |
| | | tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); |
| | | } catch (Exception e) { |
| | | log.warn(e.getMessage()); |
| | | } |
| | | }else { |
| | | tmpValue= commonAPI.translateDictFromTable(table,text,code,k.trim()); |
| | | } |
| | | }else { |
| | | String keyString = String.format("sys:cache:dict::%s:%s",code,k.trim()); |
| | | if (redisTemplate.hasKey(keyString)){ |
| | | try { |
| | | tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); |
| | | } catch (Exception e) { |
| | | log.warn(e.getMessage()); |
| | | } |
| | | }else { |
| | | tmpValue = commonAPI.translateDict(code, k.trim()); |
| | | } |
| | | } |
| | | //update-end--Author:scott -- Date:20210531 ----forï¼ !56 ä¼åå¾®æå¡åºç¨ä¸åå¨è¡¨å段éè¦åå
¸ç¿»è¯æ¶å è½½ç¼æ
¢é®é¢----- |
| | | |
| | | if (tmpValue != null) { |
| | | if (!"".equals(textValue.toString())) { |
| | | textValue.append(","); |
| | | } |
| | | textValue.append(tmpValue); |
| | | } |
| | | |
| | | } |
| | | return textValue.toString(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.aspect; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.aspectj.lang.ProceedingJoinPoint; |
| | | import org.aspectj.lang.annotation.Around; |
| | | import org.aspectj.lang.annotation.Aspect; |
| | | import org.aspectj.lang.annotation.Pointcut; |
| | | import org.aspectj.lang.reflect.MethodSignature; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.aspect.annotation.PermissionData; |
| | | import org.jeecg.common.system.util.JeecgDataAutorUtils; |
| | | import org.jeecg.common.system.util.JwtUtil; |
| | | import org.jeecg.common.system.vo.SysPermissionDataRuleModel; |
| | | import org.jeecg.common.system.vo.SysUserCacheInfo; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.lang.reflect.Method; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æ°æ®æéåé¢å¤çç±» |
| | | * å½è¢«è¯·æ±çæ¹æ³ææ³¨è§£PermissionDataæ¶,ä¼å¨å¾å½årequestä¸åå
¥æ°æ®æéä¿¡æ¯ |
| | | * @Date 2019å¹´4æ10æ¥ |
| | | * @Version: 1.0 |
| | | */ |
| | | @Aspect |
| | | @Component |
| | | @Slf4j |
| | | public class PermissionDataAspect { |
| | | |
| | | @Autowired |
| | | private CommonAPI commonAPI; |
| | | |
| | | @Pointcut("@annotation(org.jeecg.common.aspect.annotation.PermissionData)") |
| | | public void pointCut() { |
| | | |
| | | } |
| | | |
| | | @Around("pointCut()") |
| | | public Object arround(ProceedingJoinPoint point) throws Throwable{ |
| | | HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); |
| | | MethodSignature signature = (MethodSignature) point.getSignature(); |
| | | Method method = signature.getMethod(); |
| | | PermissionData pd = method.getAnnotation(PermissionData.class); |
| | | String component = pd.pageComponent(); |
| | | |
| | | String requestMethod = request.getMethod(); |
| | | String requestPath = request.getRequestURI().substring(request.getContextPath().length()); |
| | | requestPath = filterUrl(requestPath); |
| | | log.debug("æ¦æªè¯·æ± >> "+requestPath+";请æ±ç±»å >> "+requestMethod); |
| | | String username = JwtUtil.getUserNameByToken(request); |
| | | //æ¥è¯¢æ°æ®æéä¿¡æ¯ |
| | | //TODO å¾®æå¡æ
åµä¸ä¹å¾æ¯æç¼åæºå¶ |
| | | List<SysPermissionDataRuleModel> dataRules = commonAPI.queryPermissionDataRule(component, requestPath, username); |
| | | if(dataRules!=null && dataRules.size()>0) { |
| | | //临æ¶åå¨ |
| | | JeecgDataAutorUtils.installDataSearchConditon(request, dataRules); |
| | | //TODO å¾®æå¡æ
åµä¸ä¹å¾æ¯æç¼åæºå¶ |
| | | SysUserCacheInfo userinfo = commonAPI.getCacheUser(username); |
| | | JeecgDataAutorUtils.installUserInfo(request, userinfo); |
| | | } |
| | | return point.proceed(); |
| | | } |
| | | |
| | | private String filterUrl(String requestPath){ |
| | | String url = ""; |
| | | if(oConvertUtils.isNotEmpty(requestPath)){ |
| | | url = requestPath.replace("\\", "/"); |
| | | url = url.replace("//", "/"); |
| | | if(url.indexOf("//")>=0){ |
| | | url = filterUrl(url); |
| | | } |
| | | /*if(url.startsWith("/")){ |
| | | url=url.substring(1); |
| | | }*/ |
| | | } |
| | | return url; |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±å°å |
| | | * @param request |
| | | * @return |
| | | */ |
| | | private String getJgAuthRequsetPath(HttpServletRequest request) { |
| | | String queryString = request.getQueryString(); |
| | | String requestPath = request.getRequestURI(); |
| | | if(oConvertUtils.isNotEmpty(queryString)){ |
| | | requestPath += "?" + queryString; |
| | | } |
| | | if (requestPath.indexOf("&") > -1) {// 廿å
¶ä»åæ°(ä¿çä¸ä¸ªåæ°) ä¾å¦ï¼loginController.do?login |
| | | requestPath = requestPath.substring(0, requestPath.indexOf("&")); |
| | | } |
| | | if(requestPath.indexOf("=")!=-1){ |
| | | if(requestPath.indexOf(".do")!=-1){ |
| | | requestPath = requestPath.substring(0,requestPath.indexOf(".do")+3); |
| | | }else{ |
| | | requestPath = requestPath.substring(0,requestPath.indexOf("?")); |
| | | } |
| | | } |
| | | requestPath = requestPath.substring(request.getContextPath().length() + 1);// 廿项ç®è·¯å¾ |
| | | return filterUrl(requestPath); |
| | | } |
| | | |
| | | private boolean moHuContain(List<String> list,String key){ |
| | | for(String str : list){ |
| | | if(key.contains(str)){ |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.aspect; |
| | | |
| | | /** |
| | | * @Author scott |
| | | * @Date 2020/1/14 13:36 |
| | | * @Description: 请æ±URLä¸èåè·¯ç±URL转æ¢è§åï¼æ¹ä¾¿äºéç¨èåè·¯ç±URLæ¥é
ç½®æ°æ®æéè§åï¼ |
| | | */ |
| | | public enum UrlMatchEnum { |
| | | CGFORM_DATA("/online/cgform/api/getData/", "/online/cgformList/"), |
| | | CGFORM_EXCEL_DATA("/online/cgform/api/exportXls/", "/online/cgformList/"), |
| | | CGFORM_TREE_DATA("/online/cgform/api/getTreeData/", "/online/cgformList/"), |
| | | CGREPORT_DATA("/online/cgreport/api/getColumnsAndData/", "/online/cgreport/"), |
| | | CGREPORT_EXCEL_DATA("/online/cgreport/api/exportXls/", "/online/cgreport/"); |
| | | |
| | | |
| | | UrlMatchEnum(String url, String match_url) { |
| | | this.url = url; |
| | | this.match_url = match_url; |
| | | } |
| | | |
| | | /** |
| | | * Request è¯·æ± URLåç¼ |
| | | */ |
| | | private String url; |
| | | /** |
| | | * èåè·¯ç± URLåç¼ (对åºèåè·¯å¾) |
| | | */ |
| | | private String match_url; |
| | | |
| | | /** |
| | | * æ ¹æ®req url è·åå°èåé
置路å¾ï¼å端页é¢è·¯ç±URLï¼ |
| | | * |
| | | * @param url |
| | | * @return |
| | | */ |
| | | public static String getMatchResultByUrl(String url) { |
| | | //è·å尿䏾 |
| | | UrlMatchEnum[] values = UrlMatchEnum.values(); |
| | | //å 强for循ç¯è¿è¡éåæä½ |
| | | for (UrlMatchEnum lr : values) { |
| | | //妿éåè·åçtypeååæ°typeä¸è´ |
| | | if (url.indexOf(lr.url) != -1) { |
| | | //è¿åtype对象çdesc |
| | | return url.replace(lr.url, lr.match_url); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | // public static void main(String[] args) { |
| | | // /** |
| | | // * æ¯å¦requestçå®è¯·æ±URL: /online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a |
| | | // * 转æ¢å¹é
è·¯ç±URLåï¼å¯¹åºé
ç½®çèåè·¯å¾ï¼:/online/cgformList/81fcf7d8922d45069b0d5ba983612d3a |
| | | // */ |
| | | // System.out.println(UrlMatchEnum.getMatchResultByUrl("/online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a")); |
| | | // } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.aspect.annotation; |
| | | |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.enums.ModuleType; |
| | | |
| | | import java.lang.annotation.*; |
| | | |
| | | /** |
| | | * ç³»ç»æ¥å¿æ³¨è§£ |
| | | * |
| | | * @Author scott |
| | | * @email jeecgos@163.com |
| | | * @Date 2019å¹´1æ14æ¥ |
| | | */ |
| | | @Target(ElementType.METHOD) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Documented |
| | | public @interface AutoLog { |
| | | |
| | | /** |
| | | * æ¥å¿å
容 |
| | | * |
| | | * @return |
| | | */ |
| | | String value() default ""; |
| | | |
| | | /** |
| | | * æ¥å¿ç±»å |
| | | * |
| | | * @return 0:æä½æ¥å¿;1:ç»å½æ¥å¿;2:宿¶ä»»å¡; |
| | | */ |
| | | int logType() default CommonConstant.LOG_TYPE_2; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»å |
| | | * |
| | | * @return ï¼1æ¥è¯¢ï¼2æ·»å ï¼3ä¿®æ¹ï¼4å é¤ï¼ |
| | | */ |
| | | int operateType() default 0; |
| | | |
| | | /** |
| | | * 模åç±»å é»è®¤ä¸ºcommon |
| | | * @return |
| | | */ |
| | | ModuleType module() default ModuleType.COMMON; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.aspect.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ç±»æè¿°: åå
¸æ³¨è§£ |
| | | * ä½ è
ï¼ dangzhenghui |
| | | * æ¥ æï¼ 2019å¹´03æ17æ¥-ä¸å9:37:16 |
| | | */ |
| | | @Target(ElementType.FIELD) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface Dict { |
| | | /** |
| | | * æ¹æ³æè¿°: æ°æ®code |
| | | * ä½ è
ï¼ dangzhenghui |
| | | * æ¥ æï¼ 2019å¹´03æ17æ¥-ä¸å9:37:16 |
| | | * |
| | | * @return è¿åç±»åï¼ String |
| | | */ |
| | | String dicCode(); |
| | | |
| | | /** |
| | | * æ¹æ³æè¿°: æ°æ®Text |
| | | * ä½ è
ï¼ dangzhenghui |
| | | * æ¥ æï¼ 2019å¹´03æ17æ¥-ä¸å9:37:16 |
| | | * |
| | | * @return è¿åç±»åï¼ String |
| | | */ |
| | | String dicText() default ""; |
| | | |
| | | /** |
| | | * æ¹æ³æè¿°: æ°æ®åå
¸è¡¨ |
| | | * ä½ è
ï¼ dangzhenghui |
| | | * æ¥ æï¼ 2019å¹´03æ17æ¥-ä¸å9:37:16 |
| | | * |
| | | * @return è¿åç±»åï¼ String |
| | | */ |
| | | String dictTable() default ""; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.aspect.annotation; |
| | | |
| | | import java.lang.annotation.*; |
| | | |
| | | /** |
| | | * onlineè¯·æ±æ¦æªä¸ç¨æ³¨è§£ |
| | | */ |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Target({ElementType.TYPE,ElementType.METHOD}) |
| | | @Documented |
| | | public @interface OnlineAuth { |
| | | |
| | | /** |
| | | * 请æ±å
³é®åï¼å¨xxx/codeä¹åçå符串 |
| | | * @return |
| | | */ |
| | | String value(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.aspect.annotation; |
| | | |
| | | import java.lang.annotation.Documented; |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æ°æ®æé注解 |
| | | * @Author taoyan |
| | | * @Date 2019å¹´4æ11æ¥ |
| | | */ |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Target({ElementType.TYPE,ElementType.METHOD}) |
| | | @Documented |
| | | public @interface PermissionData { |
| | | /** |
| | | * ææ¶æ²¡ç¨ |
| | | * @return |
| | | */ |
| | | String value() default ""; |
| | | |
| | | |
| | | /** |
| | | * é
ç½®èåçç»ä»¶è·¯å¾,ç¨äºæ°æ®æé |
| | | */ |
| | | String pageComponent() default ""; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public interface CommonConstant { |
| | | |
| | | /** |
| | | * æ£å¸¸ç¶æ |
| | | */ |
| | | public static final Integer STATUS_NORMAL = 0; |
| | | |
| | | /** |
| | | * ç¦ç¨ç¶æ |
| | | */ |
| | | public static final Integer STATUS_DISABLE = -1; |
| | | |
| | | /** |
| | | * å 餿 å¿ |
| | | */ |
| | | public static final Integer DEL_FLAG_1 = 1; |
| | | |
| | | /** |
| | | * æªå é¤ |
| | | */ |
| | | public static final Integer DEL_FLAG_0 = 0; |
| | | |
| | | /** |
| | | * ç³»ç»æ¥å¿ç±»åï¼ ç»å½ |
| | | */ |
| | | public static final int LOG_TYPE_1 = 1; |
| | | |
| | | /** |
| | | * ç³»ç»æ¥å¿ç±»åï¼ æä½ |
| | | */ |
| | | public static final int LOG_TYPE_2 = 2; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ æ¥è¯¢ |
| | | */ |
| | | public static final int OPERATE_TYPE_1 = 1; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ æ·»å |
| | | */ |
| | | public static final int OPERATE_TYPE_2 = 2; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ æ´æ° |
| | | */ |
| | | public static final int OPERATE_TYPE_3 = 3; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ å é¤ |
| | | */ |
| | | public static final int OPERATE_TYPE_4 = 4; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ åå
¥ |
| | | */ |
| | | public static final int OPERATE_TYPE_5 = 5; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ å¯¼åº |
| | | */ |
| | | public static final int OPERATE_TYPE_6 = 6; |
| | | |
| | | |
| | | /** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */ |
| | | public static final Integer SC_INTERNAL_SERVER_ERROR_500 = 500; |
| | | /** {@code 200 OK} (HTTP/1.0 - RFC 1945) */ |
| | | public static final Integer SC_OK_200 = 200; |
| | | |
| | | /**è®¿é®æéè®¤è¯æªéè¿ 510*/ |
| | | public static final Integer SC_JEECG_NO_AUTHZ=510; |
| | | |
| | | /** ç»å½ç¨æ·Shiroæéç¼åKEYåç¼ */ |
| | | public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:org.jeecg.config.shiro.ShiroRealm.authorizationCache:"; |
| | | /** ç»å½ç¨æ·Token令çç¼åKEYåç¼ */ |
| | | public static final String PREFIX_USER_TOKEN = "prefix_user_token_"; |
| | | /** Tokenç¼åæ¶é´ï¼3600ç§å³ä¸å°æ¶ */ |
| | | public static final int TOKEN_EXPIRE_TIME = 6 * 3600; |
| | | |
| | | |
| | | /** |
| | | * 0ï¼ä¸çº§èå |
| | | */ |
| | | public static final Integer MENU_TYPE_0 = 0; |
| | | /** |
| | | * 1ï¼åèå |
| | | */ |
| | | public static final Integer MENU_TYPE_1 = 1; |
| | | /** |
| | | * 2ï¼æé®æé |
| | | */ |
| | | public static final Integer MENU_TYPE_2 = 2; |
| | | |
| | | /**éå对象类åï¼USER:æå®ç¨æ·ï¼ALL:å
¨ä½ç¨æ·ï¼*/ |
| | | public static final String MSG_TYPE_UESR = "USER"; |
| | | public static final String MSG_TYPE_ALL = "ALL"; |
| | | |
| | | /**åå¸ç¶æï¼0æªåå¸ï¼1å·²åå¸ï¼2å·²æ¤éï¼*/ |
| | | public static final String NO_SEND = "0"; |
| | | public static final String HAS_SEND = "1"; |
| | | public static final String HAS_CANCLE = "2"; |
| | | |
| | | /**é
è¯»ç¶æï¼0æªè¯»ï¼1已读ï¼*/ |
| | | public static final String HAS_READ_FLAG = "1"; |
| | | public static final String NO_READ_FLAG = "0"; |
| | | |
| | | /**ä¼å
级ï¼Lä½ï¼Mä¸ï¼Hé«ï¼*/ |
| | | public static final String PRIORITY_L = "L"; |
| | | public static final String PRIORITY_M = "M"; |
| | | public static final String PRIORITY_H = "H"; |
| | | |
| | | /** |
| | | * çä¿¡æ¨¡æ¿æ¹å¼ 0 .ç»å½æ¨¡æ¿ã1.æ³¨åæ¨¡æ¿ã2.å¿è®°å¯ç æ¨¡æ¿ |
| | | */ |
| | | public static final String SMS_TPL_TYPE_0 = "0"; |
| | | public static final String SMS_TPL_TYPE_1 = "1"; |
| | | public static final String SMS_TPL_TYPE_2 = "2"; |
| | | |
| | | /** |
| | | * ç¶æ(0æ æ1ææ) |
| | | */ |
| | | public static final String STATUS_0 = "0"; |
| | | public static final String STATUS_1 = "1"; |
| | | |
| | | /** |
| | | * 忥工使µå¼æ1忥0ä¸åæ¥ |
| | | */ |
| | | public static final Integer ACT_SYNC_1 = 1; |
| | | public static final Integer ACT_SYNC_0 = 0; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å1:éç¥å
¬å2:ç³»ç»æ¶æ¯ |
| | | */ |
| | | public static final String MSG_CATEGORY_1 = "1"; |
| | | public static final String MSG_CATEGORY_2 = "2"; |
| | | |
| | | /** |
| | | * æ¯å¦é
ç½®èåçæ°æ®æé 1æ¯0å¦ |
| | | */ |
| | | public static final Integer RULE_FLAG_0 = 0; |
| | | public static final Integer RULE_FLAG_1 = 1; |
| | | |
| | | /** |
| | | * æ¯å¦ç¨æ·å·²è¢«å»ç» 1æ£å¸¸(è§£å») 2å»ç» |
| | | */ |
| | | public static final Integer USER_UNFREEZE = 1; |
| | | public static final Integer USER_FREEZE = 2; |
| | | |
| | | /**åå
¸ç¿»è¯ææ¬åç¼*/ |
| | | public static final String DICT_TEXT_SUFFIX = "_dictText"; |
| | | |
| | | /** |
| | | * 表å设计å¨ä¸»è¡¨ç±»å |
| | | */ |
| | | public static final Integer DESIGN_FORM_TYPE_MAIN = 1; |
| | | |
| | | /** |
| | | * 表å设计å¨å表表类å |
| | | */ |
| | | public static final Integer DESIGN_FORM_TYPE_SUB = 2; |
| | | |
| | | /** |
| | | * 表å设计å¨URLææéè¿ |
| | | */ |
| | | public static final Integer DESIGN_FORM_URL_STATUS_PASSED = 1; |
| | | |
| | | /** |
| | | * 表å设计å¨URLæææªéè¿ |
| | | */ |
| | | public static final Integer DESIGN_FORM_URL_STATUS_NOT_PASSED = 2; |
| | | |
| | | /** |
| | | * 表åè®¾è®¡å¨æ°å¢ Flag |
| | | */ |
| | | public static final String DESIGN_FORM_URL_TYPE_ADD = "add"; |
| | | /** |
| | | * 表å设计å¨ä¿®æ¹ Flag |
| | | */ |
| | | public static final String DESIGN_FORM_URL_TYPE_EDIT = "edit"; |
| | | /** |
| | | * 表å设计å¨è¯¦æ
Flag |
| | | */ |
| | | public static final String DESIGN_FORM_URL_TYPE_DETAIL = "detail"; |
| | | /** |
| | | * 表å设计å¨å¤ç¨æ°æ® Flag |
| | | */ |
| | | public static final String DESIGN_FORM_URL_TYPE_REUSE = "reuse"; |
| | | /** |
| | | * 表å设计å¨ç¼è¾ Flag ï¼å·²å¼ç¨ï¼ |
| | | */ |
| | | public static final String DESIGN_FORM_URL_TYPE_VIEW = "view"; |
| | | |
| | | /** |
| | | * onlineåæ°å¼è®¾ç½®ï¼æ¯ï¼Y, å¦ï¼Nï¼ |
| | | */ |
| | | public static final String ONLINE_PARAM_VAL_IS_TURE = "Y"; |
| | | public static final String ONLINE_PARAM_VAL_IS_FALSE = "N"; |
| | | |
| | | /** |
| | | * æä»¶ä¸ä¼ ç±»åï¼æ¬å°ï¼localï¼Minioï¼minioï¼é¿éäºï¼aliossï¼ |
| | | */ |
| | | public static final String UPLOAD_TYPE_LOCAL = "local"; |
| | | public static final String UPLOAD_TYPE_MINIO = "minio"; |
| | | public static final String UPLOAD_TYPE_OSS = "alioss"; |
| | | |
| | | /** |
| | | * ææ¡£ä¸ä¼ èªå®ä¹æ¡¶åç§° |
| | | */ |
| | | public static final String UPLOAD_CUSTOM_BUCKET = "eoafile"; |
| | | /** |
| | | * ææ¡£ä¸ä¼ èªå®ä¹è·¯å¾ |
| | | */ |
| | | public static final String UPLOAD_CUSTOM_PATH = "eoafile"; |
| | | /** |
| | | * æä»¶å¤é¾æ¥ææå¤©æ° |
| | | */ |
| | | public static final Integer UPLOAD_EFFECTIVE_DAYS = 1; |
| | | |
| | | /** |
| | | * å工身份 ï¼1:æ®éåå·¥ 2:ä¸çº§ï¼ |
| | | */ |
| | | public static final Integer USER_IDENTITY_1 = 1; |
| | | public static final Integer USER_IDENTITY_2 = 2; |
| | | |
| | | /** sys_user 表 username å¯ä¸é®ç´¢å¼ */ |
| | | public static final String SQL_INDEX_UNIQ_SYS_USER_USERNAME = "uniq_sys_user_username"; |
| | | /** sys_user 表 work_no å¯ä¸é®ç´¢å¼ */ |
| | | public static final String SQL_INDEX_UNIQ_SYS_USER_WORK_NO = "uniq_sys_user_work_no"; |
| | | /** sys_user 表 phone å¯ä¸é®ç´¢å¼ */ |
| | | public static final String SQL_INDEX_UNIQ_SYS_USER_PHONE = "uniq_sys_user_phone"; |
| | | /** sys_user 表 email å¯ä¸é®ç´¢å¼ */ |
| | | public static final String SQL_INDEX_UNIQ_SYS_USER_EMAIL = "uniq_sys_user_email"; |
| | | /** sys_quartz_job 表 job_class_name å¯ä¸é®ç´¢å¼ */ |
| | | public static final String SQL_INDEX_UNIQ_JOB_CLASS_NAME = "uniq_job_class_name"; |
| | | /** sys_position 表 code å¯ä¸é®ç´¢å¼ */ |
| | | public static final String SQL_INDEX_UNIQ_CODE = "uniq_code"; |
| | | /** sys_role 表 code å¯ä¸é®ç´¢å¼ */ |
| | | public static final String SQL_INDEX_UNIQ_SYS_ROLE_CODE = "uniq_sys_role_role_code"; |
| | | /** sys_depart 表 code å¯ä¸é®ç´¢å¼ */ |
| | | public static final String SQL_INDEX_UNIQ_DEPART_ORG_CODE = "uniq_depart_org_code"; |
| | | /** |
| | | * å¨çº¿è天 æ¯å¦ä¸ºé»è®¤åç» |
| | | */ |
| | | public static final String IM_DEFAULT_GROUP = "1"; |
| | | /** |
| | | * å¨çº¿è天 å¾çæä»¶ä¿åè·¯å¾ |
| | | */ |
| | | public static final String IM_UPLOAD_CUSTOM_PATH = "imfile"; |
| | | /** |
| | | * å¨çº¿è天 ç¨æ·ç¶æ |
| | | */ |
| | | public static final String IM_STATUS_ONLINE = "online"; |
| | | |
| | | /** |
| | | * å¨çº¿è天 SOCKETæ¶æ¯ç±»å |
| | | */ |
| | | public static final String IM_SOCKET_TYPE = "chatMessage"; |
| | | |
| | | /** |
| | | * å¨çº¿è天 æ¯å¦å¼å¯é»è®¤æ·»å 好å 1æ¯ 0å¦ |
| | | */ |
| | | public static final String IM_DEFAULT_ADD_FRIEND = "1"; |
| | | |
| | | /** |
| | | * å¨çº¿è天 ç¨æ·å¥½åç¼ååç¼ |
| | | */ |
| | | public static final String IM_PREFIX_USER_FRIEND_CACHE = "sys:cache:im:im_prefix_user_friend_"; |
| | | |
| | | /** |
| | | * èå¤è¡¥å¡ä¸å¡ç¶æ ï¼1ï¼åæ 2ï¼ä¸åæï¼ |
| | | */ |
| | | public static final String SIGN_PATCH_BIZ_STATUS_1 = "1"; |
| | | public static final String SIGN_PATCH_BIZ_STATUS_2 = "2"; |
| | | |
| | | /** |
| | | * å
¬æææ¡£ä¸ä¼ èªå®ä¹è·¯å¾ |
| | | */ |
| | | public static final String UPLOAD_CUSTOM_PATH_OFFICIAL = "officialdoc"; |
| | | /** |
| | | * å
¬æææ¡£ä¸è½½èªå®ä¹è·¯å¾ |
| | | */ |
| | | public static final String DOWNLOAD_CUSTOM_PATH_OFFICIAL = "officaldown"; |
| | | |
| | | /** |
| | | * WPSåå¨å¼ç±»å«(1 codeæå· 2 textï¼WPS模æ¿è¿æ¯å
¬æåææ¨¡æ¿ï¼) |
| | | */ |
| | | public static final String WPS_TYPE_1="1"; |
| | | public static final String WPS_TYPE_2="2"; |
| | | |
| | | |
| | | public final static String X_ACCESS_TOKEN = "X-Access-Token"; |
| | | public final static String X_SIGN = "X-Sign"; |
| | | public final static String X_TIMESTAMP = "X-TIMESTAMP"; |
| | | public final static String TOKEN_IS_INVALID_MSG = "Token失æï¼è¯·éæ°ç»å½!"; |
| | | |
| | | /** |
| | | * å¤ç§æ· 请æ±å¤´ |
| | | */ |
| | | public final static String TENANT_ID = "tenant-id"; |
| | | |
| | | /** |
| | | * å¾®æå¡è¯»åé
ç½®æä»¶å±æ§ æå¡å°å |
| | | */ |
| | | public final static String CLOUD_SERVER_KEY = "spring.cloud.nacos.discovery.server-addr"; |
| | | |
| | | /** |
| | | * ç¬¬ä¸æ¹ç»å½ éªè¯å¯ç /åå»ºç¨æ· é½éè¦è®¾ç½®ä¸ä¸ªæä½ç 鲿¢è¢«æ¶æè°ç¨ |
| | | */ |
| | | public final static String THIRD_LOGIN_CODE = "third_login_code"; |
| | | |
| | | /** |
| | | * ç¬¬ä¸æ¹APP忥æ¹åï¼æ¬å° --> ç¬¬ä¸æ¹APP |
| | | */ |
| | | String THIRD_SYNC_TO_APP = "SYNC_TO_APP"; |
| | | /** |
| | | * ç¬¬ä¸æ¹APP忥æ¹åï¼ç¬¬ä¸æ¹APP --> æ¬å° |
| | | */ |
| | | String THIRD_SYNC_TO_LOCAL = "SYNC_TO_LOCAL"; |
| | | |
| | | /** ç³»ç»éåæ¶æ¯ç¶æï¼0=æªåå¸ */ |
| | | String ANNOUNCEMENT_SEND_STATUS_0 = "0"; |
| | | /** ç³»ç»éåæ¶æ¯ç¶æï¼1=å·²åå¸ */ |
| | | String ANNOUNCEMENT_SEND_STATUS_1 = "1"; |
| | | /** ç³»ç»éåæ¶æ¯ç¶æï¼2=å·²æ¤é */ |
| | | String ANNOUNCEMENT_SEND_STATUS_2 = "2"; |
| | | |
| | | |
| | | |
| | | /** 项ç®å¥éåæ¾ç¶æ 0-æªåæ¾ 1-已忾 */ |
| | | int BONUS_PAYMENT_STATU_0 = 0; |
| | | int BONUS_PAYMENT_STATU_1 = 1; |
| | | /** 项ç®å¥éå®é¢ç¶æ 0-æªå®é¢ 1-å·²å®é¢ */ |
| | | int BONUS_DE_STATU_0 = 0; |
| | | int BONUS_DE_STATU_1 = 1; |
| | | |
| | | public static Map<Double,Integer> BONUS_JSFL_MAP(){ |
| | | //å®é¢è¡¨ä¿åçæ¯ç³»æ° |
| | | // Aï¼ææ¯è½å对æ åé¢åå½é
åä¸åææ¯æ°´å¹³ï¼è¾¾å°å½é
é¢å
æ°´å¹³ãï¼1ï¼ |
| | | // Bï¼ææ¯è½å对æ åé¢åå½é
åååææ¯æ°´å¹³ï¼è¾¾å°å½é
å
è¿æ°´å¹³ãï¼0.6ï¼ |
| | | // Cï¼ææ¯è½å对æ åé¢åå½å
åä¸åææ¯æ°´å¹³è¾¾å°å½å
å
è¿æ°´å¹³ãï¼0.3ï¼ |
| | | // Dï¼ä¸å
·å¯¹æ ä¼å¿ï¼å
¬å¸å
³é®åºç¨ææ¯ç填平补é½ãï¼0.15ï¼ |
| | | |
| | | //åæ¾è¡¨ä¿åçæ¯ç´¢å¼ |
| | | // A 1 |
| | | // B 2 |
| | | // C 3 |
| | | // D 4 |
| | | //æä»¥éè¦mapè½¬æ¢ |
| | | Map<Double,Integer> map = new HashMap<>(); |
| | | map.put(1.0,1); |
| | | map.put(0.6,2); |
| | | map.put(0.3,3); |
| | | map.put(0.15,4); |
| | | return map; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * ç³»ç»éå - åå¸ç¶æ |
| | | * @Author LeeShaoQing |
| | | * |
| | | */ |
| | | public interface CommonSendStatus { |
| | | |
| | | public static final String UNPUBLISHED_STATUS_0 = "0"; //æªåå¸ |
| | | |
| | | public static final String PUBLISHED_STATUS_1 = "1"; //å·²åå¸ |
| | | |
| | | public static final String REVOKE_STATUS_2 = "2"; //æ¤é |
| | | //app端æ¨éä¼è¯æ è¯åç¼ |
| | | public static final String APP_SESSION_SUFFIX = "_app"; //app端æ¨éä¼è¯æ è¯åç¼ |
| | | |
| | | |
| | | |
| | | /**æµç¨å¬åââç³»ç»éç¥æ¶æ¯æ¨¡æ¿*/ |
| | | public static final String TZMB_BPM_CUIBAN = "bpm_cuiban"; |
| | | /**æ 忍¡æ¿âç³»ç»æ¶æ¯éç¥*/ |
| | | public static final String TZMB_SYS_TS_NOTE = "sys_ts_note"; |
| | | /**æµç¨è¶
æ¶æéââç³»ç»éç¥æ¶æ¯æ¨¡æ¿*/ |
| | | public static final String TZMB_BPM_CHAOSHI_TIP = "bpm_chaoshi_tip"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | /** |
| | | * æ°æ®åºä¸ä¸æå¸¸é |
| | | */ |
| | | public interface DataBaseConstant { |
| | | //*********æ°æ®åºç±»å**************************************** |
| | | public static final String DB_TYPE_MYSQL = "MYSQL"; |
| | | public static final String DB_TYPE_ORACLE = "ORACLE"; |
| | | public static final String DB_TYPE_DM = "DM";//è¾¾æ¢¦æ°æ®åº |
| | | public static final String DB_TYPE_POSTGRESQL = "POSTGRESQL"; |
| | | public static final String DB_TYPE_SQLSERVER = "SQLSERVER"; |
| | | public static final String DB_TYPE_MARIADB = "MARIADB"; |
| | | public static final String DB_TYPE_DB2 = "DB2"; |
| | | public static final String DB_TYPE_HSQL = "HSQL"; |
| | | |
| | | // // æ°æ®åºç±»åï¼å¯¹åº database_type åå
¸ |
| | | // public static final String DB_TYPE_MYSQL_NUM = "1"; |
| | | // public static final String DB_TYPE_MYSQL7_NUM = "6"; |
| | | // public static final String DB_TYPE_ORACLE_NUM = "2"; |
| | | // public static final String DB_TYPE_SQLSERVER_NUM = "3"; |
| | | // public static final String DB_TYPE_POSTGRESQL_NUM = "4"; |
| | | // public static final String DB_TYPE_MARIADB_NUM = "5"; |
| | | |
| | | //*********ç³»ç»ä¸ä¸æåé**************************************** |
| | | /** |
| | | * æ°æ®-æå±æºæç¼ç |
| | | */ |
| | | public static final String SYS_ORG_CODE = "sysOrgCode"; |
| | | /** |
| | | * æ°æ®-æå±æºæç¼ç |
| | | */ |
| | | public static final String SYS_ORG_CODE_TABLE = "sys_org_code"; |
| | | /** |
| | | * æ°æ®-æå±æºæç¼ç |
| | | */ |
| | | public static final String SYS_MULTI_ORG_CODE = "sysMultiOrgCode"; |
| | | /** |
| | | * æ°æ®-æå±æºæç¼ç |
| | | */ |
| | | public static final String SYS_MULTI_ORG_CODE_TABLE = "sys_multi_org_code"; |
| | | /** |
| | | * æ°æ®-ç³»ç»ç¨æ·ç¼ç ï¼å¯¹åºç»å½ç¨æ·è´¦å·ï¼ |
| | | */ |
| | | public static final String SYS_USER_CODE = "sysUserCode"; |
| | | /** |
| | | * æ°æ®-ç³»ç»ç¨æ·ç¼ç ï¼å¯¹åºç»å½ç¨æ·è´¦å·ï¼ |
| | | */ |
| | | public static final String SYS_USER_CODE_TABLE = "sys_user_code"; |
| | | |
| | | /** |
| | | * ç»å½ç¨æ·çå®å§å |
| | | */ |
| | | public static final String SYS_USER_NAME = "sysUserName"; |
| | | /** |
| | | * ç»å½ç¨æ·çå®å§å |
| | | */ |
| | | public static final String SYS_USER_NAME_TABLE = "sys_user_name"; |
| | | /** |
| | | * ç³»ç»æ¥æ"yyyy-MM-dd" |
| | | */ |
| | | public static final String SYS_DATE = "sysDate"; |
| | | /** |
| | | * ç³»ç»æ¥æ"yyyy-MM-dd" |
| | | */ |
| | | public static final String SYS_DATE_TABLE = "sys_date"; |
| | | /** |
| | | * ç³»ç»æ¶é´"yyyy-MM-dd HH:mm" |
| | | */ |
| | | public static final String SYS_TIME = "sysTime"; |
| | | /** |
| | | * ç³»ç»æ¶é´"yyyy-MM-dd HH:mm" |
| | | */ |
| | | public static final String SYS_TIME_TABLE = "sys_time"; |
| | | /** |
| | | * æ°æ®-æå±æºæç¼ç |
| | | */ |
| | | public static final String SYS_BASE_PATH = "sys_base_path"; |
| | | //*********ç³»ç»ä¸ä¸æåé**************************************** |
| | | |
| | | |
| | | //*********ç³»ç»å»ºè¡¨æ ååæ®µ**************************************** |
| | | /** |
| | | * å建è
ç»å½åç§° |
| | | */ |
| | | public static final String CREATE_BY_TABLE = "create_by"; |
| | | /** |
| | | * å建è
ç»å½åç§° |
| | | */ |
| | | public static final String CREATE_BY = "createBy"; |
| | | /** |
| | | * åå»ºæ¥ææ¶é´ |
| | | */ |
| | | public static final String CREATE_TIME_TABLE = "create_time"; |
| | | /** |
| | | * åå»ºæ¥ææ¶é´ |
| | | */ |
| | | public static final String CREATE_TIME = "createTime"; |
| | | /** |
| | | * æ´æ°ç¨æ·ç»å½åç§° |
| | | */ |
| | | public static final String UPDATE_BY_TABLE = "update_by"; |
| | | /** |
| | | * æ´æ°ç¨æ·ç»å½åç§° |
| | | */ |
| | | public static final String UPDATE_BY = "updateBy"; |
| | | /** |
| | | * æ´æ°æ¥ææ¶é´ |
| | | */ |
| | | public static final String UPDATE_TIME = "updateTime"; |
| | | /** |
| | | * æ´æ°æ¥ææ¶é´ |
| | | */ |
| | | public static final String UPDATE_TIME_TABLE = "update_time"; |
| | | |
| | | /** |
| | | * ä¸å¡æµç¨ç¶æ |
| | | */ |
| | | public static final String BPM_STATUS = "bpmStatus"; |
| | | /** |
| | | * ä¸å¡æµç¨ç¶æ |
| | | */ |
| | | public static final String BPM_STATUS_TABLE = "bpm_status"; |
| | | //*********ç³»ç»å»ºè¡¨æ ååæ®µ**************************************** |
| | | |
| | | |
| | | /** |
| | | * ç§æ·ID å®ä½å段å |
| | | */ |
| | | String TENANT_ID = "tenantId"; |
| | | /** |
| | | * ç§æ·ID æ°æ®åºå段å |
| | | */ |
| | | String TENANT_ID_TABLE = "tenant_id"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * è§åå¼çæ ç¼ç 常éç±» |
| | | * @author: taoyan |
| | | * @date: 2020å¹´04æ02æ¥ |
| | | */ |
| | | public class FillRuleConstant { |
| | | |
| | | /** |
| | | * å
¬æåæç¼ç |
| | | */ |
| | | public static final String DOC_SEND = "doc_send_code"; |
| | | |
| | | /** |
| | | * é¨é¨ç¼ç |
| | | */ |
| | | public static final String DEPART = "org_num_role"; |
| | | |
| | | /** |
| | | * åç±»åå
¸ç¼ç |
| | | */ |
| | | public static final String CATEGORY = "category_code_rule"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.core.io.Resource; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.Scanner; |
| | | import java.util.Set; |
| | | import java.util.List; |
| | | |
| | | @Component("pca") |
| | | public class ProvinceCityArea { |
| | | List<Area> areaList; |
| | | |
| | | public String getText(String code){ |
| | | this.initAreaList(); |
| | | if(this.areaList!=null || this.areaList.size()>0){ |
| | | List<String> ls = new ArrayList<String>(); |
| | | getAreaByCode(code,ls); |
| | | return String.join("/",ls); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | public String getCode(String text){ |
| | | this.initAreaList(); |
| | | if(areaList!=null || areaList.size()>0){ |
| | | for(int i=areaList.size()-1;i>=0;i--){ |
| | | if(text.indexOf(areaList.get(i).getText())>=0){ |
| | | return areaList.get(i).getId(); |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public void getAreaByCode(String code,List<String> ls){ |
| | | for(Area area: areaList){ |
| | | if(area.getId().equals(code)){ |
| | | String pid = area.getPid(); |
| | | ls.add(0,area.getText()); |
| | | getAreaByCode(pid,ls); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void initAreaList(){ |
| | | //System.out.println("====================="); |
| | | if(this.areaList==null || this.areaList.size()==0){ |
| | | this.areaList = new ArrayList<Area>(); |
| | | try { |
| | | String jsonData = oConvertUtils.readStatic("classpath:static/pca.json"); |
| | | JSONObject baseJson = JSONObject.parseObject(jsonData); |
| | | //第ä¸å± ç |
| | | JSONObject provinceJson = baseJson.getJSONObject("86"); |
| | | for(String provinceKey: provinceJson.keySet()){ |
| | | //System.out.println("===="+provinceKey); |
| | | Area province = new Area(provinceKey,provinceJson.getString(provinceKey),"86"); |
| | | this.areaList.add(province); |
| | | //第äºå± å¸ |
| | | JSONObject cityJson = baseJson.getJSONObject(provinceKey); |
| | | for(String cityKey:cityJson.keySet()){ |
| | | //System.out.println("-----"+cityKey); |
| | | Area city = new Area(cityKey,cityJson.getString(cityKey),provinceKey); |
| | | this.areaList.add(city); |
| | | //第ä¸å± åº |
| | | JSONObject areaJson = baseJson.getJSONObject(cityKey); |
| | | if(areaJson!=null){ |
| | | for(String areaKey:areaJson.keySet()){ |
| | | //System.out.println("········"+areaKey); |
| | | Area area = new Area(areaKey,areaJson.getString(areaKey),cityKey); |
| | | this.areaList.add(area); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | private String jsonRead(File file){ |
| | | Scanner scanner = null; |
| | | StringBuilder buffer = new StringBuilder(); |
| | | try { |
| | | scanner = new Scanner(file, "utf-8"); |
| | | while (scanner.hasNextLine()) { |
| | | buffer.append(scanner.nextLine()); |
| | | } |
| | | } catch (Exception e) { |
| | | |
| | | } finally { |
| | | if (scanner != null) { |
| | | scanner.close(); |
| | | } |
| | | } |
| | | return buffer.toString(); |
| | | } |
| | | |
| | | class Area{ |
| | | String id; |
| | | String text; |
| | | String pid; |
| | | |
| | | public Area(String id,String text,String pid){ |
| | | this.id = id; |
| | | this.text = text; |
| | | this.pid = pid; |
| | | } |
| | | |
| | | public String getId() { |
| | | return id; |
| | | } |
| | | |
| | | public String getText() { |
| | | return text; |
| | | } |
| | | |
| | | public String getPid() { |
| | | return pid; |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * |
| | | * * Copyright (c) 2019-2020, å·å· (wangiegie@gmail.com). |
| | | * * <p> |
| | | * * Licensed under the GNU Lesser General Public License 3.0 (the "License"); |
| | | * * you may not use this file except in compliance with the License. |
| | | * * You may obtain a copy of the License at |
| | | * * <p> |
| | | * * https://www.gnu.org/licenses/lgpl.html |
| | | * * <p> |
| | | * * Unless required by applicable law or agreed to in writing, software |
| | | * * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * * See the License for the specific language governing permissions and |
| | | * * limitations under the License. |
| | | * |
| | | */ |
| | | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * @author scott |
| | | * @date 2019å¹´05æ18æ¥ |
| | | * æå¡åç§° |
| | | */ |
| | | public interface ServiceNameConstants { |
| | | |
| | | /** |
| | | * ç³»ç»ç®¡ç admin |
| | | */ |
| | | String SYSTEM_SERVICE = "jeecg-system"; |
| | | String SYSTEM_ONLINE = "jeecg-online"; |
| | | |
| | | /** |
| | | * gatewayéè¿headerä¼ éæ ¹è·¯å¾ basePath |
| | | */ |
| | | String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * VXESocket 常é |
| | | */ |
| | | public class VXESocketConst { |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å |
| | | */ |
| | | public static final String TYPE = "type"; |
| | | /** |
| | | * æ¶æ¯æ°æ® |
| | | */ |
| | | public static final String DATA = "data"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»åï¼å¿è·³æ£æµ |
| | | */ |
| | | public static final String TYPE_HB = "heart_beat"; |
| | | /** |
| | | * æ¶æ¯ç±»åï¼éç¨æ°æ®ä¼ é |
| | | */ |
| | | public static final String TYPE_CSD = "common_send_date"; |
| | | /** |
| | | * æ¶æ¯ç±»åï¼æ´æ°vxe tableæ°æ® |
| | | */ |
| | | public static final String TYPE_UVT = "update_vxe_table"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * @Description: Websocket常éç±» |
| | | * @author: taoyan |
| | | * @date: 2020å¹´03æ23æ¥ |
| | | */ |
| | | public class WebsocketConst { |
| | | |
| | | |
| | | /** |
| | | * æ¶æ¯json key:cmd |
| | | */ |
| | | public static final String MSG_CMD = "cmd"; |
| | | |
| | | /** |
| | | * æ¶æ¯json key:msgId |
| | | */ |
| | | public static final String MSG_ID = "msgId"; |
| | | |
| | | /** |
| | | * æ¶æ¯json key:msgTxt |
| | | */ |
| | | public static final String MSG_TXT = "msgTxt"; |
| | | |
| | | /** |
| | | * æ¶æ¯json key:userId |
| | | */ |
| | | public static final String MSG_USER_ID = "userId"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å heartcheck |
| | | */ |
| | | public static final String CMD_CHECK = "heartcheck"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å user ç¨æ·æ¶æ¯ |
| | | */ |
| | | public static final String CMD_USER = "user"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å topic ç³»ç»éç¥ |
| | | */ |
| | | public static final String CMD_TOPIC = "topic"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å custom èªå®ä¹éç¥ |
| | | */ |
| | | public static final String CMD_CUSTOM = "custom"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å email |
| | | */ |
| | | public static final String CMD_EMAIL = "email"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å meetingsign ä¼è®®ç¾å° |
| | | */ |
| | | public static final String CMD_SIGN = "sign"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å æ°é»åå¸/åæ¶ |
| | | */ |
| | | public static final String NEWS_PUBLISH = "publish"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant.enums; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * online表åæä¸¾ 代ç çæå¨ç¨å° |
| | | */ |
| | | public enum CgformEnum { |
| | | |
| | | /** |
| | | * å表 |
| | | */ |
| | | ONE(1, "one", "/jeecg/code-template-online", "default.one", "ç»å
¸é£æ ¼"), |
| | | /** |
| | | * å¤è¡¨ |
| | | */ |
| | | MANY(2, "many", "/jeecg/code-template-online", "default.onetomany", "ç»å
¸é£æ ¼"), |
| | | /** |
| | | * å¤è¡¨ |
| | | */ |
| | | ERP(2, "erp", "/jeecg/code-template-online", "erp.onetomany", "ERP飿 ¼"), |
| | | /** |
| | | * å¤è¡¨ï¼jvxe飿 ¼ï¼ |
| | | * */ |
| | | JVXE_TABLE(2, "jvxe", "/jeecg/code-template-online", "jvxe.onetomany", "JVXE飿 ¼"), |
| | | /** |
| | | * å¤è¡¨ï¼å
åµåè¡¨é£æ ¼ï¼ |
| | | */ |
| | | INNER_TABLE(2, "innerTable", "/jeecg/code-template-online", "inner-table.onetomany", "å
åµåè¡¨é£æ ¼"), |
| | | /** |
| | | * å¤è¡¨ï¼tab飿 ¼ï¼ |
| | | * */ |
| | | TAB(2, "tab", "/jeecg/code-template-online", "tab.onetomany", "Tab飿 ¼"), |
| | | /** |
| | | * æ å½¢å表 |
| | | */ |
| | | TREE(3, "tree", "/jeecg/code-template-online", "default.tree", "æ å½¢å表"); |
| | | |
| | | /** |
| | | * ç±»å 1/å表 2/ä¸å¯¹å¤ 3/æ |
| | | */ |
| | | int type; |
| | | /** |
| | | * ç¼ç æ è¯ |
| | | */ |
| | | String code; |
| | | /** |
| | | * 代ç çæå¨æ¨¡æ¿è·¯å¾ |
| | | */ |
| | | String templatePath; |
| | | /** |
| | | * 代ç çæå¨æ¨¡æ¿è·¯å¾ |
| | | */ |
| | | String stylePath; |
| | | /** |
| | | * 模æ¿é£æ ¼åç§° |
| | | */ |
| | | String note; |
| | | |
| | | /** |
| | | * æé å¨ |
| | | * |
| | | * @param type ç±»å 1/å表 2/ä¸å¯¹å¤ 3/æ |
| | | * @param code 模æ¿ç¼ç |
| | | * @param templatePath 模æ¿è·¯å¾ |
| | | * @param stylePath 模æ¿åè·¯å¾ |
| | | * @param note |
| | | */ |
| | | CgformEnum(int type, String code, String templatePath, String stylePath, String note) { |
| | | this.type = type; |
| | | this.code = code; |
| | | this.templatePath = templatePath; |
| | | this.stylePath = stylePath; |
| | | this.note = note; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®codeè·å模æ¿è·¯å¾ |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static String getTemplatePathByConfig(String code) { |
| | | return getCgformEnumByConfig(code).templatePath; |
| | | } |
| | | |
| | | |
| | | public int getType() { |
| | | return type; |
| | | } |
| | | |
| | | public void setType(int type) { |
| | | this.type = type; |
| | | } |
| | | |
| | | public String getTemplatePath() { |
| | | return templatePath; |
| | | } |
| | | |
| | | public void setTemplatePath(String templatePath) { |
| | | this.templatePath = templatePath; |
| | | } |
| | | |
| | | public String getStylePath() { |
| | | return stylePath; |
| | | } |
| | | |
| | | public void setStylePath(String stylePath) { |
| | | this.stylePath = stylePath; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®codeæ¾æä¸¾ |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static CgformEnum getCgformEnumByConfig(String code) { |
| | | for (CgformEnum e : CgformEnum.values()) { |
| | | if (e.code.equals(code)) { |
| | | return e; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®ç±»åæ¾ææ |
| | | * |
| | | * @param type |
| | | * @return |
| | | */ |
| | | public static List<Map<String, Object>> getJspModelList(int type) { |
| | | List<Map<String, Object>> ls = new ArrayList<Map<String, Object>>(); |
| | | for (CgformEnum e : CgformEnum.values()) { |
| | | if (e.type == type) { |
| | | Map<String, Object> map = new HashMap<String, Object>(); |
| | | map.put("code", e.code); |
| | | map.put("note", e.note); |
| | | ls.add(map); |
| | | } |
| | | } |
| | | return ls; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant.enums; |
| | | |
| | | /** |
| | | * æ¥å¿ææ¨¡ååç±» |
| | | */ |
| | | public enum ModuleType { |
| | | |
| | | /** |
| | | * æ®é |
| | | */ |
| | | COMMON, |
| | | |
| | | /** |
| | | * online |
| | | */ |
| | | ONLINE; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant.enums; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * é¦é¡µèªå®ä¹ |
| | | * éè¿è§è²ç¼ç ä¸é¦é¡µç»ä»¶è·¯å¾é
ç½® |
| | | */ |
| | | public enum RoleIndexConfigEnum { |
| | | /** |
| | | * 管çå |
| | | */ |
| | | ADMIN("admin1", "dashboard/Analysis2"), |
| | | /** |
| | | * æµè¯ |
| | | */ |
| | | TEST("test", "dashboard/Analysis"), |
| | | /** |
| | | * hr |
| | | */ |
| | | HR("hr", "dashboard/Analysis1"); |
| | | |
| | | /** |
| | | * è§è²ç¼ç |
| | | */ |
| | | String roleCode; |
| | | /** |
| | | * è·¯ç±index |
| | | */ |
| | | String componentUrl; |
| | | |
| | | /** |
| | | * æé å¨ |
| | | * |
| | | * @param roleCode è§è²ç¼ç |
| | | * @param componentUrl é¦é¡µç»ä»¶è·¯å¾ï¼è§åè·èåé
ç½®ä¸æ ·ï¼ |
| | | */ |
| | | RoleIndexConfigEnum(String roleCode, String componentUrl) { |
| | | this.roleCode = roleCode; |
| | | this.componentUrl = componentUrl; |
| | | } |
| | | /** |
| | | * æ ¹æ®codeæ¾æä¸¾ |
| | | * @param roleCode è§è²ç¼ç |
| | | * @return |
| | | */ |
| | | public static RoleIndexConfigEnum getEnumByCode(String roleCode) { |
| | | for (RoleIndexConfigEnum e : RoleIndexConfigEnum.values()) { |
| | | if (e.roleCode.equals(roleCode)) { |
| | | return e; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | /** |
| | | * æ ¹æ®codeæ¾index |
| | | * @param roleCode è§è²ç¼ç |
| | | * @return |
| | | */ |
| | | public static String getIndexByCode(String roleCode) { |
| | | for (RoleIndexConfigEnum e : RoleIndexConfigEnum.values()) { |
| | | if (e.roleCode.equals(roleCode)) { |
| | | return e.componentUrl; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static String getIndexByRoles(List<String> roles) { |
| | | for (String role : roles) { |
| | | for (RoleIndexConfigEnum e : RoleIndexConfigEnum.values()) { |
| | | if (e.roleCode.equals(role)) { |
| | | return e.componentUrl; |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getRoleCode() { |
| | | return roleCode; |
| | | } |
| | | |
| | | public void setRoleCode(String roleCode) { |
| | | this.roleCode = roleCode; |
| | | } |
| | | |
| | | public String getComponentUrl() { |
| | | return componentUrl; |
| | | } |
| | | |
| | | public void setComponentUrl(String componentUrl) { |
| | | this.componentUrl = componentUrl; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.doc.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class DeptPathPermissionVo { |
| | | |
| | | public static final Integer TYPE_DEPART = 1; |
| | | public static final Integer TYPE_ROLE = 2; |
| | | private String id; |
| | | |
| | | private String key; |
| | | /**é¨é¨ID*/ |
| | | private String deptId; |
| | | /**é¨é¨åç§°*/ |
| | | private String deptName; |
| | | /**é¨é¨code**/ |
| | | private String orgCode; |
| | | /**æä»¶ID*/ |
| | | private String pathId; |
| | | /**è§è²ID*/ |
| | | private String roleId; |
| | | /**è§è²åç§°*/ |
| | | private String roleName; |
| | | /**è®¿é®æé*/ |
| | | private Integer visit; |
| | | /**ä¸è½½æé*/ |
| | | private Integer download; |
| | | /**管çæé*/ |
| | | private Integer manage; |
| | | /**ä¸è½½éé¢*/ |
| | | private Long flow; |
| | | private Integer type; // 1é¨é¨ï¼2è§è² |
| | | private Integer sort; |
| | | private String parentId; |
| | | |
| | | private List<DeptPathPermissionVo> children = new ArrayList<>(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.doc.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class PathPermissionVO { |
| | | private String id; |
| | | /**è§è²ID*/ |
| | | private String roleId; |
| | | /**è§è²åç§°*/ |
| | | private String roleName; |
| | | /**æä»¶ID*/ |
| | | private String pathId; |
| | | /**ç¨æ·ID*/ |
| | | private String userId; |
| | | /**ç¨æ·åç§°*/ |
| | | private String userName; |
| | | /**è®¿é®æé*/ |
| | | private Integer visit; |
| | | /**ä¸è½½æé*/ |
| | | private Integer download; |
| | | /**管çæé*/ |
| | | private Integer manage; |
| | | |
| | | private List<PathPermissionVO> children = new ArrayList<>(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.es; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jeecg.common.util.RestUtil; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpMethod; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.ResponseEntity; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * å
³äº ElasticSearch çä¸äºæ¹æ³ï¼å建索å¼ãæ·»å æ°æ®ãæ¥è¯¢çï¼ |
| | | * |
| | | * @author sunjianlei |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class JeecgElasticsearchTemplate { |
| | | /** esæå¡å°å */ |
| | | private String baseUrl; |
| | | private final String FORMAT_JSON = "format=json"; |
| | | /** Elasticsearch ççæ¬å· */ |
| | | private String version = null; |
| | | |
| | | // ElasticSearch æå¤§å¯è¿åæ¡ç®æ° |
| | | public static final int ES_MAX_SIZE = 10000; |
| | | |
| | | public JeecgElasticsearchTemplate(@Value("${jeecg.elasticsearch.cluster-nodes}") String baseUrl, @Value("${jeecg.elasticsearch.check-enabled}") boolean checkEnabled) { |
| | | log.debug("JeecgElasticsearchTemplate BaseURLï¼" + baseUrl); |
| | | if (StringUtils.isNotEmpty(baseUrl)) { |
| | | this.baseUrl = baseUrl; |
| | | // éªè¯é
ç½®çESå°åæ¯å¦ææ |
| | | if (checkEnabled) { |
| | | try { |
| | | this.getElasticsearchVersion(); |
| | | log.info("ElasticSearch æå¡è¿æ¥æå"); |
| | | log.info("ElasticSearch version: " + this.version); |
| | | } catch (Exception e) { |
| | | this.version = ""; |
| | | log.warn("ElasticSearch æå¡è¿æ¥å¤±è´¥ï¼åå ï¼é
ç½®æªéè¿ãå¯è½æ¯BaseURLæªé
ç½®æé
ç½®æè¯¯ï¼ä¹å¯è½æ¯Elasticsearchæå¡æªå¯å¨ãæ¥ä¸æ¥å°ä¼æç»æ§è¡ä»»ä½æ¹æ³ï¼"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·å Elasticsearch ççæ¬å·ä¿¡æ¯ï¼å¤±è´¥è¿ånull |
| | | */ |
| | | private void getElasticsearchVersion() { |
| | | if (this.version == null) { |
| | | String url = this.getBaseUrl().toString(); |
| | | JSONObject result = RestUtil.get(url); |
| | | if (result != null) { |
| | | JSONObject v = result.getJSONObject("version"); |
| | | this.version = v.getString("number"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public StringBuilder getBaseUrl(String indexName, String typeName) { |
| | | typeName = typeName.trim().toLowerCase(); |
| | | return this.getBaseUrl(indexName).append("/").append(typeName); |
| | | } |
| | | |
| | | public StringBuilder getBaseUrl(String indexName) { |
| | | indexName = indexName.trim().toLowerCase(); |
| | | return this.getBaseUrl().append("/").append(indexName); |
| | | } |
| | | |
| | | public StringBuilder getBaseUrl() { |
| | | return new StringBuilder("http://").append(this.baseUrl); |
| | | } |
| | | |
| | | /** |
| | | * cat æ¥è¯¢ElasticSearchç³»ç»æ°æ®ï¼è¿åjson |
| | | */ |
| | | public <T> ResponseEntity<T> _cat(String urlAfter, Class<T> responseType) { |
| | | String url = this.getBaseUrl().append("/_cat").append(urlAfter).append("?").append(FORMAT_JSON).toString(); |
| | | return RestUtil.request(url, HttpMethod.GET, null, null, null, responseType); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ææç´¢å¼ |
| | | * <p> |
| | | * æ¥è¯¢å°åï¼GET http://{baseUrl}/_cat/indices |
| | | */ |
| | | public JSONArray getIndices() { |
| | | return getIndices(null); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ¥è¯¢åä¸ªç´¢å¼ |
| | | * <p> |
| | | * æ¥è¯¢å°åï¼GET http://{baseUrl}/_cat/indices/{indexName} |
| | | */ |
| | | public JSONArray getIndices(String indexName) { |
| | | StringBuilder urlAfter = new StringBuilder("/indices"); |
| | | if (!StringUtils.isEmpty(indexName)) { |
| | | urlAfter.append("/").append(indexName.trim().toLowerCase()); |
| | | } |
| | | return _cat(urlAfter.toString(), JSONArray.class).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * ç´¢å¼æ¯å¦åå¨ |
| | | */ |
| | | public boolean indexExists(String indexName) { |
| | | try { |
| | | JSONArray array = getIndices(indexName); |
| | | return array != null; |
| | | } catch (org.springframework.web.client.HttpClientErrorException ex) { |
| | | if (HttpStatus.NOT_FOUND == ex.getStatusCode()) { |
| | | return false; |
| | | } else { |
| | | throw ex; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®IDè·åç´¢å¼æ°æ®ï¼æªæ¥è¯¢å°è¿ånull |
| | | * <p> |
| | | * æ¥è¯¢å°åï¼GET http://{baseUrl}/{indexName}/{typeName}/{dataId} |
| | | * |
| | | * @param indexName ç´¢å¼åç§° |
| | | * @param typeName typeï¼ä¸ä¸ªä»»æå符串ï¼ç¨äºåç±» |
| | | * @param dataId æ°æ®id |
| | | * @return |
| | | */ |
| | | public JSONObject getDataById(String indexName, String typeName, String dataId) { |
| | | String url = this.getBaseUrl(indexName, typeName).append("/").append(dataId).toString(); |
| | | log.info("url:" + url); |
| | | JSONObject result = RestUtil.get(url); |
| | | boolean found = result.getBoolean("found"); |
| | | if (found) { |
| | | return result.getJSONObject("_source"); |
| | | } else { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åå»ºç´¢å¼ |
| | | * <p> |
| | | * æ¥è¯¢å°åï¼PUT http://{baseUrl}/{indexName} |
| | | */ |
| | | public boolean createIndex(String indexName) { |
| | | String url = this.getBaseUrl(indexName).toString(); |
| | | |
| | | /* è¿åç»æ ï¼ä»
ä¾åèï¼ |
| | | "createIndex": { |
| | | "shards_acknowledged": true, |
| | | "acknowledged": true, |
| | | "index": "hello_world" |
| | | } |
| | | */ |
| | | try { |
| | | return RestUtil.put(url).getBoolean("acknowledged"); |
| | | } catch (org.springframework.web.client.HttpClientErrorException ex) { |
| | | if (HttpStatus.BAD_REQUEST == ex.getStatusCode()) { |
| | | log.warn("ç´¢å¼å建失败ï¼" + indexName + " å·²åå¨ï¼æ éåå建"); |
| | | } else { |
| | | ex.printStackTrace(); |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * å é¤ç´¢å¼ |
| | | * <p> |
| | | * æ¥è¯¢å°åï¼DELETE http://{baseUrl}/{indexName} |
| | | */ |
| | | public boolean removeIndex(String indexName) { |
| | | String url = this.getBaseUrl(indexName).toString(); |
| | | try { |
| | | return RestUtil.delete(url).getBoolean("acknowledged"); |
| | | } catch (org.springframework.web.client.HttpClientErrorException ex) { |
| | | if (HttpStatus.NOT_FOUND == ex.getStatusCode()) { |
| | | log.warn("ç´¢å¼å é¤å¤±è´¥ï¼" + indexName + " ä¸åå¨ï¼æ éå é¤"); |
| | | } else { |
| | | ex.printStackTrace(); |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * è·åç´¢å¼å段æ å°ï¼å¯è·ååæ®µç±»åï¼ |
| | | * <p> |
| | | * |
| | | * @param indexName ç´¢å¼åç§° |
| | | * @param typeName åç±»åç§° |
| | | * @return |
| | | */ |
| | | public JSONObject getIndexMapping(String indexName, String typeName) { |
| | | String url = this.getBaseUrl(indexName, typeName).append("/_mapping?").append(FORMAT_JSON).toString(); |
| | | // é对 es 7.x çæ¬åå
¼å®¹ |
| | | this.getElasticsearchVersion(); |
| | | if (oConvertUtils.isNotEmpty(this.version) && this.version.startsWith("7")) { |
| | | url += "&include_type_name=true"; |
| | | } |
| | | log.info("getIndexMapping-url:" + url); |
| | | /* |
| | | * åèè¿åJSONç»æï¼ |
| | | * |
| | | *{ |
| | | * // ç´¢å¼åç§° |
| | | * "[indexName]": { |
| | | * "mappings": { |
| | | * // åç±»åç§° |
| | | * "[typeName]": { |
| | | * "properties": { |
| | | * // åæ®µå |
| | | * "input_number": { |
| | | * // åæ®µç±»å |
| | | * "type": "long" |
| | | * }, |
| | | * "input_string": { |
| | | * "type": "text", |
| | | * "fields": { |
| | | * "keyword": { |
| | | * "type": "keyword", |
| | | * "ignore_above": 256 |
| | | * } |
| | | * } |
| | | * } |
| | | * } |
| | | * } |
| | | * } |
| | | * } |
| | | * } |
| | | */ |
| | | try { |
| | | return RestUtil.get(url); |
| | | } catch (org.springframework.web.client.HttpClientErrorException e) { |
| | | String message = e.getMessage(); |
| | | if (message != null && message.contains("404 Not Found")) { |
| | | return null; |
| | | } |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åç´¢å¼å段æ å°ï¼è¿åJavaå®ä½ç±» |
| | | * |
| | | * @param indexName |
| | | * @param typeName |
| | | * @return |
| | | */ |
| | | public <T> Map<String, T> getIndexMappingFormat(String indexName, String typeName, Class<T> clazz) { |
| | | JSONObject mapping = this.getIndexMapping(indexName, typeName); |
| | | Map<String, T> map = new HashMap<>(); |
| | | if (mapping == null) { |
| | | return map; |
| | | } |
| | | // è·ååæ®µå±æ§ |
| | | JSONObject properties = mapping.getJSONObject(indexName) |
| | | .getJSONObject("mappings") |
| | | .getJSONObject(typeName) |
| | | .getJSONObject("properties"); |
| | | // å°è£
æ javaç±»å |
| | | for (String key : properties.keySet()) { |
| | | T entity = properties.getJSONObject(key).toJavaObject(clazz); |
| | | map.put(key, entity); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * ä¿åæ°æ®ï¼è¯¦è§ï¼saveOrUpdate |
| | | */ |
| | | public boolean save(String indexName, String typeName, String dataId, JSONObject data) { |
| | | return this.saveOrUpdate(indexName, typeName, dataId, data); |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°æ°æ®ï¼è¯¦è§ï¼saveOrUpdate |
| | | */ |
| | | public boolean update(String indexName, String typeName, String dataId, JSONObject data) { |
| | | return this.saveOrUpdate(indexName, typeName, dataId, data); |
| | | } |
| | | |
| | | /** |
| | | * ä¿åæä¿®æ¹ç´¢å¼æ°æ® |
| | | * <p> |
| | | * æ¥è¯¢å°åï¼PUT http://{baseUrl}/{indexName}/{typeName}/{dataId} |
| | | * |
| | | * @param indexName ç´¢å¼åç§° |
| | | * @param typeName typeï¼ä¸ä¸ªä»»æå符串ï¼ç¨äºåç±» |
| | | * @param dataId æ°æ®id |
| | | * @param data è¦åå¨çæ°æ® |
| | | * @return |
| | | */ |
| | | public boolean saveOrUpdate(String indexName, String typeName, String dataId, JSONObject data) { |
| | | String url = this.getBaseUrl(indexName, typeName).append("/").append(dataId).append("?refresh=wait_for").toString(); |
| | | /* è¿åç»æï¼ä»
ä¾åèï¼ |
| | | "createIndexA2": { |
| | | "result": "created", |
| | | "_shards": { |
| | | "total": 2, |
| | | "successful": 1, |
| | | "failed": 0 |
| | | }, |
| | | "_seq_no": 0, |
| | | "_index": "test_index_1", |
| | | "_type": "test_type_1", |
| | | "_id": "a2", |
| | | "_version": 1, |
| | | "_primary_term": 1 |
| | | } |
| | | */ |
| | | |
| | | try { |
| | | // 廿 data ä¸ä¸ºç©ºçå¼ |
| | | Set<String> keys = data.keySet(); |
| | | List<String> emptyKeys = new ArrayList<>(keys.size()); |
| | | for (String key : keys) { |
| | | String value = data.getString(key); |
| | | //1ãåé¤ç©ºå¼ |
| | | if (oConvertUtils.isEmpty(value) || "[]".equals(value)) { |
| | | emptyKeys.add(key); |
| | | } |
| | | //2ãåé¤ä¸ä¼ æ§ä»¶å¼(ä¼å¯¼è´ESåæ¥å¤±è´¥ï¼æ¥å¼å¸¸failed to parse field [ge_pic] of type [text] ) |
| | | if (oConvertUtils.isNotEmpty(value) && value.indexOf("[{")!=-1) { |
| | | emptyKeys.add(key); |
| | | log.info("-------åé¤ä¸ä¼ æ§ä»¶å段------------key: "+ key); |
| | | } |
| | | } |
| | | for (String key : emptyKeys) { |
| | | data.remove(key); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | try { |
| | | String result = RestUtil.put(url, data).getString("result"); |
| | | return "created".equals(result) || "updated".equals(result); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage() + "\n-- url: " + url + "\n-- data: " + data.toJSONString()); |
| | | //TODO æå°æ¥å£è¿åå¼å¸¸json |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¹éä¿åæ°æ® |
| | | * |
| | | * @param indexName ç´¢å¼åç§° |
| | | * @param typeName typeï¼ä¸ä¸ªä»»æå符串ï¼ç¨äºåç±» |
| | | * @param dataList è¦åå¨çæ°æ®æ°ç»ï¼æ¯è¡æ°æ®å¿
é¡»å
å«id |
| | | * @return |
| | | */ |
| | | public boolean saveBatch(String indexName, String typeName, JSONArray dataList) { |
| | | String url = this.getBaseUrl().append("/_bulk").append("?refresh=wait_for").toString(); |
| | | StringBuilder bodySB = new StringBuilder(); |
| | | for (int i = 0; i < dataList.size(); i++) { |
| | | JSONObject data = dataList.getJSONObject(i); |
| | | String id = data.getString("id"); |
| | | // 该è¡çæä½ |
| | | // {"create": {"_id":"${id}", "_index": "${indexName}", "_type": "${typeName}"}} |
| | | JSONObject action = new JSONObject(); |
| | | JSONObject actionInfo = new JSONObject(); |
| | | actionInfo.put("_id", id); |
| | | actionInfo.put("_index", indexName); |
| | | actionInfo.put("_type", typeName); |
| | | action.put("create", actionInfo); |
| | | bodySB.append(action.toJSONString()).append("\n"); |
| | | // 该è¡çæ°æ® |
| | | data.remove("id"); |
| | | bodySB.append(data.toJSONString()).append("\n"); |
| | | } |
| | | System.out.println("+-+-+-: bodySB.toString(): " + bodySB.toString()); |
| | | HttpHeaders headers = RestUtil.getHeaderApplicationJson(); |
| | | RestUtil.request(url, HttpMethod.PUT, headers, null, bodySB, JSONObject.class); |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * å é¤ç´¢å¼æ°æ® |
| | | * <p> |
| | | * 请æ±å°åï¼DELETE http://{baseUrl}/{indexName}/{typeName}/{dataId} |
| | | */ |
| | | public boolean delete(String indexName, String typeName, String dataId) { |
| | | String url = this.getBaseUrl(indexName, typeName).append("/").append(dataId).toString(); |
| | | /* è¿åç»æï¼ä»
ä¾åèï¼ |
| | | { |
| | | "_index": "es_demo", |
| | | "_type": "docs", |
| | | "_id": "001", |
| | | "_version": 3, |
| | | "result": "deleted", |
| | | "_shards": { |
| | | "total": 1, |
| | | "successful": 1, |
| | | "failed": 0 |
| | | }, |
| | | "_seq_no": 28, |
| | | "_primary_term": 18 |
| | | } |
| | | */ |
| | | try { |
| | | return "deleted".equals(RestUtil.delete(url).getString("result")); |
| | | } catch (org.springframework.web.client.HttpClientErrorException ex) { |
| | | if (HttpStatus.NOT_FOUND == ex.getStatusCode()) { |
| | | return false; |
| | | } else { |
| | | throw ex; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /* = = = 以ä¸å
³äºæ¥è¯¢åæ¥è¯¢æ¡ä»¶çæ¹æ³ = = =*/ |
| | | |
| | | /** |
| | | * æ¥è¯¢æ°æ® |
| | | * <p> |
| | | * 请æ±å°åï¼POST http://{baseUrl}/{indexName}/{typeName}/_search |
| | | */ |
| | | public JSONObject search(String indexName, String typeName, JSONObject queryObject) { |
| | | String url = this.getBaseUrl(indexName, typeName).append("/_search").toString(); |
| | | |
| | | log.info("url:" + url + " ,search: " + queryObject.toJSONString()); |
| | | JSONObject res = RestUtil.post(url, queryObject); |
| | | log.info("url:" + url + " ,return res: \n" + res.toJSONString()); |
| | | return res; |
| | | } |
| | | |
| | | /** |
| | | * @param _source ï¼æºæ»¤æ³¢å¨ï¼æå®è¿åçåæ®µï¼ä¼ nullè¿åææå段 |
| | | * @param query |
| | | * @param from ä»ç¬¬å æ¡æ°æ®å¼å§ |
| | | * @param size è¿åæ¡ç®æ° |
| | | * @return { "query": query } |
| | | */ |
| | | public JSONObject buildQuery(List<String> _source, JSONObject query, int from, int size) { |
| | | JSONObject json = new JSONObject(); |
| | | if (_source != null) { |
| | | json.put("_source", _source); |
| | | } |
| | | json.put("query", query); |
| | | json.put("from", from); |
| | | json.put("size", size); |
| | | return json; |
| | | } |
| | | |
| | | /** |
| | | * @return { "bool" : { "must": must, "must_not": mustNot, "should": should } } |
| | | */ |
| | | public JSONObject buildBoolQuery(JSONArray must, JSONArray mustNot, JSONArray should) { |
| | | JSONObject bool = new JSONObject(); |
| | | if (must != null) { |
| | | bool.put("must", must); |
| | | } |
| | | if (mustNot != null) { |
| | | bool.put("must_not", mustNot); |
| | | } |
| | | if (should != null) { |
| | | bool.put("should", should); |
| | | } |
| | | JSONObject json = new JSONObject(); |
| | | json.put("bool", bool); |
| | | return json; |
| | | } |
| | | |
| | | /** |
| | | * @param field è¦æ¥è¯¢çåæ®µ |
| | | * @param args æ¥è¯¢åæ°ï¼åèï¼ *åå* OR *å* NOT *åµ* OR *å* |
| | | * @return |
| | | */ |
| | | public JSONObject buildQueryString(String field, String... args) { |
| | | if (field == null) { |
| | | return null; |
| | | } |
| | | StringBuilder sb = new StringBuilder(field).append(":("); |
| | | if (args != null) { |
| | | for (String arg : args) { |
| | | sb.append(arg).append(" "); |
| | | } |
| | | } |
| | | sb.append(")"); |
| | | return this.buildQueryString(sb.toString()); |
| | | } |
| | | |
| | | /** |
| | | * @return { "query_string": { "query": query } } |
| | | */ |
| | | public JSONObject buildQueryString(String query) { |
| | | JSONObject queryString = new JSONObject(); |
| | | queryString.put("query", query); |
| | | JSONObject json = new JSONObject(); |
| | | json.put("query_string", queryString); |
| | | return json; |
| | | } |
| | | |
| | | /** |
| | | * @param field æ¥è¯¢å段 |
| | | * @param min æå°å¼ |
| | | * @param max æå¤§å¼ |
| | | * @param containMin èå´å
æ¯å¦å
嫿å°å¼ |
| | | * @param containMax èå´å
æ¯å¦å
å«æå¤§å¼ |
| | | * @return { "range" : { field : { ã "gtãeã?containMin" : min ã?min!=null , ã "ltãeã?containMax" : max ã}} } |
| | | */ |
| | | public JSONObject buildRangeQuery(String field, Object min, Object max, boolean containMin, boolean containMax) { |
| | | JSONObject inner = new JSONObject(); |
| | | if (min != null) { |
| | | if (containMin) { |
| | | inner.put("gte", min); |
| | | } else { |
| | | inner.put("gt", min); |
| | | } |
| | | } |
| | | if (max != null) { |
| | | if (containMax) { |
| | | inner.put("lte", max); |
| | | } else { |
| | | inner.put("lt", max); |
| | | } |
| | | } |
| | | JSONObject range = new JSONObject(); |
| | | range.put(field, inner); |
| | | JSONObject json = new JSONObject(); |
| | | json.put("range", range); |
| | | return json; |
| | | } |
| | | |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.es; |
| | | |
| | | /** |
| | | * ç¨äºå建 ElasticSearch ç queryString |
| | | * |
| | | * @author sunjianlei |
| | | */ |
| | | public class QueryStringBuilder { |
| | | |
| | | StringBuilder builder; |
| | | |
| | | public QueryStringBuilder(String field, String str, boolean not, boolean addQuot) { |
| | | builder = this.createBuilder(field, str, not, addQuot); |
| | | } |
| | | |
| | | public QueryStringBuilder(String field, String str, boolean not) { |
| | | builder = this.createBuilder(field, str, not, true); |
| | | } |
| | | |
| | | /** |
| | | * å建 StringBuilder |
| | | * |
| | | * @param field |
| | | * @param str |
| | | * @param not æ¯å¦æ¯ä¸å¹é
|
| | | * @param addQuot æ¯å¦æ·»å åå¼å· |
| | | * @return |
| | | */ |
| | | public StringBuilder createBuilder(String field, String str, boolean not, boolean addQuot) { |
| | | StringBuilder sb = new StringBuilder(field).append(":("); |
| | | if (not) { |
| | | sb.append(" NOT "); |
| | | } |
| | | this.addQuotEffect(sb, str, addQuot); |
| | | return sb; |
| | | } |
| | | |
| | | public QueryStringBuilder and(String str) { |
| | | return this.and(str, true); |
| | | } |
| | | |
| | | public QueryStringBuilder and(String str, boolean addQuot) { |
| | | builder.append(" AND "); |
| | | this.addQuot(str, addQuot); |
| | | return this; |
| | | } |
| | | |
| | | public QueryStringBuilder or(String str) { |
| | | return this.or(str, true); |
| | | } |
| | | |
| | | public QueryStringBuilder or(String str, boolean addQuot) { |
| | | builder.append(" OR "); |
| | | this.addQuot(str, addQuot); |
| | | return this; |
| | | } |
| | | |
| | | public QueryStringBuilder not(String str) { |
| | | return this.not(str, true); |
| | | } |
| | | |
| | | public QueryStringBuilder not(String str, boolean addQuot) { |
| | | builder.append(" NOT "); |
| | | this.addQuot(str, addQuot); |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * æ·»å åå¼å·ï¼æ¨¡ç³æ¥è¯¢ï¼ä¸è½å åå¼å·ï¼ |
| | | */ |
| | | private QueryStringBuilder addQuot(String str, boolean addQuot) { |
| | | return this.addQuotEffect(this.builder, str, addQuot); |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦å¨ä¸¤è¾¹å ä¸åå¼å· |
| | | * @param builder |
| | | * @param str |
| | | * @param addQuot |
| | | * @return |
| | | */ |
| | | private QueryStringBuilder addQuotEffect(StringBuilder builder, String str, boolean addQuot) { |
| | | if (addQuot) { |
| | | builder.append('"'); |
| | | } |
| | | builder.append(str); |
| | | if (addQuot) { |
| | | builder.append('"'); |
| | | } |
| | | return this; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return builder.append(")").toString(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.exception; |
| | | |
| | | public class JeecgBoot401Exception extends RuntimeException { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public JeecgBoot401Exception(String message){ |
| | | super(message); |
| | | } |
| | | |
| | | public JeecgBoot401Exception(Throwable cause) |
| | | { |
| | | super(cause); |
| | | } |
| | | |
| | | public JeecgBoot401Exception(String message, Throwable cause) |
| | | { |
| | | super(message,cause); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.exception; |
| | | |
| | | public class JeecgBootException extends RuntimeException { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public JeecgBootException(String message){ |
| | | super(message); |
| | | } |
| | | |
| | | public JeecgBootException(Throwable cause) |
| | | { |
| | | super(cause); |
| | | } |
| | | |
| | | public JeecgBootException(String message,Throwable cause) |
| | | { |
| | | super(message,cause); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.exception; |
| | | |
| | | import io.lettuce.core.RedisConnectionException; |
| | | import org.apache.shiro.authz.AuthorizationException; |
| | | import org.apache.shiro.authz.UnauthorizedException; |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.springframework.dao.DataIntegrityViolationException; |
| | | import org.springframework.dao.DuplicateKeyException; |
| | | import org.springframework.data.redis.connection.PoolException; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.web.HttpRequestMethodNotSupportedException; |
| | | import org.springframework.web.bind.annotation.ExceptionHandler; |
| | | import org.springframework.web.bind.annotation.ResponseStatus; |
| | | import org.springframework.web.bind.annotation.RestControllerAdvice; |
| | | import org.springframework.web.multipart.MaxUploadSizeExceededException; |
| | | import org.springframework.web.servlet.NoHandlerFoundException; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * å¼å¸¸å¤çå¨ |
| | | * |
| | | * @Author scott |
| | | * @Date 2019 |
| | | */ |
| | | @RestControllerAdvice |
| | | @Slf4j |
| | | public class JeecgBootExceptionHandler { |
| | | |
| | | /** |
| | | * å¤çèªå®ä¹å¼å¸¸ |
| | | */ |
| | | @ExceptionHandler(JeecgBootException.class) |
| | | public Result<?> handleJeecgBootException(JeecgBootException e){ |
| | | log.error(e.getMessage(), e); |
| | | return Result.error(e.getMessage()); |
| | | } |
| | | |
| | | /** |
| | | * å¤çèªå®ä¹å¼å¸¸ |
| | | */ |
| | | @ExceptionHandler(JeecgBoot401Exception.class) |
| | | @ResponseStatus(HttpStatus.UNAUTHORIZED) |
| | | public Result<?> handleJeecgBoot401Exception(JeecgBoot401Exception e){ |
| | | log.error(e.getMessage(), e); |
| | | return new Result(401,e.getMessage()); |
| | | } |
| | | |
| | | @ExceptionHandler(NoHandlerFoundException.class) |
| | | public Result<?> handlerNoFoundException(Exception e) { |
| | | log.error(e.getMessage(), e); |
| | | return Result.error(404, "è·¯å¾ä¸åå¨ï¼è¯·æ£æ¥è·¯å¾æ¯å¦æ£ç¡®"); |
| | | } |
| | | |
| | | @ExceptionHandler(DuplicateKeyException.class) |
| | | public Result<?> handleDuplicateKeyException(DuplicateKeyException e){ |
| | | log.error(e.getMessage(), e); |
| | | return Result.error("æ°æ®åºä¸å·²åå¨è¯¥è®°å½"); |
| | | } |
| | | |
| | | @ExceptionHandler({UnauthorizedException.class, AuthorizationException.class}) |
| | | public Result<?> handleAuthorizationException(AuthorizationException e){ |
| | | log.error(e.getMessage(), e); |
| | | return Result.noauth("没ææéï¼è¯·è系管çåææ"); |
| | | } |
| | | |
| | | @ExceptionHandler(Exception.class) |
| | | public Result<?> handleException(Exception e){ |
| | | log.error(e.getMessage(), e); |
| | | return Result.error("æä½å¤±è´¥ï¼"+e.getMessage()); |
| | | } |
| | | |
| | | /** |
| | | * @Author æ¿è¾ |
| | | * @param e |
| | | * @return |
| | | */ |
| | | @ExceptionHandler(HttpRequestMethodNotSupportedException.class) |
| | | public Result<?> HttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e){ |
| | | StringBuffer sb = new StringBuffer(); |
| | | sb.append("䏿¯æ"); |
| | | sb.append(e.getMethod()); |
| | | sb.append("è¯·æ±æ¹æ³ï¼"); |
| | | sb.append("æ¯æä»¥ä¸"); |
| | | String [] methods = e.getSupportedMethods(); |
| | | if(methods!=null){ |
| | | for(String str:methods){ |
| | | sb.append(str); |
| | | sb.append("ã"); |
| | | } |
| | | } |
| | | log.error(sb.toString(), e); |
| | | //return Result.error("没ææéï¼è¯·è系管çåææ"); |
| | | return Result.error(405,sb.toString()); |
| | | } |
| | | |
| | | /** |
| | | * springé»è®¤ä¸ä¼ 大å°100MB è¶
åºå¤§å°æè·å¼å¸¸MaxUploadSizeExceededException |
| | | */ |
| | | @ExceptionHandler(MaxUploadSizeExceededException.class) |
| | | public Result<?> handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) { |
| | | log.error(e.getMessage(), e); |
| | | return Result.error("æä»¶å¤§å°è¶
åº10MBéå¶, 请å缩æéä½æä»¶è´¨é! "); |
| | | } |
| | | |
| | | @ExceptionHandler(DataIntegrityViolationException.class) |
| | | public Result<?> handleDataIntegrityViolationException(DataIntegrityViolationException e) { |
| | | log.error(e.getMessage(), e); |
| | | return Result.error("åæ®µå¤ªé¿,è¶
åºæ°æ®åºå段çé¿åº¦"); |
| | | } |
| | | |
| | | @ExceptionHandler(PoolException.class) |
| | | public Result<?> handlePoolException(PoolException e) { |
| | | log.error(e.getMessage(), e); |
| | | return Result.error("Redis è¿æ¥å¼å¸¸!"); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.handler; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | |
| | | /** |
| | | * å¡«å¼è§åæ¥å£ |
| | | * |
| | | * @author Yan_ä¸ |
| | | * å¦é使ç¨å¡«å¼è§ååè½ï¼è§åå®ç°ç±»å¿
é¡»å®ç°æ¤æ¥å£ |
| | | */ |
| | | public interface IFillRuleHandler { |
| | | |
| | | /** |
| | | * @param params 页é¢é
ç½®åºå®åæ° |
| | | * @param formData å¨æè¡¨ååæ° |
| | | * @return |
| | | */ |
| | | public Object execute(JSONObject params, JSONObject formData); |
| | | |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.base.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.beanutils.PropertyUtils; |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.system.query.QueryGenerator; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.jeecgframework.poi.excel.ExcelImportUtil; |
| | | import org.jeecgframework.poi.excel.def.NormalExcelConstants; |
| | | import org.jeecgframework.poi.excel.entity.ExportParams; |
| | | import org.jeecgframework.poi.excel.entity.ImportParams; |
| | | import org.jeecgframework.poi.excel.entity.enmus.ExcelType; |
| | | import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import org.springframework.web.multipart.MultipartHttpServletRequest; |
| | | import org.springframework.web.servlet.ModelAndView; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @Description: Controlleråºç±» |
| | | * @Author: dangzhenghui@163.com |
| | | * @Date: 2019-4-21 8:13 |
| | | * @Version: 1.0 |
| | | */ |
| | | @Slf4j |
| | | public class JeecgController<T, S extends IService<T>> { |
| | | //issues/2933 JeecgController注å
¥serviceæ¶æ¹ç¨protected修饰ï¼è½é¿å
éå¤å¼ç¨service |
| | | @Autowired |
| | | protected S service; |
| | | |
| | | @Value("${jeecg.path.upload}") |
| | | private String upLoadPath; |
| | | /** |
| | | * 导åºexcel |
| | | * |
| | | * @param request |
| | | */ |
| | | protected ModelAndView exportXls(HttpServletRequest request, T object, Class<T> clazz, String title) { |
| | | // Step.1 ç»è£
æ¥è¯¢æ¡ä»¶ |
| | | QueryWrapper<T> queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap()); |
| | | LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
| | | |
| | | // Step.2 è·åå¯¼åºæ°æ® |
| | | List<T> pageList = service.list(queryWrapper); |
| | | List<T> exportList = null; |
| | | |
| | | // è¿æ»¤é䏿°æ® |
| | | String selections = request.getParameter("selections"); |
| | | if (oConvertUtils.isNotEmpty(selections)) { |
| | | List<String> selectionList = Arrays.asList(selections.split(",")); |
| | | exportList = pageList.stream().filter(item -> selectionList.contains(getId(item))).collect(Collectors.toList()); |
| | | } else { |
| | | exportList = pageList; |
| | | } |
| | | |
| | | // Step.3 AutoPoi 导åºExcel |
| | | ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); |
| | | mv.addObject(NormalExcelConstants.FILE_NAME, title); //æ¤å¤è®¾ç½®çfilenameæ æ ,å端ä¼éæ´æ°è®¾ç½®ä¸ä¸ |
| | | mv.addObject(NormalExcelConstants.CLASS, clazz); |
| | | //update-begin--Author:liusq Date:20210126 forï¼å¾çå¯¼åºæ¥éï¼ImageBasePathæªè®¾ç½®-------------------- |
| | | ExportParams exportParams=new ExportParams(title + "æ¥è¡¨", "导åºäºº:" + sysUser.getRealname(), title); |
| | | exportParams.setImageBasePath(upLoadPath); |
| | | //update-end--Author:liusq Date:20210126 forï¼å¾çå¯¼åºæ¥éï¼ImageBasePathæªè®¾ç½®---------------------- |
| | | mv.addObject(NormalExcelConstants.PARAMS,exportParams); |
| | | mv.addObject(NormalExcelConstants.DATA_LIST, exportList); |
| | | return mv; |
| | | } |
| | | /** |
| | | * æ ¹æ®æ¯é¡µsheetæ°é导åºå¤sheet |
| | | * |
| | | * @param request |
| | | * @param object å®ä½ç±» |
| | | * @param clazz å®ä½ç±»class |
| | | * @param title æ é¢ |
| | | * @param exportFields 导åºå段èªå®ä¹ |
| | | * @param pageNum æ¯ä¸ªsheetçæ°æ®æ¡æ° |
| | | * @param request |
| | | */ |
| | | protected ModelAndView exportXlsSheet(HttpServletRequest request, T object, Class<T> clazz, String title,String exportFields,Integer pageNum) { |
| | | // Step.1 ç»è£
æ¥è¯¢æ¡ä»¶ |
| | | QueryWrapper<T> queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap()); |
| | | LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
| | | // Step.2 计ç®å页sheetæ°æ® |
| | | double total = service.count(); |
| | | int count = (int)Math.ceil(total/pageNum); |
| | | // Step.3 å¤sheetå¤ç |
| | | List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>(); |
| | | for (int i = 1; i <=count ; i++) { |
| | | Page<T> page = new Page<T>(i, pageNum); |
| | | IPage<T> pageList = service.page(page, queryWrapper); |
| | | List<T> records = pageList.getRecords(); |
| | | List<T> exportList = null; |
| | | // è¿æ»¤é䏿°æ® |
| | | String selections = request.getParameter("selections"); |
| | | if (oConvertUtils.isNotEmpty(selections)) { |
| | | List<String> selectionList = Arrays.asList(selections.split(",")); |
| | | exportList = records.stream().filter(item -> selectionList.contains(getId(item))).collect(Collectors.toList()); |
| | | } else { |
| | | exportList = records; |
| | | } |
| | | Map<String, Object> map = new HashMap<String, Object>(); |
| | | ExportParams exportParams=new ExportParams(title + "æ¥è¡¨", "导åºäºº:" + sysUser.getRealname(), title+i,upLoadPath); |
| | | exportParams.setType(ExcelType.XSSF); |
| | | //map.put("title",exportParams);//è¡¨æ ¼Title |
| | | map.put(NormalExcelConstants.PARAMS,exportParams);//è¡¨æ ¼Title |
| | | map.put(NormalExcelConstants.CLASS,clazz);//è¡¨æ ¼å¯¹åºå®ä½ |
| | | map.put(NormalExcelConstants.DATA_LIST, exportList);//æ°æ®éå |
| | | listMap.add(map); |
| | | } |
| | | // Step.4 AutoPoi 导åºExcel |
| | | ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); |
| | | mv.addObject(NormalExcelConstants.FILE_NAME, title); //æ¤å¤è®¾ç½®çfilenameæ æ ,å端ä¼éæ´æ°è®¾ç½®ä¸ä¸ |
| | | mv.addObject(NormalExcelConstants.MAP_LIST, listMap); |
| | | return mv; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ ¹æ®æé导åºexcelï¼ä¼ å
¥å¯¼åºåæ®µåæ° |
| | | * |
| | | * @param request |
| | | */ |
| | | protected ModelAndView exportXls(HttpServletRequest request, T object, Class<T> clazz, String title,String exportFields) { |
| | | ModelAndView mv = this.exportXls(request,object,clazz,title); |
| | | mv.addObject(NormalExcelConstants.EXPORT_FIELDS,exportFields); |
| | | return mv; |
| | | } |
| | | |
| | | /** |
| | | * è·å对象ID |
| | | * |
| | | * @return |
| | | */ |
| | | private String getId(T item) { |
| | | try { |
| | | return PropertyUtils.getProperty(item, "id").toString(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * éè¿excel导å
¥æ°æ® |
| | | * |
| | | * @param request |
| | | * @param response |
| | | * @return |
| | | */ |
| | | protected Result<?> importExcel(HttpServletRequest request, HttpServletResponse response, Class<T> clazz) { |
| | | MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; |
| | | Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); |
| | | for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { |
| | | MultipartFile file = entity.getValue();// è·åä¸ä¼ æä»¶å¯¹è±¡ |
| | | ImportParams params = new ImportParams(); |
| | | params.setTitleRows(2); |
| | | params.setHeadRows(1); |
| | | params.setNeedSave(true); |
| | | try { |
| | | List<T> list = ExcelImportUtil.importExcel(file.getInputStream(), clazz, params); |
| | | //update-begin-author:taoyan date:20190528 for:æ¹éæå
¥æ°æ® |
| | | long start = System.currentTimeMillis(); |
| | | service.saveBatch(list); |
| | | //400æ¡ saveBatchæ¶èæ¶é´1592æ¯«ç§ å¾ªç¯æå
¥æ¶èæ¶é´1947æ¯«ç§ |
| | | //1200æ¡ saveBatchæ¶èæ¶é´3687æ¯«ç§ å¾ªç¯æå
¥æ¶èæ¶é´5212æ¯«ç§ |
| | | log.info("æ¶èæ¶é´" + (System.currentTimeMillis() - start) + "毫ç§"); |
| | | //update-end-author:taoyan date:20190528 for:æ¹éæå
¥æ°æ® |
| | | return Result.ok("æä»¶å¯¼å
¥æåï¼æ°æ®è¡æ°ï¼" + list.size()); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(), e); |
| | | return Result.error("æä»¶å¯¼å
¥å¤±è´¥:" + e.getMessage()); |
| | | } finally { |
| | | try { |
| | | file.getInputStream().close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | return Result.error("æä»¶å¯¼å
¥å¤±è´¥ï¼"); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.base.entity; |
| | | |
| | | import java.io.Serializable; |
| | | import org.jeecgframework.poi.excel.annotation.Excel; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | /** |
| | | * @Description: Entityåºç±» |
| | | * @Author: dangzhenghui@163.com |
| | | * @Date: 2019-4-28 |
| | | * @Version: 1.1 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @Accessors(chain = true) |
| | | public class JeecgEntity implements Serializable { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** ID */ |
| | | @TableId(type = IdType.ASSIGN_ID) |
| | | @ApiModelProperty(value = "ID") |
| | | private java.lang.String id; |
| | | /** å建人 */ |
| | | @ApiModelProperty(value = "å建人") |
| | | @Excel(name = "å建人", width = 15) |
| | | private java.lang.String createBy; |
| | | /** å建æ¶é´ */ |
| | | @ApiModelProperty(value = "å建æ¶é´") |
| | | @Excel(name = "å建æ¶é´", width = 20, format = "yyyy-MM-dd HH:mm:ss") |
| | | @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private java.util.Date createTime; |
| | | /** æ´æ°äºº */ |
| | | @ApiModelProperty(value = "æ´æ°äºº") |
| | | @Excel(name = "æ´æ°äºº", width = 15) |
| | | private java.lang.String updateBy; |
| | | /** æ´æ°æ¶é´ */ |
| | | @ApiModelProperty(value = "æ´æ°æ¶é´") |
| | | @Excel(name = "æ´æ°æ¶é´", width = 20, format = "yyyy-MM-dd HH:mm:ss") |
| | | @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private java.util.Date updateTime; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.base.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | /** |
| | | * @Description: Serviceåºç±» |
| | | * @Author: dangzhenghui@163.com |
| | | * @Date: 2019-4-21 8:13 |
| | | * @Version: 1.0 |
| | | */ |
| | | public interface JeecgService<T> extends IService<T> { |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.base.service.impl; |
| | | |
| | | import org.jeecg.common.system.base.entity.JeecgEntity; |
| | | import org.jeecg.common.system.base.service.JeecgService; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * @Description: ServiceImplåºç±» |
| | | * @Author: dangzhenghui@163.com |
| | | * @Date: 2019-4-21 8:13 |
| | | * @Version: 1.0 |
| | | */ |
| | | @Slf4j |
| | | public class JeecgServiceImpl<M extends BaseMapper<T>, T extends JeecgEntity> extends ServiceImpl<M, T> implements JeecgService<T> { |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.query; |
| | | |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | |
| | | /** |
| | | * æ¥è¯¢é¾æ¥è§å |
| | | * |
| | | * @Author Sunjianlei |
| | | */ |
| | | public enum MatchTypeEnum { |
| | | |
| | | AND("AND"), |
| | | OR("OR"); |
| | | |
| | | private String value; |
| | | |
| | | MatchTypeEnum(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | public static MatchTypeEnum getByValue(Object value) { |
| | | if (oConvertUtils.isEmpty(value)) { |
| | | return null; |
| | | } |
| | | return getByValue(value.toString()); |
| | | } |
| | | |
| | | public static MatchTypeEnum getByValue(String value) { |
| | | if (oConvertUtils.isEmpty(value)) { |
| | | return null; |
| | | } |
| | | for (MatchTypeEnum val : values()) { |
| | | if (val.getValue().toLowerCase().equals(value.toLowerCase())) { |
| | | return val; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.query; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | public class QueryCondition implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 4740166316629191651L; |
| | | |
| | | private String field; |
| | | /** ç»ä»¶çç±»åï¼ä¾å¦ï¼inputãselectãradioï¼ */ |
| | | private String type; |
| | | /** |
| | | * 对åºçæ°æ®åºå段çç±»å |
| | | * æ¯æï¼intãbigDecimalãshortãlongãfloatãdoubleãboolean |
| | | */ |
| | | private String dbType; |
| | | private String rule; |
| | | private String val; |
| | | |
| | | public String getField() { |
| | | return field; |
| | | } |
| | | |
| | | public void setField(String field) { |
| | | this.field = field; |
| | | } |
| | | |
| | | public String getType() { |
| | | return type; |
| | | } |
| | | |
| | | public void setType(String type) { |
| | | this.type = type; |
| | | } |
| | | |
| | | public String getDbType() { |
| | | return dbType; |
| | | } |
| | | |
| | | public void setDbType(String dbType) { |
| | | this.dbType = dbType; |
| | | } |
| | | |
| | | public String getRule() { |
| | | return rule; |
| | | } |
| | | |
| | | public void setRule(String rule) { |
| | | this.rule = rule; |
| | | } |
| | | |
| | | public String getVal() { |
| | | return val; |
| | | } |
| | | |
| | | public void setVal(String val) { |
| | | this.val = val; |
| | | } |
| | | |
| | | @Override |
| | | public String toString(){ |
| | | StringBuffer sb =new StringBuffer(); |
| | | if(field == null || "".equals(field)){ |
| | | return ""; |
| | | } |
| | | sb.append(this.field).append(" ").append(this.rule).append(" ").append(this.type).append(" ").append(this.dbType).append(" ").append(this.val); |
| | | return sb.toString(); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.query; |
| | | |
| | | import java.beans.PropertyDescriptor; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.lang.reflect.Field; |
| | | import java.math.BigDecimal; |
| | | import java.net.URLDecoder; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import org.apache.commons.beanutils.PropertyUtils; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.DataBaseConstant; |
| | | import org.jeecg.common.system.util.JeecgDataAutorUtils; |
| | | import org.jeecg.common.system.util.JwtUtil; |
| | | import org.jeecg.common.system.vo.SysPermissionDataRuleModel; |
| | | import org.jeecg.common.util.CommonUtils; |
| | | import org.jeecg.common.util.DateUtils; |
| | | import org.jeecg.common.util.SqlInjectionUtil; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.util.NumberUtils; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.annotation.DbType; |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | @Slf4j |
| | | public class QueryGenerator { |
| | | public static final String SQL_RULES_COLUMN = "SQL_RULES_COLUMN"; |
| | | |
| | | private static final String BEGIN = "_begin"; |
| | | private static final String END = "_end"; |
| | | /** |
| | | * æ°åç±»ååæ®µï¼æ¼æ¥æ¤åç¼ æ¥åå¤å¼åæ° |
| | | */ |
| | | private static final String MULTI = "_MultiString"; |
| | | private static final String STAR = "*"; |
| | | private static final String COMMA = ","; |
| | | /** |
| | | * æ¥è¯¢ éå·è½¬ä¹ç¬¦ ç¸å½äºä¸ä¸ªéå·ãä½åºã |
| | | */ |
| | | public static final String QUERY_COMMA_ESCAPE = "++"; |
| | | private static final String NOT_EQUAL = "!"; |
| | | /**页é¢å¸¦æè§å弿¥è¯¢ï¼ç©ºæ ¼ä½ä¸ºåé符*/ |
| | | private static final String QUERY_SEPARATE_KEYWORD = " "; |
| | | /**é«çº§æ¥è¯¢åç«¯ä¼ æ¥çåæ°å*/ |
| | | private static final String SUPER_QUERY_PARAMS = "superQueryParams"; |
| | | /** é«çº§æ¥è¯¢åç«¯ä¼ æ¥çæ¼æ¥æ¹å¼åæ°å */ |
| | | private static final String SUPER_QUERY_MATCH_TYPE = "superQueryMatchType"; |
| | | /** åå¼å· */ |
| | | public static final String SQL_SQ = "'"; |
| | | /**æåºå*/ |
| | | private static final String ORDER_COLUMN = "column"; |
| | | /**æåºæ¹å¼*/ |
| | | private static final String ORDER_TYPE = "order"; |
| | | private static final String ORDER_TYPE_ASC = "ASC"; |
| | | |
| | | /**mysql æ¨¡ç³æ¥è¯¢ä¹ç¹æ®å符ä¸å线 ï¼_ã\ï¼*/ |
| | | public static final String LIKE_MYSQL_SPECIAL_STRS = "_,%"; |
| | | |
| | | /**æ¶é´æ ¼å¼å */ |
| | | private static final ThreadLocal<SimpleDateFormat> local = new ThreadLocal<SimpleDateFormat>(); |
| | | private static SimpleDateFormat getTime(){ |
| | | SimpleDateFormat time = local.get(); |
| | | if(time == null){ |
| | | time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | local.set(time); |
| | | } |
| | | return time; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¥è¯¢æ¡ä»¶æé å¨QueryWrapperå®ä¾ éç¨æ¥è¯¢æ¡ä»¶å·²è¢«å°è£
宿 |
| | | * @param searchObj æ¥è¯¢å®ä½ |
| | | * @param parameterMap request.getParameterMap() |
| | | * @return QueryWrapperå®ä¾ |
| | | */ |
| | | public static <T> QueryWrapper<T> initQueryWrapper(T searchObj,Map<String, String[]> parameterMap){ |
| | | long start = System.currentTimeMillis(); |
| | | QueryWrapper<T> queryWrapper = new QueryWrapper<T>(); |
| | | installMplus(queryWrapper, searchObj, parameterMap); |
| | | log.debug("---æ¥è¯¢æ¡ä»¶æé å¨åå§å宿,èæ¶:"+(System.currentTimeMillis()-start)+"毫ç§----"); |
| | | return queryWrapper; |
| | | } |
| | | |
| | | /** |
| | | * ç»è£
Mybatis Plus æ¥è¯¢æ¡ä»¶ |
| | | * <p>ä½¿ç¨æ¤æ¹æ³ éè¦æå¦ä¸å ç¹æ³¨æ: |
| | | * <br>1.使ç¨QueryWrapper èéLambdaQueryWrapper; |
| | | * <br>2.å®ä¾åQueryWrapperæ¶ä¸å¯å°å®ä½ä¼ å
¥åæ° |
| | | * <br>é误示ä¾:å¦QueryWrapper<JeecgDemo> queryWrapper = new QueryWrapper<JeecgDemo>(jeecgDemo); |
| | | * <br>æ£ç¡®ç¤ºä¾:QueryWrapper<JeecgDemo> queryWrapper = new QueryWrapper<JeecgDemo>(); |
| | | * <br>3.ä¹å¯ä»¥ä¸ä½¿ç¨è¿ä¸ªæ¹æ³ç´æ¥è°ç¨ {@link #initQueryWrapper}ç´æ¥è·åå®ä¾ |
| | | */ |
| | | private static void installMplus(QueryWrapper<?> queryWrapper,Object searchObj,Map<String, String[]> parameterMap) { |
| | | |
| | | /* |
| | | * 注æ:æéæ¥è¯¢ç±å端é
ç½®æ°æ®è§å å½ä¸ä¸ªäººæå¤ä¸ªæå±é¨é¨æ¶å å¯ä»¥å¨è§åé
ç½®å
嫿¡ä»¶ orgCode å
å« #{sys_org_code} |
| | | 使¯ä¸æ¯æå¨èªå®ä¹SQLä¸åorgCode in #{sys_org_code} |
| | | å½ä¸ä¸ªäººåªæä¸ä¸ªé¨é¨ å°±ç´æ¥é
ç½®çäºæ¡ä»¶: orgCode çäº #{sys_org_code} æè
é
ç½®èªå®ä¹SQL: orgCode = '#{sys_org_code}' |
| | | */ |
| | | |
| | | //åºé´æ¡ä»¶ç»è£
æ¨¡ç³æ¥è¯¢ é«çº§æ¥è¯¢ç»è£
ç®åæåº æéæ¥è¯¢ |
| | | PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(searchObj); |
| | | Map<String,SysPermissionDataRuleModel> ruleMap = getRuleMap(); |
| | | |
| | | //æéè§åèªå®ä¹SQLè¡¨è¾¾å¼ |
| | | for (String c : ruleMap.keySet()) { |
| | | if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ |
| | | queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); |
| | | } |
| | | } |
| | | |
| | | String name, type, column; |
| | | // update-begin--Author:taoyan Date:20200923 forï¼issues/1671 妿忮µå 注解äº@TableField(exist = false),ä¸èµ°DBæ¥è¯¢------- |
| | | //å®ä¹å®ä½åæ®µåæ°æ®åºå段åç§°çæ å° é«çº§æ¥è¯¢ä¸ åªè½è·åå®ä½å段 å¦æè®¾ç½®TableField注解 é£ä¹æ¥è¯¢æ¡ä»¶ä¼åºé®é¢ |
| | | Map<String,String> fieldColumnMap = new HashMap<String,String>(); |
| | | for (int i = 0; i < origDescriptors.length; i++) { |
| | | //aliasName = origDescriptors[i].getName(); mybatis ä¸åå¨å®ä½å±æ§ ä¸ç¨å¤çå«åçæ
åµ |
| | | name = origDescriptors[i].getName(); |
| | | type = origDescriptors[i].getPropertyType().toString(); |
| | | try { |
| | | if (judgedIsUselessField(name)|| !PropertyUtils.isReadable(searchObj, name)) { |
| | | continue; |
| | | } |
| | | |
| | | Object value = PropertyUtils.getSimpleProperty(searchObj, name); |
| | | column = getTableFieldName(searchObj.getClass(), name); |
| | | if(column==null){ |
| | | //column为nullåªæä¸ç§æ
åµ é£å°±æ¯ æ·»å äºæ³¨è§£@TableField(exist = false) åç»é½ä¸ç¨å¤çäº |
| | | continue; |
| | | } |
| | | fieldColumnMap.put(name,column); |
| | | //æ°æ®æéæ¥è¯¢ |
| | | if(ruleMap.containsKey(name)) { |
| | | addRuleToQueryWrapper(ruleMap.get(name), column, origDescriptors[i].getPropertyType(), queryWrapper); |
| | | } |
| | | //åºé´æ¥è¯¢ |
| | | doIntervalQuery(queryWrapper, parameterMap, type, name, column); |
| | | //夿åå¼ åæ°å¸¦ä¸åæ è¯å符串 èµ°ä¸åçæ¥è¯¢ |
| | | //TODO è¿ç§åå带éå·çæ¯æåå²åæ¨¡ç³æ¥è¯¢éè¦å¦ 使å¤éåæ®µçæ¥è¯¢çæ |
| | | if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) { |
| | | String multiLikeval = value.toString().replace(",,", COMMA); |
| | | String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA); |
| | | final String field = oConvertUtils.camelToUnderline(column); |
| | | if(vals.length>1) { |
| | | queryWrapper.and(j -> { |
| | | j = j.like(field,vals[0]); |
| | | for (int k=1;k<vals.length;k++) { |
| | | j = j.or().like(field,vals[k]); |
| | | } |
| | | //return j; |
| | | }); |
| | | }else { |
| | | queryWrapper.and(j -> j.like(field,vals[0])); |
| | | } |
| | | }else { |
| | | //æ ¹æ®åæ°å¼å¸¦ä»ä¹å
³é®åç¬¦ä¸²å¤æèµ°ä»ä¹ç±»åçæ¥è¯¢ |
| | | QueryRuleEnum rule = convert2Rule(value); |
| | | value = replaceValue(rule,value); |
| | | // add -begin æ·»å å¤æä¸ºå符串æ¶è®¾ä¸ºå
¨æ¨¡ç³æ¥è¯¢ |
| | | //if( (rule==null || QueryRuleEnum.EQ.equals(rule)) && "class java.lang.String".equals(type)) { |
| | | // å¯ä»¥è®¾ç½®å·¦å³æ¨¡ç³æå
¨æ¨¡ç³ï¼å 人èå¼ |
| | | //rule = QueryRuleEnum.LIKE; |
| | | //} |
| | | // add -end æ·»å å¤æä¸ºå符串æ¶è®¾ä¸ºå
¨æ¨¡ç³æ¥è¯¢ |
| | | addEasyQuery(queryWrapper, column, rule, value); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(), e); |
| | | } |
| | | } |
| | | // æåºé»è¾ å¤ç |
| | | doMultiFieldsOrder(queryWrapper, parameterMap); |
| | | |
| | | //é«çº§æ¥è¯¢ |
| | | doSuperQuery(queryWrapper, parameterMap, fieldColumnMap); |
| | | // update-end--Author:taoyan Date:20200923 forï¼issues/1671 妿忮µå 注解äº@TableField(exist = false),ä¸èµ°DBæ¥è¯¢------- |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * åºé´æ¥è¯¢ |
| | | * @param queryWrapper query对象 |
| | | * @param parameterMap åæ°map |
| | | * @param type åæ®µç±»å |
| | | * @param filedName åæ®µåç§° |
| | | * @param columnName ååç§° |
| | | */ |
| | | private static void doIntervalQuery(QueryWrapper<?> queryWrapper, Map<String, String[]> parameterMap, String type, String filedName, String columnName) throws ParseException { |
| | | // æ·»å 夿æ¯å¦æåºé´å¼ |
| | | String endValue = null,beginValue = null; |
| | | if (parameterMap != null && parameterMap.containsKey(filedName + BEGIN)) { |
| | | beginValue = parameterMap.get(filedName + BEGIN)[0].trim(); |
| | | addQueryByRule(queryWrapper, columnName, type, beginValue, QueryRuleEnum.GE); |
| | | |
| | | } |
| | | if (parameterMap != null && parameterMap.containsKey(filedName + END)) { |
| | | endValue = parameterMap.get(filedName + END)[0].trim(); |
| | | addQueryByRule(queryWrapper, columnName, type, endValue, QueryRuleEnum.LE); |
| | | } |
| | | //å¤å¼æ¥è¯¢ |
| | | if (parameterMap != null && parameterMap.containsKey(filedName + MULTI)) { |
| | | endValue = parameterMap.get(filedName + MULTI)[0].trim(); |
| | | addQueryByRule(queryWrapper, columnName.replace(MULTI,""), type, endValue, QueryRuleEnum.IN); |
| | | } |
| | | } |
| | | |
| | | //å¤å段æåº TODO éè¦ä¿®æ¹å端 |
| | | private static void doMultiFieldsOrder(QueryWrapper<?> queryWrapper,Map<String, String[]> parameterMap) { |
| | | String column=null,order=null; |
| | | if(parameterMap!=null&& parameterMap.containsKey(ORDER_COLUMN)) { |
| | | column = parameterMap.get(ORDER_COLUMN)[0]; |
| | | } |
| | | if(parameterMap!=null&& parameterMap.containsKey(ORDER_TYPE)) { |
| | | order = parameterMap.get(ORDER_TYPE)[0]; |
| | | } |
| | | log.info("æåºè§å>>å:" + column + ",æåºæ¹å¼:" + order); |
| | | if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { |
| | | //åå
¸å段ï¼å»æåå
¸ç¿»è¯ææ¬åç¼ |
| | | if(column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { |
| | | column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX)); |
| | | } |
| | | //SQL注å
¥check |
| | | SqlInjectionUtil.filterContent(column); |
| | | |
| | | //update-begin--Author:scott Date:20210531 forï¼36 夿¡ä»¶æåºæ æé®é¢ä¿®æ£------- |
| | | // æåºè§åä¿®æ¹ |
| | | // å°ç°ææåº _ åç«¯ä¼ éæåºæ¡ä»¶{....,column: 'column1,column2',order: 'desc'} ç¿»è¯æsql "column1,column2 desc" |
| | | // ä¿®æ¹ä¸º _ åç«¯ä¼ éæåºæ¡ä»¶{....,column: 'column1,column2',order: 'desc'} ç¿»è¯æsql "column1 desc,column2 desc" |
| | | if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) { |
| | | //queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); |
| | | String columnStr = oConvertUtils.camelToUnderline(column); |
| | | String[] columnArray = columnStr.split(","); |
| | | queryWrapper.orderByAsc(Arrays.asList(columnArray)); |
| | | } else { |
| | | //queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); |
| | | String columnStr = oConvertUtils.camelToUnderline(column); |
| | | String[] columnArray = columnStr.split(","); |
| | | queryWrapper.orderByDesc(Arrays.asList(columnArray)); |
| | | } |
| | | //update-end--Author:scott Date:20210531 forï¼36 夿¡ä»¶æåºæ æé®é¢ä¿®æ£------- |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * é«çº§æ¥è¯¢ |
| | | * @param queryWrapper æ¥è¯¢å¯¹è±¡ |
| | | * @param parameterMap åæ°å¯¹è±¡ |
| | | * @param fieldColumnMap å®ä½åæ®µåæ°æ®åºå对åºçmap |
| | | */ |
| | | private static void doSuperQuery(QueryWrapper<?> queryWrapper,Map<String, String[]> parameterMap, Map<String,String> fieldColumnMap) { |
| | | if(parameterMap!=null&& parameterMap.containsKey(SUPER_QUERY_PARAMS)){ |
| | | String superQueryParams = parameterMap.get(SUPER_QUERY_PARAMS)[0]; |
| | | String superQueryMatchType = parameterMap.get(SUPER_QUERY_MATCH_TYPE) != null ? parameterMap.get(SUPER_QUERY_MATCH_TYPE)[0] : MatchTypeEnum.AND.getValue(); |
| | | MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); |
| | | // update-begin--Author:sunjianlei Date:20200325 forï¼é«çº§æ¥è¯¢çæ¡ä»¶è¦ç¨æ¬å·æ¬èµ·æ¥ï¼é²æ¢åç¨æ·çå
¶ä»æ¡ä»¶å²çª ------- |
| | | try { |
| | | superQueryParams = URLDecoder.decode(superQueryParams, "UTF-8"); |
| | | List<QueryCondition> conditions = JSON.parseArray(superQueryParams, QueryCondition.class); |
| | | if (conditions == null || conditions.size() == 0) { |
| | | return; |
| | | } |
| | | log.info("---é«çº§æ¥è¯¢åæ°-->" + conditions.toString()); |
| | | queryWrapper.and(andWrapper -> { |
| | | for (int i = 0; i < conditions.size(); i++) { |
| | | QueryCondition rule = conditions.get(i); |
| | | if (oConvertUtils.isNotEmpty(rule.getField()) |
| | | && oConvertUtils.isNotEmpty(rule.getRule()) |
| | | && oConvertUtils.isNotEmpty(rule.getVal())) { |
| | | |
| | | log.debug("SuperQuery ==> " + rule.toString()); |
| | | |
| | | //update-begin-author:taoyan date:20201228 for: ãé«çº§æ¥è¯¢ã oracle æ¥æçäºæ¥è¯¢æ¥é |
| | | Object queryValue = rule.getVal(); |
| | | if("date".equals(rule.getType())){ |
| | | queryValue = DateUtils.str2Date(rule.getVal(),DateUtils.date_sdf.get()); |
| | | }else if("datetime".equals(rule.getType())){ |
| | | queryValue = DateUtils.str2Date(rule.getVal(), DateUtils.datetimeFormat.get()); |
| | | } |
| | | // update-begin--author:sunjianlei date:20210702 forï¼ã/issues/I3VR8Eãé«çº§æ¥è¯¢æ²¡æç±»å转æ¢ï¼æ¥è¯¢åæ°é½æ¯å符串类å ---- |
| | | String dbType = rule.getDbType(); |
| | | if (oConvertUtils.isNotEmpty(dbType)) { |
| | | try { |
| | | String valueStr = String.valueOf(queryValue); |
| | | switch (dbType.toLowerCase().trim()) { |
| | | case "int": |
| | | queryValue = Integer.parseInt(valueStr); |
| | | break; |
| | | case "bigdecimal": |
| | | queryValue = new BigDecimal(valueStr); |
| | | break; |
| | | case "short": |
| | | queryValue = Short.parseShort(valueStr); |
| | | break; |
| | | case "long": |
| | | queryValue = Long.parseLong(valueStr); |
| | | break; |
| | | case "float": |
| | | queryValue = Float.parseFloat(valueStr); |
| | | break; |
| | | case "double": |
| | | queryValue = Double.parseDouble(valueStr); |
| | | break; |
| | | case "boolean": |
| | | queryValue = Boolean.parseBoolean(valueStr); |
| | | break; |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("é«çº§æ¥è¯¢å¼è½¬æ¢å¤±è´¥ï¼", e); |
| | | } |
| | | } |
| | | // update-begin--author:sunjianlei date:20210702 forï¼ã/issues/I3VR8Eãé«çº§æ¥è¯¢æ²¡æç±»å转æ¢ï¼æ¥è¯¢åæ°é½æ¯å符串类å ---- |
| | | addEasyQuery(andWrapper, fieldColumnMap.get(rule.getField()), QueryRuleEnum.getByValue(rule.getRule()), queryValue); |
| | | //update-end-author:taoyan date:20201228 for: ãé«çº§æ¥è¯¢ã oracle æ¥æçäºæ¥è¯¢æ¥é |
| | | |
| | | // å¦ææ¼æ¥æ¹å¼æ¯ORï¼å°±æ¼æ¥OR |
| | | if (MatchTypeEnum.OR == matchType && i < (conditions.size() - 1)) { |
| | | andWrapper.or(); |
| | | } |
| | | } |
| | | } |
| | | //return andWrapper; |
| | | }); |
| | | } catch (UnsupportedEncodingException e) { |
| | | log.error("--é«çº§æ¥è¯¢åæ°è½¬ç 失败ï¼" + superQueryParams, e); |
| | | } catch (Exception e) { |
| | | log.error("--é«çº§æ¥è¯¢æ¼æ¥å¤±è´¥ï¼" + e.getMessage()); |
| | | e.printStackTrace(); |
| | | } |
| | | // update-end--Author:sunjianlei Date:20200325 forï¼é«çº§æ¥è¯¢çæ¡ä»¶è¦ç¨æ¬å·æ¬èµ·æ¥ï¼é²æ¢åç¨æ·çå
¶ä»æ¡ä»¶å²çª ------- |
| | | } |
| | | //log.info(" superQuery getCustomSqlSegment: "+ queryWrapper.getCustomSqlSegment()); |
| | | } |
| | | /** |
| | | * æ ¹æ®æä¼ çå¼ è½¬åæå¯¹åºçæ¯è¾æ¹å¼ |
| | | * æ¯æ><= like in ! |
| | | * @param value |
| | | * @return |
| | | */ |
| | | public static QueryRuleEnum convert2Rule(Object value) { |
| | | // é¿å
ç©ºæ°æ® |
| | | // update-begin-author:taoyan date:20210629 for: æ¥è¯¢æ¡ä»¶è¾å
¥ç©ºæ ¼å¯¼è´return nullåç»å¤æå¯¼è´æåºnullå¼å¸¸ |
| | | if (value == null) { |
| | | return QueryRuleEnum.EQ; |
| | | } |
| | | String val = (value + "").toString().trim(); |
| | | if (val.length() == 0) { |
| | | return QueryRuleEnum.EQ; |
| | | } |
| | | // update-end-author:taoyan date:20210629 for: æ¥è¯¢æ¡ä»¶è¾å
¥ç©ºæ ¼å¯¼è´return nullåç»å¤æå¯¼è´æåºnullå¼å¸¸ |
| | | QueryRuleEnum rule =null; |
| | | |
| | | //update-begin--Author:scott Date:20190724 forï¼initQueryWrapperç»è£
sqlæ¥è¯¢æ¡ä»¶é误 #284------------------- |
| | | //TODO æ¤å¤è§åï¼åªéç¨äº le lt ge gt |
| | | // step 2 .>= =< |
| | | if (rule == null && val.length() >= 3) { |
| | | if(QUERY_SEPARATE_KEYWORD.equals(val.substring(2, 3))){ |
| | | rule = QueryRuleEnum.getByValue(val.substring(0, 2)); |
| | | } |
| | | } |
| | | // step 1 .> < |
| | | if (rule == null && val.length() >= 2) { |
| | | if(QUERY_SEPARATE_KEYWORD.equals(val.substring(1, 2))){ |
| | | rule = QueryRuleEnum.getByValue(val.substring(0, 1)); |
| | | } |
| | | } |
| | | //update-end--Author:scott Date:20190724 forï¼initQueryWrapperç»è£
sqlæ¥è¯¢æ¡ä»¶é误 #284--------------------- |
| | | |
| | | // step 3 like |
| | | if (rule == null && val.contains(STAR)) { |
| | | if (val.startsWith(STAR) && val.endsWith(STAR)) { |
| | | rule = QueryRuleEnum.LIKE; |
| | | } else if (val.startsWith(STAR)) { |
| | | rule = QueryRuleEnum.LEFT_LIKE; |
| | | } else if(val.endsWith(STAR)){ |
| | | rule = QueryRuleEnum.RIGHT_LIKE; |
| | | } |
| | | } |
| | | |
| | | // step 4 in |
| | | if (rule == null && val.contains(COMMA)) { |
| | | //TODO in æ¥è¯¢è¿éåºè¯¥æä¸ªbug 妿ä¸å段æ¬èº«å°±æ¯å¤é æ¤æ¶ç¨inæ¥è¯¢ æªå¿
è½æ¥è¯¢åºæ¥ |
| | | rule = QueryRuleEnum.IN; |
| | | } |
| | | // step 5 != |
| | | if(rule == null && val.startsWith(NOT_EQUAL)){ |
| | | rule = QueryRuleEnum.NE; |
| | | } |
| | | // step 6 xx+xx+xx è¿ç§æ
åµéç¨äºå¦ææ³è¦ç¨éå·ä½ç²¾ç¡®æ¥è¯¢ 使¯ç³»ç»é»è®¤éå·èµ°in æä»¥å¯ä»¥ç¨++æ¿æ¢ãæ¤é»è¾ä½åºã |
| | | if(rule == null && val.indexOf(QUERY_COMMA_ESCAPE)>0){ |
| | | rule = QueryRuleEnum.EQ_WITH_ADD; |
| | | } |
| | | |
| | | //update-begin--Author:taoyan Date:20201229 forï¼initQueryWrapperç»è£
sqlæ¥è¯¢æ¡ä»¶é误 #284--------------------- |
| | | //ç¹æ®å¤çï¼Oracleç表达å¼to_date('xxx','yyyy-MM-dd')嫿éå·ï¼ä¼è¢«è¯å«ä¸ºinæ¥è¯¢ï¼è½¬ä¸ºçäºæ¥è¯¢ |
| | | if(rule == QueryRuleEnum.IN && val.indexOf("yyyy-MM-dd")>=0 && val.indexOf("to_date")>=0){ |
| | | rule = QueryRuleEnum.EQ; |
| | | } |
| | | //update-end--Author:taoyan Date:20201229 forï¼initQueryWrapperç»è£
sqlæ¥è¯¢æ¡ä»¶é误 #284--------------------- |
| | | |
| | | return rule != null ? rule : QueryRuleEnum.EQ; |
| | | } |
| | | |
| | | /** |
| | | * æ¿æ¢æå
³é®åå符 |
| | | * |
| | | * @param rule |
| | | * @param value |
| | | * @return |
| | | */ |
| | | private static Object replaceValue(QueryRuleEnum rule, Object value) { |
| | | if (rule == null) { |
| | | return null; |
| | | } |
| | | if (! (value instanceof String)){ |
| | | return value; |
| | | } |
| | | String val = (value + "").toString().trim(); |
| | | if (rule == QueryRuleEnum.LIKE) { |
| | | value = val.substring(1, val.length() - 1); |
| | | //mysql æ¨¡ç³æ¥è¯¢ä¹ç¹æ®å符ä¸å线 ï¼_ã\ï¼ |
| | | value = specialStrConvert(value.toString()); |
| | | } else if (rule == QueryRuleEnum.LEFT_LIKE || rule == QueryRuleEnum.NE) { |
| | | value = val.substring(1); |
| | | //mysql æ¨¡ç³æ¥è¯¢ä¹ç¹æ®å符ä¸å线 ï¼_ã\ï¼ |
| | | value = specialStrConvert(value.toString()); |
| | | } else if (rule == QueryRuleEnum.RIGHT_LIKE) { |
| | | value = val.substring(0, val.length() - 1); |
| | | //mysql æ¨¡ç³æ¥è¯¢ä¹ç¹æ®å符ä¸å线 ï¼_ã\ï¼ |
| | | value = specialStrConvert(value.toString()); |
| | | } else if (rule == QueryRuleEnum.IN) { |
| | | value = val.split(","); |
| | | } else if (rule == QueryRuleEnum.EQ_WITH_ADD) { |
| | | value = val.replaceAll("\\+\\+", COMMA); |
| | | }else { |
| | | //update-begin--Author:scott Date:20190724 forï¼initQueryWrapperç»è£
sqlæ¥è¯¢æ¡ä»¶é误 #284------------------- |
| | | if(val.startsWith(rule.getValue())){ |
| | | //TODO æ¤å¤é»è¾åºè¯¥æ³¨éæ-> 妿æ¥è¯¢å
容ä¸å¸¦ææ¥è¯¢å¹é
è§å符å·ï¼å°±ä¼è¢«æªåçï¼æ¯å¦ï¼>=æ¨å¥½ï¼ |
| | | value = val.replaceFirst(rule.getValue(),""); |
| | | }else if(val.startsWith(rule.getCondition()+QUERY_SEPARATE_KEYWORD)){ |
| | | value = val.replaceFirst(rule.getCondition()+QUERY_SEPARATE_KEYWORD,"").trim(); |
| | | } |
| | | //update-end--Author:scott Date:20190724 forï¼initQueryWrapperç»è£
sqlæ¥è¯¢æ¡ä»¶é误 #284------------------- |
| | | } |
| | | return value; |
| | | } |
| | | |
| | | private static void addQueryByRule(QueryWrapper<?> queryWrapper,String name,String type,String value,QueryRuleEnum rule) throws ParseException { |
| | | if(oConvertUtils.isNotEmpty(value)) { |
| | | Object temp; |
| | | // é对æ°åç±»ååæ®µï¼å¤å¼æ¥è¯¢ |
| | | if(value.indexOf(COMMA)!=-1){ |
| | | temp = value; |
| | | addEasyQuery(queryWrapper, name, rule, temp); |
| | | return; |
| | | } |
| | | |
| | | switch (type) { |
| | | case "class java.lang.Integer": |
| | | temp = Integer.parseInt(value); |
| | | break; |
| | | case "class java.math.BigDecimal": |
| | | temp = new BigDecimal(value); |
| | | break; |
| | | case "class java.lang.Short": |
| | | temp = Short.parseShort(value); |
| | | break; |
| | | case "class java.lang.Long": |
| | | temp = Long.parseLong(value); |
| | | break; |
| | | case "class java.lang.Float": |
| | | temp = Float.parseFloat(value); |
| | | break; |
| | | case "class java.lang.Double": |
| | | temp = Double.parseDouble(value); |
| | | break; |
| | | case "class java.util.Date": |
| | | temp = getDateQueryByRule(value, rule); |
| | | break; |
| | | default: |
| | | temp = value; |
| | | break; |
| | | } |
| | | addEasyQuery(queryWrapper, name, rule, temp); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¥æç±»åçå¼ |
| | | * @param value |
| | | * @param rule |
| | | * @return |
| | | * @throws ParseException |
| | | */ |
| | | private static Date getDateQueryByRule(String value,QueryRuleEnum rule) throws ParseException { |
| | | Date date = null; |
| | | if(value.length()==10) { |
| | | if(rule==QueryRuleEnum.GE) { |
| | | //æ¯è¾å¤§äº |
| | | date = getTime().parse(value + " 00:00:00"); |
| | | }else if(rule==QueryRuleEnum.LE) { |
| | | //æ¯è¾å°äº |
| | | date = getTime().parse(value + " 23:59:59"); |
| | | } |
| | | //TODO æ¥æç±»åæ¯è¾ç¹æ® å¯è½oracleä¸ä¸ä¸å®å¥½ä½¿ |
| | | } |
| | | if(date==null) { |
| | | date = getTime().parse(value); |
| | | } |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®è§åèµ°ä¸åçæ¥è¯¢ |
| | | * @param queryWrapper QueryWrapper |
| | | * @param name åæ®µåå |
| | | * @param rule æ¥è¯¢è§å |
| | | * @param value æ¥è¯¢æ¡ä»¶å¼ |
| | | */ |
| | | private static void addEasyQuery(QueryWrapper<?> queryWrapper, String name, QueryRuleEnum rule, Object value) { |
| | | if (value == null || rule == null || oConvertUtils.isEmpty(value)) { |
| | | return; |
| | | } |
| | | name = oConvertUtils.camelToUnderline(name); |
| | | log.info("--æ¥è¯¢è§å-->"+name+" "+rule.getValue()+" "+value); |
| | | switch (rule) { |
| | | case GT: |
| | | queryWrapper.gt(name, value); |
| | | break; |
| | | case GE: |
| | | queryWrapper.ge(name, value); |
| | | break; |
| | | case LT: |
| | | queryWrapper.lt(name, value); |
| | | break; |
| | | case LE: |
| | | queryWrapper.le(name, value); |
| | | break; |
| | | case EQ: |
| | | case EQ_WITH_ADD: |
| | | queryWrapper.eq(name, value); |
| | | break; |
| | | case NE: |
| | | queryWrapper.ne(name, value); |
| | | break; |
| | | case IN: |
| | | if(value instanceof String) { |
| | | queryWrapper.in(name, (Object[])value.toString().split(",")); |
| | | }else if(value instanceof String[]) { |
| | | queryWrapper.in(name, (Object[]) value); |
| | | } |
| | | //update-begin-author:taoyan date:20200909 for:ãbugãin ç±»åå¤å¼æ¥è¯¢ ä¸éé
postgresql #1671 |
| | | else if(value.getClass().isArray()) { |
| | | queryWrapper.in(name, (Object[])value); |
| | | }else { |
| | | queryWrapper.in(name, value); |
| | | } |
| | | //update-end-author:taoyan date:20200909 for:ãbugãin ç±»åå¤å¼æ¥è¯¢ ä¸éé
postgresql #1671 |
| | | break; |
| | | case LIKE: |
| | | queryWrapper.like(name, value); |
| | | break; |
| | | case LEFT_LIKE: |
| | | queryWrapper.likeLeft(name, value); |
| | | break; |
| | | case RIGHT_LIKE: |
| | | queryWrapper.likeRight(name, value); |
| | | break; |
| | | default: |
| | | log.info("--æ¥è¯¢è§åæªå¹é
å°---"); |
| | | break; |
| | | } |
| | | } |
| | | /** |
| | | * |
| | | * @param name |
| | | * @return |
| | | */ |
| | | private static boolean judgedIsUselessField(String name) { |
| | | return "class".equals(name) || "ids".equals(name) |
| | | || "page".equals(name) || "rows".equals(name) |
| | | || "sort".equals(name) || "order".equals(name); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * è·å请æ±å¯¹åºçæ°æ®æéè§å TODO ç¸ååæéå¤ä¸ª æé®é¢ |
| | | * @return |
| | | */ |
| | | public static Map<String, SysPermissionDataRuleModel> getRuleMap() { |
| | | Map<String, SysPermissionDataRuleModel> ruleMap = new HashMap<String, SysPermissionDataRuleModel>(); |
| | | List<SysPermissionDataRuleModel> list =JeecgDataAutorUtils.loadDataSearchConditon(); |
| | | if(list != null&&list.size()>0){ |
| | | if(list.get(0)==null){ |
| | | return ruleMap; |
| | | } |
| | | for (SysPermissionDataRuleModel rule : list) { |
| | | String column = rule.getRuleColumn(); |
| | | if(QueryRuleEnum.SQL_RULES.getValue().equals(rule.getRuleConditions())) { |
| | | column = SQL_RULES_COLUMN+rule.getId(); |
| | | } |
| | | ruleMap.put(column, rule); |
| | | } |
| | | } |
| | | return ruleMap; |
| | | } |
| | | |
| | | private static void addRuleToQueryWrapper(SysPermissionDataRuleModel dataRule, String name, Class propertyType, QueryWrapper<?> queryWrapper) { |
| | | QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); |
| | | if(rule.equals(QueryRuleEnum.IN) && ! propertyType.equals(String.class)) { |
| | | String[] values = dataRule.getRuleValue().split(","); |
| | | Object[] objs = new Object[values.length]; |
| | | for (int i = 0; i < values.length; i++) { |
| | | objs[i] = NumberUtils.parseNumber(values[i], propertyType); |
| | | } |
| | | addEasyQuery(queryWrapper, name, rule, objs); |
| | | }else { |
| | | if (propertyType.equals(String.class)) { |
| | | addEasyQuery(queryWrapper, name, rule, converRuleValue(dataRule.getRuleValue())); |
| | | }else if (propertyType.equals(Date.class)) { |
| | | String dateStr =converRuleValue(dataRule.getRuleValue()); |
| | | if(dateStr.length()==10){ |
| | | addEasyQuery(queryWrapper, name, rule, DateUtils.str2Date(dateStr,DateUtils.date_sdf.get())); |
| | | }else{ |
| | | addEasyQuery(queryWrapper, name, rule, DateUtils.str2Date(dateStr,DateUtils.datetimeFormat.get())); |
| | | } |
| | | }else { |
| | | addEasyQuery(queryWrapper, name, rule, NumberUtils.parseNumber(dataRule.getRuleValue(), propertyType)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static String converRuleValue(String ruleValue) { |
| | | String value = JwtUtil.getUserSystemData(ruleValue,null); |
| | | return value!= null ? value : ruleValue; |
| | | } |
| | | |
| | | /** |
| | | * @author: scott |
| | | * @Description: 廿å¼åååå¼å· |
| | | * @date: 2020/3/19 21:26 |
| | | * @param ruleValue: |
| | | * @Return: java.lang.String |
| | | */ |
| | | public static String trimSingleQuote(String ruleValue) { |
| | | if (oConvertUtils.isEmpty(ruleValue)) { |
| | | return ""; |
| | | } |
| | | if (ruleValue.startsWith(QueryGenerator.SQL_SQ)) { |
| | | ruleValue = ruleValue.substring(1); |
| | | } |
| | | if (ruleValue.endsWith(QueryGenerator.SQL_SQ)) { |
| | | ruleValue = ruleValue.substring(0, ruleValue.length() - 1); |
| | | } |
| | | return ruleValue; |
| | | } |
| | | |
| | | public static String getSqlRuleValue(String sqlRule){ |
| | | try { |
| | | Set<String> varParams = getSqlRuleParams(sqlRule); |
| | | for(String var:varParams){ |
| | | String tempValue = converRuleValue(var); |
| | | sqlRule = sqlRule.replace("#{"+var+"}",tempValue); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(), e); |
| | | } |
| | | return sqlRule; |
| | | } |
| | | |
| | | /** |
| | | * è·åsqlä¸ç#{key} è¿ä¸ªkeyç»æçset |
| | | */ |
| | | public static Set<String> getSqlRuleParams(String sql) { |
| | | if(oConvertUtils.isEmpty(sql)){ |
| | | return null; |
| | | } |
| | | Set<String> varParams = new HashSet<String>(); |
| | | String regex = "\\#\\{\\w+\\}"; |
| | | |
| | | Pattern p = Pattern.compile(regex); |
| | | Matcher m = p.matcher(sql); |
| | | while(m.find()){ |
| | | String var = m.group(); |
| | | varParams.add(var.substring(var.indexOf("{")+1,var.indexOf("}"))); |
| | | } |
| | | return varParams; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¥è¯¢æ¡ä»¶ |
| | | * @param field |
| | | * @param alias |
| | | * @param value |
| | | * @param isString |
| | | * @return |
| | | */ |
| | | public static String getSingleQueryConditionSql(String field,String alias,Object value,boolean isString) { |
| | | return getSingleQueryConditionSql(field, alias, value, isString,null); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¡¨è·åæ¥è¯¢æ¡ä»¶ æ¯æå¤æ°æ®æº |
| | | * @param field |
| | | * @param alias |
| | | * @param value |
| | | * @param isString |
| | | * @param dataBaseType |
| | | * @return |
| | | */ |
| | | public static String getSingleQueryConditionSql(String field,String alias,Object value,boolean isString, String dataBaseType) { |
| | | if (value == null) { |
| | | return ""; |
| | | } |
| | | field = alias+oConvertUtils.camelToUnderline(field); |
| | | QueryRuleEnum rule = QueryGenerator.convert2Rule(value); |
| | | return getSingleSqlByRule(rule, field, value, isString, dataBaseType); |
| | | } |
| | | |
| | | /** |
| | | * è·åå个æ¥è¯¢æ¡ä»¶çå¼ |
| | | * @param rule |
| | | * @param field |
| | | * @param value |
| | | * @param isString |
| | | * @param dataBaseType |
| | | * @return |
| | | */ |
| | | private static String getSingleSqlByRule(QueryRuleEnum rule,String field,Object value,boolean isString, String dataBaseType) { |
| | | String res = ""; |
| | | switch (rule) { |
| | | case GT: |
| | | res =field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); |
| | | break; |
| | | case GE: |
| | | res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); |
| | | break; |
| | | case LT: |
| | | res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); |
| | | break; |
| | | case LE: |
| | | res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); |
| | | break; |
| | | case EQ: |
| | | res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); |
| | | break; |
| | | case EQ_WITH_ADD: |
| | | res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); |
| | | break; |
| | | case NE: |
| | | res = field+" <> "+getFieldConditionValue(value, isString, dataBaseType); |
| | | break; |
| | | case IN: |
| | | res = field + " in "+getInConditionValue(value, isString); |
| | | break; |
| | | case LIKE: |
| | | res = field + " like "+getLikeConditionValue(value); |
| | | break; |
| | | case LEFT_LIKE: |
| | | res = field + " like "+getLikeConditionValue(value); |
| | | break; |
| | | case RIGHT_LIKE: |
| | | res = field + " like "+getLikeConditionValue(value); |
| | | break; |
| | | default: |
| | | res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); |
| | | break; |
| | | } |
| | | return res; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·åå个æ¥è¯¢æ¡ä»¶çå¼ |
| | | * @param rule |
| | | * @param field |
| | | * @param value |
| | | * @param isString |
| | | * @return |
| | | */ |
| | | private static String getSingleSqlByRule(QueryRuleEnum rule,String field,Object value,boolean isString) { |
| | | return getSingleSqlByRule(rule, field, value, isString, null); |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¥è¯¢æ¡ä»¶çå¼ |
| | | * @param value |
| | | * @param isString |
| | | * @param dataBaseType |
| | | * @return |
| | | */ |
| | | private static String getFieldConditionValue(Object value,boolean isString, String dataBaseType) { |
| | | String str = value.toString().trim(); |
| | | if(str.startsWith("!")) { |
| | | str = str.substring(1); |
| | | }else if(str.startsWith(">=")) { |
| | | str = str.substring(2); |
| | | }else if(str.startsWith("<=")) { |
| | | str = str.substring(2); |
| | | }else if(str.startsWith(">")) { |
| | | str = str.substring(1); |
| | | }else if(str.startsWith("<")) { |
| | | str = str.substring(1); |
| | | }else if(str.indexOf(QUERY_COMMA_ESCAPE)>0) { |
| | | str = str.replaceAll("\\+\\+", COMMA); |
| | | } |
| | | if(dataBaseType==null){ |
| | | dataBaseType = getDbType(); |
| | | } |
| | | if(isString) { |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(dataBaseType)){ |
| | | return " N'"+str+"' "; |
| | | }else{ |
| | | return " '"+str+"' "; |
| | | } |
| | | }else { |
| | | // 妿䏿¯å符串 æä¸ç§ç¹æ®æ
åµ popupè°ç¨é½èµ°è¿ä¸ªé»è¾ åæ°ä¼ éçå¯è½æ¯ââadminââè¿ç§æ ¼å¼ç |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(dataBaseType) && str.endsWith("'") && str.startsWith("'")){ |
| | | return " N"+str; |
| | | } |
| | | return value.toString(); |
| | | } |
| | | } |
| | | |
| | | private static String getInConditionValue(Object value,boolean isString) { |
| | | //update-begin-author:taoyan date:20210628 for: æ¥è¯¢æ¡ä»¶å¦æè¾å
¥,导è´sqlæ¥é |
| | | String[] temp = value.toString().split(","); |
| | | if(temp.length==0){ |
| | | return "('')"; |
| | | } |
| | | if(isString) { |
| | | List<String> res = new ArrayList<>(); |
| | | for (String string : temp) { |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ |
| | | res.add("N'"+string+"'"); |
| | | }else{ |
| | | res.add("'"+string+"'"); |
| | | } |
| | | } |
| | | return "("+String.join("," ,res)+")"; |
| | | }else { |
| | | return "("+value.toString()+")"; |
| | | } |
| | | //update-end-author:taoyan date:20210628 for: æ¥è¯¢æ¡ä»¶å¦æè¾å
¥,导è´sqlæ¥é |
| | | } |
| | | |
| | | private static String getLikeConditionValue(Object value) { |
| | | String str = value.toString().trim(); |
| | | if(str.startsWith("*") && str.endsWith("*")) { |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ |
| | | return "N'%"+str.substring(1,str.length()-1)+"%'"; |
| | | }else{ |
| | | return "'%"+str.substring(1,str.length()-1)+"%'"; |
| | | } |
| | | }else if(str.startsWith("*")) { |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ |
| | | return "N'%"+str.substring(1)+"'"; |
| | | }else{ |
| | | return "'%"+str.substring(1)+"'"; |
| | | } |
| | | }else if(str.endsWith("*")) { |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ |
| | | return "N'"+str.substring(0,str.length()-1)+"%'"; |
| | | }else{ |
| | | return "'"+str.substring(0,str.length()-1)+"%'"; |
| | | } |
| | | }else { |
| | | if(str.indexOf("%")>=0) { |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ |
| | | if(str.startsWith("'") && str.endsWith("'")){ |
| | | return "N"+str; |
| | | }else{ |
| | | return "N"+"'"+str+"'"; |
| | | } |
| | | }else{ |
| | | if(str.startsWith("'") && str.endsWith("'")){ |
| | | return str; |
| | | }else{ |
| | | return "'"+str+"'"; |
| | | } |
| | | } |
| | | }else { |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ |
| | | return "N'%"+str+"%'"; |
| | | }else{ |
| | | return "'%"+str+"%'"; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æéç¸å
³é
ç½®çæç¸å
³çSQL è¯å¥ |
| | | * @param clazz |
| | | * @return |
| | | */ |
| | | @SuppressWarnings({ "unchecked", "rawtypes" }) |
| | | public static String installAuthJdbc(Class<?> clazz) { |
| | | StringBuffer sb = new StringBuffer(); |
| | | //æéæ¥è¯¢ |
| | | Map<String,SysPermissionDataRuleModel> ruleMap = getRuleMap(); |
| | | PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(clazz); |
| | | String sql_and = " and "; |
| | | for (String c : ruleMap.keySet()) { |
| | | if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ |
| | | sb.append(sql_and+getSqlRuleValue(ruleMap.get(c).getRuleValue())); |
| | | } |
| | | } |
| | | String name, column; |
| | | for (int i = 0; i < origDescriptors.length; i++) { |
| | | name = origDescriptors[i].getName(); |
| | | if (judgedIsUselessField(name)) { |
| | | continue; |
| | | } |
| | | if(ruleMap.containsKey(name)) { |
| | | column = getTableFieldName(clazz, name); |
| | | if(column==null){ |
| | | continue; |
| | | } |
| | | SysPermissionDataRuleModel dataRule = ruleMap.get(name); |
| | | QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); |
| | | Class propType = origDescriptors[i].getPropertyType(); |
| | | boolean isString = propType.equals(String.class); |
| | | Object value; |
| | | if(isString) { |
| | | value = converRuleValue(dataRule.getRuleValue()); |
| | | }else { |
| | | value = NumberUtils.parseNumber(dataRule.getRuleValue(),propType); |
| | | } |
| | | String filedSql = getSingleSqlByRule(rule, oConvertUtils.camelToUnderline(column), value,isString); |
| | | sb.append(sql_and+filedSql); |
| | | } |
| | | } |
| | | log.info("query auth sql is:"+sb.toString()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æéç¸å
³é
ç½® ç»è£
mpéè¦çæé |
| | | * @param queryWrapper |
| | | * @param clazz |
| | | * @return |
| | | */ |
| | | public static void installAuthMplus(QueryWrapper<?> queryWrapper,Class<?> clazz) { |
| | | //æéæ¥è¯¢ |
| | | Map<String,SysPermissionDataRuleModel> ruleMap = getRuleMap(); |
| | | PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(clazz); |
| | | for (String c : ruleMap.keySet()) { |
| | | if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ |
| | | queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); |
| | | } |
| | | } |
| | | String name, column; |
| | | for (int i = 0; i < origDescriptors.length; i++) { |
| | | name = origDescriptors[i].getName(); |
| | | if (judgedIsUselessField(name)) { |
| | | continue; |
| | | } |
| | | column = getTableFieldName(clazz, name); |
| | | if(column==null){ |
| | | continue; |
| | | } |
| | | if(ruleMap.containsKey(name)) { |
| | | addRuleToQueryWrapper(ruleMap.get(name), column, origDescriptors[i].getPropertyType(), queryWrapper); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转æ¢sqlä¸çç³»ç»åé |
| | | * @param sql |
| | | * @return |
| | | */ |
| | | public static String convertSystemVariables(String sql){ |
| | | return getSqlRuleValue(sql); |
| | | } |
| | | |
| | | /** |
| | | * è·åææé
ç½®çæé è¿åsqlå符串 ä¸ååæ®µéå¶ é
ç½®ä»ä¹å°±æ¿å°ä»ä¹ |
| | | * @return |
| | | */ |
| | | public static String getAllConfigAuth() { |
| | | StringBuffer sb = new StringBuffer(); |
| | | //æéæ¥è¯¢ |
| | | Map<String,SysPermissionDataRuleModel> ruleMap = getRuleMap(); |
| | | String sql_and = " and "; |
| | | for (String c : ruleMap.keySet()) { |
| | | SysPermissionDataRuleModel dataRule = ruleMap.get(c); |
| | | String ruleValue = dataRule.getRuleValue(); |
| | | if(oConvertUtils.isEmpty(ruleValue)){ |
| | | continue; |
| | | } |
| | | if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ |
| | | sb.append(sql_and+getSqlRuleValue(ruleValue)); |
| | | }else{ |
| | | boolean isString = false; |
| | | ruleValue = ruleValue.trim(); |
| | | if(ruleValue.startsWith("'") && ruleValue.endsWith("'")){ |
| | | isString = true; |
| | | ruleValue = ruleValue.substring(1,ruleValue.length()-1); |
| | | } |
| | | QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); |
| | | String value = converRuleValue(ruleValue); |
| | | String filedSql = getSingleSqlByRule(rule, c, value,isString); |
| | | sb.append(sql_and+filedSql); |
| | | } |
| | | } |
| | | log.info("query auth sql is = "+sb.toString()); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * è·åç³»ç»æ°æ®åºç±»å |
| | | */ |
| | | private static String getDbType(){ |
| | | return CommonUtils.getDatabaseType(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·åclassç å
æ¬ç¶ç±»ç |
| | | * @param clazz |
| | | * @return |
| | | */ |
| | | private static List<Field> getClassFields(Class<?> clazz) { |
| | | List<Field> list = new ArrayList<Field>(); |
| | | Field[] fields; |
| | | do{ |
| | | fields = clazz.getDeclaredFields(); |
| | | for(int i = 0;i<fields.length;i++){ |
| | | list.add(fields[i]); |
| | | } |
| | | clazz = clazz.getSuperclass(); |
| | | }while(clazz!= Object.class&&clazz!=null); |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * è·åè¡¨åæ®µå |
| | | * @param clazz |
| | | * @param name |
| | | * @return |
| | | */ |
| | | private static String getTableFieldName(Class<?> clazz, String name) { |
| | | try { |
| | | //妿忮µå 注解äº@TableField(exist = false),ä¸èµ°DBæ¥è¯¢ |
| | | Field field = null; |
| | | try { |
| | | field = clazz.getDeclaredField(name); |
| | | } catch (NoSuchFieldException e) { |
| | | //e.printStackTrace(); |
| | | } |
| | | |
| | | //å¦æä¸ºç©ºï¼åå»ç¶ç±»æ¥æ¾å段 |
| | | if (field == null) { |
| | | List<Field> allFields = getClassFields(clazz); |
| | | List<Field> searchFields = allFields.stream().filter(a -> a.getName().equals(name)).collect(Collectors.toList()); |
| | | if(searchFields!=null && searchFields.size()>0){ |
| | | field = searchFields.get(0); |
| | | } |
| | | } |
| | | |
| | | if (field != null) { |
| | | TableField tableField = field.getAnnotation(TableField.class); |
| | | if (tableField != null){ |
| | | if(tableField.exist() == false){ |
| | | //å¦æè®¾ç½®äºTableField false è¿ä¸ªå段ä¸éè¦å¤ç |
| | | return null; |
| | | }else{ |
| | | String column = tableField.value(); |
| | | //å¦æè®¾ç½®äºTableField value è¿ä¸ªå段æ¯å®ä½å段 |
| | | if(!"".equals(column)){ |
| | | return column; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return name; |
| | | } |
| | | |
| | | /** |
| | | * mysql æ¨¡ç³æ¥è¯¢ä¹ç¹æ®å符ä¸å线 ï¼_ã\ï¼ |
| | | * |
| | | * @param value: |
| | | * @Return: java.lang.String |
| | | */ |
| | | private static String specialStrConvert(String value) { |
| | | if (DataBaseConstant.DB_TYPE_MYSQL.equals(getDbType()) || DataBaseConstant.DB_TYPE_MARIADB.equals(getDbType())) { |
| | | String[] special_str = QueryGenerator.LIKE_MYSQL_SPECIAL_STRS.split(","); |
| | | for (String str : special_str) { |
| | | if (value.indexOf(str) !=-1) { |
| | | value = value.replace(str, "\\" + str); |
| | | } |
| | | } |
| | | } |
| | | return value; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.query; |
| | | |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | |
| | | /** |
| | | * Query è§å 常é |
| | | * @Author Scott |
| | | * @Date 2019å¹´02æ14æ¥ |
| | | */ |
| | | public enum QueryRuleEnum { |
| | | |
| | | GT(">","gt","大äº"), |
| | | GE(">=","ge","大äºçäº"), |
| | | LT("<","lt","å°äº"), |
| | | LE("<=","le","å°äºçäº"), |
| | | EQ("=","eq","çäº"), |
| | | NE("!=","ne","ä¸çäº"), |
| | | IN("IN","in","å
å«"), |
| | | LIKE("LIKE","like","å
¨æ¨¡ç³"), |
| | | LEFT_LIKE("LEFT_LIKE","left_like","左模ç³"), |
| | | RIGHT_LIKE("RIGHT_LIKE","right_like","峿¨¡ç³"), |
| | | EQ_WITH_ADD("EQWITHADD","eq_with_add","带å å·çäº"), |
| | | LIKE_WITH_AND("LIKEWITHAND","like_with_and","å¤è¯æ¨¡ç³å¹é
ââââææ¶æªç¨ä¸"), |
| | | SQL_RULES("USE_SQL_RULES","ext","èªå®ä¹SQLçæ®µ"); |
| | | |
| | | private String value; |
| | | |
| | | private String condition; |
| | | |
| | | private String msg; |
| | | |
| | | QueryRuleEnum(String value, String condition, String msg){ |
| | | this.value = value; |
| | | this.condition = condition; |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | public void setValue(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public void setMsg(String msg) { |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public String getCondition() { |
| | | return condition; |
| | | } |
| | | |
| | | public void setCondition(String condition) { |
| | | this.condition = condition; |
| | | } |
| | | |
| | | public static QueryRuleEnum getByValue(String value){ |
| | | if(oConvertUtils.isEmpty(value)) { |
| | | return null; |
| | | } |
| | | for(QueryRuleEnum val :values()){ |
| | | if (val.getValue().equals(value) || val.getCondition().equals(value)){ |
| | | return val; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.util; |
| | | |
| | | import org.jeecg.common.system.vo.SysPermissionDataRuleModel; |
| | | import org.jeecg.common.system.vo.SysUserCacheInfo; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @ClassName: JeecgDataAutorUtils |
| | | * @Description: æ°æ®æéæ¥è¯¢è§å容å¨å·¥å
·ç±» |
| | | * @Author: å¼ ä»£æµ© |
| | | * @Date: 2012-12-15 ä¸å11:27:39 |
| | | * |
| | | */ |
| | | public class JeecgDataAutorUtils { |
| | | |
| | | public static final String MENU_DATA_AUTHOR_RULES = "MENU_DATA_AUTHOR_RULES"; |
| | | |
| | | public static final String MENU_DATA_AUTHOR_RULE_SQL = "MENU_DATA_AUTHOR_RULE_SQL"; |
| | | |
| | | public static final String SYS_USER_INFO = "SYS_USER_INFO"; |
| | | |
| | | /** |
| | | * å¾é¾æ¥è¯·æ±éé¢ï¼ä¼ å
¥æ°æ®æ¥è¯¢æ¡ä»¶ |
| | | * |
| | | * @param request |
| | | * @param dataRules |
| | | */ |
| | | public static synchronized void installDataSearchConditon(HttpServletRequest request, List<SysPermissionDataRuleModel> dataRules) { |
| | | @SuppressWarnings("unchecked") |
| | | List<SysPermissionDataRuleModel> list = (List<SysPermissionDataRuleModel>)loadDataSearchConditon();// 1.å
ä»requestè·åMENU_DATA_AUTHOR_RULESï¼å¦æååè·åå°LIST |
| | | if (list==null) { |
| | | // 2.妿ä¸åå¨ï¼ånewä¸ä¸ªlist |
| | | list = new ArrayList<SysPermissionDataRuleModel>(); |
| | | } |
| | | for (SysPermissionDataRuleModel tsDataRule : dataRules) { |
| | | list.add(tsDataRule); |
| | | } |
| | | request.setAttribute(MENU_DATA_AUTHOR_RULES, list); // 3.å¾listéé¢å¢éåæ |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±å¯¹åºçæ°æ®æéè§å |
| | | * |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public static synchronized List<SysPermissionDataRuleModel> loadDataSearchConditon() { |
| | | return (List<SysPermissionDataRuleModel>) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULES); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±å¯¹åºçæ°æ®æéSQL |
| | | * |
| | | * @return |
| | | */ |
| | | public static synchronized String loadDataSearchConditonSQLString() { |
| | | return (String) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULE_SQL); |
| | | } |
| | | |
| | | /** |
| | | * å¾é¾æ¥è¯·æ±éé¢ï¼ä¼ å
¥æ°æ®æ¥è¯¢æ¡ä»¶ |
| | | * |
| | | * @param request |
| | | * @param sql |
| | | */ |
| | | public static synchronized void installDataSearchConditon(HttpServletRequest request, String sql) { |
| | | String ruleSql = (String)loadDataSearchConditonSQLString(); |
| | | if (!StringUtils.hasText(ruleSql)) { |
| | | request.setAttribute(MENU_DATA_AUTHOR_RULE_SQL,sql); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°ç¨æ·ä¿¡æ¯åå°request |
| | | * @param request |
| | | * @param userinfo |
| | | */ |
| | | public static synchronized void installUserInfo(HttpServletRequest request, SysUserCacheInfo userinfo) { |
| | | request.setAttribute(SYS_USER_INFO, userinfo); |
| | | } |
| | | |
| | | /** |
| | | * å°ç¨æ·ä¿¡æ¯åå°request |
| | | * @param userinfo |
| | | */ |
| | | public static synchronized void installUserInfo(SysUserCacheInfo userinfo) { |
| | | SpringContextUtils.getHttpServletRequest().setAttribute(SYS_USER_INFO, userinfo); |
| | | } |
| | | |
| | | /** |
| | | * ä»requestè·åç¨æ·ä¿¡æ¯ |
| | | * @return |
| | | */ |
| | | public static synchronized SysUserCacheInfo loadUserInfo() { |
| | | return (SysUserCacheInfo) SpringContextUtils.getHttpServletRequest().getAttribute(SYS_USER_INFO); |
| | | |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.util; |
| | | |
| | | import com.auth0.jwt.JWT; |
| | | import com.auth0.jwt.JWTVerifier; |
| | | import com.auth0.jwt.algorithms.Algorithm; |
| | | import com.auth0.jwt.exceptions.JWTDecodeException; |
| | | import com.auth0.jwt.interfaces.DecodedJWT; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.google.common.base.Joiner; |
| | | |
| | | import java.io.IOException; |
| | | import java.io.OutputStream; |
| | | import java.util.Date; |
| | | import javax.servlet.ServletResponse; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import javax.servlet.http.HttpSession; |
| | | |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.DataBaseConstant; |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | import org.jeecg.common.system.vo.SysUserCacheInfo; |
| | | import org.jeecg.common.util.DateUtils; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | |
| | | /** |
| | | * @Author Scott |
| | | * @Date 2018-07-12 14:23 |
| | | * @Desc JWTå·¥å
·ç±» |
| | | **/ |
| | | public class JwtUtil { |
| | | |
| | | // Tokenè¿ææ¶é´30åéï¼ç¨æ·ç»å½è¿ææ¶é´æ¯æ¤æ¶é´ç两åï¼ä»¥tokenå¨reidsç¼åæ¶é´ä¸ºåï¼ |
| | | public static final long EXPIRE_TIME = 30 * 12 * 60 * 1000; |
| | | |
| | | /** |
| | | * |
| | | * @param response |
| | | * @param code |
| | | * @param errorMsg |
| | | */ |
| | | public static void responseError(ServletResponse response, Integer code, String errorMsg) { |
| | | HttpServletResponse httpServletResponse = (HttpServletResponse) response; |
| | | Result jsonResult = new Result(code, errorMsg); |
| | | OutputStream os = null; |
| | | try { |
| | | os = httpServletResponse.getOutputStream(); |
| | | httpServletResponse.setCharacterEncoding("UTF-8"); |
| | | httpServletResponse.setStatus(401); |
| | | os.write(new ObjectMapper().writeValueAsString(jsonResult).getBytes("UTF-8")); |
| | | os.flush(); |
| | | os.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªtokenæ¯å¦æ£ç¡® |
| | | * |
| | | * @param token å¯é¥ |
| | | * @param secret ç¨æ·çå¯ç |
| | | * @return æ¯å¦æ£ç¡® |
| | | */ |
| | | public static boolean verify(String token, String username, String secret) { |
| | | try { |
| | | // æ ¹æ®å¯ç çæJWTæéªå¨ |
| | | Algorithm algorithm = Algorithm.HMAC256(secret); |
| | | JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build(); |
| | | // æéªTOKEN |
| | | DecodedJWT jwt = verifier.verify(token); |
| | | return true; |
| | | } catch (Exception exception) { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·å¾tokenä¸çä¿¡æ¯æ ésecretè§£å¯ä¹è½è·å¾ |
| | | * |
| | | * @return tokenä¸å
å«çç¨æ·å |
| | | */ |
| | | public static String getUsername(String token) { |
| | | try { |
| | | DecodedJWT jwt = JWT.decode(token); |
| | | return jwt.getClaim("username").asString(); |
| | | } catch (JWTDecodeException e) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * çæç¾å,5minåè¿æ |
| | | * |
| | | * @param username ç¨æ·å |
| | | * @param secret ç¨æ·çå¯ç |
| | | * @return å å¯çtoken |
| | | */ |
| | | public static String sign(String username, String secret) { |
| | | Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); |
| | | Algorithm algorithm = Algorithm.HMAC256(secret); |
| | | // é带usernameä¿¡æ¯ |
| | | return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®requestä¸çtokenè·åç¨æ·è´¦å· |
| | | * |
| | | * @param request |
| | | * @return |
| | | * @throws JeecgBootException |
| | | */ |
| | | public static String getUserNameByToken(HttpServletRequest request) throws JeecgBootException { |
| | | String accessToken = request.getHeader("X-Access-Token"); |
| | | String username = getUsername(accessToken); |
| | | if (oConvertUtils.isEmpty(username)) { |
| | | throw new JeecgBootException("æªè·åå°ç¨æ·"); |
| | | } |
| | | return username; |
| | | } |
| | | |
| | | /** |
| | | * ä»sessionä¸è·ååé |
| | | * @param key |
| | | * @return |
| | | */ |
| | | public static String getSessionData(String key) { |
| | | //${myVar}% |
| | | //å¾å°${} åé¢çå¼ |
| | | String moshi = ""; |
| | | if(key.indexOf("}")!=-1){ |
| | | moshi = key.substring(key.indexOf("}")+1); |
| | | } |
| | | String returnValue = null; |
| | | if (key.contains("#{")) { |
| | | key = key.substring(2,key.indexOf("}")); |
| | | } |
| | | if (oConvertUtils.isNotEmpty(key)) { |
| | | HttpSession session = SpringContextUtils.getHttpServletRequest().getSession(); |
| | | returnValue = (String) session.getAttribute(key); |
| | | } |
| | | //ç»æå ä¸${} åé¢çå¼ |
| | | if(returnValue!=null){returnValue = returnValue + moshi;} |
| | | return returnValue; |
| | | } |
| | | |
| | | /** |
| | | * ä»å½åç¨æ·ä¸è·ååé |
| | | * @param key |
| | | * @param user |
| | | * @return |
| | | */ |
| | | //TODO æ¥å¾
æ¹é sckjkdsjsfjdk |
| | | public static String getUserSystemData(String key,SysUserCacheInfo user) { |
| | | if(user==null) { |
| | | user = JeecgDataAutorUtils.loadUserInfo(); |
| | | } |
| | | //#{sys_user_code}% |
| | | |
| | | // è·åç»å½ç¨æ·ä¿¡æ¯ |
| | | LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
| | | |
| | | String moshi = ""; |
| | | if(key.indexOf("}")!=-1){ |
| | | moshi = key.substring(key.indexOf("}")+1); |
| | | } |
| | | String returnValue = null; |
| | | //éå¯¹ç¹æ®æ 示å¤ç#{sysOrgCode}ï¼å¤ææ¿æ¢ |
| | | if (key.contains("#{")) { |
| | | key = key.substring(2,key.indexOf("}")); |
| | | } else { |
| | | key = key; |
| | | } |
| | | //æ¿æ¢ä¸ºç³»ç»ç»å½ç¨æ·å¸å· |
| | | if (key.equals(DataBaseConstant.SYS_USER_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_CODE_TABLE)) { |
| | | if(user==null) { |
| | | returnValue = sysUser.getUsername(); |
| | | }else { |
| | | returnValue = user.getSysUserCode(); |
| | | } |
| | | } |
| | | //æ¿æ¢ä¸ºç³»ç»ç»å½ç¨æ·çå®åå |
| | | else if (key.equals(DataBaseConstant.SYS_USER_NAME)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_NAME_TABLE)) { |
| | | if(user==null) { |
| | | returnValue = sysUser.getRealname(); |
| | | }else { |
| | | returnValue = user.getSysUserName(); |
| | | } |
| | | } |
| | | |
| | | //æ¿æ¢ä¸ºç³»ç»ç¨æ·ç»å½æä½¿ç¨çæºæç¼ç |
| | | else if (key.equals(DataBaseConstant.SYS_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_ORG_CODE_TABLE)) { |
| | | if(user==null) { |
| | | returnValue = sysUser.getOrgCode(); |
| | | }else { |
| | | returnValue = user.getSysOrgCode(); |
| | | } |
| | | } |
| | | //æ¿æ¢ä¸ºç³»ç»ç¨æ·ææ¥æçæææºæç¼ç |
| | | else if (key.equals(DataBaseConstant.SYS_MULTI_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_MULTI_ORG_CODE_TABLE)) { |
| | | if(user==null){ |
| | | //TODO ææ¶ä½¿ç¨ç¨æ·ç»å½é¨é¨ï¼åå¨é»è¾ç¼ºé·ï¼ä¸æ¯ç¨æ·ææ¥æçé¨é¨ |
| | | returnValue = sysUser.getOrgCode(); |
| | | }else{ |
| | | if(user.isOneDepart()) { |
| | | returnValue = user.getSysMultiOrgCode().get(0); |
| | | }else { |
| | | returnValue = Joiner.on(",").join(user.getSysMultiOrgCode()); |
| | | } |
| | | } |
| | | } |
| | | //æ¿æ¢ä¸ºå½åç³»ç»æ¶é´(å¹´ææ¥) |
| | | else if (key.equals(DataBaseConstant.SYS_DATE)|| key.toLowerCase().equals(DataBaseConstant.SYS_DATE_TABLE)) { |
| | | returnValue = DateUtils.formatDate(); |
| | | } |
| | | //æ¿æ¢ä¸ºå½åç³»ç»æ¶é´ï¼å¹´ææ¥æ¶åç§ï¼ |
| | | else if (key.equals(DataBaseConstant.SYS_TIME)|| key.toLowerCase().equals(DataBaseConstant.SYS_TIME_TABLE)) { |
| | | returnValue = DateUtils.now(); |
| | | } |
| | | //æµç¨ç¶æé»è®¤å¼ï¼é»è®¤æªåèµ·ï¼ |
| | | else if (key.equals(DataBaseConstant.BPM_STATUS)|| key.toLowerCase().equals(DataBaseConstant.BPM_STATUS_TABLE)) { |
| | | returnValue = "1"; |
| | | } |
| | | //update-begin-author:taoyan date:20210330 for:å¤ç§æ·IDä½ä¸ºç³»ç»åé |
| | | else if (key.equals(DataBaseConstant.TENANT_ID) || key.toLowerCase().equals(DataBaseConstant.TENANT_ID_TABLE)){ |
| | | returnValue = sysUser.getRelTenantIds(); |
| | | if(oConvertUtils.isEmpty(returnValue) || (returnValue!=null && returnValue.indexOf(",")>0)){ |
| | | returnValue = SpringContextUtils.getHttpServletRequest().getHeader(CommonConstant.TENANT_ID); |
| | | } |
| | | } |
| | | //update-end-author:taoyan date:20210330 for:å¤ç§æ·IDä½ä¸ºç³»ç»åé |
| | | if(returnValue!=null){returnValue = returnValue + moshi;} |
| | | return returnValue; |
| | | } |
| | | |
| | | // public static void main(String[] args) { |
| | | // String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjUzMzY1MTMsInVzZXJuYW1lIjoiYWRtaW4ifQ.xjhud_tWCNYBOg_aRlMgOdlZoWFFKB_givNElHNw3X0"; |
| | | // System.out.println(JwtUtil.getUsername(token)); |
| | | // } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @Accessors(chain = true) |
| | | @JsonIgnoreProperties(ignoreUnknown = true) |
| | | public class ComboModel implements Serializable { |
| | | private String id; |
| | | private String title; |
| | | /**ææ¡£ç®¡ç 表åtableé»è®¤éä¸*/ |
| | | private boolean checked; |
| | | /**ææ¡£ç®¡ç 表åtable ç¨æ·è´¦å·*/ |
| | | private String username; |
| | | /**ææ¡£ç®¡ç 表åtable ç¨æ·é®ç®±*/ |
| | | private String email; |
| | | /**ææ¡£ç®¡ç 表åtable è§è²ç¼ç */ |
| | | private String roleCode; |
| | | |
| | | public ComboModel(){ |
| | | |
| | | }; |
| | | |
| | | public ComboModel(String id,String title,boolean checked,String username){ |
| | | this.id = id; |
| | | this.title = title; |
| | | this.checked = false; |
| | | this.username = username; |
| | | }; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
| | | |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @Accessors(chain = true) |
| | | @JsonIgnoreProperties(ignoreUnknown = true) |
| | | public class DictModel implements Serializable{ |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public DictModel() { |
| | | } |
| | | |
| | | public DictModel(String value, String text) { |
| | | this.value = value; |
| | | this.text = text; |
| | | } |
| | | |
| | | /** |
| | | * åå
¸value |
| | | */ |
| | | private String value; |
| | | /** |
| | | * åå
¸ææ¬ |
| | | */ |
| | | private String text; |
| | | |
| | | /** |
| | | * ç¹æ®ç¨éï¼ JgEditableTable |
| | | * @return |
| | | */ |
| | | public String getTitle() { |
| | | return this.text; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | /** |
| | | * æ¥è¯¢å¤ä¸ªåå
¸æ¶ç¨å° |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class DictModelMany extends DictModel { |
| | | |
| | | /** |
| | | * åå
¸codeï¼æ ¹æ®å¤ä¸ªå段codeæ¥è¯¢æ¶æç¨å°ï¼ç¨äºåºåä¸åçåå
¸é项 |
| | | */ |
| | | private String dictCode; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * åå
¸æ¥è¯¢åæ°å®ä½ |
| | | */ |
| | | @Data |
| | | public class DictQuery { |
| | | /** |
| | | * 表å |
| | | */ |
| | | private String table; |
| | | /** |
| | | * åå¨å |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * æ¾ç¤ºå |
| | | */ |
| | | private String text; |
| | | |
| | | /** |
| | | * å
³é®åæ¥è¯¢ |
| | | */ |
| | | private String keyword; |
| | | |
| | | /** |
| | | * åå¨åçå¼ ç¨äºåæ¾æ¥è¯¢ |
| | | */ |
| | | private String codeValue; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.beans.BeanUtils; |
| | | |
| | | @Data |
| | | public class DynamicDataSourceModel { |
| | | |
| | | public DynamicDataSourceModel() { |
| | | |
| | | } |
| | | |
| | | public DynamicDataSourceModel(Object dbSource) { |
| | | if (dbSource != null) { |
| | | BeanUtils.copyProperties(dbSource, this); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | private java.lang.String id; |
| | | /** |
| | | * æ°æ®æºç¼ç |
| | | */ |
| | | private java.lang.String code; |
| | | /** |
| | | * æ°æ®åºç±»å |
| | | */ |
| | | private java.lang.String dbType; |
| | | /** |
| | | * 驱å¨ç±» |
| | | */ |
| | | private java.lang.String dbDriver; |
| | | /** |
| | | * æ°æ®æºå°å |
| | | */ |
| | | private java.lang.String dbUrl; |
| | | |
| | | // /** |
| | | // * æ°æ®åºåç§° |
| | | // */ |
| | | // private java.lang.String dbName; |
| | | |
| | | /** |
| | | * ç¨æ·å |
| | | */ |
| | | private java.lang.String dbUsername; |
| | | /** |
| | | * å¯ç |
| | | */ |
| | | private java.lang.String dbPassword; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import java.util.Date; |
| | | |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | /** |
| | | * <p> |
| | | * å¨çº¿ç¨æ·ä¿¡æ¯ |
| | | * </p> |
| | | * |
| | | * @Author scott |
| | | * @since 2018-12-20 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @Accessors(chain = true) |
| | | public class LoginUser { |
| | | |
| | | /** |
| | | * ç»å½äººid |
| | | */ |
| | | private String id; |
| | | |
| | | /** |
| | | * ç»å½äººè´¦å· |
| | | */ |
| | | private String username; |
| | | |
| | | /** |
| | | * ç»å½äººåå |
| | | */ |
| | | private String realname; |
| | | |
| | | /** |
| | | * ç»å½äººå¯ç |
| | | */ |
| | | private String password; |
| | | |
| | | /** |
| | | * å½åç»å½é¨é¨code |
| | | */ |
| | | private String orgCode; |
| | | /** |
| | | * 头å |
| | | */ |
| | | private String avatar; |
| | | |
| | | /** |
| | | * çæ¥ |
| | | */ |
| | | @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private Date birthday; |
| | | |
| | | /** |
| | | * æ§å«ï¼1ï¼ç· 2ï¼å¥³ï¼ |
| | | */ |
| | | private Integer sex; |
| | | |
| | | /** |
| | | * çµåé®ä»¶ |
| | | */ |
| | | private String email; |
| | | |
| | | /** |
| | | * çµè¯ |
| | | */ |
| | | private String phone; |
| | | |
| | | /** |
| | | * ç¶æ(1ï¼æ£å¸¸ 2ï¼å»ç» ï¼ |
| | | */ |
| | | private Integer status; |
| | | |
| | | private Integer delFlag; |
| | | /** |
| | | * 忥工使µå¼æ1忥0ä¸åæ¥ |
| | | */ |
| | | private Integer activitiSync; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * 身份ï¼1 æ®éåå·¥ 2 ä¸çº§ï¼ |
| | | */ |
| | | private Integer userIdentity; |
| | | |
| | | /** |
| | | * 管çé¨é¨ids |
| | | */ |
| | | private String departIds; |
| | | |
| | | /** |
| | | * èå¡ï¼å
³èèå¡è¡¨ |
| | | */ |
| | | private String post; |
| | | |
| | | /** |
| | | * 座æºå· |
| | | */ |
| | | private String telephone; |
| | | |
| | | /**å¤ç§æ·idé
ç½®ï¼ç¼è¾ç¨æ·çæ¶å设置*/ |
| | | private String relTenantIds; |
| | | |
| | | /**设å¤id uniappæ¨éç¨*/ |
| | | private String clientId; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | import org.jeecgframework.poi.excel.annotation.Excel; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * <p> |
| | | * è§è²è¡¨ |
| | | * </p> |
| | | * |
| | | * @Author scott |
| | | * @since 2018-12-19 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @Accessors(chain = true) |
| | | public class RoleVO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | |
| | | private String id; |
| | | |
| | | /** |
| | | * è§è²åç§° |
| | | */ |
| | | @Excel(name="è§è²å",width=15) |
| | | private String roleName; |
| | | |
| | | /** |
| | | * è§è²ç¼ç |
| | | */ |
| | | @Excel(name="è§è²ç¼ç ",width=15) |
| | | private String roleCode; |
| | | |
| | | /** |
| | | * æè¿° |
| | | */ |
| | | @Excel(name="æè¿°",width=60) |
| | | private String description; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String createBy; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * æ´æ°äºº |
| | | */ |
| | | private String updateBy; |
| | | |
| | | /** |
| | | * æ´æ°æ¶é´ |
| | | */ |
| | | @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date updateTime; |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import org.jeecgframework.poi.excel.annotation.Excel; |
| | | |
| | | /** |
| | | * @Author qinfeng |
| | | * @Date 2020/2/19 12:01 |
| | | * @Description: |
| | | * @Version 1.0 |
| | | */ |
| | | public class SysCategoryModel { |
| | | /**主é®*/ |
| | | private java.lang.String id; |
| | | /**ç¶çº§èç¹*/ |
| | | private java.lang.String pid; |
| | | /**ç±»ååç§°*/ |
| | | private java.lang.String name; |
| | | /**ç±»åç¼ç */ |
| | | private java.lang.String code; |
| | | |
| | | public String getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(String id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public String getPid() { |
| | | return pid; |
| | | } |
| | | |
| | | public void setPid(String pid) { |
| | | this.pid = pid; |
| | | } |
| | | |
| | | public String getName() { |
| | | return name; |
| | | } |
| | | |
| | | public void setName(String name) { |
| | | this.name = name; |
| | | } |
| | | |
| | | public String getCode() { |
| | | return code; |
| | | } |
| | | |
| | | public void setCode(String code) { |
| | | this.code = code; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | /** |
| | | * lvdandan é¨é¨æºæmodel |
| | | */ |
| | | public class SysDepartModel { |
| | | /**ID*/ |
| | | private String id; |
| | | /**ç¶æºæID*/ |
| | | private String parentId; |
| | | /**æºæ/é¨é¨åç§°*/ |
| | | private String departName; |
| | | /**è±æå*/ |
| | | private String departNameEn; |
| | | /**缩å*/ |
| | | private String departNameAbbr; |
| | | /**æåº*/ |
| | | private Integer departOrder; |
| | | /**æè¿°*/ |
| | | private String description; |
| | | /**æºæç±»å« 1ç»ç»æºæï¼2å²ä½*/ |
| | | private String orgCategory; |
| | | /**æºæç±»å*/ |
| | | private String orgType; |
| | | /**æºæç¼ç */ |
| | | private String orgCode; |
| | | /**ææºå·*/ |
| | | private String mobile; |
| | | /**ä¼ ç*/ |
| | | private String fax; |
| | | /**å°å*/ |
| | | private String address; |
| | | /**夿³¨*/ |
| | | private String memo; |
| | | |
| | | public String getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(String id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public String getParentId() { |
| | | return parentId; |
| | | } |
| | | |
| | | public void setParentId(String parentId) { |
| | | this.parentId = parentId; |
| | | } |
| | | |
| | | public String getDepartName() { |
| | | return departName; |
| | | } |
| | | |
| | | public void setDepartName(String departName) { |
| | | this.departName = departName; |
| | | } |
| | | |
| | | public String getDepartNameEn() { |
| | | return departNameEn; |
| | | } |
| | | |
| | | public void setDepartNameEn(String departNameEn) { |
| | | this.departNameEn = departNameEn; |
| | | } |
| | | |
| | | public String getDepartNameAbbr() { |
| | | return departNameAbbr; |
| | | } |
| | | |
| | | public void setDepartNameAbbr(String departNameAbbr) { |
| | | this.departNameAbbr = departNameAbbr; |
| | | } |
| | | |
| | | public Integer getDepartOrder() { |
| | | return departOrder; |
| | | } |
| | | |
| | | public void setDepartOrder(Integer departOrder) { |
| | | this.departOrder = departOrder; |
| | | } |
| | | |
| | | public String getDescription() { |
| | | return description; |
| | | } |
| | | |
| | | public void setDescription(String description) { |
| | | this.description = description; |
| | | } |
| | | |
| | | public String getOrgCategory() { |
| | | return orgCategory; |
| | | } |
| | | |
| | | public void setOrgCategory(String orgCategory) { |
| | | this.orgCategory = orgCategory; |
| | | } |
| | | |
| | | public String getOrgType() { |
| | | return orgType; |
| | | } |
| | | |
| | | public void setOrgType(String orgType) { |
| | | this.orgType = orgType; |
| | | } |
| | | |
| | | public String getOrgCode() { |
| | | return orgCode; |
| | | } |
| | | |
| | | public void setOrgCode(String orgCode) { |
| | | this.orgCode = orgCode; |
| | | } |
| | | |
| | | public String getMobile() { |
| | | return mobile; |
| | | } |
| | | |
| | | public void setMobile(String mobile) { |
| | | this.mobile = mobile; |
| | | } |
| | | |
| | | public String getFax() { |
| | | return fax; |
| | | } |
| | | |
| | | public void setFax(String fax) { |
| | | this.fax = fax; |
| | | } |
| | | |
| | | public String getAddress() { |
| | | return address; |
| | | } |
| | | |
| | | public void setAddress(String address) { |
| | | this.address = address; |
| | | } |
| | | |
| | | public String getMemo() { |
| | | return memo; |
| | | } |
| | | |
| | | public void setMemo(String memo) { |
| | | this.memo = memo; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * <p> |
| | | * èåæéè§å表 |
| | | * </p> |
| | | * |
| | | * @Author huangzhilin |
| | | * @since 2019-03-29 |
| | | */ |
| | | public class SysPermissionDataRuleModel { |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | private String id; |
| | | |
| | | /** |
| | | * 对åºçèåid |
| | | */ |
| | | private String permissionId; |
| | | |
| | | /** |
| | | * è§ååç§° |
| | | */ |
| | | private String ruleName; |
| | | |
| | | /** |
| | | * åæ®µ |
| | | */ |
| | | private String ruleColumn; |
| | | |
| | | /** |
| | | * æ¡ä»¶ |
| | | */ |
| | | private String ruleConditions; |
| | | |
| | | /** |
| | | * è§åå¼ |
| | | */ |
| | | private String ruleValue; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String createBy; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ¶é´ |
| | | */ |
| | | private Date updateTime; |
| | | |
| | | /** |
| | | * ä¿®æ¹äºº |
| | | */ |
| | | private String updateBy; |
| | | |
| | | public String getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(String id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public String getPermissionId() { |
| | | return permissionId; |
| | | } |
| | | |
| | | public void setPermissionId(String permissionId) { |
| | | this.permissionId = permissionId; |
| | | } |
| | | |
| | | public String getRuleName() { |
| | | return ruleName; |
| | | } |
| | | |
| | | public void setRuleName(String ruleName) { |
| | | this.ruleName = ruleName; |
| | | } |
| | | |
| | | public String getRuleColumn() { |
| | | return ruleColumn; |
| | | } |
| | | |
| | | public void setRuleColumn(String ruleColumn) { |
| | | this.ruleColumn = ruleColumn; |
| | | } |
| | | |
| | | public String getRuleConditions() { |
| | | return ruleConditions; |
| | | } |
| | | |
| | | public void setRuleConditions(String ruleConditions) { |
| | | this.ruleConditions = ruleConditions; |
| | | } |
| | | |
| | | public String getRuleValue() { |
| | | return ruleValue; |
| | | } |
| | | |
| | | public void setRuleValue(String ruleValue) { |
| | | this.ruleValue = ruleValue; |
| | | } |
| | | |
| | | public Date getCreateTime() { |
| | | return createTime; |
| | | } |
| | | |
| | | public void setCreateTime(Date createTime) { |
| | | this.createTime = createTime; |
| | | } |
| | | |
| | | public String getCreateBy() { |
| | | return createBy; |
| | | } |
| | | |
| | | public void setCreateBy(String createBy) { |
| | | this.createBy = createBy; |
| | | } |
| | | |
| | | public Date getUpdateTime() { |
| | | return updateTime; |
| | | } |
| | | |
| | | public void setUpdateTime(Date updateTime) { |
| | | this.updateTime = updateTime; |
| | | } |
| | | |
| | | public String getUpdateBy() { |
| | | return updateBy; |
| | | } |
| | | |
| | | public void setUpdateBy(String updateBy) { |
| | | this.updateBy = updateBy; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import java.util.List; |
| | | |
| | | import org.jeecg.common.util.DateUtils; |
| | | |
| | | public class SysUserCacheInfo { |
| | | |
| | | private String sysUserCode; |
| | | |
| | | private String sysUserName; |
| | | |
| | | private String sysOrgCode; |
| | | |
| | | private List<String> sysMultiOrgCode; |
| | | |
| | | private boolean oneDepart; |
| | | |
| | | public boolean isOneDepart() { |
| | | return oneDepart; |
| | | } |
| | | |
| | | public void setOneDepart(boolean oneDepart) { |
| | | this.oneDepart = oneDepart; |
| | | } |
| | | |
| | | public String getSysDate() { |
| | | return DateUtils.formatDate(); |
| | | } |
| | | |
| | | public String getSysTime() { |
| | | return DateUtils.now(); |
| | | } |
| | | |
| | | public String getSysUserCode() { |
| | | return sysUserCode; |
| | | } |
| | | |
| | | public void setSysUserCode(String sysUserCode) { |
| | | this.sysUserCode = sysUserCode; |
| | | } |
| | | |
| | | public String getSysUserName() { |
| | | return sysUserName; |
| | | } |
| | | |
| | | public void setSysUserName(String sysUserName) { |
| | | this.sysUserName = sysUserName; |
| | | } |
| | | |
| | | public String getSysOrgCode() { |
| | | return sysOrgCode; |
| | | } |
| | | |
| | | public void setSysOrgCode(String sysOrgCode) { |
| | | this.sysOrgCode = sysOrgCode; |
| | | } |
| | | |
| | | public List<String> getSysMultiOrgCode() { |
| | | return sysMultiOrgCode; |
| | | } |
| | | |
| | | public void setSysMultiOrgCode(List<String> sysMultiOrgCode) { |
| | | this.sysMultiOrgCode = sysMultiOrgCode; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.experimental.Accessors; |
| | | import org.jeecg.common.aspect.annotation.Dict; |
| | | import org.jeecgframework.poi.excel.annotation.Excel; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * <p> |
| | | * ç¨æ·è¡¨ |
| | | * </p> |
| | | * |
| | | * @Author scott |
| | | * @since 2018-12-20 |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = false) |
| | | @Accessors(chain = true) |
| | | public class UserVO implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * id |
| | | */ |
| | | |
| | | private String id; |
| | | |
| | | /** |
| | | * ç»å½è´¦å· |
| | | */ |
| | | @Excel(name = "ç»å½è´¦å·", width = 15) |
| | | private String username; |
| | | |
| | | /** |
| | | * çå®å§å |
| | | */ |
| | | @Excel(name = "çå®å§å", width = 15) |
| | | private String realname; |
| | | |
| | | /** |
| | | * å¯ç |
| | | */ |
| | | @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) |
| | | private String password; |
| | | |
| | | /** |
| | | * md5å¯ç ç |
| | | */ |
| | | @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) |
| | | private String salt; |
| | | |
| | | /** |
| | | * 头å |
| | | */ |
| | | @Excel(name = "头å", width = 15,type = 2) |
| | | private String avatar; |
| | | |
| | | /** |
| | | * çæ¥ |
| | | */ |
| | | @Excel(name = "çæ¥", width = 15, format = "yyyy-MM-dd") |
| | | @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private Date birthday; |
| | | |
| | | /** |
| | | * æ§å«ï¼1ï¼ç· 2ï¼å¥³ï¼ |
| | | */ |
| | | @Excel(name = "æ§å«", width = 15,dicCode="sex") |
| | | @Dict(dicCode = "sex") |
| | | private Integer sex; |
| | | |
| | | /** |
| | | * çµåé®ä»¶ |
| | | */ |
| | | @Excel(name = "çµåé®ä»¶", width = 15) |
| | | private String email; |
| | | |
| | | /** |
| | | * çµè¯ |
| | | */ |
| | | @Excel(name = "çµè¯", width = 15) |
| | | private String phone; |
| | | |
| | | /** |
| | | * é¨é¨code(å½åéæ©ç»å½é¨é¨) |
| | | */ |
| | | private String orgCode; |
| | | |
| | | /**é¨é¨åç§°*/ |
| | | private transient String orgCodeTxt; |
| | | |
| | | /** |
| | | * ç¶æ(1ï¼æ£å¸¸ 2ï¼å»ç» ï¼ |
| | | */ |
| | | @Excel(name = "ç¶æ", width = 15,dicCode="user_status") |
| | | @Dict(dicCode = "user_status") |
| | | private Integer status; |
| | | |
| | | /** |
| | | * å é¤ç¶æï¼0ï¼æ£å¸¸ï¼1å·²å é¤ï¼ |
| | | */ |
| | | @Excel(name = "å é¤ç¶æ", width = 15,dicCode="del_flag") |
| | | @TableLogic |
| | | private Integer delFlag; |
| | | |
| | | /** |
| | | * å·¥å·ï¼å¯ä¸é® |
| | | */ |
| | | @Excel(name = "å·¥å·", width = 15) |
| | | private String workNo; |
| | | |
| | | /** |
| | | * èå¡ï¼å
³èèå¡è¡¨ |
| | | */ |
| | | @Excel(name = "èå¡", width = 15) |
| | | @Dict(dictTable ="sys_position",dicText = "name",dicCode = "code") |
| | | private String post; |
| | | |
| | | /** |
| | | * 座æºå· |
| | | */ |
| | | @Excel(name = "座æºå·", width = 15) |
| | | private String telephone; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String createBy; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * æ´æ°äºº |
| | | */ |
| | | private String updateBy; |
| | | |
| | | /** |
| | | * æ´æ°æ¶é´ |
| | | */ |
| | | private Date updateTime; |
| | | /** |
| | | * 忥工使µå¼æ1忥0ä¸åæ¥ |
| | | */ |
| | | private Integer activitiSync; |
| | | |
| | | /** |
| | | * 身份ï¼0 æ®éæå 1 ä¸çº§ï¼ |
| | | */ |
| | | @Excel(name="ï¼1æ®éæå 2ä¸çº§ï¼",width = 15) |
| | | private Integer userIdentity; |
| | | |
| | | /** |
| | | * è´è´£é¨é¨ |
| | | */ |
| | | @Excel(name="è´è´£é¨é¨",width = 15,dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") |
| | | @Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") |
| | | private String departIds; |
| | | |
| | | /** |
| | | * å¤ç§æ·idé
ç½®ï¼ç¼è¾ç¨æ·çæ¶å设置 |
| | | */ |
| | | private String relTenantIds; |
| | | |
| | | /**设å¤id uniappæ¨éç¨*/ |
| | | private String clientId; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | /** |
| | | * |
| | | * @Author å¼ ä»£æµ© |
| | | * |
| | | */ |
| | | public enum BrowserType { |
| | | IE11,IE10,IE9,IE8,IE7,IE6,Firefox,Safari,Chrome,Opera,Camino,Gecko |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | /** |
| | | * |
| | | * @Author å¼ ä»£æµ© |
| | | * |
| | | */ |
| | | public class BrowserUtils { |
| | | |
| | | // 夿æ¯å¦æ¯IE |
| | | public static boolean isIE(HttpServletRequest request) { |
| | | return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request |
| | | .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true |
| | | : false; |
| | | } |
| | | |
| | | /** |
| | | * è·åIEçæ¬ |
| | | * |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static Double getIEversion(HttpServletRequest request) { |
| | | Double version = 0.0; |
| | | if (getBrowserType(request, IE11)) { |
| | | version = 11.0; |
| | | } else if (getBrowserType(request, IE10)) { |
| | | version = 10.0; |
| | | } else if (getBrowserType(request, IE9)) { |
| | | version = 9.0; |
| | | } else if (getBrowserType(request, IE8)) { |
| | | version = 8.0; |
| | | } else if (getBrowserType(request, IE7)) { |
| | | version = 7.0; |
| | | } else if (getBrowserType(request, IE6)) { |
| | | version = 6.0; |
| | | } |
| | | return version; |
| | | } |
| | | |
| | | /** |
| | | * è·åæµè§å¨ç±»å |
| | | * |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static BrowserType getBrowserType(HttpServletRequest request) { |
| | | BrowserType browserType = null; |
| | | if (getBrowserType(request, IE11)) { |
| | | browserType = BrowserType.IE11; |
| | | } |
| | | if (getBrowserType(request, IE10)) { |
| | | browserType = BrowserType.IE10; |
| | | } |
| | | if (getBrowserType(request, IE9)) { |
| | | browserType = BrowserType.IE9; |
| | | } |
| | | if (getBrowserType(request, IE8)) { |
| | | browserType = BrowserType.IE8; |
| | | } |
| | | if (getBrowserType(request, IE7)) { |
| | | browserType = BrowserType.IE7; |
| | | } |
| | | if (getBrowserType(request, IE6)) { |
| | | browserType = BrowserType.IE6; |
| | | } |
| | | if (getBrowserType(request, FIREFOX)) { |
| | | browserType = BrowserType.Firefox; |
| | | } |
| | | if (getBrowserType(request, SAFARI)) { |
| | | browserType = BrowserType.Safari; |
| | | } |
| | | if (getBrowserType(request, CHROME)) { |
| | | browserType = BrowserType.Chrome; |
| | | } |
| | | if (getBrowserType(request, OPERA)) { |
| | | browserType = BrowserType.Opera; |
| | | } |
| | | if (getBrowserType(request, "Camino")) { |
| | | browserType = BrowserType.Camino; |
| | | } |
| | | return browserType; |
| | | } |
| | | |
| | | private static boolean getBrowserType(HttpServletRequest request, |
| | | String brosertype) { |
| | | return request.getHeader("USER-AGENT").toLowerCase() |
| | | .indexOf(brosertype) > 0 ? true : false; |
| | | } |
| | | |
| | | private final static String IE11 = "rv:11.0"; |
| | | private final static String IE10 = "MSIE 10.0"; |
| | | private final static String IE9 = "MSIE 9.0"; |
| | | private final static String IE8 = "MSIE 8.0"; |
| | | private final static String IE7 = "MSIE 7.0"; |
| | | private final static String IE6 = "MSIE 6.0"; |
| | | private final static String MAXTHON = "Maxthon"; |
| | | private final static String QQ = "QQBrowser"; |
| | | private final static String GREEN = "GreenBrowser"; |
| | | private final static String SE360 = "360SE"; |
| | | private final static String FIREFOX = "Firefox"; |
| | | private final static String OPERA = "Opera"; |
| | | private final static String CHROME = "Chrome"; |
| | | private final static String SAFARI = "Safari"; |
| | | private final static String OTHER = "å
¶å®"; |
| | | |
| | | public static String checkBrowse(HttpServletRequest request) { |
| | | String userAgent = request.getHeader("USER-AGENT"); |
| | | if (regex(OPERA, userAgent)) { |
| | | return OPERA; |
| | | } |
| | | if (regex(CHROME, userAgent)) { |
| | | return CHROME; |
| | | } |
| | | if (regex(FIREFOX, userAgent)) { |
| | | return FIREFOX; |
| | | } |
| | | if (regex(SAFARI, userAgent)) { |
| | | return SAFARI; |
| | | } |
| | | if (regex(SE360, userAgent)) { |
| | | return SE360; |
| | | } |
| | | if (regex(GREEN, userAgent)) { |
| | | return GREEN; |
| | | } |
| | | if (regex(QQ, userAgent)) { |
| | | return QQ; |
| | | } |
| | | if (regex(MAXTHON, userAgent)) { |
| | | return MAXTHON; |
| | | } |
| | | if (regex(IE11, userAgent)) { |
| | | return IE11; |
| | | } |
| | | if (regex(IE10, userAgent)) { |
| | | return IE10; |
| | | } |
| | | if (regex(IE9, userAgent)) { |
| | | return IE9; |
| | | } |
| | | if (regex(IE8, userAgent)) { |
| | | return IE8; |
| | | } |
| | | if (regex(IE7, userAgent)) { |
| | | return IE7; |
| | | } |
| | | if (regex(IE6, userAgent)) { |
| | | return IE6; |
| | | } |
| | | return OTHER; |
| | | } |
| | | |
| | | public static boolean regex(String regex, String str) { |
| | | Pattern p = Pattern.compile(regex, Pattern.MULTILINE); |
| | | Matcher m = p.matcher(str); |
| | | return m.find(); |
| | | } |
| | | |
| | | |
| | | private static Map<String, String> langMap = new HashMap<String, String>(); |
| | | private final static String ZH = "zh"; |
| | | private final static String ZH_CN = "zh-cn"; |
| | | |
| | | private final static String EN = "en"; |
| | | private final static String EN_US = "en"; |
| | | |
| | | |
| | | static |
| | | { |
| | | langMap.put(ZH, ZH_CN); |
| | | langMap.put(EN, EN_US); |
| | | } |
| | | |
| | | public static String getBrowserLanguage(HttpServletRequest request) { |
| | | |
| | | String browserLang = request.getLocale().getLanguage(); |
| | | String browserLangCode = (String)langMap.get(browserLang); |
| | | |
| | | if(browserLangCode == null) |
| | | { |
| | | browserLangCode = EN_US; |
| | | } |
| | | return browserLangCode; |
| | | } |
| | | |
| | | /** å¤æè¯·æ±æ¯å¦æ¥èªçµè端 */ |
| | | public static boolean isDesktop(HttpServletRequest request) { |
| | | return !isMobile(request); |
| | | } |
| | | |
| | | /** å¤æè¯·æ±æ¯å¦æ¥èªç§»å¨ç«¯ */ |
| | | public static boolean isMobile(HttpServletRequest request) { |
| | | String ua = request.getHeader("User-Agent").toLowerCase(); |
| | | Pattern pattern = Pattern.compile("(phone|pad|pod|iphone|ipod|ios|ipad|android|mobile|blackberry|iemobile|mqqbrowser|juc|fennec|wosbrowser|browserng|webos|symbian|windows phone)"); |
| | | return pattern.matcher(ua).find(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; |
| | | import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; |
| | | import com.baomidou.mybatisplus.annotation.DbType; |
| | | import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.DataBaseConstant; |
| | | import org.jeecg.common.util.filter.FileTypeFilter; |
| | | import org.jeecg.common.util.oss.OssBootUtil; |
| | | import org.jeecgframework.poi.util.PoiPublicUtil; |
| | | import org.springframework.jdbc.datasource.DriverManagerDataSource; |
| | | import org.springframework.util.FileCopyUtils; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.sql.DataSource; |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.sql.Connection; |
| | | import java.sql.DatabaseMetaData; |
| | | import java.sql.SQLException; |
| | | import java.util.Map; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | @Slf4j |
| | | public class CommonUtils { |
| | | |
| | | //䏿æ£å |
| | | private static Pattern ZHONGWEN_PATTERN = Pattern.compile("[\u4e00-\u9fa5]"); |
| | | |
| | | public static String uploadOnlineImage(byte[] data,String basePath,String bizPath,String uploadType){ |
| | | String dbPath = null; |
| | | String fileName = "image" + Math.round(Math.random() * 100000000000L); |
| | | fileName += "." + PoiPublicUtil.getFileExtendName(data); |
| | | try { |
| | | if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){ |
| | | File file = new File(basePath + File.separator + bizPath + File.separator ); |
| | | if (!file.exists()) { |
| | | file.mkdirs();// å建æä»¶æ ¹ç®å½ |
| | | } |
| | | String savePath = file.getPath() + File.separator + fileName; |
| | | File savefile = new File(savePath); |
| | | FileCopyUtils.copy(data, savefile); |
| | | dbPath = bizPath + File.separator + fileName; |
| | | }else { |
| | | InputStream in = new ByteArrayInputStream(data); |
| | | String relativePath = bizPath+"/"+fileName; |
| | | if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ |
| | | dbPath = MinioUtil.upload(in,relativePath); |
| | | }else if(CommonConstant.UPLOAD_TYPE_OSS.equals(uploadType)){ |
| | | dbPath = OssBootUtil.upload(in,relativePath); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return dbPath; |
| | | } |
| | | |
| | | /** |
| | | * 夿æä»¶åæ¯å¦å¸¦ç符ï¼éæ°å¤ç |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public static String getFileName(String fileName){ |
| | | //夿æ¯å¦å¸¦æçç¬¦ä¿¡æ¯ |
| | | // Check for Unix-style path |
| | | int unixSep = fileName.lastIndexOf('/'); |
| | | // Check for Windows-style path |
| | | int winSep = fileName.lastIndexOf('\\'); |
| | | // Cut off at latest possible point |
| | | int pos = (winSep > unixSep ? winSep : unixSep); |
| | | if (pos != -1) { |
| | | // Any sort of path separator found... |
| | | fileName = fileName.substring(pos + 1); |
| | | } |
| | | //æ¿æ¢ä¸ä¼ æä»¶ååçç¹æ®å符 |
| | | fileName = fileName.replace("=","").replace(",","").replace("&","") |
| | | .replace("#", "").replace("â", "").replace("â", ""); |
| | | //æ¿æ¢ä¸ä¼ æä»¶ååä¸çç©ºæ ¼ |
| | | fileName=fileName.replaceAll("\\s",""); |
| | | return fileName; |
| | | } |
| | | |
| | | // java 夿åç¬¦ä¸²éæ¯å¦å
å«ä¸æå符 |
| | | public static boolean ifContainChinese(String str) { |
| | | if(str.getBytes().length == str.length()){ |
| | | return false; |
| | | }else{ |
| | | Matcher m = ZHONGWEN_PATTERN.matcher(str); |
| | | if (m.find()) { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ç»ä¸å
¨å±ä¸ä¼ |
| | | * @Return: java.lang.String |
| | | */ |
| | | public static String upload(MultipartFile file, String bizPath, String uploadType) { |
| | | String url = ""; |
| | | if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ |
| | | url = MinioUtil.upload(file,bizPath); |
| | | }else{ |
| | | url = OssBootUtil.upload(file,bizPath); |
| | | } |
| | | return url; |
| | | } |
| | | /** |
| | | * æ¬å°æä»¶ä¸ä¼ |
| | | * @param mf æä»¶ |
| | | * @param bizPath èªå®ä¹è·¯å¾ |
| | | * @return |
| | | */ |
| | | public static String uploadLocal(MultipartFile mf,String bizPath,String uploadpath){ |
| | | try { |
| | | //update-begin-author:liusq date:20210809 for: è¿æ»¤ä¸ä¼ æä»¶ç±»å |
| | | FileTypeFilter.fileTypeFilter(mf); |
| | | //update-end-author:liusq date:20210809 for: è¿æ»¤ä¸ä¼ æä»¶ç±»å |
| | | String fileName = null; |
| | | File file = new File(uploadpath + File.separator + bizPath + File.separator ); |
| | | if (!file.exists()) { |
| | | file.mkdirs();// å建æä»¶æ ¹ç®å½ |
| | | } |
| | | String orgName = mf.getOriginalFilename();// è·åæä»¶å |
| | | orgName = CommonUtils.getFileName(orgName); |
| | | if(orgName.indexOf(".")!=-1){ |
| | | fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); |
| | | }else{ |
| | | fileName = orgName+ "_" + System.currentTimeMillis(); |
| | | } |
| | | String savePath = file.getPath() + File.separator + fileName; |
| | | File savefile = new File(savePath); |
| | | FileCopyUtils.copy(mf.getBytes(), savefile); |
| | | String dbpath = null; |
| | | if(oConvertUtils.isNotEmpty(bizPath)){ |
| | | dbpath = bizPath + File.separator + fileName; |
| | | }else{ |
| | | dbpath = fileName; |
| | | } |
| | | if (dbpath.contains("\\")) { |
| | | dbpath = dbpath.replace("\\", "/"); |
| | | } |
| | | return dbpath; |
| | | } catch (IOException e) { |
| | | log.error(e.getMessage(), e); |
| | | }catch (Exception e) { |
| | | log.error(e.getMessage(), e); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * ç»ä¸å
¨å±ä¸ä¼ 带桶 |
| | | * @Return: java.lang.String |
| | | */ |
| | | public static String upload(MultipartFile file, String bizPath, String uploadType, String customBucket) { |
| | | String url = ""; |
| | | if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ |
| | | url = MinioUtil.upload(file,bizPath,customBucket); |
| | | }else{ |
| | | url = OssBootUtil.upload(file,bizPath,customBucket); |
| | | } |
| | | return url; |
| | | } |
| | | |
| | | /** å½åç³»ç»æ°æ®åºç±»å */ |
| | | private static String DB_TYPE = ""; |
| | | private static DbType dbTypeEnum = null; |
| | | |
| | | /** |
| | | * å
¨å±è·å平尿°æ®åºç±»åï¼ä½åºäºï¼ |
| | | * @return |
| | | */ |
| | | @Deprecated |
| | | public static String getDatabaseType() { |
| | | if(oConvertUtils.isNotEmpty(DB_TYPE)){ |
| | | return DB_TYPE; |
| | | } |
| | | DataSource dataSource = SpringContextUtils.getApplicationContext().getBean(DataSource.class); |
| | | try { |
| | | return getDatabaseTypeByDataSource(dataSource); |
| | | } catch (SQLException e) { |
| | | //e.printStackTrace(); |
| | | log.warn(e.getMessage(),e); |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å
¨å±è·å平尿°æ®åºç±»åï¼å¯¹åºmybaisPlusæä¸¾ï¼ |
| | | * @return |
| | | */ |
| | | public static DbType getDatabaseTypeEnum() { |
| | | if (oConvertUtils.isNotEmpty(dbTypeEnum)) { |
| | | return dbTypeEnum; |
| | | } |
| | | try { |
| | | DataSource dataSource = SpringContextUtils.getApplicationContext().getBean(DataSource.class); |
| | | dbTypeEnum = JdbcUtils.getDbType(dataSource.getConnection().getMetaData().getURL()); |
| | | return dbTypeEnum; |
| | | } catch (SQLException e) { |
| | | log.warn(e.getMessage(), e); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ°æ®æºkeyè·åDataSourceProperty |
| | | * @param sourceKey |
| | | * @return |
| | | */ |
| | | public static DataSourceProperty getDataSourceProperty(String sourceKey){ |
| | | DynamicDataSourceProperties prop = SpringContextUtils.getApplicationContext().getBean(DynamicDataSourceProperties.class); |
| | | Map<String, DataSourceProperty> map = prop.getDatasource(); |
| | | DataSourceProperty db = (DataSourceProperty)map.get(sourceKey); |
| | | return db; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®sourceKey è·åæ°æ®æºè¿æ¥ |
| | | * @param sourceKey |
| | | * @return |
| | | * @throws SQLException |
| | | */ |
| | | public static Connection getDataSourceConnect(String sourceKey) throws SQLException { |
| | | if (oConvertUtils.isEmpty(sourceKey)) { |
| | | sourceKey = "master"; |
| | | } |
| | | DynamicDataSourceProperties prop = SpringContextUtils.getApplicationContext().getBean(DynamicDataSourceProperties.class); |
| | | Map<String, DataSourceProperty> map = prop.getDatasource(); |
| | | DataSourceProperty db = (DataSourceProperty)map.get(sourceKey); |
| | | if(db==null){ |
| | | return null; |
| | | } |
| | | DriverManagerDataSource ds = new DriverManagerDataSource (); |
| | | ds.setDriverClassName(db.getDriverClassName()); |
| | | ds.setUrl(db.getUrl()); |
| | | ds.setUsername(db.getUsername()); |
| | | ds.setPassword(db.getPassword()); |
| | | return ds.getConnection(); |
| | | } |
| | | |
| | | /** |
| | | * è·åæ°æ®åºç±»å |
| | | * @param dataSource |
| | | * @return |
| | | * @throws SQLException |
| | | */ |
| | | private static String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException{ |
| | | if("".equals(DB_TYPE)) { |
| | | Connection connection = dataSource.getConnection(); |
| | | try { |
| | | DatabaseMetaData md = connection.getMetaData(); |
| | | String dbType = md.getDatabaseProductName().toLowerCase(); |
| | | if(dbType.indexOf("mysql")>=0) { |
| | | DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; |
| | | }else if(dbType.indexOf("oracle")>=0 ||dbType.indexOf("dm")>=0) { |
| | | DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; |
| | | }else if(dbType.indexOf("sqlserver")>=0||dbType.indexOf("sql server")>=0) { |
| | | DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; |
| | | }else if(dbType.indexOf("postgresql")>=0) { |
| | | DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL; |
| | | }else if(dbType.indexOf("mariadb")>=0) { |
| | | DB_TYPE = DataBaseConstant.DB_TYPE_MARIADB; |
| | | }else { |
| | | log.error("æ°æ®åºç±»å:[" + dbType + "]ä¸è¯å«!"); |
| | | //throw new JeecgBootException("æ°æ®åºç±»å:["+dbType+"]ä¸è¯å«!"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(), e); |
| | | }finally { |
| | | connection.close(); |
| | | } |
| | | } |
| | | return DB_TYPE; |
| | | |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.poi.ss.formula.functions.T; |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.constant.CacheConstant; |
| | | import org.jeecg.common.system.base.entity.JeecgEntity; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Component |
| | | public class DataUtil { |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import java.beans.PropertyEditorSupport; |
| | | import java.sql.Timestamp; |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.GregorianCalendar; |
| | | |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | /** |
| | | * ç±»æè¿°ï¼æ¶é´æä½å®ä¹ç±» |
| | | * |
| | | * @Author: å¼ ä»£æµ© |
| | | * @Date:2012-12-8 12:15:03 |
| | | * @Version 1.0 |
| | | */ |
| | | public class DateUtils extends PropertyEditorSupport { |
| | | |
| | | public static ThreadLocal<SimpleDateFormat> date_sdf = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("yyyy-MM-dd"); |
| | | } |
| | | }; |
| | | |
| | | public static ThreadLocal<SimpleDateFormat> date_year = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("yyyy"); |
| | | } |
| | | }; |
| | | |
| | | public static ThreadLocal<SimpleDateFormat> date_month = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("MM"); |
| | | } |
| | | }; |
| | | |
| | | public static ThreadLocal<SimpleDateFormat> yyyyMMdd = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("yyyyMMdd"); |
| | | } |
| | | }; |
| | | public static ThreadLocal<SimpleDateFormat> date_sdf_wz = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("yyyyå¹´MMæddæ¥"); |
| | | } |
| | | }; |
| | | public static ThreadLocal<SimpleDateFormat> time_sdf = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm"); |
| | | } |
| | | }; |
| | | public static ThreadLocal<SimpleDateFormat> yyyymmddhhmmss = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("yyyyMMddHHmmss"); |
| | | } |
| | | }; |
| | | public static ThreadLocal<SimpleDateFormat> short_time_sdf = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("HH:mm"); |
| | | } |
| | | }; |
| | | public static ThreadLocal<SimpleDateFormat> datetimeFormat = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | }; |
| | | public static ThreadLocal<SimpleDateFormat> timeFormat = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("HHmmss"); |
| | | } |
| | | }; |
| | | public static ThreadLocal<SimpleDateFormat> monDayFormat = new ThreadLocal<SimpleDateFormat>() { |
| | | @Override |
| | | protected SimpleDateFormat initialValue() { |
| | | return new SimpleDateFormat("MMæddæ¥"); |
| | | } |
| | | }; |
| | | |
| | | |
| | | // 以毫ç§è¡¨ç¤ºçæ¶é´ |
| | | private static final long DAY_IN_MILLIS = 24 * 3600 * 1000; |
| | | private static final long HOUR_IN_MILLIS = 3600 * 1000; |
| | | private static final long MINUTE_IN_MILLIS = 60 * 1000; |
| | | private static final long SECOND_IN_MILLIS = 1000; |
| | | |
| | | // æå®æ¨¡å¼çæ¶é´æ ¼å¼ |
| | | private static SimpleDateFormat getSDFormat(String pattern) { |
| | | return new SimpleDateFormat(pattern); |
| | | } |
| | | |
| | | /** |
| | | * å½åæ¥åï¼è¿éç¨ä¸å½æ¶é´è¡¨ç¤º |
| | | * |
| | | * @return 以å½å°æ¶åºè¡¨ç¤ºçç³»ç»å½åæ¥å |
| | | */ |
| | | public static Calendar getCalendar() { |
| | | return Calendar.getInstance(); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¯«ç§æ°è¡¨ç¤ºçæ¥å |
| | | * |
| | | * @param millis æ¯«ç§æ° |
| | | * @return æå®æ¯«ç§æ°è¡¨ç¤ºçæ¥å |
| | | */ |
| | | public static Calendar getCalendar(long millis) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | // --------------------cal.setTimeInMillis(millis); |
| | | cal.setTime(new Date(millis)); |
| | | return cal; |
| | | } |
| | | |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | // getDate |
| | | // åç§æ¹å¼è·åçDate |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | | * å½åæ¥æ |
| | | * |
| | | * @return ç³»ç»å½åæ¶é´ |
| | | */ |
| | | public static Date getDate() { |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¯«ç§æ°è¡¨ç¤ºçæ¥æ |
| | | * |
| | | * @param millis æ¯«ç§æ° |
| | | * @return æå®æ¯«ç§æ°è¡¨ç¤ºçæ¥æ |
| | | */ |
| | | public static Date getDate(long millis) { |
| | | return new Date(millis); |
| | | } |
| | | |
| | | /** |
| | | * æ¶é´æ³è½¬æ¢ä¸ºå符串 |
| | | * |
| | | * @param time |
| | | * @return |
| | | */ |
| | | public static String timestamptoStr(Timestamp time) { |
| | | Date date = null; |
| | | if (null != time) { |
| | | date = new Date(time.getTime()); |
| | | } |
| | | return date2Str(date_sdf.get()); |
| | | } |
| | | |
| | | /** |
| | | * åç¬¦ä¸²è½¬æ¢æ¶é´æ³ |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static Timestamp str2Timestamp(String str) { |
| | | Date date = str2Date(str, date_sdf.get()); |
| | | return new Timestamp(date.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * åç¬¦ä¸²è½¬æ¢ææ¥æ |
| | | * |
| | | * @param str |
| | | * @param sdf |
| | | * @return |
| | | */ |
| | | public static Date str2Date(String str, SimpleDateFormat sdf) { |
| | | if (null == str || "".equals(str)) { |
| | | return null; |
| | | } |
| | | Date date = null; |
| | | try { |
| | | date = sdf.parse(str); |
| | | return date; |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * æ¥æè½¬æ¢ä¸ºå符串 |
| | | * |
| | | * @param date_sdf æ¥ææ ¼å¼ |
| | | * @return å符串 |
| | | */ |
| | | public static String date2Str(SimpleDateFormat date_sdf) { |
| | | Date date = getDate(); |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | return date_sdf.format(date); |
| | | } |
| | | |
| | | /** |
| | | * æ ¼å¼åæ¶é´ |
| | | * |
| | | * @param date |
| | | * @param format |
| | | * @return |
| | | */ |
| | | public static String dateformat(String date, String format) { |
| | | SimpleDateFormat sformat = new SimpleDateFormat(format); |
| | | Date _date = null; |
| | | try { |
| | | _date = sformat.parse(date); |
| | | } catch (ParseException e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | } |
| | | return sformat.format(_date); |
| | | } |
| | | |
| | | /** |
| | | * æ¥æè½¬æ¢ä¸ºå符串 |
| | | * |
| | | * @param date æ¥æ |
| | | * @param date_sdf æ¥ææ ¼å¼ |
| | | * @return å符串 |
| | | */ |
| | | public static String date2Str(Date date, SimpleDateFormat date_sdf) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | return date_sdf.format(date); |
| | | } |
| | | |
| | | /** |
| | | * æ¥æè½¬æ¢ä¸ºå符串 |
| | | * |
| | | * @param format æ¥ææ ¼å¼ |
| | | * @return å符串 |
| | | */ |
| | | public static String getDate(String format) { |
| | | Date date = new Date(); |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | SimpleDateFormat sdf = new SimpleDateFormat(format); |
| | | return sdf.format(date); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¯«ç§æ°çæ¶é´æ³ |
| | | * |
| | | * @param millis æ¯«ç§æ° |
| | | * @return æå®æ¯«ç§æ°çæ¶é´æ³ |
| | | */ |
| | | public static Timestamp getTimestamp(long millis) { |
| | | return new Timestamp(millis); |
| | | } |
| | | |
| | | /** |
| | | * 以å符形å¼è¡¨ç¤ºçæ¶é´æ³ |
| | | * |
| | | * @param time æ¯«ç§æ° |
| | | * @return 以å符形å¼è¡¨ç¤ºçæ¶é´æ³ |
| | | */ |
| | | public static Timestamp getTimestamp(String time) { |
| | | return new Timestamp(Long.parseLong(time)); |
| | | } |
| | | |
| | | /** |
| | | * ç³»ç»å½åçæ¶é´æ³ |
| | | * |
| | | * @return ç³»ç»å½åçæ¶é´æ³ |
| | | */ |
| | | public static Timestamp getTimestamp() { |
| | | return new Timestamp(System.currentTimeMillis()); |
| | | } |
| | | |
| | | /** |
| | | * å½åæ¶é´ï¼æ ¼å¼ yyyy-MM-dd HH:mm:ss |
| | | * |
| | | * @return å½åæ¶é´çæ åå½¢å¼å符串 |
| | | */ |
| | | public static String now() { |
| | | return datetimeFormat.get().format(getCalendar().getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æçæ¶é´æ³ |
| | | * |
| | | * @param date æå®æ¥æ |
| | | * @return æå®æ¥æçæ¶é´æ³ |
| | | */ |
| | | public static Timestamp getTimestamp(Date date) { |
| | | return new Timestamp(date.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥åçæ¶é´æ³ |
| | | * |
| | | * @param cal æå®æ¥å |
| | | * @return æå®æ¥åçæ¶é´æ³ |
| | | */ |
| | | public static Timestamp getCalendarTimestamp(Calendar cal) { |
| | | // ---------------------return new Timestamp(cal.getTimeInMillis()); |
| | | return new Timestamp(cal.getTime().getTime()); |
| | | } |
| | | |
| | | public static Timestamp gettimestamp() { |
| | | Date dt = new Date(); |
| | | DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String nowTime = df.format(dt); |
| | | java.sql.Timestamp buydate = java.sql.Timestamp.valueOf(nowTime); |
| | | return buydate; |
| | | } |
| | | |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | // getMillis |
| | | // åç§æ¹å¼è·åçMillis |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | | * ç³»ç»æ¶é´çæ¯«ç§æ° |
| | | * |
| | | * @return ç³»ç»æ¶é´çæ¯«ç§æ° |
| | | */ |
| | | public static long getMillis() { |
| | | return System.currentTimeMillis(); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥åçæ¯«ç§æ° |
| | | * |
| | | * @param cal æå®æ¥å |
| | | * @return æå®æ¥åçæ¯«ç§æ° |
| | | */ |
| | | public static long getMillis(Calendar cal) { |
| | | // --------------------return cal.getTimeInMillis(); |
| | | return cal.getTime().getTime(); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æçæ¯«ç§æ° |
| | | * |
| | | * @param date æå®æ¥æ |
| | | * @return æå®æ¥æçæ¯«ç§æ° |
| | | */ |
| | | public static long getMillis(Date date) { |
| | | return date.getTime(); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¶é´æ³çæ¯«ç§æ° |
| | | * |
| | | * @param ts æå®æ¶é´æ³ |
| | | * @return æå®æ¶é´æ³çæ¯«ç§æ° |
| | | */ |
| | | public static long getMillis(Timestamp ts) { |
| | | return ts.getTime(); |
| | | } |
| | | |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | // formatDate |
| | | // å°æ¥ææç
§ä¸å®çæ ¼å¼è½¬å为å符串 |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | | * é»è®¤æ¹å¼è¡¨ç¤ºçç³»ç»å½åæ¥æï¼å
·ä½æ ¼å¼ï¼å¹´-æ-æ¥ |
| | | * |
| | | * @return é»è®¤æ¥ææâå¹´-æ-æ¥âæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatDate() { |
| | | return date_sdf.get().format(getCalendar().getTime()); |
| | | } |
| | | |
| | | /** |
| | | * é»è®¤æ¹å¼è¡¨ç¤ºçç³»ç»å½åæ¥æï¼å
·ä½æ ¼å¼ï¼yyyy-MM-dd HH:mm:ss |
| | | * |
| | | * @return é»è®¤æ¥ææâyyyy-MM-dd HH:mm:ssâæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatDateTime() { |
| | | return datetimeFormat.get().format(getCalendar().getTime()); |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¶é´å符串 |
| | | */ |
| | | public static String getDataString(SimpleDateFormat formatstr) { |
| | | return formatstr.format(getCalendar().getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æçé»è®¤æ¾ç¤ºï¼å
·ä½æ ¼å¼ï¼å¹´-æ-æ¥ |
| | | * |
| | | * @param cal æå®çæ¥æ |
| | | * @return æå®æ¥ææâå¹´-æ-æ¥âæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatDate(Calendar cal) { |
| | | return date_sdf.get().format(cal.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æçé»è®¤æ¾ç¤ºï¼å
·ä½æ ¼å¼ï¼å¹´-æ-æ¥ |
| | | * |
| | | * @param date æå®çæ¥æ |
| | | * @return æå®æ¥ææâå¹´-æ-æ¥âæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatDate(Date date) { |
| | | return date_sdf.get().format(date); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¯«ç§æ°è¡¨ç¤ºæ¥æçé»è®¤æ¾ç¤ºï¼å
·ä½æ ¼å¼ï¼å¹´-æ-æ¥ |
| | | * |
| | | * @param millis æå®çæ¯«ç§æ° |
| | | * @return æå®æ¯«ç§æ°è¡¨ç¤ºæ¥ææâå¹´-æ-æ¥âæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatDate(long millis) { |
| | | return date_sdf.get().format(new Date(millis)); |
| | | } |
| | | |
| | | /** |
| | | * é»è®¤æ¥æææå®æ ¼å¼æ¾ç¤º |
| | | * |
| | | * @param pattern æå®çæ ¼å¼ |
| | | * @return é»è®¤æ¥æææå®æ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatDate(String pattern) { |
| | | return getSDFormat(pattern).format(getCalendar().getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æææå®æ ¼å¼æ¾ç¤º |
| | | * |
| | | * @param cal æå®çæ¥æ |
| | | * @param pattern æå®çæ ¼å¼ |
| | | * @return æå®æ¥æææå®æ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatDate(Calendar cal, String pattern) { |
| | | return getSDFormat(pattern).format(cal.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æææå®æ ¼å¼æ¾ç¤º |
| | | * |
| | | * @param date æå®çæ¥æ |
| | | * @param pattern æå®çæ ¼å¼ |
| | | * @return æå®æ¥æææå®æ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatDate(Date date, String pattern) { |
| | | return getSDFormat(pattern).format(date); |
| | | } |
| | | |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | // formatTime |
| | | // å°æ¥ææç
§ä¸å®çæ ¼å¼è½¬å为å符串 |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | | * é»è®¤æ¹å¼è¡¨ç¤ºçç³»ç»å½åæ¥æï¼å
·ä½æ ¼å¼ï¼å¹´-æ-æ¥ æ¶ï¼å |
| | | * |
| | | * @return é»è®¤æ¥ææâå¹´-æ-æ¥ æ¶ï¼åâæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatTime() { |
| | | return time_sdf.get().format(getCalendar().getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¯«ç§æ°è¡¨ç¤ºæ¥æçé»è®¤æ¾ç¤ºï¼å
·ä½æ ¼å¼ï¼å¹´-æ-æ¥ æ¶ï¼å |
| | | * |
| | | * @param millis æå®çæ¯«ç§æ° |
| | | * @return æå®æ¯«ç§æ°è¡¨ç¤ºæ¥ææâå¹´-æ-æ¥ æ¶ï¼åâæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatTime(long millis) { |
| | | return time_sdf.get().format(new Date(millis)); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æçé»è®¤æ¾ç¤ºï¼å
·ä½æ ¼å¼ï¼å¹´-æ-æ¥ æ¶ï¼å |
| | | * |
| | | * @param cal æå®çæ¥æ |
| | | * @return æå®æ¥ææâå¹´-æ-æ¥ æ¶ï¼åâæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatTime(Calendar cal) { |
| | | return time_sdf.get().format(cal.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æçé»è®¤æ¾ç¤ºï¼å
·ä½æ ¼å¼ï¼å¹´-æ-æ¥ æ¶ï¼å |
| | | * |
| | | * @param date æå®çæ¥æ |
| | | * @return æå®æ¥ææâå¹´-æ-æ¥ æ¶ï¼åâæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatTime(Date date) { |
| | | return time_sdf.get().format(date); |
| | | } |
| | | |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | // formatShortTime |
| | | // å°æ¥ææç
§ä¸å®çæ ¼å¼è½¬å为å符串 |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | | * é»è®¤æ¹å¼è¡¨ç¤ºçç³»ç»å½åæ¥æï¼å
·ä½æ ¼å¼ï¼æ¶ï¼å |
| | | * |
| | | * @return é»è®¤æ¥ææâæ¶ï¼åâæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatShortTime() { |
| | | return short_time_sdf.get().format(getCalendar().getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¯«ç§æ°è¡¨ç¤ºæ¥æçé»è®¤æ¾ç¤ºï¼å
·ä½æ ¼å¼ï¼æ¶ï¼å |
| | | * |
| | | * @param millis æå®çæ¯«ç§æ° |
| | | * @return æå®æ¯«ç§æ°è¡¨ç¤ºæ¥ææâæ¶ï¼åâæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatShortTime(long millis) { |
| | | return short_time_sdf.get().format(new Date(millis)); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æçé»è®¤æ¾ç¤ºï¼å
·ä½æ ¼å¼ï¼æ¶ï¼å |
| | | * |
| | | * @param cal æå®çæ¥æ |
| | | * @return æå®æ¥ææâæ¶ï¼åâæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatShortTime(Calendar cal) { |
| | | return short_time_sdf.get().format(cal.getTime()); |
| | | } |
| | | |
| | | /** |
| | | * æå®æ¥æçé»è®¤æ¾ç¤ºï¼å
·ä½æ ¼å¼ï¼æ¶ï¼å |
| | | * |
| | | * @param date æå®çæ¥æ |
| | | * @return æå®æ¥ææâæ¶ï¼åâæ ¼å¼æ¾ç¤º |
| | | */ |
| | | public static String formatShortTime(Date date) { |
| | | return short_time_sdf.get().format(date); |
| | | } |
| | | |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | // parseDate |
| | | // parseCalendar |
| | | // parseTimestamp |
| | | // å°å符串æç
§ä¸å®çæ ¼å¼è½¬åä¸ºæ¥æææ¶é´ |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | | * æ ¹æ®æå®çæ ¼å¼å°åç¬¦ä¸²è½¬æ¢æDate å¦è¾å
¥ï¼2003-11-19 11:20:20å°æç
§è¿ä¸ªè½¬ææ¶é´ |
| | | * |
| | | * @param src å°è¦è½¬æ¢çåå§åç¬¦çª |
| | | * @param pattern 转æ¢çå¹é
æ ¼å¼ |
| | | * @return å¦æè½¬æ¢æååè¿å转æ¢åçæ¥æ |
| | | * @throws ParseException |
| | | */ |
| | | public static Date parseDate(String src, String pattern) throws ParseException { |
| | | return getSDFormat(pattern).parse(src); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æå®çæ ¼å¼å°åç¬¦ä¸²è½¬æ¢æDate å¦è¾å
¥ï¼2003-11-19 11:20:20å°æç
§è¿ä¸ªè½¬ææ¶é´ |
| | | * |
| | | * @param src å°è¦è½¬æ¢çåå§åç¬¦çª |
| | | * @param pattern 转æ¢çå¹é
æ ¼å¼ |
| | | * @return å¦æè½¬æ¢æååè¿å转æ¢åçæ¥æ |
| | | * @throws ParseException |
| | | */ |
| | | public static Calendar parseCalendar(String src, String pattern) throws ParseException { |
| | | |
| | | Date date = parseDate(src, pattern); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | return cal; |
| | | } |
| | | |
| | | public static String formatAddDate(String src, String pattern, int amount) throws ParseException { |
| | | Calendar cal; |
| | | cal = parseCalendar(src, pattern); |
| | | cal.add(Calendar.DATE, amount); |
| | | return formatDate(cal); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æå®çæ ¼å¼å°åç¬¦ä¸²è½¬æ¢æDate å¦è¾å
¥ï¼2003-11-19 11:20:20å°æç
§è¿ä¸ªè½¬ææ¶é´ |
| | | * |
| | | * @param src å°è¦è½¬æ¢çåå§åç¬¦çª |
| | | * @param pattern 转æ¢çå¹é
æ ¼å¼ |
| | | * @return å¦æè½¬æ¢æååè¿å转æ¢åçæ¶é´æ³ |
| | | * @throws ParseException |
| | | */ |
| | | public static Timestamp parseTimestamp(String src, String pattern) throws ParseException { |
| | | Date date = parseDate(src, pattern); |
| | | return new Timestamp(date.getTime()); |
| | | } |
| | | |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | // dateDiff |
| | | // 计ç®ä¸¤ä¸ªæ¥æä¹é´çå·®å¼ |
| | | // //////////////////////////////////////////////////////////////////////////// |
| | | |
| | | /** |
| | | * 计ç®ä¸¤ä¸ªæ¶é´ä¹é´çå·®å¼ï¼æ ¹æ®æ å¿çä¸åèä¸å |
| | | * |
| | | * @param flag è®¡ç®æ å¿ï¼è¡¨ç¤ºæç
§å¹´/æ/æ¥/æ¶/å/ç§çè®¡ç® |
| | | * @param calSrc åæ° |
| | | * @param calDes è¢«åæ° |
| | | * @return ä¸¤ä¸ªæ¥æä¹é´çå·®å¼ |
| | | */ |
| | | public static int dateDiff(char flag, Calendar calSrc, Calendar calDes) { |
| | | |
| | | long millisDiff = getMillis(calSrc) - getMillis(calDes); |
| | | |
| | | if (flag == 'y') { |
| | | return (calSrc.get(Calendar.YEAR) - calDes.get(Calendar.YEAR)); |
| | | } |
| | | |
| | | if (flag == 'd') { |
| | | return (int) (millisDiff / DAY_IN_MILLIS); |
| | | } |
| | | |
| | | if (flag == 'h') { |
| | | return (int) (millisDiff / HOUR_IN_MILLIS); |
| | | } |
| | | |
| | | if (flag == 'm') { |
| | | return (int) (millisDiff / MINUTE_IN_MILLIS); |
| | | } |
| | | |
| | | if (flag == 's') { |
| | | return (int) (millisDiff / SECOND_IN_MILLIS); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | public static Long getCurrentTimestamp() { |
| | | return Long.valueOf(DateUtils.yyyymmddhhmmss.get().format(new Date())); |
| | | } |
| | | |
| | | /** |
| | | * Stringç±»å 转æ¢ä¸ºDate, 妿忰é¿åº¦ä¸º10 è½¬æ¢æ ¼å¼âyyyy-MM-ddâ 妿忰é¿åº¦ä¸º19 è½¬æ¢æ ¼å¼âyyyy-MM-dd |
| | | * HH:mm:ssâ * @param text Stringç±»åçæ¶é´å¼ |
| | | */ |
| | | @Override |
| | | public void setAsText(String text) throws IllegalArgumentException { |
| | | if (StringUtils.hasText(text)) { |
| | | try { |
| | | if (text.indexOf(":") == -1 && text.length() == 10) { |
| | | setValue(DateUtils.date_sdf.get().parse(text)); |
| | | } else if (text.indexOf(":") > 0 && text.length() == 19) { |
| | | setValue(DateUtils.datetimeFormat.get().parse(text)); |
| | | } else { |
| | | throw new IllegalArgumentException("Could not parse date, date format is error "); |
| | | } |
| | | } catch (ParseException ex) { |
| | | IllegalArgumentException iae = new IllegalArgumentException("Could not parse date: " + ex.getMessage()); |
| | | iae.initCause(ex); |
| | | throw iae; |
| | | } |
| | | } else { |
| | | setValue(null); |
| | | } |
| | | } |
| | | |
| | | public static int getYear(Date date) { |
| | | GregorianCalendar calendar = new GregorianCalendar(); |
| | | calendar.setTime(date); |
| | | return calendar.get(Calendar.YEAR); |
| | | } |
| | | |
| | | public static int getMonth(Date date) { |
| | | GregorianCalendar calendar = new GregorianCalendar(); |
| | | calendar.setTime(date); |
| | | return calendar.get(Calendar.MONTH)+1; |
| | | } |
| | | |
| | | |
| | | //计ç®ä¸¤ä¸ªæ¥æç¸å·®å¤©æ° |
| | | public static int daysBetween(Date smdate, Date bdate) throws ParseException { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | smdate = sdf.parse(sdf.format(smdate)); |
| | | bdate = sdf.parse(sdf.format(bdate)); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(smdate); |
| | | long time1 = cal.getTimeInMillis(); |
| | | cal.setTime(bdate); |
| | | long time2 = cal.getTimeInMillis(); |
| | | long between_days = (time2 - time1) / (1000 * 3600 * 24); |
| | | |
| | | return Integer.parseInt(String.valueOf(between_days)); |
| | | } |
| | | |
| | | |
| | | //è·åä¸å¨çå¼å§æ¶é´ |
| | | public static Date getBeginDayOfLastWeek() { |
| | | Date date = new Date(); |
| | | if (date == null) { |
| | | return null; |
| | | } |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | int dayofweek = cal.get(Calendar.DAY_OF_WEEK); |
| | | if (dayofweek == 1) { |
| | | dayofweek += 7; |
| | | } |
| | | cal.add(Calendar.DATE, 2 - dayofweek - 7); |
| | | return getDayStartTime(cal.getTime()); |
| | | } |
| | | |
| | | //è·åä¸å¨çç»ææ¶é´ |
| | | public static Date getEndDayOfLastWeek() { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(getBeginDayOfLastWeek()); |
| | | cal.add(Calendar.DAY_OF_WEEK, 6); |
| | | Date weekEndSta = cal.getTime(); |
| | | return getDayEndTime(weekEndSta); |
| | | } |
| | | |
| | | //è·åæä¸ªæ¥æçå¼å§æ¶é´ |
| | | public static Timestamp getDayStartTime(Date d) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | if (null != d) calendar.setTime(d); |
| | | calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0); |
| | | calendar.set(Calendar.MILLISECOND, 0); |
| | | return new Timestamp(calendar.getTimeInMillis()); |
| | | } |
| | | |
| | | //è·åæä¸ªæ¥æçç»ææ¶é´ |
| | | public static Timestamp getDayEndTime(Date d) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | if (null != d) calendar.setTime(d); |
| | | calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59); |
| | | calendar.set(Calendar.MILLISECOND, 999); |
| | | return new Timestamp(calendar.getTimeInMillis()); |
| | | } |
| | | |
| | | public static int getCurYear() { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | return calendar.get(Calendar.YEAR);//è·å¾å½åçå¹´ |
| | | } |
| | | public static int getCurMonth() { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | return calendar.get(Calendar.MONTH);//è·å¾å½åçæ |
| | | } |
| | | |
| | | public static int getCurWeek() { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置ææä¸ä¸ºä¸å¨å¼å§ç第ä¸å¤© |
| | | calendar.setMinimalDaysInFirstWeek(7);//å¯ä»¥ä¸ç¨è®¾ç½® |
| | | calendar.setTimeInMillis(System.currentTimeMillis());//è·å¾å½åçæ¶é´æ³ |
| | | int weekYear = calendar.get(Calendar.YEAR);//è·å¾å½åçå¹´ |
| | | int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);//è·å¾å½åæ¥æå±äºä»å¹´ç第å å¨ |
| | | return weekOfYear; |
| | | } |
| | | |
| | | // è·å¾æ¬å¨ä¸ä¸å½åæ¥æç¸å·®çå¤©æ° |
| | | public static int getMondayPlus() { |
| | | Calendar cd = Calendar.getInstance(); |
| | | int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK); |
| | | //ç±äºCalendaræä¾ç齿¯ä»¥æææ¥ä½ä¸ºå¨ä¸çå¼å§æ¶é´ |
| | | if (dayOfWeek == 1) { |
| | | return -6; |
| | | } else { |
| | | return 2 - dayOfWeek; |
| | | } |
| | | } |
| | | |
| | | // è·å¾å½åå¨,å¨ä¸çæ¥æ |
| | | public static Date getCurrentMonday() { |
| | | int mondayPlus = getMondayPlus(); |
| | | GregorianCalendar currentDate = new GregorianCalendar(); |
| | | currentDate.add(GregorianCalendar.DATE, mondayPlus); |
| | | Date monday = currentDate.getTime(); |
| | | return monday; |
| | | } |
| | | |
| | | |
| | | // è·å¾å½åå¨,卿¥çæ¥æ |
| | | public static Date getPreviousSunday() { |
| | | int mondayPlus = getMondayPlus(); |
| | | GregorianCalendar currentDate = new GregorianCalendar(); |
| | | currentDate.add(GregorianCalendar.DATE, mondayPlus + 6); |
| | | Date monday = currentDate.getTime(); |
| | | return monday; |
| | | } |
| | | |
| | | /** |
| | | * è·åä¸å¨ä¸æ¶é´ |
| | | */ |
| | | public static Date getNextWeekMonday() { |
| | | int mondayPlus = getMondayPlus(); |
| | | GregorianCalendar currentDate = new GregorianCalendar(); |
| | | currentDate.add(GregorianCalendar.DATE, mondayPlus + 7); |
| | | Date monday = currentDate.getTime(); |
| | | return monday; |
| | | } |
| | | |
| | | /** |
| | | * è·åä¸å¨æ¥æ¶é´ |
| | | */ |
| | | public static Date getNextWeekSunday() { |
| | | int mondayPlus = getMondayPlus(); |
| | | GregorianCalendar currentDate = new GregorianCalendar(); |
| | | currentDate.add(GregorianCalendar.DATE, mondayPlus + 13); |
| | | Date monday = currentDate.getTime(); |
| | | return monday; |
| | | } |
| | | |
| | | /** |
| | | * ä¸å¨å¼å§æ¶é´string |
| | | * |
| | | * @return |
| | | */ |
| | | public static String lastWeekStart() { |
| | | return date2Str(getBeginDayOfLastWeek(), monDayFormat.get()); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * ä¸ç»ææ¶é´string |
| | | * |
| | | * @return |
| | | */ |
| | | public static String lastWeekEnd() { |
| | | return date2Str(getEndDayOfLastWeek(), monDayFormat.get()); |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ¬å¨å¼å§æ¶é´string |
| | | * |
| | | * @return |
| | | */ |
| | | public static String thisWeekStart() { |
| | | return date2Str(getCurrentMonday(), monDayFormat.get()); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æ¬å¨ç»ææ¶é´string |
| | | * |
| | | * @return |
| | | */ |
| | | public static String thisWeekEnd() { |
| | | return date2Str(getPreviousSunday(), monDayFormat.get()); |
| | | |
| | | } |
| | | |
| | | // æ ¹æ®yearå¹´ç第weekå¨ï¼æ¥è¯¢æ¬å¨çèµ·æ¢æ¶é´ |
| | | public static Date weekToDayStartDate(int week) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | int year = calendar.get(Calendar.YEAR); |
| | | // â .设置该年份çå¼å§æ¥æï¼ç¬¬ä¸ä¸ªæç第ä¸å¤© |
| | | calendar.set(year, 0, 1); |
| | | // â¡.计ç®åºç¬¬ä¸å¨è¿å©å 天ï¼+1æ¯å 为1å·æ¯1天 |
| | | int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2; |
| | | // â¢.卿°åå»ç¬¬ä¸å¨ååå»è¦å¾å°çå¨ |
| | | week = week - 2; |
| | | // â£.计ç®èµ·æ¢æ¥æ |
| | | calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek); |
| | | System.out.println("å¼å§æ¥æï¼" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime())); |
| | | // calendar.add(Calendar.DAY_OF_YEAR, 6); |
| | | // System.out.println("ç»ææ¥æï¼" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime())); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | // æ ¹æ®yearå¹´ç第weekå¨ï¼æ¥è¯¢æ¬å¨çèµ·æ¢æ¶é´ |
| | | public static Date weekToDayEndDate(int week) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | int year = calendar.get(Calendar.YEAR); |
| | | // â .设置该年份çå¼å§æ¥æï¼ç¬¬ä¸ä¸ªæç第ä¸å¤© |
| | | calendar.set(year, 0, 1); |
| | | // â¡.计ç®åºç¬¬ä¸å¨è¿å©å 天ï¼+1æ¯å 为1å·æ¯1天 |
| | | int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2; |
| | | // â¢.卿°åå»ç¬¬ä¸å¨ååå»è¦å¾å°çå¨ |
| | | week = week - 2; |
| | | // â£.计ç®èµ·æ¢æ¥æ |
| | | calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek); |
| | | System.out.println("å¼å§æ¥æï¼" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime())); |
| | | calendar.add(Calendar.DAY_OF_YEAR, 6); |
| | | System.out.println("ç»ææ¥æï¼" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime())); |
| | | return calendar.getTime(); |
| | | } |
| | | |
| | | |
| | | // æ ¹æ®å½åå¹´ç第weekå¨ï¼æ¥è¯¢æ¬å¨çèµ·æ¢æ¶é´ |
| | | public static String weekToDayStartStr(int week) { |
| | | /* Calendar calendar = Calendar.getInstance(); |
| | | int year = calendar.get(Calendar.YEAR); |
| | | // â .设置该年份çå¼å§æ¥æï¼ç¬¬ä¸ä¸ªæç第ä¸å¤© |
| | | calendar.set(year, 0, 1); |
| | | // â¡.计ç®åºç¬¬ä¸å¨è¿å©å 天ï¼+1æ¯å 为1å·æ¯1天 |
| | | int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2; |
| | | // â¢.卿°åå»ç¬¬ä¸å¨ååå»è¦å¾å°çå¨ |
| | | week = week - 2; |
| | | // â£.计ç®èµ·æ¢æ¥æ |
| | | calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek); |
| | | // calendar.add(Calendar.DAY_OF_YEAR, 6); |
| | | // System.out.println("ç»ææ¥æï¼" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime())); |
| | | return new SimpleDateFormat("MMæddæ¥").format(calendar.getTime());*/ |
| | | |
| | | SimpleDateFormat sdf=new SimpleDateFormat("MMæddæ¥"); |
| | | Calendar cal=Calendar.getInstance(); |
| | | int year = cal.get(Calendar.YEAR); |
| | | // 设置æ¯å¨çå¼å§æ¥æ |
| | | cal.setFirstDayOfWeek(Calendar.MONDAY); |
| | | cal.setMinimalDaysInFirstWeek(7); |
| | | cal.set(Calendar.YEAR, year); |
| | | cal.set(Calendar.WEEK_OF_YEAR, week); |
| | | cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); |
| | | String beginDate = sdf.format(cal.getTime()); |
| | | |
| | | cal.add(Calendar.DAY_OF_WEEK, 6); |
| | | String endDate = sdf.format(cal.getTime()); |
| | | return beginDate; |
| | | |
| | | } |
| | | public static String weekToDayStartStr(int year,int week) { |
| | | /* Calendar calendar = Calendar.getInstance(); |
| | | // â .设置该年份çå¼å§æ¥æï¼ç¬¬ä¸ä¸ªæç第ä¸å¤© |
| | | calendar.set(year, 0, 1); |
| | | // â¡.计ç®åºç¬¬ä¸å¨è¿å©å 天ï¼+1æ¯å 为1å·æ¯1天 |
| | | int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2; |
| | | // â¢.卿°åå»ç¬¬ä¸å¨ååå»è¦å¾å°çå¨ |
| | | week = week - 2; |
| | | // â£.计ç®èµ·æ¢æ¥æ |
| | | calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek); |
| | | // calendar.add(Calendar.DAY_OF_YEAR, 6); |
| | | // System.out.println("ç»ææ¥æï¼" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime())); |
| | | return new SimpleDateFormat("MMæddæ¥").format(calendar.getTime());*/ |
| | | |
| | | SimpleDateFormat sdf=new SimpleDateFormat("MMæddæ¥"); |
| | | Calendar cal=Calendar.getInstance(); |
| | | // 设置æ¯å¨çå¼å§æ¥æ |
| | | cal.setFirstDayOfWeek(Calendar.MONDAY); |
| | | cal.setMinimalDaysInFirstWeek(7); |
| | | cal.set(Calendar.YEAR, year); |
| | | cal.set(Calendar.WEEK_OF_YEAR, week); |
| | | cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); |
| | | String beginDate = sdf.format(cal.getTime()); |
| | | |
| | | cal.add(Calendar.DAY_OF_WEEK, 6); |
| | | String endDate = sdf.format(cal.getTime()); |
| | | return beginDate; |
| | | } |
| | | |
| | | public static String weekToDayStartStr(int year,int week,String fomat) { |
| | | /*Calendar calendar = Calendar.getInstance(); |
| | | // â .设置该年份çå¼å§æ¥æï¼ç¬¬ä¸ä¸ªæç第ä¸å¤© |
| | | calendar.set(year, 0, 1); |
| | | // â¡.计ç®åºç¬¬ä¸å¨è¿å©å 天ï¼+1æ¯å 为1å·æ¯1天 |
| | | int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2; |
| | | // â¢.卿°åå»ç¬¬ä¸å¨ååå»è¦å¾å°çå¨ |
| | | week = week - 2; |
| | | // â£.计ç®èµ·æ¢æ¥æ |
| | | calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek); |
| | | // calendar.add(Calendar.DAY_OF_YEAR, 6); |
| | | // System.out.println("ç»ææ¥æï¼" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime())); |
| | | return new SimpleDateFormat(fomat).format(calendar.getTime());*/ |
| | | |
| | | SimpleDateFormat sdf=new SimpleDateFormat(fomat); |
| | | Calendar cal=Calendar.getInstance(); |
| | | // 设置æ¯å¨çå¼å§æ¥æ |
| | | cal.setFirstDayOfWeek(Calendar.MONDAY); |
| | | cal.setMinimalDaysInFirstWeek(7); |
| | | cal.set(Calendar.YEAR, year); |
| | | cal.set(Calendar.WEEK_OF_YEAR, week); |
| | | cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); |
| | | String beginDate = sdf.format(cal.getTime()); |
| | | |
| | | cal.add(Calendar.DAY_OF_WEEK, 6); |
| | | String endDate = sdf.format(cal.getTime()); |
| | | |
| | | return beginDate; |
| | | } |
| | | |
| | | // æ ¹æ®yearå¹´ç第weekå¨ï¼æ¥è¯¢æ¬å¨çèµ·æ¢æ¶é´ |
| | | public static String weekToDayEndStr(int week) { |
| | | /* Calendar calendar = Calendar.getInstance(); |
| | | |
| | | int year = calendar.get(Calendar.YEAR); |
| | | // â .设置该年份çå¼å§æ¥æï¼ç¬¬ä¸ä¸ªæç第ä¸å¤© |
| | | calendar.set(year, 0, 1); |
| | | // â¡.计ç®åºç¬¬ä¸å¨è¿å©å 天ï¼+1æ¯å 为1å·æ¯1天 |
| | | int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2; |
| | | // â¢.卿°åå»ç¬¬ä¸å¨ååå»è¦å¾å°çå¨ |
| | | week = week - 2; |
| | | // â£.计ç®èµ·æ¢æ¥æ |
| | | calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek); |
| | | calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置ææä¸ä¸ºä¸å¨å¼å§ç第ä¸å¤© |
| | | calendar.add(Calendar.DAY_OF_YEAR, 6); |
| | | return new SimpleDateFormat("MMæddæ¥").format(calendar.getTime());*/ |
| | | |
| | | SimpleDateFormat sdf=new SimpleDateFormat("MMæddæ¥"); |
| | | Calendar cal=Calendar.getInstance(); |
| | | int year = cal.get(Calendar.YEAR); |
| | | // 设置æ¯å¨çå¼å§æ¥æ |
| | | cal.setFirstDayOfWeek(Calendar.MONDAY); |
| | | cal.setMinimalDaysInFirstWeek(7); |
| | | cal.set(Calendar.YEAR, year); |
| | | cal.set(Calendar.WEEK_OF_YEAR, week); |
| | | cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); |
| | | String beginDate = sdf.format(cal.getTime()); |
| | | |
| | | cal.add(Calendar.DAY_OF_WEEK, 6); |
| | | String endDate = sdf.format(cal.getTime()); |
| | | return endDate; |
| | | } |
| | | public static String weekToDayEndStr(int year,int week) { |
| | | /* Calendar calendar = Calendar.getInstance(); |
| | | |
| | | // â .设置该年份çå¼å§æ¥æï¼ç¬¬ä¸ä¸ªæç第ä¸å¤© |
| | | calendar.set(year, 0, 1); |
| | | // â¡.计ç®åºç¬¬ä¸å¨è¿å©å 天ï¼+1æ¯å 为1å·æ¯1天 |
| | | int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2; |
| | | // â¢.卿°åå»ç¬¬ä¸å¨ååå»è¦å¾å°çå¨ |
| | | week = week - 2; |
| | | // â£.计ç®èµ·æ¢æ¥æ |
| | | calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek); |
| | | calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置ææä¸ä¸ºä¸å¨å¼å§ç第ä¸å¤© |
| | | calendar.add(Calendar.DAY_OF_YEAR, 6); |
| | | return new SimpleDateFormat("MMæddæ¥").format(calendar.getTime());*/ |
| | | |
| | | SimpleDateFormat sdf=new SimpleDateFormat("MMæddæ¥"); |
| | | Calendar cal=Calendar.getInstance(); |
| | | // 设置æ¯å¨çå¼å§æ¥æ |
| | | cal.setFirstDayOfWeek(Calendar.MONDAY); |
| | | cal.setMinimalDaysInFirstWeek(7); |
| | | cal.set(Calendar.YEAR, year); |
| | | cal.set(Calendar.WEEK_OF_YEAR, week); |
| | | cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); |
| | | String beginDate = sdf.format(cal.getTime()); |
| | | |
| | | cal.add(Calendar.DAY_OF_WEEK, 6); |
| | | String endDate = sdf.format(cal.getTime()); |
| | | return endDate; |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param year |
| | | * @param week |
| | | * @param format |
| | | * @return |
| | | */ |
| | | public static String weekToDayEndStr(int year,int week,String format) { |
| | | /*Calendar calendar = Calendar.getInstance(); |
| | | |
| | | // â .设置该年份çå¼å§æ¥æï¼ç¬¬ä¸ä¸ªæç第ä¸å¤© |
| | | calendar.set(year, 0, 1); |
| | | // â¡.计ç®åºç¬¬ä¸å¨è¿å©å 天ï¼+1æ¯å 为1å·æ¯1天 |
| | | int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2; |
| | | // â¢.卿°åå»ç¬¬ä¸å¨ååå»è¦å¾å°çå¨ |
| | | week = week - 2; |
| | | // â£.计ç®èµ·æ¢æ¥æ |
| | | calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek); |
| | | calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置ææä¸ä¸ºä¸å¨å¼å§ç第ä¸å¤© |
| | | calendar.add(Calendar.DAY_OF_YEAR, 6); |
| | | return new SimpleDateFormat(format).format(calendar.getTime());*/ |
| | | |
| | | SimpleDateFormat sdf=new SimpleDateFormat(format); |
| | | Calendar cal=Calendar.getInstance(); |
| | | // 设置æ¯å¨çå¼å§æ¥æ |
| | | cal.setFirstDayOfWeek(Calendar.MONDAY); |
| | | cal.setMinimalDaysInFirstWeek(7); |
| | | cal.set(Calendar.YEAR, year); |
| | | cal.set(Calendar.WEEK_OF_YEAR, week); |
| | | cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); |
| | | String beginDate = sdf.format(cal.getTime()); |
| | | |
| | | cal.add(Calendar.DAY_OF_WEEK, 6); |
| | | String endDate = sdf.format(cal.getTime()); |
| | | return endDate; |
| | | } |
| | | |
| | | |
| | | |
| | | // æ ¹æ®yearç第weekå¨ï¼æ¥è¯¢æ¬å¨å±äºåªä¸ªæ |
| | | public static Integer yearweekInMonth(int year, int week) { |
| | | SimpleDateFormat sdf=new SimpleDateFormat("MM"); |
| | | Calendar cal=Calendar.getInstance(); |
| | | // 设置æ¯å¨çå¼å§æ¥æ |
| | | cal.setFirstDayOfWeek(Calendar.MONDAY); |
| | | cal.setMinimalDaysInFirstWeek(7); |
| | | cal.set(Calendar.YEAR, year); |
| | | cal.set(Calendar.WEEK_OF_YEAR, week); |
| | | cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); |
| | | String beginDate = sdf.format(cal.getTime()); |
| | | |
| | | cal.add(Calendar.DAY_OF_WEEK, 6); |
| | | String endDate = sdf.format(cal.getTime()); |
| | | return Integer.parseInt(endDate); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param year |
| | | * @param week |
| | | * @param format |
| | | * @return |
| | | */ |
| | | public static String weekToFriDayEndStr(int year,int week,String format) { |
| | | /*Calendar calendar = Calendar.getInstance(); |
| | | |
| | | // â .设置该年份çå¼å§æ¥æï¼ç¬¬ä¸ä¸ªæç第ä¸å¤© |
| | | calendar.set(year, 0, 1); |
| | | // â¡.计ç®åºç¬¬ä¸å¨è¿å©å 天ï¼+1æ¯å 为1å·æ¯1天 |
| | | int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2; |
| | | // â¢.卿°åå»ç¬¬ä¸å¨ååå»è¦å¾å°çå¨ |
| | | week = week - 2; |
| | | // â£.计ç®èµ·æ¢æ¥æ |
| | | calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek); |
| | | calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置ææä¸ä¸ºä¸å¨å¼å§ç第ä¸å¤© |
| | | calendar.add(Calendar.DAY_OF_YEAR, 6); |
| | | return new SimpleDateFormat(format).format(calendar.getTime());*/ |
| | | |
| | | SimpleDateFormat sdf=new SimpleDateFormat(format); |
| | | Calendar cal=Calendar.getInstance(); |
| | | // 设置æ¯å¨çå¼å§æ¥æ |
| | | cal.setFirstDayOfWeek(Calendar.MONDAY); |
| | | cal.setMinimalDaysInFirstWeek(7); |
| | | cal.set(Calendar.YEAR, year); |
| | | cal.set(Calendar.WEEK_OF_YEAR, week); |
| | | cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); |
| | | String beginDate = sdf.format(cal.getTime()); |
| | | |
| | | cal.add(Calendar.DAY_OF_WEEK, 4); |
| | | String endDate = sdf.format(cal.getTime()); |
| | | return endDate; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ ¹æ®æå®æ¥æè·åå¨ |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static Integer getWeekNoByDate(Date date) { |
| | | |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setFirstDayOfWeek(Calendar.MONDAY); |
| | | calendar.setTime(date); |
| | | //Calendar.MONTHä»0å¼å§ï¼12æå¯¹åºçæ¯æ°å11 |
| | | calendar.setMinimalDaysInFirstWeek(7); |
| | | |
| | | Integer weekNumbe = calendar.get(Calendar.WEEK_OF_YEAR); |
| | | if (calendar.get(Calendar.MONTH)>=11 && weekNumbe<=1 ){ |
| | | |
| | | weekNumbe +=52; |
| | | |
| | | } |
| | | return weekNumbe; |
| | | } |
| | | |
| | | public static Date getTomorrow() { |
| | | // è·åå½åæ¶é´ |
| | | Date date = new Date(); |
| | | Calendar calendar = new GregorianCalendar(); |
| | | calendar.setTime(date); |
| | | // ææ¥æå¾åå¢å ä¸å¤©,æ´æ° å¾åæ¨,è´æ°å¾åç§»å¨ |
| | | calendar.add(Calendar.DATE, 1); |
| | | // è¿ä¸ªæ¶é´å°±æ¯æ¥æå¾åæ¨ä¸å¤©çç»æ |
| | | date = calendar.getTime(); |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * è·åæå®æ¥ææ¯ææå |
| | | * @param date |
| | | * @return |
| | | */ |
| | | public static int getWeekNo(Date date){ |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(date); |
| | | return calendar.get(Calendar.DAY_OF_WEEK)-1; |
| | | } |
| | | |
| | | |
| | | public static String getWeekInMonth(Date date){ |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(date); |
| | | calendar.setFirstDayOfWeek(Calendar.MONDAY); |
| | | //设置第ä¸å¨æéçæå°å¤©æ° TODO éè¦ |
| | | calendar.setMinimalDaysInFirstWeek(7); |
| | | int week = calendar.get(Calendar.WEEK_OF_MONTH); |
| | | int month = calendar.get(Calendar.MONTH)+1; |
| | | int year = calendar.get(Calendar.YEAR); |
| | | |
| | | return year+"å¹´"+month+"æç¬¬"+week+"å¨"; |
| | | |
| | | } |
| | | |
| | | public static Integer getWeekInMonth(String str){ |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Date date = null; |
| | | try { |
| | | date = dateFormat.parse(str); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(date); |
| | | calendar.setFirstDayOfWeek(Calendar.MONDAY); |
| | | int month = calendar.get(Calendar.MONTH)+1; |
| | | if(month==1){ |
| | | calendar.setMinimalDaysInFirstWeek(7); |
| | | } |
| | | //设置第ä¸å¨æéçæå°å¤©æ° TODO éè¦ ç¹æ®ï¼è¿éæ ¹æ®åä¸ªæ¥æè®¡ç®ä¸ä¸ªææå¤å°å¨ãåªç¨å1 |
| | | |
| | | int week = calendar.get(Calendar.WEEK_OF_MONTH); |
| | | |
| | | int year = calendar.get(Calendar.YEAR); |
| | | |
| | | return week; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | public static String getWeekInMonth(String str,Integer type){ |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | Date date = null; |
| | | try { |
| | | date = dateFormat.parse(str); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(date); |
| | | calendar.setFirstDayOfWeek(Calendar.MONDAY); |
| | | //设置第ä¸å¨æéçæå°å¤©æ° TODO éè¦ ç¹æ®ï¼è¿éæ ¹æ®åä¸ªæ¥æè®¡ç®ä¸ä¸ªææå¤å°å¨ãåªç¨å1 |
| | | calendar.setMinimalDaysInFirstWeek(1); |
| | | int week = calendar.get(Calendar.WEEK_OF_MONTH); |
| | | int month = calendar.get(Calendar.MONTH)+1; |
| | | int year = calendar.get(Calendar.YEAR); |
| | | |
| | | return year +"å¹´"+ month +"æç¬¬" +week+"å¨"; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | public static Date minusSeconds(int second){ |
| | | // è·åå½åæ¶é´ |
| | | LocalDateTime currentTime = LocalDateTime.now(); |
| | | |
| | | // åå»ä¸ç§ |
| | | LocalDateTime newTime = currentTime.minusSeconds(second); |
| | | |
| | | // å°LocalDateTime转æ¢ä¸ºDate |
| | | Date currentDate = java.sql.Timestamp.valueOf(newTime); |
| | | return currentDate; |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * ç§é转æ¶åç§ |
| | | * @param time ç§ |
| | | * @return æ¶åç§ |
| | | */ |
| | | public static String secToTime(int time) { |
| | | String timeStr = null; |
| | | int hour = 0; |
| | | int minute = 0; |
| | | int second = 0; |
| | | if (time <= 0) return "00å00ç§"; |
| | | else { |
| | | minute = time / 60; |
| | | if (minute < 60) { |
| | | second = time % 60 ; |
| | | timeStr = unitFormat(minute) + "å" + unitFormat(second) + "ç§"; |
| | | } else { |
| | | hour = minute / 60; |
| | | //if (hour > 99) return "99æ¶59å59ç§"; |
| | | minute = minute % 60; |
| | | second = time - hour * 3600 - minute * 60 + 1; |
| | | timeStr = unitFormat(hour) + "æ¶" + unitFormat(minute) + "å" + unitFormat(second) + "ç§"; |
| | | } |
| | | } |
| | | return timeStr; |
| | | } |
| | | |
| | | /** |
| | | * ä¿æä¸¤ä½æ°å |
| | | * @param i |
| | | * @return |
| | | */ |
| | | public static String unitFormat(int i) { |
| | | String retStr = null; |
| | | if (i >= 0 && i < 10) retStr = "0" + Integer.toString(i); |
| | | else retStr = "" + i; |
| | | return retStr; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | public enum DySmsEnum { |
| | | |
| | | LOGIN_TEMPLATE_CODE("SMS_175435174","JEECG","code"), |
| | | FORGET_PASSWORD_TEMPLATE_CODE("SMS_175435174","JEECG","code"), |
| | | REGISTER_TEMPLATE_CODE("SMS_175430166","JEECG","code"), |
| | | /**ä¼è®®éç¥*/ |
| | | MEET_NOTICE_TEMPLATE_CODE("SMS_201480469","H5æ´»å¨ä¹å®¶","username,title,minute,time"), |
| | | /**æç计åéç¥*/ |
| | | PLAN_NOTICE_TEMPLATE_CODE("SMS_201470515","H5æ´»å¨ä¹å®¶","username,title,time"); |
| | | |
| | | /** |
| | | * ç信模æ¿ç¼ç |
| | | */ |
| | | private String templateCode; |
| | | /** |
| | | * ç¾å |
| | | */ |
| | | private String signName; |
| | | /** |
| | | * ç信模æ¿å¿
éçæ°æ®åç§°ï¼å¤ä¸ªkey以éå·åéï¼æ¤å¤é
ç½®ä½ä¸ºæ ¡éª |
| | | */ |
| | | private String keys; |
| | | |
| | | private DySmsEnum(String templateCode,String signName,String keys) { |
| | | this.templateCode = templateCode; |
| | | this.signName = signName; |
| | | this.keys = keys; |
| | | } |
| | | |
| | | public String getTemplateCode() { |
| | | return templateCode; |
| | | } |
| | | |
| | | public void setTemplateCode(String templateCode) { |
| | | this.templateCode = templateCode; |
| | | } |
| | | |
| | | public String getSignName() { |
| | | return signName; |
| | | } |
| | | |
| | | public void setSignName(String signName) { |
| | | this.signName = signName; |
| | | } |
| | | |
| | | public String getKeys() { |
| | | return keys; |
| | | } |
| | | |
| | | public void setKeys(String keys) { |
| | | this.keys = keys; |
| | | } |
| | | |
| | | public static DySmsEnum toEnum(String templateCode) { |
| | | if(StringUtils.isEmpty(templateCode)){ |
| | | return null; |
| | | } |
| | | for(DySmsEnum item : DySmsEnum.values()) { |
| | | if(item.getTemplateCode().equals(templateCode)) { |
| | | return item; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import org.jeecg.config.StaticConfig; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.aliyuncs.DefaultAcsClient; |
| | | import com.aliyuncs.IAcsClient; |
| | | import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; |
| | | import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; |
| | | import com.aliyuncs.exceptions.ClientException; |
| | | import com.aliyuncs.profile.DefaultProfile; |
| | | import com.aliyuncs.profile.IClientProfile; |
| | | |
| | | /** |
| | | * Created on 17/6/7. |
| | | * çä¿¡API产åçDEMOç¨åº,å·¥ç¨ä¸å
å«äºä¸ä¸ªSmsDemoç±»ï¼ç´æ¥éè¿ |
| | | * æ§è¡main彿°å³å¯ä½éªç信产åAPIåè½(åªéè¦å°AKæ¿æ¢æå¼éäºäºéä¿¡-ç信产ååè½çAKå³å¯) |
| | | * å·¥ç¨ä¾èµäº2个jarå
(åæ¾å¨å·¥ç¨çlibsç®å½ä¸) |
| | | * 1:aliyun-java-sdk-core.jar |
| | | * 2:aliyun-java-sdk-dysmsapi.jar |
| | | * |
| | | * 夿³¨:Demoå·¥ç¨ç¼ç éç¨UTF-8 |
| | | * å½é
çä¿¡åé请å¿åç
§æ¤DEMO |
| | | */ |
| | | public class DySmsHelper { |
| | | |
| | | private final static Logger logger=LoggerFactory.getLogger(DySmsHelper.class); |
| | | |
| | | //产ååç§°:äºéä¿¡çä¿¡API产å,å¼åè
æ éæ¿æ¢ |
| | | static final String product = "Dysmsapi"; |
| | | //产ååå,å¼åè
æ éæ¿æ¢ |
| | | static final String domain = "dysmsapi.aliyuncs.com"; |
| | | |
| | | // TODO æ¤å¤éè¦æ¿æ¢æå¼åè
èªå·±çAK(å¨é¿éäºè®¿é®æ§å¶å°å¯»æ¾) |
| | | static String accessKeyId; |
| | | static String accessKeySecret; |
| | | |
| | | public static void setAccessKeyId(String accessKeyId) { |
| | | DySmsHelper.accessKeyId = accessKeyId; |
| | | } |
| | | |
| | | public static void setAccessKeySecret(String accessKeySecret) { |
| | | DySmsHelper.accessKeySecret = accessKeySecret; |
| | | } |
| | | |
| | | public static String getAccessKeyId() { |
| | | return accessKeyId; |
| | | } |
| | | |
| | | public static String getAccessKeySecret() { |
| | | return accessKeySecret; |
| | | } |
| | | |
| | | |
| | | public static boolean sendSms(String phone,JSONObject templateParamJson,DySmsEnum dySmsEnum) throws ClientException { |
| | | //å¯èªå©è°æ´è¶
æ¶æ¶é´ |
| | | System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); |
| | | System.setProperty("sun.net.client.defaultReadTimeout", "10000"); |
| | | |
| | | //update-begin-authorï¼taoyan date:20200811 for:é
ç½®ç±»æ°æ®è·å |
| | | StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class); |
| | | setAccessKeyId(staticConfig.getAccessKeyId()); |
| | | setAccessKeySecret(staticConfig.getAccessKeySecret()); |
| | | //update-end-authorï¼taoyan date:20200811 for:é
ç½®ç±»æ°æ®è·å |
| | | |
| | | //åå§åacsClient,æä¸æ¯æregionå |
| | | IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); |
| | | DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); |
| | | IAcsClient acsClient = new DefaultAcsClient(profile); |
| | | |
| | | //éªè¯jsonåæ° |
| | | validateParam(templateParamJson,dySmsEnum); |
| | | |
| | | //ç»è£
请æ±å¯¹è±¡-å
·ä½æè¿°è§æ§å¶å°-ææ¡£é¨åå
容 |
| | | SendSmsRequest request = new SendSmsRequest(); |
| | | //å¿
å¡«:å¾
åéææºå· |
| | | request.setPhoneNumbers(phone); |
| | | //å¿
å¡«:çä¿¡ç¾å-å¯å¨çä¿¡æ§å¶å°ä¸æ¾å° |
| | | request.setSignName(dySmsEnum.getSignName()); |
| | | //å¿
å¡«:ç信模æ¿-å¯å¨çä¿¡æ§å¶å°ä¸æ¾å° |
| | | request.setTemplateCode(dySmsEnum.getTemplateCode()); |
| | | //å¯é:模æ¿ä¸çåéæ¿æ¢JSON串,妿¨¡æ¿å
容为"亲ç±ç${name},æ¨çéªè¯ç 为${code}"æ¶,æ¤å¤çå¼ä¸º |
| | | request.setTemplateParam(templateParamJson.toJSONString()); |
| | | |
| | | //éå¡«-ä¸è¡çä¿¡æ©å±ç (æ ç¹æ®éæ±ç¨æ·è¯·å¿½ç¥æ¤å段) |
| | | //request.setSmsUpExtendCode("90997"); |
| | | |
| | | //å¯é:outId为æä¾ç»ä¸å¡æ¹æ©å±å段,æç»å¨çä¿¡åæ§æ¶æ¯ä¸å°æ¤å¼å¸¦åç»è°ç¨è
|
| | | //request.setOutId("yourOutId"); |
| | | |
| | | boolean result = false; |
| | | |
| | | //hint æ¤å¤å¯è½ä¼æåºå¼å¸¸ï¼æ³¨æcatch |
| | | SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); |
| | | logger.info("çä¿¡æ¥å£è¿åçæ°æ®----------------"); |
| | | logger.info("{Code:" + sendSmsResponse.getCode()+",Message:" + sendSmsResponse.getMessage()+",RequestId:"+ sendSmsResponse.getRequestId()+",BizId:"+sendSmsResponse.getBizId()+"}"); |
| | | if ("OK".equals(sendSmsResponse.getCode())) { |
| | | result = true; |
| | | } |
| | | return result; |
| | | |
| | | } |
| | | |
| | | private static void validateParam(JSONObject templateParamJson,DySmsEnum dySmsEnum) { |
| | | String keys = dySmsEnum.getKeys(); |
| | | String [] keyArr = keys.split(","); |
| | | for(String item :keyArr) { |
| | | if(!templateParamJson.containsKey(item)) { |
| | | throw new RuntimeException("模æ¿ç¼ºå°åæ°ï¼"+item); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // public static void main(String[] args) throws ClientException, InterruptedException { |
| | | // JSONObject obj = new JSONObject(); |
| | | // obj.put("code", "1234"); |
| | | // sendSms("13800138000", obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE); |
| | | // } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jeecg.common.handler.IFillRuleHandler; |
| | | |
| | | |
| | | /** |
| | | * è§åå¼èªå¨çæå·¥å
·ç±» |
| | | * |
| | | * @author qinfeng |
| | | * @举ä¾ï¼ èªå¨çæè®¢åå·ï¼èªå¨çæå½åæ¥æ |
| | | */ |
| | | @Slf4j |
| | | public class FillRuleUtil { |
| | | |
| | | /** |
| | | * @param ruleCode ruleCode |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public static Object executeRule(String ruleCode, JSONObject formData) { |
| | | if (!StringUtils.isEmpty(ruleCode)) { |
| | | try { |
| | | // è·å Service |
| | | ServiceImpl impl = (ServiceImpl) SpringContextUtils.getBean("sysFillRuleServiceImpl"); |
| | | // æ ¹æ® ruleCode æ¥è¯¢åºå®ä½ |
| | | QueryWrapper queryWrapper = new QueryWrapper(); |
| | | queryWrapper.eq("rule_code", ruleCode); |
| | | JSONObject entity = JSON.parseObject(JSON.toJSONString(impl.getOne(queryWrapper))); |
| | | if (entity == null) { |
| | | log.warn("å¡«å¼è§åï¼" + ruleCode + " ä¸åå¨"); |
| | | return null; |
| | | } |
| | | // è·åå¿
è¦çåæ° |
| | | String ruleClass = entity.getString("ruleClass"); |
| | | JSONObject params = entity.getJSONObject("ruleParams"); |
| | | if (params == null) { |
| | | params = new JSONObject(); |
| | | } |
| | | if (formData == null) { |
| | | formData = new JSONObject(); |
| | | } |
| | | // éè¿åå°æ§è¡é
ç½®çç±»éçæ¹æ³ |
| | | IFillRuleHandler ruleHandler = (IFillRuleHandler) Class.forName(ruleClass).newInstance(); |
| | | return ruleHandler.execute(params, formData); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.web.util.HtmlUtils; |
| | | |
| | | import java.util.Random; |
| | | |
| | | /** |
| | | * HTML å·¥å
·ç±» |
| | | */ |
| | | public class HTMLUtils { |
| | | |
| | | /** |
| | | * è·åHTMLå
çææ¬ï¼ä¸å
嫿 ç¾ |
| | | * |
| | | * @param html HTML 代ç |
| | | */ |
| | | public static String getInnerText(String html) { |
| | | if (StringUtils.isNotBlank(html)) { |
| | | //廿 html çæ ç¾ |
| | | String content = html.replaceAll("</?[^>]+>", ""); |
| | | // å°å¤ä¸ªç©ºæ ¼åå¹¶æä¸ä¸ªç©ºæ ¼ |
| | | content = content.replaceAll("( )+", " "); |
| | | // åå转ä¹å符 |
| | | content = HtmlUtils.htmlUnescape(content); |
| | | return content.trim(); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * è·ååå
è¿å¶çé¢è²ä»£ç .ä¾å¦ "#6E36B4" , For HTML , |
| | | * |
| | | * @return String |
| | | */ |
| | | public static String getRandColorCode() { |
| | | String r, g, b; |
| | | Random random = new Random(); |
| | | r = Integer.toHexString(random.nextInt(256)).toUpperCase(); |
| | | g = Integer.toHexString(random.nextInt(256)).toUpperCase(); |
| | | b = Integer.toHexString(random.nextInt(256)).toUpperCase(); |
| | | |
| | | r = r.length() == 1 ? "0" + r : r; |
| | | g = g.length() == 1 ? "0" + g : g; |
| | | b = b.length() == 1 ? "0" + b : b; |
| | | |
| | | return "#" + r + g + b; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param index |
| | | * @return |
| | | */ |
| | | public static String getColor(int index) { |
| | | String colors[] = {"#1890ff", "#05aa87", "#EF5362", "#FE6D4B", "#FFCF47", "#9FD661", "#3FD0AD", "#AC8FEF", "#EE85C1", "#31BDF3"}; |
| | | if (index >= colors.length) index = index % 10; |
| | | return colors[index]; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import com.nlf.calendar.Holiday; |
| | | import com.nlf.calendar.util.HolidayUtil; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * è忥工å
·ç±» |
| | | */ |
| | | public class HolidayUtils { |
| | | public static void main(String[] args) { |
| | | Map<Integer, Integer> holidayWeek = getHolidayWeek(2024); |
| | | System.out.println(holidayWeek); |
| | | |
| | | |
| | | } |
| | | /** |
| | | * è·åæå®å¹´ä»½çè忥 |
| | | * @param year |
| | | * @return |
| | | */ |
| | | public static Map<Integer, Integer> getHolidayWeek(int year) { |
| | | //ç»è®¡ä¸å¨æå 天ï¼ä¸å¨æ5天åæåä¸è®¡ç®ç»©æ |
| | | Map<Integer, Integer> weekMap = new HashMap<>(); |
| | | List<Holiday> holidays = HolidayUtil.getHolidays(year); |
| | | holidays.forEach(item -> { |
| | | if (item.getName().equals("æ¥è") || item.getName().equals("å³å¨è") || item.getName().equals("å½åºè")) { |
| | | if (item.isWork()) return; |
| | | String day = item.getDay(); |
| | | Date date = DateUtils.str2Date(day, DateUtils.date_sdf.get()); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(date); |
| | | int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; // å°æææ¥ä»1æ å°ä¸º0 |
| | | |
| | | Integer weekNoByDate = DateUtils.getWeekNoByDate(date); |
| | | // System.out.println("åæ:" + item.getName() + "æ¥æ:" + item.getDay()); |
| | | // System.out.println("ææ " + dayOfWeek); |
| | | // System.out.println("è¿ä¸å¤©æ¯ä¸å¹´ç第 " + weekNoByDate + " å¨"); |
| | | // System.out.println("-----------------------"); |
| | | |
| | | //æé¤å¨æ«(ç»è®¡ä¸å¨5天齿¯åæçå¨å·) |
| | | if (dayOfWeek != 6 && dayOfWeek != 0) { |
| | | if (weekMap.containsKey(weekNoByDate)) { |
| | | weekMap.put(weekNoByDate, weekMap.get(weekNoByDate) + 1); |
| | | } else { |
| | | weekMap.put(weekNoByDate, 1); |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | weekMap.entrySet().removeIf(entry -> entry.getValue() < 5); |
| | | |
| | | return weekMap; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | /** |
| | | * IPå°å |
| | | * |
| | | * @Author scott |
| | | * @email jeecgos@163.com |
| | | * @Date 2019å¹´01æ14æ¥ |
| | | */ |
| | | public class IPUtils { |
| | | private static Logger logger = LoggerFactory.getLogger(IPUtils.class); |
| | | |
| | | /** |
| | | * è·åIPå°å |
| | | * |
| | | * 使ç¨Nginxçåå代çè½¯ä»¶ï¼ åä¸è½éè¿request.getRemoteAddr()è·åIPå°å |
| | | * å¦æä½¿ç¨äºå¤çº§åå代ççè¯ï¼X-Forwarded-Forçå¼å¹¶ä¸æ¢ä¸ä¸ªï¼èæ¯ä¸ä¸²IPå°åï¼X-Forwarded-Forä¸ç¬¬ä¸ä¸ªéunknownçææIPå符串ï¼å为çå®IPå°å |
| | | */ |
| | | public static String getIpAddr(HttpServletRequest request) { |
| | | String ip = null; |
| | | try { |
| | | ip = request.getHeader("x-forwarded-for"); |
| | | if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("Proxy-Client-IP"); |
| | | } |
| | | if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("WL-Proxy-Client-IP"); |
| | | } |
| | | if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("HTTP_CLIENT_IP"); |
| | | } |
| | | if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("HTTP_X_FORWARDED_FOR"); |
| | | } |
| | | if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getRemoteAddr(); |
| | | } |
| | | } catch (Exception e) { |
| | | logger.error("IPUtils ERROR ", e); |
| | | } |
| | | |
| | | // //使ç¨ä»£çï¼åè·å第ä¸ä¸ªIPå°å |
| | | // if(StringUtils.isEmpty(ip) && ip.length() > 15) { |
| | | // if(ip.indexOf(",") > 0) { |
| | | // ip = ip.substring(0, ip.indexOf(",")); |
| | | // } |
| | | // } |
| | | |
| | | return ip; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 导åºè¿åä¿¡æ¯ |
| | | */ |
| | | @Slf4j |
| | | public class ImportExcelUtil { |
| | | |
| | | public static Result<?> imporReturnRes(int errorLines,int successLines,List<String> errorMessage) throws IOException { |
| | | if (errorLines == 0) { |
| | | return Result.ok("å
±" + successLines + "è¡æ°æ®å
¨é¨å¯¼å
¥æåï¼"); |
| | | } else { |
| | | JSONObject result = new JSONObject(5); |
| | | int totalCount = successLines + errorLines; |
| | | result.put("totalCount", totalCount); |
| | | result.put("errorCount", errorLines); |
| | | result.put("successCount", successLines); |
| | | result.put("msg", "æ»ä¸ä¼ è¡æ°ï¼" + totalCount + "ï¼å·²å¯¼å
¥è¡æ°ï¼" + successLines + "ï¼éè¯¯è¡æ°ï¼" + errorLines); |
| | | String fileUrl = PmsUtil.saveErrorTxtByList(errorMessage, "userImportExcelErrorLog"); |
| | | int lastIndex = fileUrl.lastIndexOf(File.separator); |
| | | String fileName = fileUrl.substring(lastIndex + 1); |
| | | result.put("fileUrl", "/sys/common/static/" + fileUrl); |
| | | result.put("fileName", fileName); |
| | | Result res = Result.ok(result); |
| | | res.setCode(201); |
| | | res.setMessage("æä»¶å¯¼å
¥æåï¼ä½æé误ã"); |
| | | return res; |
| | | } |
| | | } |
| | | |
| | | public static List<String> importDateSave(List<?> list, Class serviceClass, List<String> errorMessage, String errorFlag) { |
| | | IService bean =(IService) SpringContextUtils.getBean(serviceClass); |
| | | for (int i = 0; i < list.size(); i++) { |
| | | try { |
| | | boolean save = bean.save(list.get(i)); |
| | | if(!save){ |
| | | throw new Exception(errorFlag); |
| | | } |
| | | } catch (Exception e) { |
| | | String message = e.getMessage().toLowerCase(); |
| | | int lineNumber = i + 1; |
| | | // éè¿ç´¢å¼å夿åºéä¿¡æ¯ |
| | | if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_ROLE_CODE)) { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼è§è²ç¼ç å·²ç»åå¨ï¼å¿½ç¥å¯¼å
¥ã"); |
| | | } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_JOB_CLASS_NAME)) { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼ä»»å¡ç±»åå·²ç»åå¨ï¼å¿½ç¥å¯¼å
¥ã"); |
| | | }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CODE)) { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼èå¡ç¼ç å·²ç»åå¨ï¼å¿½ç¥å¯¼å
¥ã"); |
| | | }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE)) { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼é¨é¨ç¼ç å·²ç»åå¨ï¼å¿½ç¥å¯¼å
¥ã"); |
| | | }else { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼æªç¥é误ï¼å¿½ç¥å¯¼å
¥"); |
| | | log.error(e.getMessage(), e); |
| | | } |
| | | } |
| | | } |
| | | return errorMessage; |
| | | } |
| | | |
| | | public static List<String> importDateSaveOne(Object obj, Class serviceClass,List<String> errorMessage,int i,String errorFlag) { |
| | | IService bean =(IService) SpringContextUtils.getBean(serviceClass); |
| | | try { |
| | | boolean save = bean.save(obj); |
| | | if(!save){ |
| | | throw new Exception(errorFlag); |
| | | } |
| | | } catch (Exception e) { |
| | | String message = e.getMessage().toLowerCase(); |
| | | int lineNumber = i + 1; |
| | | // éè¿ç´¢å¼å夿åºéä¿¡æ¯ |
| | | if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_ROLE_CODE)) { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼è§è²ç¼ç å·²ç»åå¨ï¼å¿½ç¥å¯¼å
¥ã"); |
| | | } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_JOB_CLASS_NAME)) { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼ä»»å¡ç±»åå·²ç»åå¨ï¼å¿½ç¥å¯¼å
¥ã"); |
| | | }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CODE)) { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼èå¡ç¼ç å·²ç»åå¨ï¼å¿½ç¥å¯¼å
¥ã"); |
| | | }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE)) { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼é¨é¨ç¼ç å·²ç»åå¨ï¼å¿½ç¥å¯¼å
¥ã"); |
| | | }else { |
| | | errorMessage.add("第 " + lineNumber + " è¡ï¼æªç¥é误ï¼å¿½ç¥å¯¼å
¥"); |
| | | log.error(e.getMessage(), e); |
| | | } |
| | | } |
| | | return errorMessage; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.math.BigInteger; |
| | | import java.security.MessageDigest; |
| | | |
| | | public class MD5Util { |
| | | |
| | | public static String byteArrayToHexString(byte b[]) { |
| | | StringBuffer resultSb = new StringBuffer(); |
| | | for (int i = 0; i < b.length; i++){ |
| | | resultSb.append(byteToHexString(b[i])); |
| | | } |
| | | return resultSb.toString(); |
| | | } |
| | | |
| | | private static String byteToHexString(byte b) { |
| | | int n = b; |
| | | if (n < 0) { |
| | | n += 256; |
| | | } |
| | | int d1 = n / 16; |
| | | int d2 = n % 16; |
| | | return hexDigits[d1] + hexDigits[d2]; |
| | | } |
| | | |
| | | public static String MD5Encode(String origin, String charsetname) { |
| | | String resultString = null; |
| | | try { |
| | | resultString = new String(origin); |
| | | MessageDigest md = MessageDigest.getInstance("MD5"); |
| | | if (charsetname == null || "".equals(charsetname)) { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes())); |
| | | } else { |
| | | resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); |
| | | } |
| | | } catch (Exception exception) { |
| | | } |
| | | return resultString; |
| | | } |
| | | |
| | | private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", |
| | | "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; |
| | | |
| | | |
| | | /** |
| | | * è·åå个æä»¶çMD5å¼ï¼ |
| | | * @param file |
| | | * @return |
| | | */ |
| | | public static String getFileMD5(File file) { |
| | | if (!file.isFile()){ |
| | | return null; |
| | | } |
| | | MessageDigest digest = null; |
| | | FileInputStream in=null; |
| | | byte buffer[] = new byte[1024]; |
| | | int len; |
| | | try { |
| | | digest = MessageDigest.getInstance("MD5"); |
| | | in = new FileInputStream(file); |
| | | while ((len = in.read(buffer, 0, 1024)) != -1) { |
| | | digest.update(buffer, 0, len); |
| | | } |
| | | in.close(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | BigInteger bigInt = new BigInteger(1, digest.digest()); |
| | | return bigInt.toString(16); |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import io.minio.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.util.filter.FileTypeFilter; |
| | | import org.jeecg.common.util.filter.StrAttackFilter; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.io.InputStream; |
| | | import java.net.URLDecoder; |
| | | |
| | | /** |
| | | * minioæä»¶ä¸ä¼ å·¥å
·ç±» |
| | | */ |
| | | @Slf4j |
| | | public class MinioUtil { |
| | | private static String minioUrl; |
| | | private static String minioName; |
| | | private static String minioPass; |
| | | private static String bucketName; |
| | | |
| | | public static void setMinioUrl(String minioUrl) { |
| | | MinioUtil.minioUrl = minioUrl; |
| | | } |
| | | |
| | | public static void setMinioName(String minioName) { |
| | | MinioUtil.minioName = minioName; |
| | | } |
| | | |
| | | public static void setMinioPass(String minioPass) { |
| | | MinioUtil.minioPass = minioPass; |
| | | } |
| | | |
| | | public static void setBucketName(String bucketName) { |
| | | MinioUtil.bucketName = bucketName; |
| | | } |
| | | |
| | | public static String getMinioUrl() { |
| | | return minioUrl; |
| | | } |
| | | |
| | | public static String getBucketName() { |
| | | return bucketName; |
| | | } |
| | | |
| | | private static MinioClient minioClient = null; |
| | | |
| | | /** |
| | | * ä¸ä¼ æä»¶ |
| | | * @param file |
| | | * @return |
| | | */ |
| | | public static String upload(MultipartFile file, String bizPath, String customBucket) { |
| | | String file_url = ""; |
| | | //update-begin-author:wangshuai date:20201012 for: è¿æ»¤ä¸ä¼ æä»¶å¤¹åç¹æ®å符ï¼é²æ¢æ»å» |
| | | bizPath=StrAttackFilter.filter(bizPath); |
| | | //update-end-author:wangshuai date:20201012 for: è¿æ»¤ä¸ä¼ æä»¶å¤¹åç¹æ®å符ï¼é²æ¢æ»å» |
| | | String newBucket = bucketName; |
| | | if(oConvertUtils.isNotEmpty(customBucket)){ |
| | | newBucket = customBucket; |
| | | } |
| | | try { |
| | | initMinio(minioUrl, minioName,minioPass); |
| | | // æ£æ¥å卿¡¶æ¯å¦å·²ç»åå¨ |
| | | if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(newBucket).build())) { |
| | | log.info("Bucket already exists."); |
| | | } else { |
| | | // å建ä¸ä¸ªå为otaçå卿¡¶ |
| | | minioClient.makeBucket(MakeBucketArgs.builder().bucket(newBucket).build()); |
| | | log.info("create a new bucket."); |
| | | } |
| | | //update-begin-author:liusq date:20210809 for: è¿æ»¤ä¸ä¼ æä»¶ç±»å |
| | | FileTypeFilter.fileTypeFilter(file); |
| | | //update-end-author:liusq date:20210809 for: è¿æ»¤ä¸ä¼ æä»¶ç±»å |
| | | InputStream stream = file.getInputStream(); |
| | | // è·åæä»¶å |
| | | String orgName = file.getOriginalFilename(); |
| | | if("".equals(orgName)){ |
| | | orgName=file.getName(); |
| | | } |
| | | orgName = CommonUtils.getFileName(orgName); |
| | | String objectName = bizPath+"/" |
| | | +( orgName.indexOf(".")==-1 |
| | | ?orgName + "_" + System.currentTimeMillis() |
| | | :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")) |
| | | ); |
| | | |
| | | // 使ç¨putObjectä¸ä¼ ä¸ä¸ªæ¬å°æä»¶å°å卿¡¶ä¸ã |
| | | if(objectName.startsWith("/")){ |
| | | objectName = objectName.substring(1); |
| | | } |
| | | PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName) |
| | | .bucket(newBucket) |
| | | .contentType("application/octet-stream") |
| | | .stream(stream,stream.available(),-1).build(); |
| | | minioClient.putObject(objectArgs); |
| | | stream.close(); |
| | | file_url = minioUrl+newBucket+"/"+objectName; |
| | | }catch (Exception e){ |
| | | log.error(e.getMessage(), e); |
| | | } |
| | | return file_url; |
| | | } |
| | | |
| | | /** |
| | | * æä»¶ä¸ä¼ |
| | | * @param file |
| | | * @param bizPath |
| | | * @return |
| | | */ |
| | | public static String upload(MultipartFile file, String bizPath) { |
| | | return upload(file,bizPath,null); |
| | | } |
| | | |
| | | /** |
| | | * è·åæä»¶æµ |
| | | * @param bucketName |
| | | * @param objectName |
| | | * @return |
| | | */ |
| | | public static InputStream getMinioFile(String bucketName,String objectName){ |
| | | InputStream inputStream = null; |
| | | try { |
| | | initMinio(minioUrl, minioName, minioPass); |
| | | GetObjectArgs objectArgs = GetObjectArgs.builder().object(objectName) |
| | | .bucket(bucketName).build(); |
| | | inputStream = minioClient.getObject(objectArgs); |
| | | } catch (Exception e) { |
| | | log.info("æä»¶è·å失败" + e.getMessage()); |
| | | } |
| | | return inputStream; |
| | | } |
| | | |
| | | /** |
| | | * å 餿件 |
| | | * @param bucketName |
| | | * @param objectName |
| | | * @throws Exception |
| | | */ |
| | | public static void removeObject(String bucketName, String objectName) { |
| | | try { |
| | | initMinio(minioUrl, minioName,minioPass); |
| | | RemoveObjectArgs objectArgs = RemoveObjectArgs.builder().object(objectName) |
| | | .bucket(bucketName).build(); |
| | | minioClient.removeObject(objectArgs); |
| | | }catch (Exception e){ |
| | | log.info("æä»¶å é¤å¤±è´¥" + e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åæä»¶å¤é¾ |
| | | * @param bucketName |
| | | * @param objectName |
| | | * @param expires |
| | | * @return |
| | | */ |
| | | public static String getObjectURL(String bucketName, String objectName, Integer expires) { |
| | | initMinio(minioUrl, minioName,minioPass); |
| | | try{ |
| | | GetPresignedObjectUrlArgs objectArgs = GetPresignedObjectUrlArgs.builder().object(objectName) |
| | | .bucket(bucketName) |
| | | .expiry(expires).build(); |
| | | String url = minioClient.getPresignedObjectUrl(objectArgs); |
| | | return URLDecoder.decode(url,"UTF-8"); |
| | | }catch (Exception e){ |
| | | log.info("æä»¶è·¯å¾è·å失败" + e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * åå§å客æ·ç«¯ |
| | | * @param minioUrl |
| | | * @param minioName |
| | | * @param minioPass |
| | | * @return |
| | | */ |
| | | private static MinioClient initMinio(String minioUrl, String minioName,String minioPass) { |
| | | if (minioClient == null) { |
| | | try { |
| | | minioClient = MinioClient.builder() |
| | | .endpoint(minioUrl) |
| | | .credentials(minioName, minioPass) |
| | | .build(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return minioClient; |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ æä»¶å°minio |
| | | * @param stream |
| | | * @param relativePath |
| | | * @return |
| | | */ |
| | | public static String upload(InputStream stream,String relativePath) throws Exception { |
| | | initMinio(minioUrl, minioName,minioPass); |
| | | if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) { |
| | | log.info("Bucket already exists."); |
| | | } else { |
| | | // å建ä¸ä¸ªå为otaçå卿¡¶ |
| | | minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); |
| | | log.info("create a new bucket."); |
| | | } |
| | | PutObjectArgs objectArgs = PutObjectArgs.builder().object(relativePath) |
| | | .bucket(bucketName) |
| | | .contentType("application/octet-stream") |
| | | .stream(stream,stream.available(),-1).build(); |
| | | minioClient.putObject(objectArgs); |
| | | stream.close(); |
| | | return minioUrl+bucketName+"/"+relativePath; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | /** |
| | | * @Author å¼ ä»£æµ© |
| | | */ |
| | | public class MyClassLoader extends ClassLoader { |
| | | public static Class getClassByScn(String className) { |
| | | Class myclass = null; |
| | | try { |
| | | myclass = Class.forName(className); |
| | | } catch (ClassNotFoundException e) { |
| | | e.printStackTrace(); |
| | | throw new RuntimeException(className+" not found!"); |
| | | } |
| | | return myclass; |
| | | } |
| | | |
| | | // è·å¾ç±»çå
¨åï¼å
æ¬å
å |
| | | public static String getPackPath(Object object) { |
| | | // æ£æ¥ç¨æ·ä¼ å
¥çåæ°æ¯å¦ä¸ºç©º |
| | | if (object == null) { |
| | | throw new java.lang.IllegalArgumentException("åæ°ä¸è½ä¸ºç©ºï¼"); |
| | | } |
| | | // è·å¾ç±»çå
¨åï¼å
æ¬å
å |
| | | String clsName = object.getClass().getName(); |
| | | return clsName; |
| | | } |
| | | |
| | | public static String getAppPath(Class cls) { |
| | | // æ£æ¥ç¨æ·ä¼ å
¥çåæ°æ¯å¦ä¸ºç©º |
| | | if (cls == null) { |
| | | throw new java.lang.IllegalArgumentException("åæ°ä¸è½ä¸ºç©ºï¼"); |
| | | } |
| | | ClassLoader loader = cls.getClassLoader(); |
| | | // è·å¾ç±»çå
¨åï¼å
æ¬å
å |
| | | String clsName = cls.getName() + ".class"; |
| | | // è·å¾ä¼ å
¥åæ°æå¨çå
|
| | | Package pack = cls.getPackage(); |
| | | String path = ""; |
| | | // 妿䏿¯å¿åå
ï¼å°å
å转åä¸ºè·¯å¾ |
| | | if (pack != null) { |
| | | String packName = pack.getName(); |
| | | // æ¤å¤ç®åå¤å®æ¯å¦æ¯Javaåºç¡ç±»åºï¼é²æ¢ç¨æ·ä¼ å
¥JDKå
ç½®çç±»åº |
| | | if (packName.startsWith("java.") || packName.startsWith("javax.")) { |
| | | throw new java.lang.IllegalArgumentException("ä¸è¦ä¼ éç³»ç»ç±»ï¼"); |
| | | } |
| | | // å¨ç±»çåç§°ä¸ï¼å»æå
åçé¨åï¼è·å¾ç±»çæä»¶å |
| | | clsName = clsName.substring(packName.length() + 1); |
| | | // å¤å®å
忝妿¯ç®åå
åï¼å¦ææ¯ï¼åç´æ¥å°å
å转æ¢ä¸ºè·¯å¾ï¼ |
| | | if (packName.indexOf(".") < 0) { |
| | | path = packName + "/"; |
| | | } else {// å¦åæç
§å
åçç»æé¨åï¼å°å
å转æ¢ä¸ºè·¯å¾ |
| | | int start = 0, end = 0; |
| | | end = packName.indexOf("."); |
| | | while (end != -1) { |
| | | path = path + packName.substring(start, end) + "/"; |
| | | start = end + 1; |
| | | end = packName.indexOf(".", start); |
| | | } |
| | | path = path + packName.substring(start) + "/"; |
| | | } |
| | | } |
| | | // è°ç¨ClassLoaderçgetResourceæ¹æ³ï¼ä¼ å
¥å
å«è·¯å¾ä¿¡æ¯çç±»æä»¶å |
| | | java.net.URL url = loader.getResource(path + clsName); |
| | | // ä»URL对象ä¸è·åè·¯å¾ä¿¡æ¯ |
| | | String realPath = url.getPath(); |
| | | // å»æè·¯å¾ä¿¡æ¯ä¸çåè®®å"file:" |
| | | int pos = realPath.indexOf("file:"); |
| | | if (pos > -1) { |
| | | realPath = realPath.substring(pos + 5); |
| | | } |
| | | // å»æè·¯å¾ä¿¡æ¯æåå
å«ç±»æä»¶ä¿¡æ¯çé¨åï¼å¾å°ç±»æå¨çè·¯å¾ |
| | | pos = realPath.indexOf(path + clsName); |
| | | realPath = realPath.substring(0, pos - 1); |
| | | // å¦æç±»æä»¶è¢«æå
å°JARçæä»¶ä¸æ¶ï¼å»æå¯¹åºçJARçæå
æä»¶å |
| | | if (realPath.endsWith("!")) { |
| | | realPath = realPath.substring(0, realPath.lastIndexOf("/")); |
| | | } |
| | | /*------------------------------------------------------------ |
| | | ClassLoaderçgetResourceæ¹æ³ä½¿ç¨äºutf-8对路å¾ä¿¡æ¯è¿è¡äºç¼ç ï¼å½è·¯å¾ |
| | | ä¸åå¨ä¸æåç©ºæ ¼æ¶ï¼ä»ä¼å¯¹è¿äºå符è¿è¡è½¬æ¢ï¼è¿æ ·ï¼å¾å°çå¾å¾ä¸æ¯æä»¬æ³è¦ |
| | | ççå®è·¯å¾ï¼å¨æ¤ï¼è°ç¨äºURLDecoderçdecodeæ¹æ³è¿è¡è§£ç ï¼ä»¥ä¾¿å¾å°åå§ç |
| | | 䏿åç©ºæ ¼è·¯å¾ |
| | | -------------------------------------------------------------*/ |
| | | try { |
| | | realPath = java.net.URLDecoder.decode(realPath, "utf-8"); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return realPath; |
| | | }// getAppPathå®ä¹ç»æ |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import java.security.Key; |
| | | import java.security.SecureRandom; |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.SecretKey; |
| | | import javax.crypto.SecretKeyFactory; |
| | | import javax.crypto.spec.PBEKeySpec; |
| | | import javax.crypto.spec.PBEParameterSpec; |
| | | public class PasswordUtil { |
| | | |
| | | /** |
| | | * JAVA6æ¯æä»¥ä¸ä»»æä¸ç§ç®æ³ PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES |
| | | * PBEWITHSHAANDDESEDE PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1 |
| | | * */ |
| | | |
| | | /** |
| | | * å®ä¹ä½¿ç¨çç®æ³ä¸º:PBEWITHMD5andDESç®æ³ |
| | | */ |
| | | public static final String ALGORITHM = "PBEWithMD5AndDES";//å å¯ç®æ³ |
| | | public static final String Salt = "63293188";//å¯é¥ |
| | | |
| | | /** |
| | | * å®ä¹è¿ä»£æ¬¡æ°ä¸º1000次 |
| | | */ |
| | | private static final int ITERATIONCOUNT = 1000; |
| | | |
| | | /** |
| | | * è·åå å¯ç®æ³ä¸ä½¿ç¨ççå¼,è§£å¯ä¸ä½¿ç¨ççå¼å¿
é¡»ä¸å å¯ä¸ä½¿ç¨çç¸åæè½å®ææä½. çé¿åº¦å¿
须为8åè |
| | | * |
| | | * @return byte[] çå¼ |
| | | * */ |
| | | public static byte[] getSalt() throws Exception { |
| | | // å®ä¾åå®å
¨éæºæ° |
| | | SecureRandom random = new SecureRandom(); |
| | | // 产åºç |
| | | return random.generateSeed(8); |
| | | } |
| | | |
| | | public static byte[] getStaticSalt() { |
| | | // 产åºç |
| | | return Salt.getBytes(); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®PBEå¯ç çæä¸æå¯é¥ |
| | | * |
| | | * @param password |
| | | * çæå¯é¥æ¶æä½¿ç¨çå¯ç |
| | | * @return Key PBEç®æ³å¯é¥ |
| | | * */ |
| | | private static Key getPBEKey(String password) { |
| | | // å®ä¾å使ç¨çç®æ³ |
| | | SecretKeyFactory keyFactory; |
| | | SecretKey secretKey = null; |
| | | try { |
| | | keyFactory = SecretKeyFactory.getInstance(ALGORITHM); |
| | | // 设置PBEå¯é¥åæ° |
| | | PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray()); |
| | | // çæå¯é¥ |
| | | secretKey = keyFactory.generateSecret(keySpec); |
| | | } catch (Exception e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return secretKey; |
| | | } |
| | | |
| | | /** |
| | | * å 坿æå符串 |
| | | * |
| | | * @param plaintext |
| | | * å¾
å å¯çææå符串 |
| | | * @param password |
| | | * çæå¯é¥æ¶æä½¿ç¨çå¯ç |
| | | * @param salt |
| | | * çå¼ |
| | | * @return å å¯åç坿å符串 |
| | | * @throws Exception |
| | | */ |
| | | public static String encrypt(String plaintext, String password, String salt) { |
| | | |
| | | Key key = getPBEKey(password); |
| | | byte[] encipheredData = null; |
| | | PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); |
| | | try { |
| | | Cipher cipher = Cipher.getInstance(ALGORITHM); |
| | | |
| | | cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec); |
| | | //update-begin-author:sccott date:20180815 for:䏿ä½ä¸ºç¨æ·åæ¶ï¼å å¯çå¯ç windowsålinuxä¼å¾å°ä¸åçç»æ gitee/issues/IZUD7 |
| | | encipheredData = cipher.doFinal(plaintext.getBytes("utf-8")); |
| | | //update-end-author:sccott date:20180815 for:䏿ä½ä¸ºç¨æ·åæ¶ï¼å å¯çå¯ç windowsålinuxä¼å¾å°ä¸åçç»æ gitee/issues/IZUD7 |
| | | } catch (Exception e) { |
| | | } |
| | | return bytesToHexString(encipheredData); |
| | | } |
| | | |
| | | /** |
| | | * è§£å¯å¯æå符串 |
| | | * |
| | | * @param ciphertext |
| | | * å¾
è§£å¯ç坿å符串 |
| | | * @param password |
| | | * çæå¯é¥æ¶æä½¿ç¨çå¯ç (å¦éè§£å¯,è¯¥åæ°éè¦ä¸å 坿¶ä½¿ç¨çä¸è´) |
| | | * @param salt |
| | | * çå¼(å¦éè§£å¯,è¯¥åæ°éè¦ä¸å 坿¶ä½¿ç¨çä¸è´) |
| | | * @return è§£å¯åçææå符串 |
| | | * @throws Exception |
| | | */ |
| | | public static String decrypt(String ciphertext, String password, String salt) { |
| | | |
| | | Key key = getPBEKey(password); |
| | | byte[] passDec = null; |
| | | PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); |
| | | try { |
| | | Cipher cipher = Cipher.getInstance(ALGORITHM); |
| | | |
| | | cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec); |
| | | |
| | | passDec = cipher.doFinal(hexStringToBytes(ciphertext)); |
| | | } |
| | | |
| | | catch (Exception e) { |
| | | // TODO: handle exception |
| | | } |
| | | return new String(passDec); |
| | | } |
| | | |
| | | /** |
| | | * å°åèæ°ç»è½¬æ¢ä¸ºåå
è¿å¶å符串 |
| | | * |
| | | * @param src |
| | | * åèæ°ç» |
| | | * @return |
| | | */ |
| | | public static String bytesToHexString(byte[] src) { |
| | | StringBuilder stringBuilder = new StringBuilder(""); |
| | | if (src == null || src.length <= 0) { |
| | | return null; |
| | | } |
| | | for (int i = 0; i < src.length; i++) { |
| | | int v = src[i] & 0xFF; |
| | | String hv = Integer.toHexString(v); |
| | | if (hv.length() < 2) { |
| | | stringBuilder.append(0); |
| | | } |
| | | stringBuilder.append(hv); |
| | | } |
| | | return stringBuilder.toString(); |
| | | } |
| | | |
| | | /** |
| | | * å°åå
è¿å¶å符串转æ¢ä¸ºåèæ°ç» |
| | | * |
| | | * @param hexString |
| | | * åå
è¿å¶å符串 |
| | | * @return |
| | | */ |
| | | public static byte[] hexStringToBytes(String hexString) { |
| | | if (hexString == null || hexString.equals("")) { |
| | | return null; |
| | | } |
| | | hexString = hexString.toUpperCase(); |
| | | int length = hexString.length() / 2; |
| | | char[] hexChars = hexString.toCharArray(); |
| | | byte[] d = new byte[length]; |
| | | for (int i = 0; i < length; i++) { |
| | | int pos = i * 2; |
| | | d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); |
| | | } |
| | | return d; |
| | | } |
| | | |
| | | private static byte charToByte(char c) { |
| | | return (byte) "0123456789ABCDEF".indexOf(c); |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.Map; |
| | | |
| | | import org.springframework.util.AntPathMatcher; |
| | | |
| | | /** |
| | | * 使ç¨Springèªèº«æä¾çå°åå¹é
å·¥å
·å¹é
URL |
| | | */ |
| | | public class PathMatcherUtil { |
| | | |
| | | public static void main(String[] args) { |
| | | String url = "/sys/dict/loadDictOrderByValue/tree,s2,2"; |
| | | String p = "/sys/dict/loadDictOrderByValue/*"; |
| | | |
| | | System.out.println(PathMatcherUtil.match(p,url)); |
| | | } |
| | | |
| | | /** |
| | | * å®é
éªè¯è·¯å¾å¹é
æé |
| | | * |
| | | * @param matchPath æéurl |
| | | * @param path 访é®è·¯å¾ |
| | | * @return æ¯å¦æ¥ææé |
| | | */ |
| | | public static boolean match(String matchPath, String path) { |
| | | SpringAntMatcher springAntMatcher = new SpringAntMatcher(matchPath, true); |
| | | return springAntMatcher.matches(path); |
| | | } |
| | | |
| | | /** |
| | | * å®é
éªè¯è·¯å¾å¹é
æé |
| | | * |
| | | * @param list æéurl |
| | | * @param path 访é®è·¯å¾ |
| | | * @return æ¯å¦æ¥ææé |
| | | */ |
| | | public static boolean matches(Collection<String> list, String path) { |
| | | for (String s : list) { |
| | | SpringAntMatcher springAntMatcher = new SpringAntMatcher(s, true); |
| | | if (springAntMatcher.matches(path)) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * å°å表达å¼å¹é
å·¥å
· |
| | | */ |
| | | private static class SpringAntMatcher implements Matcher { |
| | | private final AntPathMatcher antMatcher; |
| | | private final String pattern; |
| | | |
| | | private SpringAntMatcher(String pattern, boolean caseSensitive) { |
| | | this.pattern = pattern; |
| | | this.antMatcher = createMatcher(caseSensitive); |
| | | } |
| | | |
| | | @Override |
| | | public boolean matches(String path) { |
| | | return this.antMatcher.match(this.pattern, path); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, String> extractUriTemplateVariables(String path) { |
| | | return this.antMatcher.extractUriTemplateVariables(this.pattern, path); |
| | | } |
| | | |
| | | private static AntPathMatcher createMatcher(boolean caseSensitive) { |
| | | AntPathMatcher matcher = new AntPathMatcher(); |
| | | matcher.setTrimTokens(false); |
| | | matcher.setCaseSensitive(caseSensitive); |
| | | return matcher; |
| | | } |
| | | } |
| | | |
| | | private interface Matcher { |
| | | boolean matches(String var1); |
| | | |
| | | Map<String, String> extractUriTemplateVariables(String var1); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.io.BufferedWriter; |
| | | import java.io.File; |
| | | import java.io.FileWriter; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Slf4j |
| | | @Component |
| | | public class PmsUtil { |
| | | |
| | | |
| | | private static String uploadPath; |
| | | |
| | | @Value("${jeecg.path.upload}") |
| | | public void setUploadPath(String uploadPath) { |
| | | PmsUtil.uploadPath = uploadPath; |
| | | } |
| | | |
| | | public static String saveErrorTxtByList(List<String> msg, String name) { |
| | | Date d = new Date(); |
| | | String saveDir = "logs" + File.separator + DateUtils.yyyyMMdd.get().format(d) + File.separator; |
| | | String saveFullDir = uploadPath + File.separator + saveDir; |
| | | |
| | | File saveFile = new File(saveFullDir); |
| | | if (!saveFile.exists()) { |
| | | saveFile.mkdirs(); |
| | | } |
| | | name += DateUtils.yyyymmddhhmmss.get().format(d) + Math.round(Math.random() * 10000); |
| | | String saveFilePath = saveFullDir + name + ".txt"; |
| | | |
| | | try { |
| | | //å°è£
ç®çå° |
| | | BufferedWriter bw = new BufferedWriter(new FileWriter(saveFilePath)); |
| | | //éåéå |
| | | for (String s : msg) { |
| | | //åæ°æ® |
| | | if (s.indexOf("_") > 0) { |
| | | String arr[] = s.split("_"); |
| | | bw.write("第" + arr[0] + "è¡:" + arr[1]); |
| | | } else { |
| | | bw.write(s); |
| | | } |
| | | //bw.newLine(); |
| | | bw.write("\r\n"); |
| | | } |
| | | //éæ¾èµæº |
| | | bw.flush(); |
| | | bw.close(); |
| | | } catch (Exception e) { |
| | | log.info("excel导å
¥çæé误æ¥å¿æä»¶å¼å¸¸:" + e.getMessage()); |
| | | } |
| | | return saveDir + name + ".txt"; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.lang.reflect.Method; |
| | | import java.util.*; |
| | | import java.util.Map.Entry; |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * @author å¼ ä»£æµ© |
| | | * @desc éè¿åå°æ¥å¨æè°ç¨get å set æ¹æ³ |
| | | */ |
| | | @Slf4j |
| | | public class ReflectHelper { |
| | | |
| | | private Class cls; |
| | | |
| | | /** |
| | | * ä¼ è¿æ¥ç对象 |
| | | */ |
| | | private Object obj; |
| | | |
| | | /** |
| | | * åæ¾getæ¹æ³ |
| | | */ |
| | | private Hashtable<String, Method> getMethods = null; |
| | | /** |
| | | * åæ¾setæ¹æ³ |
| | | */ |
| | | private Hashtable<String, Method> setMethods = null; |
| | | |
| | | /** |
| | | * å®ä¹æé æ¹æ³ -- ä¸è¬æ¥è¯´æ¯ä¸ªpojo |
| | | * |
| | | * @param o ç®æ 对象 |
| | | */ |
| | | public ReflectHelper(Object o) { |
| | | obj = o; |
| | | initMethods(); |
| | | } |
| | | |
| | | /** |
| | | * @desc åå§å |
| | | */ |
| | | public void initMethods() { |
| | | getMethods = new Hashtable<String, Method>(); |
| | | setMethods = new Hashtable<String, Method>(); |
| | | cls = obj.getClass(); |
| | | Method[] methods = cls.getMethods(); |
| | | // å®ä¹æ£å表达å¼ï¼ä»æ¹æ³ä¸è¿æ»¤åºgetter / setter 彿°. |
| | | String gs = "get(\\w+)"; |
| | | Pattern getM = Pattern.compile(gs); |
| | | String ss = "set(\\w+)"; |
| | | Pattern setM = Pattern.compile(ss); |
| | | // ææ¹æ³ä¸ç"set" æè
"get" 廿 |
| | | String rapl = "$1"; |
| | | String param; |
| | | for (int i = 0; i < methods.length; ++i) { |
| | | Method m = methods[i]; |
| | | String methodName = m.getName(); |
| | | if (Pattern.matches(gs, methodName)) { |
| | | param = getM.matcher(methodName).replaceAll(rapl).toLowerCase(); |
| | | getMethods.put(param, m); |
| | | } else if (Pattern.matches(ss, methodName)) { |
| | | param = setM.matcher(methodName).replaceAll(rapl).toLowerCase(); |
| | | setMethods.put(param, m); |
| | | } else { |
| | | // logger.info(methodName + " 䏿¯getter,setteræ¹æ³ï¼"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @desc è°ç¨setæ¹æ³ |
| | | */ |
| | | public boolean setMethodValue(String property, Object object) { |
| | | Method m = setMethods.get(property.toLowerCase()); |
| | | if (m != null) { |
| | | try { |
| | | // è°ç¨ç®æ ç±»çsetter彿° |
| | | m.invoke(obj, object); |
| | | return true; |
| | | } catch (Exception ex) { |
| | | log.info("invoke getter on " + property + " error: " + ex.toString()); |
| | | return false; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * @desc è°ç¨setæ¹æ³ |
| | | */ |
| | | public Object getMethodValue(String property) { |
| | | Object value = null; |
| | | Method m = getMethods.get(property.toLowerCase()); |
| | | if (m != null) { |
| | | try { |
| | | /* |
| | | * è°ç¨objç±»çsetter彿° |
| | | */ |
| | | value = m.invoke(obj, new Object[]{}); |
| | | |
| | | } catch (Exception ex) { |
| | | log.info("invoke getter on " + property + " error: " + ex.toString()); |
| | | } |
| | | } |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * æmapä¸çå
容å
¨é¨æ³¨å
¥å°objä¸ |
| | | * |
| | | * @param data |
| | | * @return |
| | | */ |
| | | public Object setAll(Map<String, Object> data) { |
| | | if (data == null || data.keySet().size() <= 0) { |
| | | return null; |
| | | } |
| | | for (Entry<String, Object> entry : data.entrySet()) { |
| | | this.setMethodValue(entry.getKey(), entry.getValue()); |
| | | } |
| | | return obj; |
| | | } |
| | | |
| | | /** |
| | | * æmapä¸çå
容å
¨é¨æ³¨å
¥å°objä¸ |
| | | * |
| | | * @param o |
| | | * @param data |
| | | * @return |
| | | */ |
| | | public static Object setAll(Object o, Map<String, Object> data) { |
| | | ReflectHelper reflectHelper = new ReflectHelper(o); |
| | | reflectHelper.setAll(data); |
| | | return o; |
| | | } |
| | | |
| | | /** |
| | | * æmapä¸çå
容å
¨é¨æ³¨å
¥å°æ°å®ä¾ä¸ |
| | | * |
| | | * @param clazz |
| | | * @param data |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public static <T> T setAll(Class<T> clazz, Map<String, Object> data) { |
| | | T o = null; |
| | | try { |
| | | o = clazz.newInstance(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | o = null; |
| | | return o; |
| | | } |
| | | return (T) setAll(o, data); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®ä¼ å
¥çclasså°mapList转æ¢ä¸ºå®ä½ç±»list |
| | | * |
| | | * @param mapist |
| | | * @param clazz |
| | | * @return |
| | | */ |
| | | public static <T> List<T> transList2Entrys(List<Map<String, Object>> mapist, Class<T> clazz) { |
| | | List<T> list = new ArrayList<T>(); |
| | | if (mapist != null && mapist.size() > 0) { |
| | | for (Map<String, Object> data : mapist) { |
| | | list.add(ReflectHelper.setAll(clazz, data)); |
| | | } |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®å±æ§åè·å屿§å¼ |
| | | */ |
| | | public static Object getFieldValueByName(String fieldName, Object o) { |
| | | try { |
| | | String firstLetter = fieldName.substring(0, 1).toUpperCase(); |
| | | String getter = "get" + firstLetter + fieldName.substring(1); |
| | | Method method = o.getClass().getMethod(getter, new Class[]{}); |
| | | Object value = method.invoke(o, new Object[]{}); |
| | | return value; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·å屿§å¼ |
| | | */ |
| | | public static Object getFieldVal(String fieldName, Object o) { |
| | | try { |
| | | // æ´ååå°è·å屿§ |
| | | Field filed = o.getClass().getDeclaredField(fieldName); |
| | | // 设置åå°æ¶åæ¶Javaçè®¿é®æ£æ¥ï¼æ´åè®¿é® |
| | | filed.setAccessible(true); |
| | | Object val = filed.get(o); |
| | | return val; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·å屿§åæ°ç» |
| | | */ |
| | | public static String[] getFiledName(Object o) { |
| | | Field[] fields = o.getClass().getDeclaredFields(); |
| | | String[] fieldNames = new String[fields.length]; |
| | | for (int i = 0; i < fields.length; i++) { |
| | | //log.info(fields[i].getType()); |
| | | fieldNames[i] = fields[i].getName(); |
| | | } |
| | | return fieldNames; |
| | | } |
| | | |
| | | /** |
| | | * è·å屿§ç±»å(type)ï¼å±æ§å(name)ï¼å±æ§å¼(value)çmapç»æçlist |
| | | */ |
| | | public static List<Map> getFiledsInfo(Object o) { |
| | | Field[] fields = o.getClass().getDeclaredFields(); |
| | | String[] fieldNames = new String[fields.length]; |
| | | List<Map> list = new ArrayList<Map>(); |
| | | Map<String, Object> infoMap = null; |
| | | for (int i = 0; i < fields.length; i++) { |
| | | infoMap = new HashMap<String, Object>(); |
| | | infoMap.put("type", fields[i].getType().toString()); |
| | | infoMap.put("name", fields[i].getName()); |
| | | infoMap.put("value", getFieldValueByName(fields[i].getName(), o)); |
| | | list.add(infoMap); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * è·åå¯¹è±¡çææå±æ§å¼ï¼è¿åä¸ä¸ªå¯¹è±¡æ°ç» |
| | | */ |
| | | public static Object[] getFiledValues(Object o) { |
| | | String[] fieldNames = getFiledName(o); |
| | | Object[] value = new Object[fieldNames.length]; |
| | | for (int i = 0; i < fieldNames.length; i++) { |
| | | value[i] = getFieldValueByName(fieldNames[i], o); |
| | | } |
| | | return value; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpMethod; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.http.ResponseEntity; |
| | | |
| | | /** |
| | | * éè¿ RESTful 飿 ¼çæ¥å£æçºµ desform éçæ°æ® |
| | | * |
| | | * @author sunjianlei |
| | | */ |
| | | public class RestDesformUtil { |
| | | |
| | | private static String domain = null; |
| | | private static String path = null; |
| | | |
| | | static { |
| | | domain = SpringContextUtils.getDomain(); |
| | | path = oConvertUtils.getString(SpringContextUtils.getApplicationContext().getEnvironment().getProperty("server.servlet.context-path")); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢æ°æ® |
| | | * |
| | | * @param desformCode |
| | | * @param dataId |
| | | * @param token |
| | | * @return |
| | | */ |
| | | public static Result queryOne(String desformCode, String dataId, String token) { |
| | | String url = getBaseUrl(desformCode, dataId).toString(); |
| | | HttpHeaders headers = getHeaders(token); |
| | | ResponseEntity<JSONObject> result = RestUtil.request(url, HttpMethod.GET, headers, null, null, JSONObject.class); |
| | | return packageReturn(result); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢æ°æ® |
| | | * |
| | | * @param desformCode |
| | | * @param formData |
| | | * @param token |
| | | * @return |
| | | */ |
| | | public static Result addOne(String desformCode, JSONObject formData, String token) { |
| | | return addOrEditOne(desformCode, formData, token, HttpMethod.POST); |
| | | } |
| | | |
| | | /** |
| | | * ä¿®æ¹æ°æ® |
| | | * |
| | | * @param desformCode |
| | | * @param formData |
| | | * @param token |
| | | * @return |
| | | */ |
| | | public static Result editOne(String desformCode, JSONObject formData, String token) { |
| | | return addOrEditOne(desformCode, formData, token, HttpMethod.PUT); |
| | | } |
| | | |
| | | private static Result addOrEditOne(String desformCode, JSONObject formData, String token, HttpMethod method) { |
| | | String url = getBaseUrl(desformCode).toString(); |
| | | HttpHeaders headers = getHeaders(token); |
| | | ResponseEntity<JSONObject> result = RestUtil.request(url, method, headers, null, formData, JSONObject.class); |
| | | return packageReturn(result); |
| | | } |
| | | |
| | | /** |
| | | * å 餿°æ® |
| | | * |
| | | * @param desformCode |
| | | * @param dataId |
| | | * @param token |
| | | * @return |
| | | */ |
| | | public static Result removeOne(String desformCode, String dataId, String token) { |
| | | String url = getBaseUrl(desformCode, dataId).toString(); |
| | | HttpHeaders headers = getHeaders(token); |
| | | ResponseEntity<JSONObject> result = RestUtil.request(url, HttpMethod.DELETE, headers, null, null, JSONObject.class); |
| | | return packageReturn(result); |
| | | } |
| | | |
| | | private static Result packageReturn(ResponseEntity<JSONObject> result) { |
| | | if (result.getBody() != null) { |
| | | return result.getBody().toJavaObject(Result.class); |
| | | } |
| | | return Result.error("æä½å¤±è´¥"); |
| | | } |
| | | |
| | | private static StringBuilder getBaseUrl() { |
| | | StringBuilder builder = new StringBuilder(domain).append(path); |
| | | builder.append("/desform/api"); |
| | | return builder; |
| | | } |
| | | |
| | | private static StringBuilder getBaseUrl(String desformCode, String dataId) { |
| | | StringBuilder builder = getBaseUrl(); |
| | | builder.append("/").append(desformCode); |
| | | if (dataId != null) { |
| | | builder.append("/").append(dataId); |
| | | } |
| | | return builder; |
| | | } |
| | | |
| | | private static StringBuilder getBaseUrl(String desformCode) { |
| | | return getBaseUrl(desformCode, null); |
| | | } |
| | | |
| | | private static HttpHeaders getHeaders(String token) { |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | String mediaType = MediaType.APPLICATION_JSON_UTF8_VALUE; |
| | | headers.setContentType(MediaType.parseMediaType(mediaType)); |
| | | headers.set("Accept", mediaType); |
| | | headers.set("X-Access-Token", token); |
| | | return headers; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.http.*; |
| | | import org.springframework.http.client.SimpleClientHttpRequestFactory; |
| | | import org.springframework.http.converter.StringHttpMessageConverter; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Iterator; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * è°ç¨ Restful æ¥å£ Util |
| | | * |
| | | * @author sunjianlei |
| | | */ |
| | | @Slf4j |
| | | public class RestUtil { |
| | | |
| | | private static String domain = null; |
| | | |
| | | public static String getDomain() { |
| | | if (domain == null) { |
| | | domain = SpringContextUtils.getDomain(); |
| | | // issues/2959 |
| | | // å¾®æå¡çéæä¼ä¸å¾®ä¿¡åç¹ç»å½ |
| | | // å 为微æå¡ç没æç«¯å£å·ï¼å¯¼è´ SpringContextUtils.getDomain() æ¹æ³è·åçååç端å£å·åæäº:-1æä»¥åºé®é¢äºï¼åªéè¦æè¿ä¸ª-1ç»å»æå°±å¯ä»¥äºã |
| | | if (domain.endsWith(":-1")) { |
| | | domain = domain.substring(0, domain.length() - 3); |
| | | } |
| | | } |
| | | return domain; |
| | | } |
| | | |
| | | public static String path = null; |
| | | |
| | | public static String getPath() { |
| | | if (path == null) { |
| | | path = SpringContextUtils.getApplicationContext().getEnvironment().getProperty("server.servlet.context-path"); |
| | | } |
| | | return oConvertUtils.getString(path); |
| | | } |
| | | |
| | | public static String getBaseUrl() { |
| | | String basepath = getDomain() + getPath(); |
| | | log.info(" RestUtil.getBaseUrl: " + basepath); |
| | | return basepath; |
| | | } |
| | | |
| | | /** |
| | | * RestAPI è°ç¨å¨ |
| | | */ |
| | | private final static RestTemplate RT; |
| | | |
| | | static { |
| | | SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); |
| | | requestFactory.setConnectTimeout(3000); |
| | | requestFactory.setReadTimeout(3000); |
| | | RT = new RestTemplate(requestFactory); |
| | | // è§£å³ä¹±ç é®é¢ |
| | | RT.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); |
| | | } |
| | | |
| | | public static RestTemplate getRestTemplate() { |
| | | return RT; |
| | | } |
| | | |
| | | /** |
| | | * åé get è¯·æ± |
| | | */ |
| | | public static JSONObject get(String url) { |
| | | return getNative(url, null, null).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé get è¯·æ± |
| | | */ |
| | | public static JSONObject get(String url, JSONObject variables) { |
| | | return getNative(url, variables, null).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé get è¯·æ± |
| | | */ |
| | | public static JSONObject get(String url, JSONObject variables, JSONObject params) { |
| | | return getNative(url, variables, params).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé get 请æ±ï¼è¿ååç ResponseEntity 对象 |
| | | */ |
| | | public static ResponseEntity<JSONObject> getNative(String url, JSONObject variables, JSONObject params) { |
| | | return request(url, HttpMethod.GET, variables, params); |
| | | } |
| | | |
| | | /** |
| | | * åé Post è¯·æ± |
| | | */ |
| | | public static JSONObject post(String url) { |
| | | return postNative(url, null, null).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé Post è¯·æ± |
| | | */ |
| | | public static JSONObject post(String url, JSONObject params) { |
| | | return postNative(url, null, params).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé Post è¯·æ± |
| | | */ |
| | | public static JSONObject post(String url, JSONObject variables, JSONObject params) { |
| | | return postNative(url, variables, params).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé POST 请æ±ï¼è¿ååç ResponseEntity 对象 |
| | | */ |
| | | public static ResponseEntity<JSONObject> postNative(String url, JSONObject variables, JSONObject params) { |
| | | return request(url, HttpMethod.POST, variables, params); |
| | | } |
| | | |
| | | /** |
| | | * åé put è¯·æ± |
| | | */ |
| | | public static JSONObject put(String url) { |
| | | return putNative(url, null, null).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé put è¯·æ± |
| | | */ |
| | | public static JSONObject put(String url, JSONObject params) { |
| | | return putNative(url, null, params).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé put è¯·æ± |
| | | */ |
| | | public static JSONObject put(String url, JSONObject variables, JSONObject params) { |
| | | return putNative(url, variables, params).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé put 请æ±ï¼è¿ååç ResponseEntity 对象 |
| | | */ |
| | | public static ResponseEntity<JSONObject> putNative(String url, JSONObject variables, JSONObject params) { |
| | | return request(url, HttpMethod.PUT, variables, params); |
| | | } |
| | | |
| | | /** |
| | | * åé delete è¯·æ± |
| | | */ |
| | | public static JSONObject delete(String url) { |
| | | return deleteNative(url, null, null).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé delete è¯·æ± |
| | | */ |
| | | public static JSONObject delete(String url, JSONObject variables, JSONObject params) { |
| | | return deleteNative(url, variables, params).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * åé delete 请æ±ï¼è¿ååç ResponseEntity 对象 |
| | | */ |
| | | public static ResponseEntity<JSONObject> deleteNative(String url, JSONObject variables, JSONObject params) { |
| | | return request(url, HttpMethod.DELETE, null, variables, params, JSONObject.class); |
| | | } |
| | | |
| | | /** |
| | | * åéè¯·æ± |
| | | */ |
| | | public static ResponseEntity<JSONObject> request(String url, HttpMethod method, JSONObject variables, JSONObject params) { |
| | | return request(url, method, getHeaderApplicationJson(), variables, params, JSONObject.class); |
| | | } |
| | | |
| | | /** |
| | | * åéè¯·æ± |
| | | * |
| | | * @param url 请æ±å°å |
| | | * @param method è¯·æ±æ¹å¼ |
| | | * @param headers 请æ±å¤´ å¯ç©º |
| | | * @param variables 请æ±urlåæ° å¯ç©º |
| | | * @param params 请æ±bodyåæ° å¯ç©º |
| | | * @param responseType è¿åç±»å |
| | | * @return ResponseEntity<responseType> |
| | | */ |
| | | public static <T> ResponseEntity<T> request(String url, HttpMethod method, HttpHeaders headers, JSONObject variables, Object params, Class<T> responseType) { |
| | | log.info(" RestUtil --- request --- url = "+ url); |
| | | if (StringUtils.isEmpty(url)) { |
| | | throw new RuntimeException("url ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (method == null) { |
| | | throw new RuntimeException("method ä¸è½ä¸ºç©º"); |
| | | } |
| | | if (headers == null) { |
| | | headers = new HttpHeaders(); |
| | | } |
| | | // 请æ±ä½ |
| | | String body = ""; |
| | | if (params != null) { |
| | | if (params instanceof JSONObject) { |
| | | body = ((JSONObject) params).toJSONString(); |
| | | |
| | | } else { |
| | | body = params.toString(); |
| | | } |
| | | } |
| | | // æ¼æ¥ url åæ° |
| | | if (variables != null) { |
| | | url += ("?" + asUrlVariables(variables)); |
| | | } |
| | | // åéè¯·æ± |
| | | HttpEntity<String> request = new HttpEntity<>(body, headers); |
| | | return RT.exchange(url, method, request, responseType); |
| | | } |
| | | |
| | | /** |
| | | * è·åJSON请æ±å¤´ |
| | | */ |
| | | public static HttpHeaders getHeaderApplicationJson() { |
| | | return getHeader(MediaType.APPLICATION_JSON_UTF8_VALUE); |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±å¤´ |
| | | */ |
| | | public static HttpHeaders getHeader(String mediaType) { |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.parseMediaType(mediaType)); |
| | | headers.add("Accept", mediaType); |
| | | return headers; |
| | | } |
| | | |
| | | /** |
| | | * å° JSONObject 转为 a=1&b=2&c=3...&n=n çå½¢å¼ |
| | | */ |
| | | public static String asUrlVariables(JSONObject variables) { |
| | | Map<String, Object> source = variables.getInnerMap(); |
| | | Iterator<String> it = source.keySet().iterator(); |
| | | StringBuilder urlVariables = new StringBuilder(); |
| | | while (it.hasNext()) { |
| | | String key = it.next(); |
| | | String value = ""; |
| | | Object object = source.get(key); |
| | | if (object != null) { |
| | | if (!StringUtils.isEmpty(object.toString())) { |
| | | value = object.toString(); |
| | | } |
| | | } |
| | | urlVariables.append("&").append(key).append("=").append(value); |
| | | } |
| | | // å»æç¬¬ä¸ä¸ª& |
| | | return urlVariables.substring(1); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | import org.jeecg.common.constant.ServiceNameConstants; |
| | | import org.springframework.beans.BeansException; |
| | | import org.springframework.context.ApplicationContext; |
| | | import org.springframework.context.ApplicationContextAware; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | |
| | | @Component |
| | | public class SpringContextUtils implements ApplicationContextAware { |
| | | |
| | | /** |
| | | * ä¸ä¸æå¯¹è±¡å®ä¾ |
| | | */ |
| | | private static ApplicationContext applicationContext; |
| | | |
| | | @Override |
| | | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { |
| | | SpringContextUtils.applicationContext = applicationContext; |
| | | } |
| | | |
| | | /** |
| | | * è·åapplicationContext |
| | | * |
| | | * @return |
| | | */ |
| | | public static ApplicationContext getApplicationContext() { |
| | | return applicationContext; |
| | | } |
| | | |
| | | /** |
| | | * è·åHttpServletRequest |
| | | */ |
| | | public static HttpServletRequest getHttpServletRequest() { |
| | | return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
| | | } |
| | | /** |
| | | * è·åHttpServletResponse |
| | | */ |
| | | public static HttpServletResponse getHttpServletResponse() { |
| | | return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); |
| | | } |
| | | |
| | | /** |
| | | * è·åé¡¹ç®æ ¹è·¯å¾ basePath |
| | | */ |
| | | public static String getDomain(){ |
| | | HttpServletRequest request = getHttpServletRequest(); |
| | | StringBuffer url = request.getRequestURL(); |
| | | //å¾®æå¡æ
åµä¸ï¼è·ågatewayçbasePath |
| | | String basePath = request.getHeader(ServiceNameConstants.X_GATEWAY_BASE_PATH); |
| | | if(oConvertUtils.isNotEmpty(basePath)){ |
| | | return basePath; |
| | | }else{ |
| | | return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); |
| | | } |
| | | } |
| | | |
| | | public static String getOrigin(){ |
| | | HttpServletRequest request = getHttpServletRequest(); |
| | | return request.getHeader("Origin"); |
| | | } |
| | | |
| | | /** |
| | | * éè¿nameè·å Bean. |
| | | * |
| | | * @param name |
| | | * @return |
| | | */ |
| | | public static Object getBean(String name) { |
| | | return getApplicationContext().getBean(name); |
| | | } |
| | | |
| | | /** |
| | | * éè¿classè·åBean. |
| | | * |
| | | * @param clazz |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> T getBean(Class<T> clazz) { |
| | | return getApplicationContext().getBean(clazz); |
| | | } |
| | | |
| | | /** |
| | | * éè¿name,以åClazzè¿åæå®çBean |
| | | * |
| | | * @param name |
| | | * @param clazz |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> T getBean(String name, Class<T> clazz) { |
| | | return getApplicationContext().getBean(name, clazz); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import cn.hutool.crypto.SecureUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | /** |
| | | * sql注å
¥å¤çå·¥å
·ç±» |
| | | * |
| | | * @author zhoujf |
| | | */ |
| | | @Slf4j |
| | | public class SqlInjectionUtil { |
| | | /** |
| | | * sign ç¨äºè¡¨åå
¸å ç¾ççå¼ãSQLæ¼æ´ã |
| | | * ï¼ä¸çº¿ä¿®æ¹å¼ 20200501ï¼åæ¥ä¿®æ¹å端ççå¼ï¼ |
| | | */ |
| | | private final static String TABLE_DICT_SIGN_SALT = "20200501"; |
| | | private final static String xssStr = "'|and |exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+"; |
| | | |
| | | /* |
| | | * é对表åå
¸è¿è¡é¢å¤çsignç¾åæ ¡éªï¼å¢å å®å
¨æºå¶ï¼ |
| | | * @param dictCode: |
| | | * @param sign: |
| | | * @param request: |
| | | * @Return: void |
| | | */ |
| | | public static void checkDictTableSign(String dictCode, String sign, HttpServletRequest request) { |
| | | //表åå
¸SQL注å
¥æ¼æ´,ç¾åæ ¡éª |
| | | String accessToken = request.getHeader("X-Access-Token"); |
| | | String signStr = dictCode + SqlInjectionUtil.TABLE_DICT_SIGN_SALT + accessToken; |
| | | String javaSign = SecureUtil.md5(signStr); |
| | | if (!javaSign.equals(sign)) { |
| | | log.error("表åå
¸ï¼SQL注å
¥æ¼æ´ç¾åæ ¡éªå¤±è´¥ ï¼" + sign + "!=" + javaSign+ ",dictCode=" + dictCode); |
| | | throw new JeecgBootException("æ æé访é®ï¼"); |
| | | } |
| | | log.info(" 表åå
¸ï¼SQL注å
¥æ¼æ´ç¾åæ ¡éªæåï¼sign=" + sign + ",dictCode=" + dictCode); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * sql注å
¥è¿æ»¤å¤çï¼éå°æ³¨å
¥å
³é®åæå¼å¸¸ |
| | | * |
| | | * @param value |
| | | * @return |
| | | */ |
| | | public static void filterContent(String value) { |
| | | if (value == null || "".equals(value)) { |
| | | return; |
| | | } |
| | | // ç»ä¸è½¬ä¸ºå°å |
| | | value = value.toLowerCase(); |
| | | String[] xssArr = xssStr.split("\\|"); |
| | | for (int i = 0; i < xssArr.length; i++) { |
| | | if (value.indexOf(xssArr[i]) > -1) { |
| | | log.error("请注æï¼åå¨SQL注å
¥å
³é®è¯---> {}", xssArr[i]); |
| | | log.error("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!---> {}", value); |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | |
| | | /** |
| | | * sql注å
¥è¿æ»¤å¤çï¼éå°æ³¨å
¥å
³é®åæå¼å¸¸ |
| | | * |
| | | * @param values |
| | | * @return |
| | | */ |
| | | public static void filterContent(String[] values) { |
| | | String[] xssArr = xssStr.split("\\|"); |
| | | for (String value : values) { |
| | | if (value == null || "".equals(value)) { |
| | | return; |
| | | } |
| | | // ç»ä¸è½¬ä¸ºå°å |
| | | value = value.toLowerCase(); |
| | | for (int i = 0; i < xssArr.length; i++) { |
| | | if (value.indexOf(xssArr[i]) > -1) { |
| | | log.error("请注æï¼åå¨SQL注å
¥å
³é®è¯---> {}", xssArr[i]); |
| | | log.error("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!---> {}", value); |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | |
| | | /** |
| | | * @ç¹æ®æ¹æ³(ä¸éç¨) ä»
ç¨äºåå
¸æ¡ä»¶SQLåæ°ï¼æ³¨å
¥è¿æ»¤ |
| | | * @param value |
| | | * @return |
| | | */ |
| | | @Deprecated |
| | | public static void specialFilterContent(String value) { |
| | | String specialXssStr = " exec | insert | select | delete | update | drop | count | chr | mid | master | truncate | char | declare |;|+|"; |
| | | String[] xssArr = specialXssStr.split("\\|"); |
| | | if (value == null || "".equals(value)) { |
| | | return; |
| | | } |
| | | // ç»ä¸è½¬ä¸ºå°å |
| | | value = value.toLowerCase(); |
| | | for (int i = 0; i < xssArr.length; i++) { |
| | | if (value.indexOf(xssArr[i]) > -1 || value.startsWith(xssArr[i].trim())) { |
| | | log.error("请注æï¼åå¨SQL注å
¥å
³é®è¯---> {}", xssArr[i]); |
| | | log.error("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!---> {}", value); |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @ç¹æ®æ¹æ³(ä¸éç¨) ä»
ç¨äºOnlineæ¥è¡¨SQLè§£æï¼æ³¨å
¥è¿æ»¤ |
| | | * @param value |
| | | * @return |
| | | */ |
| | | @Deprecated |
| | | public static void specialFilterContentForOnlineReport(String value) { |
| | | String specialXssStr = " exec | insert | delete | update | drop | chr | mid | master | truncate | char | declare |"; |
| | | String[] xssArr = specialXssStr.split("\\|"); |
| | | if (value == null || "".equals(value)) { |
| | | return; |
| | | } |
| | | // ç»ä¸è½¬ä¸ºå°å |
| | | value = value.toLowerCase(); |
| | | for (int i = 0; i < xssArr.length; i++) { |
| | | if (value.indexOf(xssArr[i]) > -1 || value.startsWith(xssArr[i].trim())) { |
| | | log.error("请注æï¼åå¨SQL注å
¥å
³é®è¯---> {}", xssArr[i]); |
| | | log.error("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!---> {}", value); |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | /** |
| | | * ç³»ç»å
¬åèªå®ä¹è·³è½¬æ¹å¼ |
| | | */ |
| | | public enum SysAnnmentTypeEnum { |
| | | /** |
| | | * é®ä»¶è·³è½¬ç»ä»¶ |
| | | */ |
| | | EMAIL("email", "component", "modules/eoa/email/modals/EoaEmailInForm"), |
| | | /** |
| | | * 工使µè·³è½¬é¾æ¥æçåå
¬ |
| | | */ |
| | | BPM("bpm", "url", "/activiti/todoManage"); |
| | | |
| | | /** |
| | | * ä¸å¡ç±»å(email:é®ä»¶ bpm:æµç¨) |
| | | */ |
| | | private String type; |
| | | /** |
| | | * æå¼æ¹å¼ ç»ä»¶ï¼component è·¯ç±ï¼url |
| | | */ |
| | | private String openType; |
| | | /** |
| | | * ç»ä»¶/è·¯ç± å°å |
| | | */ |
| | | private String openPage; |
| | | |
| | | SysAnnmentTypeEnum(String type, String openType, String openPage) { |
| | | this.type = type; |
| | | this.openType = openType; |
| | | this.openPage = openPage; |
| | | } |
| | | |
| | | public String getType() { |
| | | return type; |
| | | } |
| | | |
| | | public void setType(String type) { |
| | | this.type = type; |
| | | } |
| | | |
| | | public String getOpenType() { |
| | | return openType; |
| | | } |
| | | |
| | | public void setOpenType(String openType) { |
| | | this.openType = openType; |
| | | } |
| | | |
| | | public String getOpenPage() { |
| | | return openPage; |
| | | } |
| | | |
| | | public void setOpenPage(String openPage) { |
| | | this.openPage = openPage; |
| | | } |
| | | |
| | | public static SysAnnmentTypeEnum getByType(String type) { |
| | | if (oConvertUtils.isEmpty(type)) { |
| | | return null; |
| | | } |
| | | for (SysAnnmentTypeEnum val : values()) { |
| | | if (val.getType().equals(type)) { |
| | | return val; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.exception.JeecgBoot401Exception; |
| | | import org.jeecg.common.system.util.JwtUtil; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | /** |
| | | * @Author scott |
| | | * @Date 2019/9/23 14:12 |
| | | * @Description: ç¼ç¨æ ¡éªtokenæææ§ |
| | | */ |
| | | @Slf4j |
| | | public class TokenUtils { |
| | | |
| | | /** |
| | | * è·å request éä¼ éç token |
| | | * |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static String getTokenByRequest(HttpServletRequest request) { |
| | | String token = request.getParameter("token"); |
| | | if (token == null) { |
| | | token = request.getHeader("X-Access-Token"); |
| | | } |
| | | return token; |
| | | } |
| | | |
| | | /** |
| | | * éªè¯Token |
| | | */ |
| | | public static boolean verifyToken(HttpServletRequest request, CommonAPI commonAPI, RedisUtil redisUtil) { |
| | | log.debug(" -- url --" + request.getRequestURL()); |
| | | String token = getTokenByRequest(request); |
| | | |
| | | if (StringUtils.isBlank(token)) { |
| | | throw new JeecgBoot401Exception("Tokenä¸è½ä¸ºç©º!"); |
| | | } |
| | | |
| | | // è§£å¯è·å¾usernameï¼ç¨äºåæ°æ®åºè¿è¡å¯¹æ¯ |
| | | String username = JwtUtil.getUsername(token); |
| | | if (username == null) { |
| | | throw new JeecgBoot401Exception("Tokenéæ³æ æ!"); |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | LoginUser user = commonAPI.getUserByName(username); |
| | | if (user == null) { |
| | | throw new JeecgBoot401Exception("ç¨æ·ä¸åå¨!"); |
| | | } |
| | | // å¤æç¨æ·ç¶æ |
| | | if (user.getStatus() != 1) { |
| | | throw new JeecgBoot401Exception("è´¦å·å·²éå®,请è系管çå!"); |
| | | } |
| | | // æ ¡éªtokenæ¯å¦è¶
æ¶å¤±æ & æè
è´¦å·å¯ç æ¯å¦é误 |
| | | if (!jwtTokenRefresh(token, username, user.getPassword(), redisUtil)) { |
| | | throw new JeecgBoot401Exception("Token失æï¼è¯·éæ°ç»å½"); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * éªè¯Token |
| | | */ |
| | | public static boolean verifyToken(String token, CommonAPI commonAPI, RedisUtil redisUtil) { |
| | | if (StringUtils.isBlank(token)) { |
| | | throw new JeecgBoot401Exception("tokenä¸è½ä¸ºç©º!"); |
| | | } |
| | | |
| | | // è§£å¯è·å¾usernameï¼ç¨äºåæ°æ®åºè¿è¡å¯¹æ¯ |
| | | String username = JwtUtil.getUsername(token); |
| | | if (username == null) { |
| | | throw new JeecgBoot401Exception("tokenéæ³æ æ!"); |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | LoginUser user = commonAPI.getUserByName(username); |
| | | if (user == null) { |
| | | throw new JeecgBoot401Exception("ç¨æ·ä¸åå¨!"); |
| | | } |
| | | // å¤æç¨æ·ç¶æ |
| | | if (user.getStatus() != 1) { |
| | | throw new JeecgBoot401Exception("è´¦å·å·²è¢«éå®,请è系管çå!"); |
| | | } |
| | | // æ ¡éªtokenæ¯å¦è¶
æ¶å¤±æ & æè
è´¦å·å¯ç æ¯å¦é误 |
| | | if (!jwtTokenRefresh(token, username, user.getPassword(), redisUtil)) { |
| | | throw new JeecgBoot401Exception(CommonConstant.TOKEN_IS_INVALID_MSG); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * å·æ°tokenï¼ä¿è¯ç¨æ·å¨çº¿æä½ä¸æçº¿ï¼ |
| | | * @param token |
| | | * @param userName |
| | | * @param passWord |
| | | * @param redisUtil |
| | | * @return |
| | | */ |
| | | private static boolean jwtTokenRefresh(String token, String userName, String passWord, RedisUtil redisUtil) { |
| | | String cacheToken = String.valueOf(redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + token)); |
| | | if (oConvertUtils.isNotEmpty(cacheToken)) { |
| | | // æ ¡éªtokenæææ§ |
| | | if (!JwtUtil.verify(cacheToken, userName, passWord)) { |
| | | String newAuthorization = JwtUtil.sign(userName, passWord); |
| | | // 设置Toeknç¼åæææ¶é´ |
| | | redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, newAuthorization); |
| | | redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000); |
| | | } |
| | | //update-begin--Author:scott Date:20191005 forï¼è§£å³æ¯æ¬¡è¯·æ±ï¼é½éåredisä¸ tokenç¼åé®é¢ |
| | | // else { |
| | | // redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, cacheToken); |
| | | // // 设置è¶
æ¶æ¶é´ |
| | | // redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000); |
| | | // } |
| | | //update-end--Author:scott Date:20191005 forï¼è§£å³æ¯æ¬¡è¯·æ±ï¼é½éåredisä¸ tokenç¼åé®é¢ |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | |
| | | import java.net.InetAddress; |
| | | |
| | | /** |
| | | * |
| | | * @Author å¼ ä»£æµ© |
| | | * |
| | | */ |
| | | public class UUIDGenerator { |
| | | |
| | | |
| | | /** |
| | | * 产çä¸ä¸ª32ä½çUUID |
| | | * |
| | | * @return |
| | | */ |
| | | |
| | | public static String generate() { |
| | | return new StringBuilder(32).append(format(getIP())).append( |
| | | format(getJVM())).append(format(getHiTime())).append( |
| | | format(getLoTime())).append(format(getCount())).toString(); |
| | | |
| | | } |
| | | |
| | | private static final int IP; |
| | | static { |
| | | int ipadd; |
| | | try { |
| | | ipadd = toInt(InetAddress.getLocalHost().getAddress()); |
| | | } catch (Exception e) { |
| | | ipadd = 0; |
| | | } |
| | | IP = ipadd; |
| | | } |
| | | |
| | | private static short counter = (short) 0; |
| | | |
| | | private static final int JVM = (int) (System.currentTimeMillis() >>> 8); |
| | | |
| | | private final static String format(int intval) { |
| | | String formatted = Integer.toHexString(intval); |
| | | StringBuilder buf = new StringBuilder("00000000"); |
| | | buf.replace(8 - formatted.length(), 8, formatted); |
| | | return buf.toString(); |
| | | } |
| | | |
| | | private final static String format(short shortval) { |
| | | String formatted = Integer.toHexString(shortval); |
| | | StringBuilder buf = new StringBuilder("0000"); |
| | | buf.replace(4 - formatted.length(), 4, formatted); |
| | | return buf.toString(); |
| | | } |
| | | |
| | | private final static int getJVM() { |
| | | return JVM; |
| | | } |
| | | |
| | | private final static short getCount() { |
| | | synchronized (UUIDGenerator.class) { |
| | | if (counter < 0) { |
| | | counter = 0; |
| | | } |
| | | return counter++; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Unique in a local network |
| | | */ |
| | | private final static int getIP() { |
| | | return IP; |
| | | } |
| | | |
| | | /** |
| | | * Unique down to millisecond |
| | | */ |
| | | private final static short getHiTime() { |
| | | return (short) (System.currentTimeMillis() >>> 32); |
| | | } |
| | | |
| | | private final static int getLoTime() { |
| | | return (int) System.currentTimeMillis(); |
| | | } |
| | | |
| | | private final static int toInt(byte[] bytes) { |
| | | int result = 0; |
| | | for (int i = 0; i < 4; i++) { |
| | | result = (result << 8) - Byte.MIN_VALUE + (int) bytes[i]; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import io.netty.util.internal.StringUtil; |
| | | |
| | | /** |
| | | * æµæ°´å·çæè§å(æé»è®¤è§åéå¢ï¼æ°åä»1-99å¼å§éå¢ï¼æ°åå°99ï¼éå¢åæ¯;使°ä¸å¤å¢å 使°) |
| | | * A001 |
| | | * A001A002 |
| | | * @Author zhangdaihao |
| | | * |
| | | */ |
| | | public class YouBianCodeUtil { |
| | | |
| | | // æ°å使°(é»è®¤çæ3ä½çæ°å) |
| | | |
| | | private static final int numLength = 2;//代表æ°å使° |
| | | |
| | | public static final int zhanweiLength = 1+numLength; |
| | | |
| | | /** |
| | | * æ ¹æ®åä¸ä¸ªcodeï¼è·åå级ä¸ä¸ä¸ªcode |
| | | * ä¾å¦:å½åæå¤§code为D01A04ï¼ä¸ä¸ä¸ªcode为ï¼D01A05 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static synchronized String getNextYouBianCode(String code) { |
| | | String newcode = ""; |
| | | if (oConvertUtils.isEmpty(code)) { |
| | | String zimu = "A"; |
| | | String num = getStrNum(1); |
| | | newcode = zimu + num; |
| | | } else { |
| | | String before_code = code.substring(0, code.length() - 1- numLength); |
| | | String after_code = code.substring(code.length() - 1 - numLength,code.length()); |
| | | char after_code_zimu = after_code.substring(0, 1).charAt(0); |
| | | Integer after_code_num = Integer.parseInt(after_code.substring(1)); |
| | | // org.jeecgframework.core.util.LogUtil.info(after_code); |
| | | // org.jeecgframework.core.util.LogUtil.info(after_code_zimu); |
| | | // org.jeecgframework.core.util.LogUtil.info(after_code_num); |
| | | |
| | | String nextNum = ""; |
| | | char nextZimu = 'A'; |
| | | // å
夿æ°åçäº999*ï¼å计æ°ä»1éæ°å¼å§ï¼éå¢ |
| | | if (after_code_num == getMaxNumByLength(numLength)) { |
| | | nextNum = getNextStrNum(0); |
| | | } else { |
| | | nextNum = getNextStrNum(after_code_num); |
| | | } |
| | | // å
夿æ°åçäº999*ï¼å忝ä»Aéæ°å¼å§,éå¢ |
| | | if(after_code_num == getMaxNumByLength(numLength)) { |
| | | nextZimu = getNextZiMu(after_code_zimu); |
| | | }else{ |
| | | nextZimu = after_code_zimu; |
| | | } |
| | | |
| | | // ä¾å¦Z99ï¼ä¸ä¸ä¸ªcodeå°±æ¯Z99A01 |
| | | if ('Z' == after_code_zimu && getMaxNumByLength(numLength) == after_code_num) { |
| | | newcode = code + (nextZimu + nextNum); |
| | | } else { |
| | | newcode = before_code + (nextZimu + nextNum); |
| | | } |
| | | } |
| | | return newcode; |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®ç¶äº²code,è·åä¸çº§çä¸ä¸ä¸ªcode |
| | | * |
| | | * ä¾å¦ï¼ç¶äº²CODE:A01 |
| | | * å½åCODE:A01B03 |
| | | * è·åçcode:A01B04 |
| | | * |
| | | * @param parentCode ä¸çº§code |
| | | * @param localCode å级code |
| | | * @return |
| | | */ |
| | | public static synchronized String getSubYouBianCode(String parentCode,String localCode) { |
| | | if(localCode!=null && localCode!=""){ |
| | | |
| | | // return parentCode + getNextYouBianCode(localCode); |
| | | return getNextYouBianCode(localCode); |
| | | |
| | | }else{ |
| | | parentCode = parentCode + "A"+ getNextStrNum(0); |
| | | } |
| | | return parentCode; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * å°æ°ååé¢ä½æ°è¡¥é¶ |
| | | * |
| | | * @param num |
| | | * @return |
| | | */ |
| | | private static String getNextStrNum(int num) { |
| | | return getStrNum(getNextNum(num)); |
| | | } |
| | | |
| | | /** |
| | | * å°æ°ååé¢ä½æ°è¡¥é¶ |
| | | * |
| | | * @param num |
| | | * @return |
| | | */ |
| | | private static String getStrNum(int num) { |
| | | String s = String.format("%0" + numLength + "d", num); |
| | | return s; |
| | | } |
| | | |
| | | /** |
| | | * éå¢è·åä¸ä¸ªæ°å |
| | | * |
| | | * @param num |
| | | * @return |
| | | */ |
| | | private static int getNextNum(int num) { |
| | | num++; |
| | | return num; |
| | | } |
| | | |
| | | /** |
| | | * éå¢è·åä¸ä¸ªåæ¯ |
| | | * |
| | | * @param num |
| | | * @return |
| | | */ |
| | | private static char getNextZiMu(char zimu) { |
| | | if (zimu == 'Z') { |
| | | return 'A'; |
| | | } |
| | | zimu++; |
| | | return zimu; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ°å使°è·åæå¤§å¼ |
| | | * @param length |
| | | * @return |
| | | */ |
| | | private static int getMaxNumByLength(int length){ |
| | | if(length==0){ |
| | | return 0; |
| | | } |
| | | String max_num = ""; |
| | | for (int i=0;i<length;i++){ |
| | | max_num = max_num + "9"; |
| | | } |
| | | return Integer.parseInt(max_num); |
| | | } |
| | | public static String[] cutYouBianCode(String code){ |
| | | if(code==null || StringUtil.isNullOrEmpty(code)){ |
| | | return null; |
| | | }else{ |
| | | //è·åæ åé¿åº¦ä¸ºnumLength+1,æªåçæ°é为code.length/numLength+1 |
| | | int c = code.length()/(numLength+1); |
| | | String[] cutcode = new String[c]; |
| | | for(int i =0 ; i <c;i++){ |
| | | cutcode[i] = code.substring(0,(i+1)*(numLength+1)); |
| | | } |
| | | return cutcode; |
| | | } |
| | | |
| | | } |
| | | // public static void main(String[] args) { |
| | | // // org.jeecgframework.core.util.LogUtil.info(getNextZiMu('C')); |
| | | // // org.jeecgframework.core.util.LogUtil.info(getNextNum(8)); |
| | | // // org.jeecgframework.core.util.LogUtil.info(cutYouBianCode("C99A01B01")[2]); |
| | | // } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.dynamic.db; |
| | | |
| | | import com.alibaba.druid.pool.DruidDataSource; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.constant.CacheConstant; |
| | | import org.jeecg.common.system.vo.DynamicDataSourceModel; |
| | | import org.jeecg.common.util.RedisUtil; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | |
| | | /** |
| | | * æ°æ®æºç¼åæ± |
| | | */ |
| | | public class DataSourceCachePool { |
| | | /** æ°æ®æºè¿æ¥æ± ç¼åãæ¬å° classç¼å - 䏿¯æåå¸å¼ã */ |
| | | private static Map<String, DruidDataSource> dbSources = new HashMap<>(); |
| | | private static RedisTemplate<String, Object> redisTemplate; |
| | | |
| | | private static RedisTemplate<String, Object> getRedisTemplate() { |
| | | if (redisTemplate == null) { |
| | | redisTemplate = (RedisTemplate<String, Object>) SpringContextUtils.getBean("redisTemplate"); |
| | | } |
| | | return redisTemplate; |
| | | } |
| | | |
| | | /** |
| | | * è·å夿°æ®æºç¼å |
| | | * |
| | | * @param dbKey |
| | | * @return |
| | | */ |
| | | public static DynamicDataSourceModel getCacheDynamicDataSourceModel(String dbKey) { |
| | | String redisCacheKey = CacheConstant.SYS_DYNAMICDB_CACHE + dbKey; |
| | | if (getRedisTemplate().hasKey(redisCacheKey)) { |
| | | return (DynamicDataSourceModel) getRedisTemplate().opsForValue().get(redisCacheKey); |
| | | } |
| | | CommonAPI commonAPI = SpringContextUtils.getBean(CommonAPI.class); |
| | | DynamicDataSourceModel dbSource = commonAPI.getDynamicDbSourceByCode(dbKey); |
| | | if (dbSource != null) { |
| | | getRedisTemplate().opsForValue().set(redisCacheKey, dbSource); |
| | | } |
| | | return dbSource; |
| | | } |
| | | |
| | | public static DruidDataSource getCacheBasicDataSource(String dbKey) { |
| | | return dbSources.get(dbKey); |
| | | } |
| | | |
| | | /** |
| | | * put æ°æ®æºç¼å |
| | | * |
| | | * @param dbKey |
| | | * @param db |
| | | */ |
| | | public static void putCacheBasicDataSource(String dbKey, DruidDataSource db) { |
| | | dbSources.put(dbKey, db); |
| | | } |
| | | |
| | | /** |
| | | * æ¸
ç©ºæ°æ®æºç¼å |
| | | */ |
| | | public static void cleanAllCache() { |
| | | //å
³éæ°æ®æºè¿æ¥ |
| | | for(Map.Entry<String, DruidDataSource> entry : dbSources.entrySet()){ |
| | | String dbkey = entry.getKey(); |
| | | DruidDataSource druidDataSource = entry.getValue(); |
| | | if(druidDataSource!=null && druidDataSource.isEnable()){ |
| | | druidDataSource.close(); |
| | | } |
| | | //æ¸
空redisç¼å |
| | | getRedisTemplate().delete(CacheConstant.SYS_DYNAMICDB_CACHE + dbkey); |
| | | } |
| | | //æ¸
空ç¼å |
| | | dbSources.clear(); |
| | | } |
| | | |
| | | public static void removeCache(String dbKey) { |
| | | //å
³éæ°æ®æºè¿æ¥ |
| | | DruidDataSource druidDataSource = dbSources.get(dbKey); |
| | | if(druidDataSource!=null && druidDataSource.isEnable()){ |
| | | druidDataSource.close(); |
| | | } |
| | | //æ¸
空redisç¼å |
| | | getRedisTemplate().delete(CacheConstant.SYS_DYNAMICDB_CACHE + dbKey); |
| | | //æ¸
空ç¼å |
| | | dbSources.remove(dbKey); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.dynamic.db; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.DbType; |
| | | import org.jeecg.common.constant.DataBaseConstant; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ°æ®åºç±»å夿 |
| | | * ãæäºæ°æ®åºå¼ææ¯ä¸æ ·çï¼ä»¥è¾¾å°å¤ç¨ç®çã |
| | | */ |
| | | public class DbTypeUtils { |
| | | |
| | | public static Map<String, String> dialectMap = new HashMap<String, String>(); |
| | | static{ |
| | | dialectMap.put("mysql", "org.hibernate.dialect.MySQL5InnoDBDialect"); |
| | | dialectMap.put("mariadb", "org.hibernate.dialect.MariaDBDialect");// 1 -- |
| | | dialectMap.put("oracle", "org.hibernate.dialect.OracleDialect");//1 |
| | | dialectMap.put("oracle12c", "org.hibernate.dialect.OracleDialect"); // TODO 没æ¾å°ä¸ç¡®å® |
| | | dialectMap.put("db2", "org.hibernate.dialect.DB2390Dialect"); // 1xx |
| | | dialectMap.put("h2", "org.hibernate.dialect.HSQLDialect");// H2æ°æ®åº |
| | | dialectMap.put("hsql", "org.hibernate.dialect.HSQLDialect");// HSQLæ°æ®åº 1 |
| | | dialectMap.put("sqlite", "org.jeecg.modules.online.config.dialect.SQLiteDialect"); //SQLiteæ°æ®åº åºç¨å¹³å°mobile |
| | | dialectMap.put("postgresql", "org.hibernate.dialect.PostgreSQLDialect"); //1 -- |
| | | dialectMap.put("sqlserver2005", "org.hibernate.dialect.SQLServer2005Dialect"); |
| | | dialectMap.put("sqlserver", "org.hibernate.dialect.SQLServerDialect"); //1 |
| | | dialectMap.put("dm", "org.hibernate.dialect.OracleDialect");//è¾¾æ¢¦æ°æ®åº [å½äº§] 1-- |
| | | dialectMap.put("xugu", "org.hibernate.dialect.HSQLDialect"); //èè°·æ°æ®åº |
| | | dialectMap.put("kingbasees", "org.hibernate.dialect.PostgreSQLDialect"); //人大éä» [å½äº§] 1 |
| | | dialectMap.put("phoenix", "org.hibernate.dialect.HSQLDialect"); // Phoenix HBaseæ°æ®åº |
| | | dialectMap.put("zenith", "org.hibernate.dialect.PostgreSQLDialect"); // Gauss æ°æ®åº |
| | | dialectMap.put("clickhouse", "org.hibernate.dialect.MySQLDialect"); //é¿éäºPolarDB |
| | | dialectMap.put("gbase", "org.hibernate.dialect.PostgreSQLDialect"); // å大éç¨æ°æ®åº TODO 没æ¾å°ä¸ç¡®å® |
| | | dialectMap.put("oscar", "org.hibernate.dialect.PostgreSQLDialect"); //ç¥éæ°æ®åº [å½äº§] TODO 没æ¾å°ä¸ç¡®å® |
| | | dialectMap.put("sybase", "org.hibernate.dialect.SybaseDialect"); //Sybase ASE æ°æ®åº |
| | | dialectMap.put("oceanbase", "org.hibernate.dialect.PostgreSQLDialect"); //OceanBase æ°æ®åº TODO 没æ¾å°ä¸ç¡®å® |
| | | dialectMap.put("Firebird", "org.hibernate.dialect.FirebirdDialect"); |
| | | dialectMap.put("highgo", "org.hibernate.dialect.HSQLDialect"); //ç髿°æ®åº |
| | | dialectMap.put("other", "org.hibernate.dialect.PostgreSQLDialect"); |
| | | } |
| | | |
| | | public static boolean dbTypeIsMySQL(DbType dbType) { |
| | | return dbTypeIf(dbType, DbType.MYSQL, DbType.MARIADB, DbType.CLICK_HOUSE, DbType.SQLITE); |
| | | } |
| | | |
| | | public static boolean dbTypeIsOracle(DbType dbType) { |
| | | return dbTypeIf(dbType, DbType.ORACLE, DbType.ORACLE_12C, DbType.DM); |
| | | } |
| | | |
| | | public static boolean dbTypeIsSQLServer(DbType dbType) { |
| | | return dbTypeIf(dbType, DbType.SQL_SERVER, DbType.SQL_SERVER2005); |
| | | } |
| | | |
| | | public static boolean dbTypeIsPostgre(DbType dbType) { |
| | | return dbTypeIf(dbType, DbType.POSTGRE_SQL, DbType.KINGBASE_ES, DbType.GAUSS); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾ç±» è·åæ°æ®åºç±»åçå符串 |
| | | * @param dbType |
| | | * @return |
| | | */ |
| | | public static String getDbTypeString(DbType dbType){ |
| | | if(DbType.DB2.equals(dbType)){ |
| | | return DataBaseConstant.DB_TYPE_DB2; |
| | | }else if(DbType.HSQL.equals(dbType)){ |
| | | return DataBaseConstant.DB_TYPE_HSQL; |
| | | }else if(dbTypeIsOracle(dbType)){ |
| | | return DataBaseConstant.DB_TYPE_ORACLE; |
| | | }else if(dbTypeIsSQLServer(dbType)){ |
| | | return DataBaseConstant.DB_TYPE_SQLSERVER; |
| | | }else if(dbTypeIsPostgre(dbType)){ |
| | | return DataBaseConstant.DB_TYPE_POSTGRESQL; |
| | | } |
| | | return DataBaseConstant.DB_TYPE_MYSQL; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾ç±» è·åæ°æ®åºæ¹è¨å符串 |
| | | * @param dbType |
| | | * @return |
| | | */ |
| | | public static String getDbDialect(DbType dbType){ |
| | | return dialectMap.get(dbType.getDb()); |
| | | } |
| | | |
| | | /** |
| | | * å¤ææ°æ®åºç±»å |
| | | */ |
| | | public static boolean dbTypeIf(DbType dbType, DbType... correctTypes) { |
| | | for (DbType type : correctTypes) { |
| | | if (type.equals(dbType)) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.dynamic.db; |
| | | |
| | | import com.alibaba.druid.pool.DruidDataSource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.ArrayUtils; |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import org.jeecg.common.system.vo.DynamicDataSourceModel; |
| | | import org.jeecg.common.util.ReflectHelper; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.jdbc.core.JdbcTemplate; |
| | | import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; |
| | | |
| | | import javax.sql.DataSource; |
| | | import java.sql.SQLException; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * Spring JDBC 宿¶æ°æ®åºè®¿é® |
| | | * |
| | | * @author chenguobin |
| | | * @version 1.0 |
| | | * @date 2014-09-05 |
| | | */ |
| | | @Slf4j |
| | | public class DynamicDBUtil { |
| | | |
| | | /** |
| | | * è·åæ°æ®æºãæåºå±æ¹æ³ï¼ä¸è¦é便è°ç¨ã |
| | | * |
| | | * @param dbSource |
| | | * @return |
| | | */ |
| | | private static DruidDataSource getJdbcDataSource(final DynamicDataSourceModel dbSource) { |
| | | DruidDataSource dataSource = new DruidDataSource(); |
| | | |
| | | String driverClassName = dbSource.getDbDriver(); |
| | | String url = dbSource.getDbUrl(); |
| | | String dbUser = dbSource.getDbUsername(); |
| | | String dbPassword = dbSource.getDbPassword(); |
| | | dataSource.setDriverClassName(driverClassName); |
| | | dataSource.setUrl(url); |
| | | //dataSource.setValidationQuery("SELECT 1 FROM DUAL"); |
| | | dataSource.setTestWhileIdle(true); |
| | | dataSource.setTestOnBorrow(false); |
| | | dataSource.setTestOnReturn(false); |
| | | dataSource.setBreakAfterAcquireFailure(true); |
| | | dataSource.setConnectionErrorRetryAttempts(0); |
| | | dataSource.setUsername(dbUser); |
| | | dataSource.setMaxWait(30000); |
| | | dataSource.setPassword(dbPassword); |
| | | |
| | | log.info("******************************************"); |
| | | log.info("* *"); |
| | | log.info("*====ã"+dbSource.getCode()+"ã=====Druidè¿æ¥æ± å·²å¯ç¨ ====*"); |
| | | log.info("* *"); |
| | | log.info("******************************************"); |
| | | return dataSource; |
| | | } |
| | | |
| | | /** |
| | | * éè¿ dbKey ,è·åæ°æ®æº |
| | | * |
| | | * @param dbKey |
| | | * @return |
| | | */ |
| | | public static DruidDataSource getDbSourceByDbKey(final String dbKey) { |
| | | //è·å夿°æ®æºé
ç½® |
| | | DynamicDataSourceModel dbSource = DataSourceCachePool.getCacheDynamicDataSourceModel(dbKey); |
| | | //å
夿ç¼å䏿¯å¦å卿°æ®åºé¾æ¥ |
| | | DruidDataSource cacheDbSource = DataSourceCachePool.getCacheBasicDataSource(dbKey); |
| | | if (cacheDbSource != null && !cacheDbSource.isClosed()) { |
| | | log.debug("--------getDbSourceBydbKey------------------ä»ç¼åä¸è·åDBè¿æ¥-------------------"); |
| | | return cacheDbSource; |
| | | } else { |
| | | DruidDataSource dataSource = getJdbcDataSource(dbSource); |
| | | if(dataSource!=null && dataSource.isEnable()){ |
| | | DataSourceCachePool.putCacheBasicDataSource(dbKey, dataSource); |
| | | }else{ |
| | | throw new JeecgBootException("å¨ææ°æ®æºè¿æ¥å¤±è´¥ï¼dbKeyï¼"+dbKey); |
| | | } |
| | | log.info("--------getDbSourceBydbKey------------------å建DBæ°æ®åºè¿æ¥-------------------"); |
| | | return dataSource; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å
³éæ°æ®åºè¿æ¥æ± |
| | | * |
| | | * @param dbKey |
| | | * @return |
| | | */ |
| | | public static void closeDbKey(final String dbKey) { |
| | | DruidDataSource dataSource = getDbSourceByDbKey(dbKey); |
| | | try { |
| | | if (dataSource != null && !dataSource.isClosed()) { |
| | | dataSource.getConnection().commit(); |
| | | dataSource.getConnection().close(); |
| | | dataSource.close(); |
| | | } |
| | | } catch (SQLException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | private static JdbcTemplate getJdbcTemplate(String dbKey) { |
| | | DruidDataSource dataSource = getDbSourceByDbKey(dbKey); |
| | | return new JdbcTemplate(dataSource); |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ°æ®æºè·åNamedParameterJdbcTemplate |
| | | * @param dbKey |
| | | * @return |
| | | */ |
| | | private static NamedParameterJdbcTemplate getNamedParameterJdbcTemplate(String dbKey) { |
| | | DruidDataSource dataSource = getDbSourceByDbKey(dbKey); |
| | | return new NamedParameterJdbcTemplate(dataSource); |
| | | } |
| | | |
| | | /** |
| | | * Executes the SQL statement in this <code>PreparedStatement</code> object, |
| | | * which must be an SQL Data Manipulation Language (DML) statement, such as <code>INSERT</code>, <code>UPDATE</code> or |
| | | * <code>DELETE</code>; or an SQL statement that returns nothing, |
| | | * such as a DDL statement. |
| | | */ |
| | | public static int update(final String dbKey, String sql, Object... param) { |
| | | int effectCount; |
| | | JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); |
| | | if (ArrayUtils.isEmpty(param)) { |
| | | effectCount = jdbcTemplate.update(sql); |
| | | } else { |
| | | effectCount = jdbcTemplate.update(sql, param); |
| | | } |
| | | return effectCount; |
| | | } |
| | | |
| | | /** |
| | | * æ¯æminiDaoè¯æ³æä½çUpdate |
| | | * |
| | | * @param dbKey æ°æ®æºæ è¯ |
| | | * @param sql æ§è¡sqlè¯å¥ï¼sqlæ¯æminidaoè¯æ³é»è¾ |
| | | * @param data sqlè¯æ³ä¸éè¦å¤æçæ°æ®åsqlæ¼æ¥æ³¨å
¥ä¸éè¦çæ°æ® |
| | | * @return |
| | | */ |
| | | public static int updateByHash(final String dbKey, String sql, HashMap<String, Object> data) { |
| | | int effectCount; |
| | | JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); |
| | | //æ ¹æ®æ¨¡æ¿è·åsql |
| | | sql = FreemarkerParseFactory.parseTemplateContent(sql, data); |
| | | NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); |
| | | effectCount = namedParameterJdbcTemplate.update(sql, data); |
| | | return effectCount; |
| | | } |
| | | |
| | | public static Object findOne(final String dbKey, String sql, Object... param) { |
| | | List<Map<String, Object>> list; |
| | | list = findList(dbKey, sql, param); |
| | | if (oConvertUtils.listIsEmpty(list)) { |
| | | log.error("Except one, but not find actually"); |
| | | return null; |
| | | } |
| | | if (list.size() > 1) { |
| | | log.error("Except one, but more than one actually"); |
| | | } |
| | | return list.get(0); |
| | | } |
| | | |
| | | /** |
| | | * æ¯æminiDaoè¯æ³æä½çæ¥è¯¢ è¿åHashMap |
| | | * |
| | | * @param dbKey æ°æ®æºæ è¯ |
| | | * @param sql æ§è¡sqlè¯å¥ï¼sqlæ¯æminidaoè¯æ³é»è¾ |
| | | * @param data sqlè¯æ³ä¸éè¦å¤æçæ°æ®åsqlæ¼æ¥æ³¨å
¥ä¸éè¦çæ°æ® |
| | | * @return |
| | | */ |
| | | public static Object findOneByHash(final String dbKey, String sql, HashMap<String, Object> data) { |
| | | List<Map<String, Object>> list; |
| | | list = findListByHash(dbKey, sql, data); |
| | | if (oConvertUtils.listIsEmpty(list)) { |
| | | log.error("Except one, but not find actually"); |
| | | } |
| | | if (list.size() > 1) { |
| | | log.error("Except one, but more than one actually"); |
| | | } |
| | | return list.get(0); |
| | | } |
| | | |
| | | /** |
| | | * ç´æ¥sqlæ¥è¯¢ æ ¹æ®clazzè¿åå个å®ä¾ |
| | | * |
| | | * @param dbKey æ°æ®æºæ è¯ |
| | | * @param sql æ§è¡sqlè¯å¥ |
| | | * @param clazz è¿åå®ä¾çClass |
| | | * @param param |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public static <T> Object findOne(final String dbKey, String sql, Class<T> clazz, Object... param) { |
| | | Map<String, Object> map = (Map<String, Object>) findOne(dbKey, sql, param); |
| | | return ReflectHelper.setAll(clazz, map); |
| | | } |
| | | |
| | | /** |
| | | * æ¯æminiDaoè¯æ³æä½çæ¥è¯¢ è¿åå个å®ä¾ |
| | | * |
| | | * @param dbKey æ°æ®æºæ è¯ |
| | | * @param sql æ§è¡sqlè¯å¥ï¼sqlæ¯æminidaoè¯æ³é»è¾ |
| | | * @param clazz è¿åå®ä¾çClass |
| | | * @param data sqlè¯æ³ä¸éè¦å¤æçæ°æ®åsqlæ¼æ¥æ³¨å
¥ä¸éè¦çæ°æ® |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public static <T> Object findOneByHash(final String dbKey, String sql, Class<T> clazz, HashMap<String, Object> data) { |
| | | Map<String, Object> map = (Map<String, Object>) findOneByHash(dbKey, sql, data); |
| | | return ReflectHelper.setAll(clazz, map); |
| | | } |
| | | |
| | | public static List<Map<String, Object>> findList(final String dbKey, String sql, Object... param) { |
| | | List<Map<String, Object>> list; |
| | | JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); |
| | | |
| | | if (ArrayUtils.isEmpty(param)) { |
| | | list = jdbcTemplate.queryForList(sql); |
| | | } else { |
| | | list = jdbcTemplate.queryForList(sql, param); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢æ°é |
| | | * @param dbKey |
| | | * @param sql |
| | | * @param param |
| | | * @return |
| | | */ |
| | | public static Map<String, Object> queryCount(String dbKey, String sql, Map<String, Object> param){ |
| | | NamedParameterJdbcTemplate npJdbcTemplate = getNamedParameterJdbcTemplate(dbKey); |
| | | return npJdbcTemplate.queryForMap(sql, param); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢åè¡¨æ°æ® |
| | | * @param dbKey |
| | | * @param sql |
| | | * @param param |
| | | * @return |
| | | */ |
| | | public static List<Map<String, Object>> findListByNamedParam(final String dbKey, String sql, Map<String, Object> param) { |
| | | NamedParameterJdbcTemplate npJdbcTemplate = getNamedParameterJdbcTemplate(dbKey); |
| | | List<Map<String, Object>> list = npJdbcTemplate.queryForList(sql, param); |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * æ¯æminiDaoè¯æ³æä½çæ¥è¯¢ |
| | | * |
| | | * @param dbKey æ°æ®æºæ è¯ |
| | | * @param sql æ§è¡sqlè¯å¥ï¼sqlæ¯æminidaoè¯æ³é»è¾ |
| | | * @param data sqlè¯æ³ä¸éè¦å¤æçæ°æ®åsqlæ¼æ¥æ³¨å
¥ä¸éè¦çæ°æ® |
| | | * @return |
| | | */ |
| | | public static List<Map<String, Object>> findListByHash(final String dbKey, String sql, HashMap<String, Object> data) { |
| | | List<Map<String, Object>> list; |
| | | JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); |
| | | //æ ¹æ®æ¨¡æ¿è·åsql |
| | | sql = FreemarkerParseFactory.parseTemplateContent(sql, data); |
| | | NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); |
| | | list = namedParameterJdbcTemplate.queryForList(sql, data); |
| | | return list; |
| | | } |
| | | |
| | | //æ¤æ¹æ³åªè½è¿åååï¼ä¸è½è¿åå®ä½ç±» |
| | | public static <T> List<T> findList(final String dbKey, String sql, Class<T> clazz, Object... param) { |
| | | List<T> list; |
| | | JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); |
| | | |
| | | if (ArrayUtils.isEmpty(param)) { |
| | | list = jdbcTemplate.queryForList(sql, clazz); |
| | | } else { |
| | | list = jdbcTemplate.queryForList(sql, clazz, param); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * æ¯æminiDaoè¯æ³æä½çæ¥è¯¢ è¿åååæ°æ®list |
| | | * |
| | | * @param dbKey æ°æ®æºæ è¯ |
| | | * @param sql æ§è¡sqlè¯å¥ï¼sqlæ¯æminidaoè¯æ³é»è¾ |
| | | * @param clazz ç±»åLongãStringç |
| | | * @param data sqlè¯æ³ä¸éè¦å¤æçæ°æ®åsqlæ¼æ¥æ³¨å
¥ä¸éè¦çæ°æ® |
| | | * @return |
| | | */ |
| | | public static <T> List<T> findListByHash(final String dbKey, String sql, Class<T> clazz, HashMap<String, Object> data) { |
| | | List<T> list; |
| | | JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); |
| | | //æ ¹æ®æ¨¡æ¿è·åsql |
| | | sql = FreemarkerParseFactory.parseTemplateContent(sql, data); |
| | | NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); |
| | | list = namedParameterJdbcTemplate.queryForList(sql, data, clazz); |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * ç´æ¥sqlæ¥è¯¢ è¿åå®ä½ç±»å表 |
| | | * |
| | | * @param dbKey æ°æ®æºæ è¯ |
| | | * @param sql æ§è¡sqlè¯å¥ï¼sqlæ¯æ minidao è¯æ³é»è¾ |
| | | * @param clazz è¿åå®ä½ç±»å表çclass |
| | | * @param param sqlæ¼æ¥æ³¨å
¥ä¸éè¦çæ°æ® |
| | | * @return |
| | | */ |
| | | public static <T> List<T> findListEntities(final String dbKey, String sql, Class<T> clazz, Object... param) { |
| | | List<Map<String, Object>> queryList = findList(dbKey, sql, param); |
| | | return ReflectHelper.transList2Entrys(queryList, clazz); |
| | | } |
| | | |
| | | /** |
| | | * æ¯æminiDaoè¯æ³æä½çæ¥è¯¢ è¿åå®ä½ç±»å表 |
| | | * |
| | | * @param dbKey æ°æ®æºæ è¯ |
| | | * @param sql æ§è¡sqlè¯å¥ï¼sqlæ¯æminidaoè¯æ³é»è¾ |
| | | * @param clazz è¿åå®ä½ç±»å表çclass |
| | | * @param data sqlè¯æ³ä¸éè¦å¤æçæ°æ®åsqlæ¼æ¥æ³¨å
¥ä¸éè¦çæ°æ® |
| | | * @return |
| | | */ |
| | | public static <T> List<T> findListEntitiesByHash(final String dbKey, String sql, Class<T> clazz, HashMap<String, Object> data) { |
| | | List<Map<String, Object>> queryList = findListByHash(dbKey, sql, data); |
| | | return ReflectHelper.transList2Entrys(queryList, clazz); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.dynamic.db; |
| | | |
| | | import freemarker.cache.StringTemplateLoader; |
| | | import freemarker.core.ParseException; |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jeecgframework.codegenerate.generate.util.SimpleFormat; |
| | | |
| | | import java.io.StringWriter; |
| | | import java.util.Map; |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * @author èµµä¿å¤« |
| | | * @version V1.0 |
| | | * @Title:FreemarkerHelper |
| | | * @description:Freemarker弿åå©ç±» |
| | | * @date Jul 5, 2013 2:58:29 PM |
| | | */ |
| | | @Slf4j |
| | | public class FreemarkerParseFactory { |
| | | |
| | | private static final String ENCODE = "utf-8"; |
| | | /** |
| | | * åæ°æ ¼å¼åå·¥å
·ç±» |
| | | */ |
| | | private static final String MINI_DAO_FORMAT = "DaoFormat"; |
| | | |
| | | /** |
| | | * æä»¶ç¼å |
| | | */ |
| | | private static final Configuration _tplConfig = new Configuration(); |
| | | /** |
| | | * SQL ç¼å |
| | | */ |
| | | private static final Configuration _sqlConfig = new Configuration(); |
| | | |
| | | private static StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); |
| | | |
| | | // 使ç¨å
åµç(?ms)æå¼åè¡åå¤è¡æ¨¡å¼ |
| | | private final static Pattern p = Pattern |
| | | .compile("(?ms)/\\*.*?\\*/|^\\s*//.*?$"); |
| | | |
| | | static { |
| | | _tplConfig.setClassForTemplateLoading( |
| | | new FreemarkerParseFactory().getClass(), "/"); |
| | | _tplConfig.setNumberFormat("0.#####################"); |
| | | _sqlConfig.setTemplateLoader(stringTemplateLoader); |
| | | _sqlConfig.setNumberFormat("0.#####################"); |
| | | //classic_compatible设置ï¼è§£å³æ¥ç©ºæéé误 |
| | | _sqlConfig.setClassicCompatible(true); |
| | | } |
| | | |
| | | /** |
| | | * å¤ææ¨¡æ¿æ¯å¦åå¨ |
| | | * |
| | | * @throws Exception |
| | | */ |
| | | public static boolean isExistTemplate(String tplName) throws Exception { |
| | | try { |
| | | Template mytpl = _tplConfig.getTemplate(tplName, "UTF-8"); |
| | | if (mytpl == null) { |
| | | return false; |
| | | } |
| | | } catch (Exception e) { |
| | | //update-begin--Author:scott Date:20180320 forï¼è§£å³é®é¢ - é误æç¤ºsqlæä»¶ä¸åå¨ï¼å®é
é®é¢æ¯sql freemarkerç¨æ³é误----- |
| | | if (e instanceof ParseException) { |
| | | log.error(e.getMessage(), e.fillInStackTrace()); |
| | | throw new Exception(e); |
| | | } |
| | | log.debug("----isExistTemplate----" + e.toString()); |
| | | //update-end--Author:scott Date:20180320 forï¼è§£å³é®é¢ - é误æç¤ºsqlæä»¶ä¸åå¨ï¼å®é
é®é¢æ¯sql freemarkerç¨æ³é误------ |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * è§£æftlæ¨¡æ¿ |
| | | * |
| | | * @param tplName 模æ¿å |
| | | * @param paras åæ° |
| | | * @return |
| | | */ |
| | | public static String parseTemplate(String tplName, Map<String, Object> paras) { |
| | | try { |
| | | log.debug(" minidao sql templdate : " + tplName); |
| | | StringWriter swriter = new StringWriter(); |
| | | Template mytpl = _tplConfig.getTemplate(tplName, ENCODE); |
| | | if (paras.containsKey(MINI_DAO_FORMAT)) { |
| | | throw new RuntimeException("DaoFormat æ¯ minidao ä¿çå
³é®åï¼ä¸å
è®¸ä½¿ç¨ ï¼è¯·æ´æ¹åæ°å®ä¹ï¼"); |
| | | } |
| | | paras.put(MINI_DAO_FORMAT, new SimpleFormat()); |
| | | mytpl.process(paras, swriter); |
| | | String sql = getSqlText(swriter.toString()); |
| | | paras.remove(MINI_DAO_FORMAT); |
| | | return sql; |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(), e.fillInStackTrace()); |
| | | log.error("åé䏿¬¡ç模æ¿key:{ " + tplName + " }"); |
| | | //System.err.println(e.getMessage()); |
| | | //System.err.println("模æ¿å:{ "+ tplName +" }"); |
| | | throw new RuntimeException("è§£æSQL模æ¿å¼å¸¸"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è§£æftl |
| | | * |
| | | * @param tplContent 模æ¿å
容 |
| | | * @param paras åæ° |
| | | * @return String 模æ¿è§£æåå
容 |
| | | */ |
| | | public static String parseTemplateContent(String tplContent, |
| | | Map<String, Object> paras) { |
| | | try { |
| | | StringWriter swriter = new StringWriter(); |
| | | if (stringTemplateLoader.findTemplateSource("sql_" + tplContent.hashCode()) == null) { |
| | | stringTemplateLoader.putTemplate("sql_" + tplContent.hashCode(), tplContent); |
| | | } |
| | | Template mytpl = _sqlConfig.getTemplate("sql_" + tplContent.hashCode(), ENCODE); |
| | | if (paras.containsKey(MINI_DAO_FORMAT)) { |
| | | throw new RuntimeException("DaoFormat æ¯ minidao ä¿çå
³é®åï¼ä¸å
è®¸ä½¿ç¨ ï¼è¯·æ´æ¹åæ°å®ä¹ï¼"); |
| | | } |
| | | paras.put(MINI_DAO_FORMAT, new SimpleFormat()); |
| | | mytpl.process(paras, swriter); |
| | | String sql = getSqlText(swriter.toString()); |
| | | paras.remove(MINI_DAO_FORMAT); |
| | | return sql; |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(), e.fillInStackTrace()); |
| | | log.error("åé䏿¬¡ç模æ¿key:{ " + tplContent + " }"); |
| | | //System.err.println(e.getMessage()); |
| | | //System.err.println("模æ¿å
容:{ "+ tplContent +" }"); |
| | | throw new RuntimeException("è§£æSQL模æ¿å¼å¸¸"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * é¤å»æ æå段ï¼å»ææ³¨é ä¸ç¶æ¹éå¤çå¯è½æ¥é å»é¤æ æççäº |
| | | */ |
| | | private static String getSqlText(String sql) { |
| | | // å°æ³¨éæ¿æ¢æ"" |
| | | sql = p.matcher(sql).replaceAll(""); |
| | | sql = sql.replaceAll("\\n", " ").replaceAll("\\t", " ") |
| | | .replaceAll("\\s{1,}", " ").trim(); |
| | | // 廿 æåæ¯ whereè¿æ ·çé®é¢ |
| | | if (sql.endsWith("where") || sql.endsWith("where ")) { |
| | | sql = sql.substring(0, sql.lastIndexOf("where")); |
| | | } |
| | | // 廿where and è¿æ ·çé®é¢ |
| | | int index = 0; |
| | | while ((index = StringUtils.indexOfIgnoreCase(sql, "where and", index)) != -1) { |
| | | sql = sql.substring(0, index + 5) |
| | | + sql.substring(index + 9, sql.length()); |
| | | } |
| | | // 廿 , where è¿æ ·çé®é¢ |
| | | index = 0; |
| | | while ((index = StringUtils.indexOfIgnoreCase(sql, ", where", index)) != -1) { |
| | | sql = sql.substring(0, index) |
| | | + sql.substring(index + 1, sql.length()); |
| | | } |
| | | // 廿 æåæ¯ ,è¿æ ·çé®é¢ |
| | | if (sql.endsWith(",") || sql.endsWith(", ")) { |
| | | sql = sql.substring(0, sql.lastIndexOf(",")); |
| | | } |
| | | return sql; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.encryption; |
| | | |
| | | import org.apache.shiro.codec.Base64; |
| | | |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import javax.crypto.spec.SecretKeySpec; |
| | | |
| | | /** |
| | | * AES å å¯ |
| | | */ |
| | | public class AesEncryptUtil { |
| | | |
| | | //使ç¨AES-128-CBCå 坿¨¡å¼ï¼keyéè¦ä¸º16ä½,keyåivå¯ä»¥ç¸åï¼ |
| | | private static String KEY = EncryptedString.key; |
| | | private static String IV = EncryptedString.iv; |
| | | |
| | | /** |
| | | * å 坿¹æ³ |
| | | * @param data è¦å å¯çæ°æ® |
| | | * @param key å å¯key |
| | | * @param iv å å¯iv |
| | | * @return å å¯çç»æ |
| | | * @throws Exception |
| | | */ |
| | | public static String encrypt(String data, String key, String iv) throws Exception { |
| | | try { |
| | | |
| | | Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"ç®æ³/模å¼/è¡¥ç æ¹å¼"NoPadding PkcsPadding |
| | | int blockSize = cipher.getBlockSize(); |
| | | |
| | | byte[] dataBytes = data.getBytes(); |
| | | int plaintextLength = dataBytes.length; |
| | | if (plaintextLength % blockSize != 0) { |
| | | plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize)); |
| | | } |
| | | |
| | | byte[] plaintext = new byte[plaintextLength]; |
| | | System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length); |
| | | |
| | | SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); |
| | | IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); |
| | | |
| | | cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); |
| | | byte[] encrypted = cipher.doFinal(plaintext); |
| | | |
| | | return Base64.encodeToString(encrypted); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è§£å¯æ¹æ³ |
| | | * @param data è¦è§£å¯çæ°æ® |
| | | * @param key è§£å¯key |
| | | * @param iv è§£å¯iv |
| | | * @return è§£å¯çç»æ |
| | | * @throws Exception |
| | | */ |
| | | public static String desEncrypt(String data, String key, String iv) throws Exception { |
| | | try { |
| | | byte[] encrypted1 = Base64.decode(data); |
| | | |
| | | Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); |
| | | SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); |
| | | IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); |
| | | |
| | | cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); |
| | | |
| | | byte[] original = cipher.doFinal(encrypted1); |
| | | String originalString = new String(original); |
| | | return originalString; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 使ç¨é»è®¤çkeyåivå å¯ |
| | | * @param data |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String encrypt(String data) throws Exception { |
| | | return encrypt(data, KEY, IV); |
| | | } |
| | | |
| | | /** |
| | | * 使ç¨é»è®¤çkeyåivè§£å¯ |
| | | * @param data |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String desEncrypt(String data) throws Exception { |
| | | return desEncrypt(data, KEY, IV); |
| | | } |
| | | |
| | | |
| | | |
| | | // /** |
| | | // * æµè¯ |
| | | // */ |
| | | // public static void main(String args[]) throws Exception { |
| | | // String test1 = "sa"; |
| | | // String test =new String(test1.getBytes(),"UTF-8"); |
| | | // String data = null; |
| | | // String key = KEY; |
| | | // String iv = IV; |
| | | // // /g2wzfqvMOeazgtsUVbq1kmJawROa6mcRAzwG1/GeJ4= |
| | | // data = encrypt(test, key, iv); |
| | | // System.out.println("æ°æ®ï¼"+test); |
| | | // System.out.println("å å¯ï¼"+data); |
| | | // String jiemi =desEncrypt(data, key, iv).trim(); |
| | | // System.out.println("è§£å¯ï¼"+jiemi); |
| | | // } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.encryption; |
| | | |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class EncryptedString { |
| | | |
| | | public static String key = "1234567890adbcde";//é¿åº¦ä¸º16个å符 |
| | | |
| | | public static String iv = "1234567890hjlkew";//é¿åº¦ä¸º16个å符 |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.filter; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.io.InputStream; |
| | | import java.util.HashMap; |
| | | import java.util.Iterator; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * @Description: TODO |
| | | * @author: lsq |
| | | * @date: 2021å¹´08æ09æ¥ 15:29 |
| | | */ |
| | | public class FileTypeFilter { |
| | | |
| | | //æä»¶åç¼ |
| | | private static String[] forbidType = {"jsp","php"}; |
| | | |
| | | // åå§åæä»¶å¤´ç±»åï¼ä¸å¤çèªè¡è¡¥å
|
| | | final static HashMap<String, String> fileTypeMap = new HashMap<>(); |
| | | |
| | | static { |
| | | fileTypeMap.put("3c25402070616765206c", "jsp"); |
| | | fileTypeMap.put("3c3f7068700a0a2f2a2a0a202a205048", "php"); |
| | | /* fileTypeMap.put("ffd8ffe000104a464946", "jpg"); |
| | | fileTypeMap.put("89504e470d0a1a0a0000", "png"); |
| | | fileTypeMap.put("47494638396126026f01", "gif"); |
| | | fileTypeMap.put("49492a00227105008037", "tif"); |
| | | fileTypeMap.put("424d228c010000000000", "bmp"); |
| | | fileTypeMap.put("424d8240090000000000", "bmp"); |
| | | fileTypeMap.put("424d8e1b030000000000", "bmp"); |
| | | fileTypeMap.put("41433130313500000000", "dwg"); |
| | | fileTypeMap.put("3c21444f435459504520", "html"); |
| | | fileTypeMap.put("3c21646f637479706520", "htm"); |
| | | fileTypeMap.put("48544d4c207b0d0a0942", "css"); |
| | | fileTypeMap.put("696b2e71623d696b2e71", "js"); |
| | | fileTypeMap.put("7b5c727466315c616e73", "rtf"); |
| | | fileTypeMap.put("38425053000100000000", "psd"); |
| | | fileTypeMap.put("46726f6d3a203d3f6762", "eml"); |
| | | fileTypeMap.put("d0cf11e0a1b11ae10000", "doc"); |
| | | fileTypeMap.put("5374616E64617264204A", "mdb"); |
| | | fileTypeMap.put("252150532D41646F6265", "ps"); |
| | | fileTypeMap.put("255044462d312e350d0a", "pdf"); |
| | | fileTypeMap.put("2e524d46000000120001", "rmvb"); |
| | | fileTypeMap.put("464c5601050000000900", "flv"); |
| | | fileTypeMap.put("00000020667479706d70", "mp4"); |
| | | fileTypeMap.put("49443303000000002176", "mp3"); |
| | | fileTypeMap.put("000001ba210001000180", "mpg"); |
| | | fileTypeMap.put("3026b2758e66cf11a6d9", "wmv"); |
| | | fileTypeMap.put("52494646e27807005741", "wav"); |
| | | fileTypeMap.put("52494646d07d60074156", "avi"); |
| | | fileTypeMap.put("4d546864000000060001", "mid"); |
| | | fileTypeMap.put("504b0304140000000800", "zip"); |
| | | fileTypeMap.put("526172211a0700cf9073", "rar"); |
| | | fileTypeMap.put("235468697320636f6e66", "ini"); |
| | | fileTypeMap.put("504b03040a0000000000", "jar"); |
| | | fileTypeMap.put("4d5a9000030000000400", "exe"); |
| | | fileTypeMap.put("3c25402070616765206c", "jsp"); |
| | | fileTypeMap.put("4d616e69666573742d56", "mf"); |
| | | fileTypeMap.put("3c3f786d6c2076657273", "xml"); |
| | | fileTypeMap.put("494e5345525420494e54", "sql"); |
| | | fileTypeMap.put("7061636b616765207765", "java"); |
| | | fileTypeMap.put("406563686f206f66660d", "bat"); |
| | | fileTypeMap.put("1f8b0800000000000000", "gz"); |
| | | fileTypeMap.put("6c6f67346a2e726f6f74", "properties"); |
| | | fileTypeMap.put("cafebabe0000002e0041", "class"); |
| | | fileTypeMap.put("49545346030000006000", "chm"); |
| | | fileTypeMap.put("04000000010000001300", "mxp"); |
| | | fileTypeMap.put("504b0304140006000800", "docx"); |
| | | fileTypeMap.put("6431303a637265617465", "torrent"); |
| | | fileTypeMap.put("6D6F6F76", "mov"); |
| | | fileTypeMap.put("FF575043", "wpd"); |
| | | fileTypeMap.put("CFAD12FEC5FD746F", "dbx"); |
| | | fileTypeMap.put("2142444E", "pst"); |
| | | fileTypeMap.put("AC9EBD8F", "qdf"); |
| | | fileTypeMap.put("E3828596", "pwl"); |
| | | fileTypeMap.put("2E7261FD", "ram");*/ |
| | | } |
| | | |
| | | /** |
| | | * @param fileName |
| | | * @return String |
| | | * @description éè¿æä»¶åç¼åè·åæä»¶ç±»å |
| | | */ |
| | | private static String getFileTypeBySuffix(String fileName) { |
| | | return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); |
| | | } |
| | | |
| | | /** |
| | | * æä»¶ç±»åè¿æ»¤ |
| | | * |
| | | * @param file |
| | | */ |
| | | public static void fileTypeFilter(MultipartFile file) throws Exception { |
| | | String suffix = getFileType(file); |
| | | for (String type : forbidType) { |
| | | if (type.contains(suffix)) { |
| | | throw new Exception("ä¸ä¼ å¤±è´¥ï¼æä»¶ç±»åå¼å¸¸ï¼" + suffix); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * éè¿è¯»åæä»¶å¤´é¨è·å¾æä»¶ç±»å |
| | | * |
| | | * @param file |
| | | * @return æä»¶ç±»å |
| | | * @throws Exception |
| | | */ |
| | | |
| | | private static String getFileType(MultipartFile file) throws Exception { |
| | | String fileExtendName = null; |
| | | InputStream is; |
| | | try { |
| | | //is = new FileInputStream(file); |
| | | is = file.getInputStream(); |
| | | byte[] b = new byte[10]; |
| | | is.read(b, 0, b.length); |
| | | String fileTypeHex = String.valueOf(bytesToHexString(b)); |
| | | Iterator<String> keyIter = fileTypeMap.keySet().iterator(); |
| | | while (keyIter.hasNext()) { |
| | | String key = keyIter.next(); |
| | | // éªè¯å5个å符æ¯è¾ |
| | | if (key.toLowerCase().startsWith(fileTypeHex.toLowerCase().substring(0, 5)) |
| | | || fileTypeHex.toLowerCase().substring(0, 5).startsWith(key.toLowerCase())) { |
| | | fileExtendName = fileTypeMap.get(key); |
| | | break; |
| | | } |
| | | } |
| | | // 妿䏿¯ä¸è¿°ç±»åï¼å夿æ©å±å |
| | | if (StringUtils.isBlank(fileExtendName)) { |
| | | String fileName = file.getOriginalFilename(); |
| | | return getFileTypeBySuffix(fileName); |
| | | } |
| | | is.close(); |
| | | return fileExtendName; |
| | | } catch (Exception exception) { |
| | | throw new Exception(exception.getMessage(), exception); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·å¾æä»¶å¤´é¨å符串 |
| | | * |
| | | * @param src |
| | | * @return |
| | | */ |
| | | private static String bytesToHexString(byte[] src) { |
| | | StringBuilder stringBuilder = new StringBuilder(); |
| | | if (src == null || src.length <= 0) { |
| | | return null; |
| | | } |
| | | for (int i = 0; i < src.length; i++) { |
| | | int v = src[i] & 0xFF; |
| | | String hv = Integer.toHexString(v); |
| | | if (hv.length() < 2) { |
| | | stringBuilder.append(0); |
| | | } |
| | | stringBuilder.append(hv); |
| | | } |
| | | return stringBuilder.toString(); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.filter; |
| | | |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | import java.util.regex.PatternSyntaxException; |
| | | |
| | | /** |
| | | * æä»¶ä¸ä¼ åç¬¦ä¸²è¿æ»¤ç¹æ®å符 |
| | | */ |
| | | public class StrAttackFilter { |
| | | |
| | | public static String filter(String str) throws PatternSyntaxException { |
| | | // æ¸
餿ææç¹æ®å符 |
| | | String regEx = "[`_ãã~!@#$%^&*()+=|{}':;',\\[\\].<>?~ï¼@#ï¿¥%â¦â¦&*ï¼ï¼ââ+|{}ããâï¼ï¼âââãï¼ãï¼]"; |
| | | Pattern p = Pattern.compile(regEx); |
| | | Matcher m = p.matcher(str); |
| | | return m.replaceAll("").trim(); |
| | | } |
| | | |
| | | // public static void main(String[] args) { |
| | | // String filter = filter("@#jeecg/ãããboãï¿¥%â¦â¦&*ï¼oï¼)))ï¼@t<>,.,/?'\'~~`"); |
| | | // System.out.println(filter); |
| | | // } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.lang.reflect.Field; |
| | | import java.math.BigDecimal; |
| | | import java.math.BigInteger; |
| | | import java.net.InetAddress; |
| | | import java.net.NetworkInterface; |
| | | import java.net.SocketException; |
| | | import java.net.UnknownHostException; |
| | | import java.sql.Date; |
| | | import java.util.*; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * |
| | | * @Author å¼ ä»£æµ© |
| | | * |
| | | */ |
| | | @Slf4j |
| | | public class oConvertUtils { |
| | | public static boolean isEmpty(Object object) { |
| | | if (object == null) { |
| | | return (true); |
| | | } |
| | | if ("".equals(object)) { |
| | | return (true); |
| | | } |
| | | if ("null".equals(object)) { |
| | | return (true); |
| | | } |
| | | return (false); |
| | | } |
| | | |
| | | public static boolean isNotEmpty(Object object) { |
| | | if (object != null && !object.equals("") && !object.equals("null")) { |
| | | return (true); |
| | | } |
| | | return (false); |
| | | } |
| | | |
| | | public static String decode(String strIn, String sourceCode, String targetCode) { |
| | | String temp = code2code(strIn, sourceCode, targetCode); |
| | | return temp; |
| | | } |
| | | |
| | | public static String StrToUTF(String strIn, String sourceCode, String targetCode) { |
| | | strIn = ""; |
| | | try { |
| | | strIn = new String(strIn.getBytes("ISO-8859-1"), "GBK"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | } |
| | | return strIn; |
| | | |
| | | } |
| | | |
| | | private static String code2code(String strIn, String sourceCode, String targetCode) { |
| | | String strOut = null; |
| | | if (strIn == null || (strIn.trim()).equals("")) { |
| | | return strIn; |
| | | } |
| | | try { |
| | | byte[] b = strIn.getBytes(sourceCode); |
| | | for (int i = 0; i < b.length; i++) { |
| | | System.out.print(b[i] + " "); |
| | | } |
| | | strOut = new String(b, targetCode); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | return strOut; |
| | | } |
| | | |
| | | public static int getInt(String s, int defval) { |
| | | if (s == null || s == "") { |
| | | return (defval); |
| | | } |
| | | try { |
| | | return (Integer.parseInt(s)); |
| | | } catch (NumberFormatException e) { |
| | | return (defval); |
| | | } |
| | | } |
| | | |
| | | public static int getInt(String s) { |
| | | if (s == null || s == "") { |
| | | return 0; |
| | | } |
| | | try { |
| | | return (Integer.parseInt(s)); |
| | | } catch (NumberFormatException e) { |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | public static int getInt(String s, Integer df) { |
| | | if (s == null || s == "") { |
| | | return df; |
| | | } |
| | | try { |
| | | return (Integer.parseInt(s)); |
| | | } catch (NumberFormatException e) { |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | public static Integer[] getInts(String[] s) { |
| | | Integer[] integer = new Integer[s.length]; |
| | | if (s == null) { |
| | | return null; |
| | | } |
| | | for (int i = 0; i < s.length; i++) { |
| | | integer[i] = Integer.parseInt(s[i]); |
| | | } |
| | | return integer; |
| | | |
| | | } |
| | | |
| | | public static double getDouble(String s, double defval) { |
| | | if (s == null || s == "") { |
| | | return (defval); |
| | | } |
| | | try { |
| | | return (Double.parseDouble(s)); |
| | | } catch (NumberFormatException e) { |
| | | return (defval); |
| | | } |
| | | } |
| | | |
| | | public static double getDou(Double s, double defval) { |
| | | if (s == null) { |
| | | return (defval); |
| | | } |
| | | return s; |
| | | } |
| | | |
| | | /*public static Short getShort(String s) { |
| | | if (StringUtil.isNotEmpty(s)) { |
| | | return (Short.parseShort(s)); |
| | | } else { |
| | | return null; |
| | | } |
| | | }*/ |
| | | |
| | | public static int getInt(Object object, int defval) { |
| | | if (isEmpty(object)) { |
| | | return (defval); |
| | | } |
| | | try { |
| | | return (Integer.parseInt(object.toString())); |
| | | } catch (NumberFormatException e) { |
| | | return (defval); |
| | | } |
| | | } |
| | | |
| | | public static Integer getInt(Object object) { |
| | | if (isEmpty(object)) { |
| | | return null; |
| | | } |
| | | try { |
| | | return (Integer.parseInt(object.toString())); |
| | | } catch (NumberFormatException e) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | public static int getInt(BigDecimal s, int defval) { |
| | | if (s == null) { |
| | | return (defval); |
| | | } |
| | | return s.intValue(); |
| | | } |
| | | |
| | | public static Integer[] getIntegerArry(String[] object) { |
| | | int len = object.length; |
| | | Integer[] result = new Integer[len]; |
| | | try { |
| | | for (int i = 0; i < len; i++) { |
| | | result[i] = new Integer(object[i].trim()); |
| | | } |
| | | return result; |
| | | } catch (NumberFormatException e) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | public static String getString(String s) { |
| | | return (getString(s, "")); |
| | | } |
| | | |
| | | /** |
| | | * è½¬ä¹æUnicodeç¼ç |
| | | * @param s |
| | | * @return |
| | | */ |
| | | /*public static String escapeJava(Object s) { |
| | | return StringEscapeUtils.escapeJava(getString(s)); |
| | | }*/ |
| | | |
| | | public static String getString(Object object) { |
| | | if (isEmpty(object)) { |
| | | return ""; |
| | | } |
| | | return (object.toString().trim()); |
| | | } |
| | | |
| | | public static String getString(int i) { |
| | | return (String.valueOf(i)); |
| | | } |
| | | |
| | | public static String getString(float i) { |
| | | return (String.valueOf(i)); |
| | | } |
| | | |
| | | public static String getString(String s, String defval) { |
| | | if (isEmpty(s)) { |
| | | return (defval); |
| | | } |
| | | return (s.trim()); |
| | | } |
| | | |
| | | public static String getString(Object s, String defval) { |
| | | if (isEmpty(s)) { |
| | | return (defval); |
| | | } |
| | | return (s.toString().trim()); |
| | | } |
| | | |
| | | public static long stringToLong(String str) { |
| | | Long test = new Long(0); |
| | | try { |
| | | test = Long.valueOf(str); |
| | | } catch (Exception e) { |
| | | } |
| | | return test.longValue(); |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¬æºIP |
| | | */ |
| | | public static String getIp() { |
| | | String ip = null; |
| | | try { |
| | | InetAddress address = InetAddress.getLocalHost(); |
| | | ip = address.getHostAddress(); |
| | | |
| | | } catch (UnknownHostException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return ip; |
| | | } |
| | | |
| | | /** |
| | | * 夿ä¸ä¸ªç±»æ¯å¦ä¸ºåºæ¬æ°æ®ç±»åã |
| | | * |
| | | * @param clazz |
| | | * è¦å¤æçç±»ã |
| | | * @return true è¡¨ç¤ºä¸ºåºæ¬æ°æ®ç±»åã |
| | | */ |
| | | private static boolean isBaseDataType(Class clazz) throws Exception { |
| | | return (clazz.equals(String.class) || clazz.equals(Integer.class) || clazz.equals(Byte.class) || clazz.equals(Long.class) || clazz.equals(Double.class) || clazz.equals(Float.class) || clazz.equals(Character.class) || clazz.equals(Short.class) || clazz.equals(BigDecimal.class) || clazz.equals(BigInteger.class) || clazz.equals(Boolean.class) || clazz.equals(Date.class) || clazz.isPrimitive()); |
| | | } |
| | | |
| | | /** |
| | | * @param request |
| | | * IP |
| | | * @return IP Address |
| | | */ |
| | | public static String getIpAddrByRequest(HttpServletRequest request) { |
| | | String ip = request.getHeader("x-forwarded-for"); |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("Proxy-Client-IP"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("WL-Proxy-Client-IP"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getRemoteAddr(); |
| | | } |
| | | return ip; |
| | | } |
| | | |
| | | /** |
| | | * @return æ¬æºIP |
| | | * @throws SocketException |
| | | */ |
| | | public static String getRealIp() throws SocketException { |
| | | String localip = null;// æ¬å°IPï¼å¦ææ²¡æé
ç½®å¤ç½IPåè¿åå® |
| | | String netip = null;// å¤ç½IP |
| | | |
| | | Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); |
| | | InetAddress ip = null; |
| | | boolean finded = false;// æ¯å¦æ¾å°å¤ç½IP |
| | | while (netInterfaces.hasMoreElements() && !finded) { |
| | | NetworkInterface ni = netInterfaces.nextElement(); |
| | | Enumeration<InetAddress> address = ni.getInetAddresses(); |
| | | while (address.hasMoreElements()) { |
| | | ip = address.nextElement(); |
| | | if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// å¤ç½IP |
| | | netip = ip.getHostAddress(); |
| | | finded = true; |
| | | break; |
| | | } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// å
ç½IP |
| | | localip = ip.getHostAddress(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (netip != null && !"".equals(netip)) { |
| | | return netip; |
| | | } else { |
| | | return localip; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * javaå»é¤å符串ä¸çç©ºæ ¼ãåè½¦ãæ¢è¡ç¬¦ãå¶è¡¨ç¬¦ |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static String replaceBlank(String str) { |
| | | String dest = ""; |
| | | if (str != null) { |
| | | Pattern p = Pattern.compile("\\s*|\t|\r|\n"); |
| | | Matcher m = p.matcher(str); |
| | | dest = m.replaceAll(""); |
| | | } |
| | | return dest; |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 夿å
ç´ æ¯å¦å¨æ°ç»å
|
| | | * |
| | | * @param substring |
| | | * @param source |
| | | * @return |
| | | */ |
| | | public static boolean isIn(String substring, String[] source) { |
| | | if (source == null || source.length == 0) { |
| | | return false; |
| | | } |
| | | for (int i = 0; i < source.length; i++) { |
| | | String aSource = source[i]; |
| | | if (aSource.equals(substring)) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * è·åMap对象 |
| | | */ |
| | | public static Map<Object, Object> getHashMap() { |
| | | return new HashMap<Object, Object>(); |
| | | } |
| | | |
| | | /** |
| | | * SET转æ¢MAP |
| | | * |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static Map<Object, Object> SetToMap(Set<Object> setobj) { |
| | | Map<Object, Object> map = getHashMap(); |
| | | for (Iterator iterator = setobj.iterator(); iterator.hasNext();) { |
| | | Map.Entry<Object, Object> entry = (Map.Entry<Object, Object>) iterator.next(); |
| | | map.put(entry.getKey().toString(), entry.getValue() == null ? "" : entry.getValue().toString().trim()); |
| | | } |
| | | return map; |
| | | |
| | | } |
| | | |
| | | public static boolean isInnerIP(String ipAddress) { |
| | | boolean isInnerIp = false; |
| | | long ipNum = getIpNum(ipAddress); |
| | | /** |
| | | * ç§æIPï¼Aç±» 10.0.0.0-10.255.255.255 Bç±» 172.16.0.0-172.31.255.255 Cç±» 192.168.0.0-192.168.255.255 å½ç¶ï¼è¿æ127è¿ä¸ªç½æ®µæ¯ç¯åå°å |
| | | **/ |
| | | long aBegin = getIpNum("10.0.0.0"); |
| | | long aEnd = getIpNum("10.255.255.255"); |
| | | long bBegin = getIpNum("172.16.0.0"); |
| | | long bEnd = getIpNum("172.31.255.255"); |
| | | long cBegin = getIpNum("192.168.0.0"); |
| | | long cEnd = getIpNum("192.168.255.255"); |
| | | isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd) || ipAddress.equals("127.0.0.1"); |
| | | return isInnerIp; |
| | | } |
| | | |
| | | private static long getIpNum(String ipAddress) { |
| | | String[] ip = ipAddress.split("\\."); |
| | | long a = Integer.parseInt(ip[0]); |
| | | long b = Integer.parseInt(ip[1]); |
| | | long c = Integer.parseInt(ip[2]); |
| | | long d = Integer.parseInt(ip[3]); |
| | | |
| | | long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d; |
| | | return ipNum; |
| | | } |
| | | |
| | | private static boolean isInner(long userIp, long begin, long end) { |
| | | return (userIp >= begin) && (userIp <= end); |
| | | } |
| | | |
| | | /** |
| | | * å°ä¸åçº¿å¤§åæ¹å¼å½åçå符串转æ¢ä¸ºé©¼å³°å¼ã |
| | | * å¦æè½¬æ¢åçä¸åçº¿å¤§åæ¹å¼å½åçå符串为空ï¼åè¿å空å符串ã</br> |
| | | * ä¾å¦ï¼hello_world->helloWorld |
| | | * |
| | | * @param name |
| | | * 转æ¢åçä¸åçº¿å¤§åæ¹å¼å½åçå符串 |
| | | * @return 转æ¢åç驼峰å¼å½åçå符串 |
| | | */ |
| | | public static String camelName(String name) { |
| | | StringBuilder result = new StringBuilder(); |
| | | // å¿«éæ£æ¥ |
| | | if (name == null || name.isEmpty()) { |
| | | // 没å¿
è¦è½¬æ¢ |
| | | return ""; |
| | | } else if (!name.contains("_")) { |
| | | // ä¸å«ä¸å线ï¼ä»
å°é¦åæ¯å°å |
| | | //update-begin--Author:zhoujf Date:20180503 forï¼TASK #2500 ã代ç çæå¨ã代ç çæå¨å¼åä¸éç¨æ¨¡æ¿çæåè½ |
| | | //update-begin--Author:zhoujf Date:20180503 forï¼TASK #2500 ã代ç çæå¨ã代ç çæå¨å¼åä¸éç¨æ¨¡æ¿çæåè½ |
| | | return name.substring(0, 1).toLowerCase() + name.substring(1).toLowerCase(); |
| | | //update-end--Author:zhoujf Date:20180503 forï¼TASK #2500 ã代ç çæå¨ã代ç çæå¨å¼åä¸éç¨æ¨¡æ¿çæåè½ |
| | | } |
| | | // ç¨ä¸å线å°åå§å符串åå² |
| | | String camels[] = name.split("_"); |
| | | for (String camel : camels) { |
| | | // è·³è¿åå§å符串ä¸å¼å¤´ãç»å°¾ç䏿¢çº¿æåéä¸å线 |
| | | if (camel.isEmpty()) { |
| | | continue; |
| | | } |
| | | // å¤ççæ£çé©¼å³°çæ®µ |
| | | if (result.length() == 0) { |
| | | // 第ä¸ä¸ªé©¼å³°ç段ï¼å
¨é¨åæ¯é½å°å |
| | | result.append(camel.toLowerCase()); |
| | | } else { |
| | | // å
¶ä»çé©¼å³°çæ®µï¼é¦åæ¯å¤§å |
| | | result.append(camel.substring(0, 1).toUpperCase()); |
| | | result.append(camel.substring(1).toLowerCase()); |
| | | } |
| | | } |
| | | return result.toString(); |
| | | } |
| | | |
| | | /** |
| | | * å°ä¸åçº¿å¤§åæ¹å¼å½åçå符串转æ¢ä¸ºé©¼å³°å¼ã |
| | | * å¦æè½¬æ¢åçä¸åçº¿å¤§åæ¹å¼å½åçå符串为空ï¼åè¿å空å符串ã</br> |
| | | * ä¾å¦ï¼hello_world,test_id->helloWorld,testId |
| | | * |
| | | * @param name |
| | | * 转æ¢åçä¸åçº¿å¤§åæ¹å¼å½åçå符串 |
| | | * @return 转æ¢åç驼峰å¼å½åçå符串 |
| | | */ |
| | | public static String camelNames(String names) { |
| | | if(names==null||names.equals("")){ |
| | | return null; |
| | | } |
| | | StringBuffer sf = new StringBuffer(); |
| | | String[] fs = names.split(","); |
| | | for (String field : fs) { |
| | | field = camelName(field); |
| | | sf.append(field + ","); |
| | | } |
| | | String result = sf.toString(); |
| | | return result.substring(0, result.length() - 1); |
| | | } |
| | | |
| | | //update-begin--Author:zhoujf Date:20180503 forï¼TASK #2500 ã代ç çæå¨ã代ç çæå¨å¼åä¸éç¨æ¨¡æ¿çæåè½ |
| | | /** |
| | | * å°ä¸åçº¿å¤§åæ¹å¼å½åçå符串转æ¢ä¸ºé©¼å³°å¼ã(é¦åæ¯å) |
| | | * å¦æè½¬æ¢åçä¸åçº¿å¤§åæ¹å¼å½åçå符串为空ï¼åè¿å空å符串ã</br> |
| | | * ä¾å¦ï¼hello_world->HelloWorld |
| | | * |
| | | * @param name |
| | | * 转æ¢åçä¸åçº¿å¤§åæ¹å¼å½åçå符串 |
| | | * @return 转æ¢åç驼峰å¼å½åçå符串 |
| | | */ |
| | | public static String camelNameCapFirst(String name) { |
| | | StringBuilder result = new StringBuilder(); |
| | | // å¿«éæ£æ¥ |
| | | if (name == null || name.isEmpty()) { |
| | | // 没å¿
è¦è½¬æ¢ |
| | | return ""; |
| | | } else if (!name.contains("_")) { |
| | | // ä¸å«ä¸å线ï¼ä»
å°é¦åæ¯å°å |
| | | return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); |
| | | } |
| | | // ç¨ä¸å线å°åå§å符串åå² |
| | | String camels[] = name.split("_"); |
| | | for (String camel : camels) { |
| | | // è·³è¿åå§å符串ä¸å¼å¤´ãç»å°¾ç䏿¢çº¿æåéä¸å线 |
| | | if (camel.isEmpty()) { |
| | | continue; |
| | | } |
| | | // å
¶ä»çé©¼å³°çæ®µï¼é¦åæ¯å¤§å |
| | | result.append(camel.substring(0, 1).toUpperCase()); |
| | | result.append(camel.substring(1).toLowerCase()); |
| | | } |
| | | return result.toString(); |
| | | } |
| | | //update-end--Author:zhoujf Date:20180503 forï¼TASK #2500 ã代ç çæå¨ã代ç çæå¨å¼åä¸éç¨æ¨¡æ¿çæåè½ |
| | | |
| | | /** |
| | | * å°é©¼å³°å½å转åæä¸å线 |
| | | * @param para |
| | | * @return |
| | | */ |
| | | public static String camelToUnderline(String para){ |
| | | if(para.length()<3){ |
| | | return para.toLowerCase(); |
| | | } |
| | | StringBuilder sb=new StringBuilder(para); |
| | | int temp=0;//å®ä½ |
| | | //ä»ç¬¬ä¸ä¸ªå符å¼å§ é¿å
å½åä¸è§è |
| | | for(int i=2;i<para.length();i++){ |
| | | if(Character.isUpperCase(para.charAt(i))){ |
| | | sb.insert(i+temp, "_"); |
| | | temp+=1; |
| | | } |
| | | } |
| | | return sb.toString().toLowerCase(); |
| | | } |
| | | |
| | | /** |
| | | * éæºæ° |
| | | * @param place å®ä¹éæºæ°ç使° |
| | | */ |
| | | public static String randomGen(int place) { |
| | | String base = "qwertyuioplkjhgfdsazxcvbnmQAZWSXEDCRFVTGBYHNUJMIKLOP0123456789"; |
| | | StringBuffer sb = new StringBuffer(); |
| | | Random rd = new Random(); |
| | | for(int i=0;i<place;i++) { |
| | | sb.append(base.charAt(rd.nextInt(base.length()))); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç±»çææå±æ§ï¼å
æ¬ç¶ç±» |
| | | * |
| | | * @param object |
| | | * @return |
| | | */ |
| | | public static Field[] getAllFields(Object object) { |
| | | Class<?> clazz = object.getClass(); |
| | | List<Field> fieldList = new ArrayList<>(); |
| | | while (clazz != null) { |
| | | fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); |
| | | clazz = clazz.getSuperclass(); |
| | | } |
| | | Field[] fields = new Field[fieldList.size()]; |
| | | fieldList.toArray(fields); |
| | | return fields; |
| | | } |
| | | |
| | | /** |
| | | * å°mapçkeyå
¨é¨è½¬æå°å |
| | | * @param list |
| | | * @return |
| | | */ |
| | | public static List<Map<String, Object>> toLowerCasePageList(List<Map<String, Object>> list){ |
| | | List<Map<String, Object>> select = new ArrayList<>(); |
| | | for (Map<String, Object> row : list) { |
| | | Map<String, Object> resultMap = new HashMap<>(); |
| | | Set<String> keySet = row.keySet(); |
| | | for (String key : keySet) { |
| | | String newKey = key.toLowerCase(); |
| | | resultMap.put(newKey, row.get(key)); |
| | | } |
| | | select.add(resultMap); |
| | | } |
| | | return select; |
| | | } |
| | | |
| | | /** |
| | | * å°entityListè½¬æ¢æmodelList |
| | | * @param fromList |
| | | * @param tClass |
| | | * @param <F> |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static<F,T> List<T> entityListToModelList(List<F> fromList, Class<T> tClass){ |
| | | if(fromList == null || fromList.isEmpty()){ |
| | | return null; |
| | | } |
| | | List<T> tList = new ArrayList<>(); |
| | | for(F f : fromList){ |
| | | T t = entityToModel(f, tClass); |
| | | tList.add(t); |
| | | } |
| | | return tList; |
| | | } |
| | | |
| | | public static<F,T> T entityToModel(F entity, Class<T> modelClass) { |
| | | log.debug("entityToModel : Entity屿§çå¼èµå¼å°Model"); |
| | | Object model = null; |
| | | if (entity == null || modelClass ==null) { |
| | | return null; |
| | | } |
| | | |
| | | try { |
| | | model = modelClass.newInstance(); |
| | | } catch (InstantiationException e) { |
| | | log.error("entityToModel : å®ä¾åå¼å¸¸", e); |
| | | } catch (IllegalAccessException e) { |
| | | log.error("entityToModel : å®å
¨æéå¼å¸¸", e); |
| | | } |
| | | BeanUtils.copyProperties(entity, model); |
| | | return (T)model; |
| | | } |
| | | |
| | | /** |
| | | * 夿 list æ¯å¦ä¸ºç©º |
| | | * |
| | | * @param list |
| | | * @return true or false |
| | | * list == null : true |
| | | * list.size() == 0 : true |
| | | */ |
| | | public static boolean listIsEmpty(Collection list) { |
| | | return (list == null || list.size() == 0); |
| | | } |
| | | |
| | | /** |
| | | * 夿 list æ¯å¦ä¸ä¸ºç©º |
| | | * |
| | | * @param list |
| | | * @return true or false |
| | | * list == null : false |
| | | * list.size() == 0 : false |
| | | */ |
| | | public static boolean listIsNotEmpty(Collection list) { |
| | | return !listIsEmpty(list); |
| | | } |
| | | |
| | | /** |
| | | * 读åéæææ¬å
容 |
| | | * @param url |
| | | * @return |
| | | */ |
| | | public static String readStatic(String url) { |
| | | String json = ""; |
| | | try { |
| | | //æ¢ä¸ªåæ³ï¼è§£å³springboot读åjarå
䏿件çé®é¢ |
| | | InputStream stream = oConvertUtils.class.getClassLoader().getResourceAsStream(url.replace("classpath:", "")); |
| | | json = IOUtils.toString(stream,"UTF-8"); |
| | | } catch (IOException e) { |
| | | log.error(e.getMessage(),e); |
| | | } |
| | | return json; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.oss; |
| | | |
| | | import com.aliyun.oss.ClientConfiguration; |
| | | import com.aliyun.oss.OSSClient; |
| | | import com.aliyun.oss.common.auth.DefaultCredentialProvider; |
| | | import com.aliyun.oss.model.CannedAccessControlList; |
| | | import com.aliyun.oss.model.OSSObject; |
| | | import com.aliyun.oss.model.PutObjectResult; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.tomcat.util.http.fileupload.FileItemStream; |
| | | import org.jeecg.common.util.CommonUtils; |
| | | import org.jeecg.common.util.filter.FileTypeFilter; |
| | | import org.jeecg.common.util.filter.StrAttackFilter; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.io.BufferedInputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.net.URL; |
| | | import java.net.URLDecoder; |
| | | import java.util.Date; |
| | | import java.util.UUID; |
| | | |
| | | /** |
| | | * @Description: é¿éäº oss ä¸ä¼ å·¥å
·ç±»(é«ä¾èµç) |
| | | * @Date: 2019/5/10 |
| | | */ |
| | | @Slf4j |
| | | public class OssBootUtil { |
| | | |
| | | private static String endPoint; |
| | | private static String accessKeyId; |
| | | private static String accessKeySecret; |
| | | private static String bucketName; |
| | | private static String staticDomain; |
| | | |
| | | public static void setEndPoint(String endPoint) { |
| | | OssBootUtil.endPoint = endPoint; |
| | | } |
| | | |
| | | public static void setAccessKeyId(String accessKeyId) { |
| | | OssBootUtil.accessKeyId = accessKeyId; |
| | | } |
| | | |
| | | public static void setAccessKeySecret(String accessKeySecret) { |
| | | OssBootUtil.accessKeySecret = accessKeySecret; |
| | | } |
| | | |
| | | public static void setBucketName(String bucketName) { |
| | | OssBootUtil.bucketName = bucketName; |
| | | } |
| | | |
| | | public static void setStaticDomain(String staticDomain) { |
| | | OssBootUtil.staticDomain = staticDomain; |
| | | } |
| | | |
| | | public static String getStaticDomain() { |
| | | return staticDomain; |
| | | } |
| | | |
| | | public static String getEndPoint() { |
| | | return endPoint; |
| | | } |
| | | |
| | | public static String getAccessKeyId() { |
| | | return accessKeyId; |
| | | } |
| | | |
| | | public static String getAccessKeySecret() { |
| | | return accessKeySecret; |
| | | } |
| | | |
| | | public static String getBucketName() { |
| | | return bucketName; |
| | | } |
| | | |
| | | public static OSSClient getOssClient() { |
| | | return ossClient; |
| | | } |
| | | |
| | | /** |
| | | * oss å·¥å
·å®¢æ·ç«¯ |
| | | */ |
| | | private static OSSClient ossClient = null; |
| | | |
| | | /** |
| | | * ä¸ä¼ æä»¶è³é¿éäº OSS |
| | | * æä»¶ä¸ä¼ æå,è¿åæä»¶å®æ´è®¿é®è·¯å¾ |
| | | * æä»¶ä¸ä¼ 失败,è¿å null |
| | | * |
| | | * @param file å¾
ä¸ä¼ æä»¶ |
| | | * @param fileDir æä»¶ä¿åç®å½ |
| | | * @return oss ä¸çç¸å¯¹æä»¶è·¯å¾ |
| | | */ |
| | | public static String upload(MultipartFile file, String fileDir,String customBucket) { |
| | | String FILE_URL = null; |
| | | initOSS(endPoint, accessKeyId, accessKeySecret); |
| | | StringBuilder fileUrl = new StringBuilder(); |
| | | String newBucket = bucketName; |
| | | if(oConvertUtils.isNotEmpty(customBucket)){ |
| | | newBucket = customBucket; |
| | | } |
| | | try { |
| | | //å¤ææ¡¶æ¯å¦åå¨,ä¸åå¨åå建桶 |
| | | if(!ossClient.doesBucketExist(newBucket)){ |
| | | ossClient.createBucket(newBucket); |
| | | } |
| | | // è·åæä»¶å |
| | | String orgName = file.getOriginalFilename(); |
| | | if("" == orgName){ |
| | | orgName=file.getName(); |
| | | } |
| | | //update-begin-author:liusq date:20210809 for: è¿æ»¤ä¸ä¼ æä»¶ç±»å |
| | | FileTypeFilter.fileTypeFilter(file); |
| | | //update-end-author:liusq date:20210809 for: è¿æ»¤ä¸ä¼ æä»¶ç±»å |
| | | orgName = CommonUtils.getFileName(orgName); |
| | | String fileName = orgName.indexOf(".")==-1 |
| | | ?orgName + "_" + System.currentTimeMillis() |
| | | :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); |
| | | if (!fileDir.endsWith("/")) { |
| | | fileDir = fileDir.concat("/"); |
| | | } |
| | | //update-begin-author:wangshuai date:20201012 for: è¿æ»¤ä¸ä¼ æä»¶å¤¹åç¹æ®å符ï¼é²æ¢æ»å» |
| | | fileDir=StrAttackFilter.filter(fileDir); |
| | | //update-end-author:wangshuai date:20201012 for: è¿æ»¤ä¸ä¼ æä»¶å¤¹åç¹æ®å符ï¼é²æ¢æ»å» |
| | | fileUrl = fileUrl.append(fileDir + fileName); |
| | | |
| | | if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { |
| | | FILE_URL = staticDomain + "/" + fileUrl; |
| | | } else { |
| | | FILE_URL = "https://" + newBucket + "." + endPoint + "/" + fileUrl; |
| | | } |
| | | PutObjectResult result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream()); |
| | | // 设置æé(å
¬å¼è¯») |
| | | // ossClient.setBucketAcl(newBucket, CannedAccessControlList.PublicRead); |
| | | if (result != null) { |
| | | log.info("------OSSæä»¶ä¸ä¼ æå------" + fileUrl); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | }catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | return FILE_URL; |
| | | } |
| | | |
| | | /** |
| | | * è·ååå§URL |
| | | * @param url: åå§URL |
| | | * @Return: java.lang.String |
| | | */ |
| | | public static String getOriginalUrl(String url) { |
| | | String originalDomain = "https://" + bucketName + "." + endPoint; |
| | | if(oConvertUtils.isNotEmpty(staticDomain) && url.indexOf(staticDomain)!=-1){ |
| | | url = url.replace(staticDomain,originalDomain); |
| | | } |
| | | return url; |
| | | } |
| | | |
| | | /** |
| | | * æä»¶ä¸ä¼ |
| | | * @param file |
| | | * @param fileDir |
| | | * @return |
| | | */ |
| | | public static String upload(MultipartFile file, String fileDir) { |
| | | return upload(file, fileDir,null); |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ æä»¶è³é¿éäº OSS |
| | | * æä»¶ä¸ä¼ æå,è¿åæä»¶å®æ´è®¿é®è·¯å¾ |
| | | * æä»¶ä¸ä¼ 失败,è¿å null |
| | | * |
| | | * @param file å¾
ä¸ä¼ æä»¶ |
| | | * @param fileDir æä»¶ä¿åç®å½ |
| | | * @return oss ä¸çç¸å¯¹æä»¶è·¯å¾ |
| | | */ |
| | | public static String upload(FileItemStream file, String fileDir) { |
| | | String FILE_URL = null; |
| | | initOSS(endPoint, accessKeyId, accessKeySecret); |
| | | StringBuilder fileUrl = new StringBuilder(); |
| | | try { |
| | | String suffix = file.getName().substring(file.getName().lastIndexOf('.')); |
| | | String fileName = UUID.randomUUID().toString().replace("-", "") + suffix; |
| | | if (!fileDir.endsWith("/")) { |
| | | fileDir = fileDir.concat("/"); |
| | | } |
| | | fileDir = StrAttackFilter.filter(fileDir); |
| | | fileUrl = fileUrl.append(fileDir + fileName); |
| | | if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { |
| | | FILE_URL = staticDomain + "/" + fileUrl; |
| | | } else { |
| | | FILE_URL = "https://" + bucketName + "." + endPoint + "/" + fileUrl; |
| | | } |
| | | PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(), file.openStream()); |
| | | // 设置æé(å
¬å¼è¯») |
| | | ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); |
| | | if (result != null) { |
| | | log.info("------OSSæä»¶ä¸ä¼ æå------" + fileUrl); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | return FILE_URL; |
| | | } |
| | | |
| | | /** |
| | | * å 餿件 |
| | | * @param url |
| | | */ |
| | | public static void deleteUrl(String url) { |
| | | deleteUrl(url,null); |
| | | } |
| | | |
| | | /** |
| | | * å 餿件 |
| | | * @param url |
| | | */ |
| | | public static void deleteUrl(String url,String bucket) { |
| | | String newBucket = bucketName; |
| | | if(oConvertUtils.isNotEmpty(bucket)){ |
| | | newBucket = bucket; |
| | | } |
| | | String bucketUrl = ""; |
| | | if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { |
| | | bucketUrl = staticDomain + "/" ; |
| | | } else { |
| | | bucketUrl = "https://" + newBucket + "." + endPoint + "/"; |
| | | } |
| | | url = url.replace(bucketUrl,""); |
| | | ossClient.deleteObject(newBucket, url); |
| | | } |
| | | |
| | | /** |
| | | * å 餿件 |
| | | * @param fileName |
| | | */ |
| | | public static void delete(String fileName) { |
| | | ossClient.deleteObject(bucketName, fileName); |
| | | } |
| | | |
| | | /** |
| | | * è·åæä»¶æµ |
| | | * @param objectName |
| | | * @param bucket |
| | | * @return |
| | | */ |
| | | public static InputStream getOssFile(String objectName,String bucket){ |
| | | InputStream inputStream = null; |
| | | try{ |
| | | String newBucket = bucketName; |
| | | if(oConvertUtils.isNotEmpty(bucket)){ |
| | | newBucket = bucket; |
| | | } |
| | | initOSS(endPoint, accessKeyId, accessKeySecret); |
| | | OSSObject ossObject = ossClient.getObject(newBucket,objectName); |
| | | inputStream = new BufferedInputStream(ossObject.getObjectContent()); |
| | | }catch (Exception e){ |
| | | log.info("æä»¶è·å失败" + e.getMessage()); |
| | | } |
| | | return inputStream; |
| | | } |
| | | |
| | | /** |
| | | * è·åæä»¶æµ |
| | | * @param objectName |
| | | * @return |
| | | */ |
| | | public static InputStream getOssFile(String objectName){ |
| | | return getOssFile(objectName,null); |
| | | } |
| | | |
| | | /** |
| | | * è·åæä»¶å¤é¾ |
| | | * @param bucketName |
| | | * @param objectName |
| | | * @param expires |
| | | * @return |
| | | */ |
| | | public static String getObjectURL(String bucketName, String objectName, Date expires) { |
| | | initOSS(endPoint, accessKeyId, accessKeySecret); |
| | | try{ |
| | | if(ossClient.doesObjectExist(bucketName,objectName)){ |
| | | URL url = ossClient.generatePresignedUrl(bucketName,objectName,expires); |
| | | return URLDecoder.decode(url.toString(),"UTF-8"); |
| | | } |
| | | }catch (Exception e){ |
| | | log.info("æä»¶è·¯å¾è·å失败" + e.getMessage()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * åå§å oss 客æ·ç«¯ |
| | | * |
| | | * @return |
| | | */ |
| | | private static OSSClient initOSS(String endpoint, String accessKeyId, String accessKeySecret) { |
| | | if (ossClient == null) { |
| | | ossClient = new OSSClient(endpoint, |
| | | new DefaultCredentialProvider(accessKeyId, accessKeySecret), |
| | | new ClientConfiguration()); |
| | | } |
| | | return ossClient; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * ä¸ä¼ æä»¶å°oss |
| | | * @param stream |
| | | * @param relativePath |
| | | * @return |
| | | */ |
| | | public static String upload(InputStream stream, String relativePath) { |
| | | String FILE_URL = null; |
| | | String fileUrl = relativePath; |
| | | initOSS(endPoint, accessKeyId, accessKeySecret); |
| | | if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { |
| | | FILE_URL = staticDomain + "/" + relativePath; |
| | | } else { |
| | | FILE_URL = "https://" + bucketName + "." + endPoint + "/" + fileUrl; |
| | | } |
| | | PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(),stream); |
| | | // 设置æé(å
¬å¼è¯») |
| | | ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); |
| | | if (result != null) { |
| | | log.info("------OSSæä»¶ä¸ä¼ æå------" + fileUrl); |
| | | } |
| | | return FILE_URL; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security; |
| | | |
| | | import cn.hutool.core.codec.Base64Decoder; |
| | | import cn.hutool.core.codec.Base64Encoder; |
| | | import cn.hutool.crypto.SecureUtil; |
| | | import cn.hutool.crypto.asymmetric.KeyType; |
| | | import cn.hutool.crypto.asymmetric.RSA; |
| | | import cn.hutool.crypto.asymmetric.Sign; |
| | | import cn.hutool.crypto.asymmetric.SignAlgorithm; |
| | | import cn.hutool.crypto.symmetric.AES; |
| | | import org.jeecg.common.util.security.entity.*; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import javax.crypto.SecretKey; |
| | | import java.security.KeyPair; |
| | | |
| | | public class SecurityTools { |
| | | public static final String ALGORITHM = "AES/ECB/PKCS5Padding"; |
| | | |
| | | public static SecurityResp valid(SecurityReq req) { |
| | | SecurityResp resp=new SecurityResp(); |
| | | String pubKey=req.getPubKey(); |
| | | String aesKey=req.getAesKey(); |
| | | String data=req.getData(); |
| | | String signData=req.getSignData(); |
| | | RSA rsa=new RSA(null, Base64Decoder.decode(pubKey)); |
| | | Sign sign= new Sign(SignAlgorithm.SHA1withRSA,null,pubKey); |
| | | |
| | | |
| | | |
| | | byte[] decryptAes = rsa.decrypt(aesKey, KeyType.PublicKey); |
| | | //log.info("rsaè§£å¯åçç§é¥"+ Base64Encoder.encode(decryptAes)); |
| | | AES aes = SecureUtil.aes(decryptAes); |
| | | |
| | | String dencrptValue =aes.decryptStr(data); |
| | | //log.info("è§£å¯åæ¥æ"+dencrptValue); |
| | | resp.setData(JSONObject.parseObject(dencrptValue)); |
| | | |
| | | boolean verify = sign.verify(dencrptValue.getBytes(), Base64Decoder.decode(signData)); |
| | | resp.setSuccess(verify); |
| | | return resp; |
| | | } |
| | | |
| | | public static SecuritySignResp sign(SecuritySignReq req) { |
| | | SecretKey secretKey = SecureUtil.generateKey(ALGORITHM); |
| | | byte[] key= secretKey.getEncoded(); |
| | | String prikey=req.getPrikey(); |
| | | String data=req.getData(); |
| | | |
| | | AES aes = SecureUtil.aes(key); |
| | | aes.getSecretKey().getEncoded(); |
| | | String encrptData =aes.encryptBase64(data); |
| | | RSA rsa=new RSA(prikey,null); |
| | | byte[] encryptAesKey = rsa.encrypt(secretKey.getEncoded(), KeyType.PrivateKey); |
| | | //log.info(("rsaå å¯è¿çç§é¥=="+Base64Encoder.encode(encryptAesKey)); |
| | | |
| | | Sign sign= new Sign(SignAlgorithm.SHA1withRSA,prikey,null); |
| | | byte[] signed = sign.sign(data.getBytes()); |
| | | |
| | | //log.info(("ç¾åæ°æ®===ãã"+Base64Encoder.encode(signed)); |
| | | |
| | | SecuritySignResp resp=new SecuritySignResp(); |
| | | resp.setAesKey(Base64Encoder.encode(encryptAesKey)); |
| | | resp.setData(encrptData); |
| | | resp.setSignData(Base64Encoder.encode(signed)); |
| | | return resp; |
| | | } |
| | | public static MyKeyPair generateKeyPair(){ |
| | | KeyPair keyPair= SecureUtil.generateKeyPair(SignAlgorithm.SHA1withRSA.getValue(),2048); |
| | | String priKey= Base64Encoder.encode(keyPair.getPrivate().getEncoded()); |
| | | String pubkey= Base64Encoder.encode(keyPair.getPublic().getEncoded()); |
| | | MyKeyPair resp=new MyKeyPair(); |
| | | resp.setPriKey(priKey); |
| | | resp.setPubKey(pubkey); |
| | | return resp; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class MyKeyPair { |
| | | private String priKey; |
| | | private String pubKey; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class SecurityReq { |
| | | private String data; |
| | | private String pubKey; |
| | | private String signData; |
| | | private String aesKey; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security.entity; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class SecurityResp { |
| | | private Boolean success; |
| | | private JSONObject data; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class SecuritySignReq { |
| | | private String data; |
| | | private String prikey; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class SecuritySignResp { |
| | | private String data; |
| | | private String signData; |
| | | private String aesKey; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.superSearch; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | |
| | | /** |
| | | * å¤æç±»åï¼è¿½å æ¥è¯¢è§å |
| | | * |
| | | * @Author Scott |
| | | * @Date 2019å¹´02æ14æ¥ |
| | | */ |
| | | public class ObjectParseUtil { |
| | | |
| | | /** |
| | | * |
| | | * @param queryWrapper QueryWrapper |
| | | * @param name åæ®µåå |
| | | * @param rule æ¥è¯¢è§å |
| | | * @param value æ¥è¯¢æ¡ä»¶å¼ |
| | | */ |
| | | public static void addCriteria(QueryWrapper<?> queryWrapper, String name, QueryRuleEnum rule, Object value) { |
| | | if (value == null || rule == null) { |
| | | return; |
| | | } |
| | | switch (rule) { |
| | | case GT: |
| | | queryWrapper.gt(name, value); |
| | | break; |
| | | case GE: |
| | | queryWrapper.ge(name, value); |
| | | break; |
| | | case LT: |
| | | queryWrapper.lt(name, value); |
| | | break; |
| | | case LE: |
| | | queryWrapper.le(name, value); |
| | | break; |
| | | case EQ: |
| | | queryWrapper.eq(name, value); |
| | | break; |
| | | case NE: |
| | | queryWrapper.ne(name, value); |
| | | break; |
| | | case IN: |
| | | queryWrapper.in(name, (Object[]) value); |
| | | break; |
| | | case LIKE: |
| | | queryWrapper.like(name, value); |
| | | break; |
| | | case LEFT_LIKE: |
| | | queryWrapper.likeLeft(name, value); |
| | | break; |
| | | case RIGHT_LIKE: |
| | | queryWrapper.likeRight(name, value); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.superSearch; |
| | | |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | |
| | | /** |
| | | * Query è§å 常é |
| | | * @Author Scott |
| | | * @Date 2019å¹´02æ14æ¥ |
| | | */ |
| | | public enum QueryRuleEnum { |
| | | |
| | | GT(">","大äº"), |
| | | GE(">=","大äºçäº"), |
| | | LT("<","å°äº"), |
| | | LE("<=","å°äºçäº"), |
| | | EQ("=","çäº"), |
| | | NE("!=","ä¸çäº"), |
| | | IN("IN","å
å«"), |
| | | LIKE("LIKE","å
¨æ¨¡ç³"), |
| | | LEFT_LIKE("LEFT_LIKE","左模ç³"), |
| | | RIGHT_LIKE("RIGHT_LIKE","峿¨¡ç³"), |
| | | SQL_RULES("EXTEND_SQL","èªå®ä¹SQLçæ®µ"); |
| | | |
| | | private String value; |
| | | |
| | | private String msg; |
| | | |
| | | QueryRuleEnum(String value, String msg){ |
| | | this.value = value; |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | public void setValue(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public void setMsg(String msg) { |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public static QueryRuleEnum getByValue(String value){ |
| | | if(oConvertUtils.isEmpty(value)) { |
| | | return null; |
| | | } |
| | | for(QueryRuleEnum val :values()){ |
| | | if (val.getValue().equals(value)){ |
| | | return val; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.superSearch; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class QueryRuleVo { |
| | | |
| | | private String field; |
| | | private String rule; |
| | | private String val; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import org.jeecgframework.core.util.ApplicationContextUtil; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * @Author: Scott |
| | | * @Date: 2018/2/7 |
| | | * @description: autopoi é
置类 |
| | | */ |
| | | |
| | | @Configuration |
| | | public class AutoPoiConfig { |
| | | |
| | | /** |
| | | * excel注解åå
¸åæ°æ¯æ(导å
¥å¯¼åºåå
¸å¼ï¼èªå¨ç¿»è¯) |
| | | * 举ä¾ï¼ @Excel(name = "æ§å«", width = 15, dicCode = "sex") |
| | | * 1ã导åºçæ¶å伿 ¹æ®åå
¸é
ç½®ï¼æå¼1,2ç¿»è¯æï¼ç·ã女; |
| | | * 2ã导å
¥çæ¶åï¼ä¼æç·ãå¥³ç¿»è¯æ1,2åè¿æ°æ®åº; |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public ApplicationContextUtil applicationContextUtil() { |
| | | return new org.jeecgframework.core.util.ApplicationContextUtil(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.jeecgframework.dict.service.AutoPoiDictServiceI; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æè¿°ï¼AutoPoi Excelæ³¨è§£æ¯æåå
¸åæ°è®¾ç½® |
| | | * 举ä¾ï¼ @Excel(name = "æ§å«", width = 15, dicCode = "sex") |
| | | * 1ã导åºçæ¶å伿 ¹æ®åå
¸é
ç½®ï¼æå¼1,2ç¿»è¯æï¼ç·ã女; |
| | | * 2ã导å
¥çæ¶åï¼ä¼æç·ãå¥³ç¿»è¯æ1,2åè¿æ°æ®åº; |
| | | * |
| | | * @Author:scott |
| | | * @sinceï¼2019-04-09 |
| | | * @Version:1.0 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class AutoPoiDictConfig implements AutoPoiDictServiceI { |
| | | @Lazy |
| | | @Resource |
| | | private CommonAPI commonAPI; |
| | | |
| | | /** |
| | | * éè¿åå
¸æ¥è¯¢easypoiï¼æéåå
¸ææ¬ |
| | | * |
| | | * @Author:scott |
| | | * @sinceï¼2019-04-09 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public String[] queryDict(String dicTable, String dicCode, String dicText) { |
| | | List<String> dictReplaces = new ArrayList<String>(); |
| | | List<DictModel> dictList = null; |
| | | // step.1 å¦ææ²¡æåå
¸è¡¨å使ç¨ç³»ç»åå
¸è¡¨ |
| | | if (oConvertUtils.isEmpty(dicTable)) { |
| | | dictList = commonAPI.queryDictItemsByCode(dicCode); |
| | | } else { |
| | | try { |
| | | dicText = oConvertUtils.getString(dicText, dicCode); |
| | | dictList = commonAPI.queryTableDictItemsByCode(dicTable, dicText, dicCode); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(),e); |
| | | } |
| | | } |
| | | for (DictModel t : dictList) { |
| | | if(t!=null){ |
| | | dictReplaces.add(t.getText() + "_" + t.getValue()); |
| | | } |
| | | } |
| | | if (dictReplaces != null && dictReplaces.size() != 0) { |
| | | log.info("---AutoPoi--Get_DB_Dict------"+ dictReplaces.toString()); |
| | | return dictReplaces.toArray(new String[dictReplaces.size()]); |
| | | } |
| | | return null; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.springframework.context.annotation.Condition; |
| | | import org.springframework.context.annotation.ConditionContext; |
| | | import org.springframework.core.type.AnnotatedTypeMetadata; |
| | | |
| | | /** |
| | | * è·¨åé
ç½®å è½½æ¡ä»¶ |
| | | */ |
| | | public class CorsFilterCondition implements Condition { |
| | | |
| | | @Override |
| | | public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { |
| | | Object object = context.getEnvironment().getProperty(CommonConstant.CLOUD_SERVER_KEY); |
| | | //å¦ææ²¡ææå¡æ³¨ååç°çé
ç½® è¯´ææ¯åä½åºç¨ åå 载跨åé
ç½® è¿åtrue |
| | | if(object==null){ |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import java.io.IOException; |
| | | |
| | | import javax.servlet.*; |
| | | |
| | | import org.springframework.boot.autoconfigure.AutoConfigureAfter; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; |
| | | import org.springframework.boot.web.servlet.FilterRegistrationBean; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; |
| | | import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; |
| | | import com.alibaba.druid.util.Utils; |
| | | |
| | | @Configuration |
| | | @AutoConfigureAfter(DruidDataSourceAutoConfigure.class) |
| | | public class DruidConfig { |
| | | |
| | | /** |
| | | * 带æå¹¿åçcommon.jså
¨è·¯å¾ï¼druid-1.1.14 |
| | | */ |
| | | private static final String FILE_PATH = "support/http/resources/js/common.js"; |
| | | /** |
| | | * åå§èæ¬ï¼è§¦åæå»ºå¹¿åçè¯å¥ |
| | | */ |
| | | private static final String ORIGIN_JS = "this.buildFooter();"; |
| | | /** |
| | | * æ¿æ¢åçèæ¬ |
| | | */ |
| | | private static final String NEW_JS = "//this.buildFooter();"; |
| | | |
| | | /** |
| | | * å»é¤Druidçæ§é¡µé¢ç广å |
| | | * |
| | | * @param properties DruidStatProperties屿§éå |
| | | * @return {@link FilterRegistrationBean} |
| | | */ |
| | | @Bean |
| | | @ConditionalOnWebApplication |
| | | @ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true") |
| | | public FilterRegistrationBean<RemoveAdFilter> removeDruidAdFilter( |
| | | DruidStatProperties properties) throws IOException { |
| | | // è·åwebçæ§é¡µé¢çåæ° |
| | | DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); |
| | | // æåcommon.jsçé
ç½®è·¯å¾ |
| | | String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; |
| | | String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); |
| | | // è·åcommon.js |
| | | String text = Utils.readFromResource(FILE_PATH); |
| | | // å±è½ this.buildFooter(); ä¸æå»ºå¹¿å |
| | | final String newJs = text.replace(ORIGIN_JS, NEW_JS); |
| | | FilterRegistrationBean<RemoveAdFilter> registration = new FilterRegistrationBean<>(); |
| | | registration.setFilter(new RemoveAdFilter(newJs)); |
| | | registration.addUrlPatterns(commonJsPattern); |
| | | return registration; |
| | | } |
| | | |
| | | /** |
| | | * å é¤druidç广åè¿æ»¤å¨ |
| | | * |
| | | * @author BBF |
| | | */ |
| | | private class RemoveAdFilter implements Filter { |
| | | |
| | | private final String newJs; |
| | | |
| | | public RemoveAdFilter(String newJS) { |
| | | this.newJs = newJS; |
| | | } |
| | | |
| | | @Override |
| | | public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) |
| | | throws IOException, ServletException { |
| | | chain.doFilter(request, response); |
| | | // éç½®ç¼å²åºï¼ååºå¤´ä¸ä¼è¢«éç½® |
| | | response.resetBuffer(); |
| | | response.getWriter().write(newJs); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | |
| | | /** |
| | | * å 载项ç®é
ç½® |
| | | */ |
| | | @Component("jeeccgBaseConfig") |
| | | @ConfigurationProperties(prefix = "jeecg") |
| | | public class JeeccgBaseConfig { |
| | | /** |
| | | * æ¯å¦å¯ç¨å®å
¨æ¨¡å¼ |
| | | */ |
| | | private Boolean safeMode = false; |
| | | |
| | | public Boolean getSafeMode() { |
| | | return safeMode; |
| | | } |
| | | |
| | | public void setSafeMode(Boolean safeMode) { |
| | | this.safeMode = safeMode; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.springframework.context.annotation.Condition; |
| | | import org.springframework.context.annotation.ConditionContext; |
| | | import org.springframework.core.type.AnnotatedTypeMetadata; |
| | | |
| | | /** |
| | | * å¾®æå¡ç¯å¢å è½½æ¡ä»¶ |
| | | */ |
| | | public class JeecgCloudCondition implements Condition { |
| | | |
| | | @Override |
| | | public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { |
| | | Object object = context.getEnvironment().getProperty(CommonConstant.CLOUD_SERVER_KEY); |
| | | //å¦ææ²¡ææå¡æ³¨ååç°çé
ç½® è¯´ææ¯åä½åºç¨ |
| | | if(object==null){ |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.http.client.ClientHttpRequestFactory; |
| | | import org.springframework.http.client.SimpleClientHttpRequestFactory; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | /** |
| | | * ä¼é
çhttpè¯·æ±æ¹å¼RestTemplate |
| | | * @Return: |
| | | */ |
| | | @Configuration |
| | | public class RestTemplateConfig { |
| | | |
| | | @Bean |
| | | public RestTemplate restTemplate(ClientHttpRequestFactory factory) { |
| | | return new RestTemplate(factory); |
| | | } |
| | | |
| | | @Bean |
| | | public ClientHttpRequestFactory simpleClientHttpRequestFactory() { |
| | | SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); |
| | | factory.setReadTimeout(5000);//ms |
| | | factory.setConnectTimeout(15000);//ms |
| | | return factory; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * 设置éæåæ°åå§å |
| | | */ |
| | | @Component |
| | | @Data |
| | | public class StaticConfig { |
| | | |
| | | @Value("${jeecg.oss.accessKey}") |
| | | private String accessKeyId; |
| | | |
| | | @Value("${jeecg.oss.secretKey}") |
| | | private String accessKeySecret; |
| | | |
| | | @Value(value = "${spring.mail.username}") |
| | | private String emailFrom; |
| | | |
| | | /** |
| | | * ç¾åå¯é¥ä¸² |
| | | */ |
| | | @Value(value = "${jeecg.signatureSecret}") |
| | | private String signatureSecret; |
| | | |
| | | |
| | | /*@Bean |
| | | public void initStatic() { |
| | | DySmsHelper.setAccessKeyId(accessKeyId); |
| | | DySmsHelper.setAccessKeySecret(accessKeySecret); |
| | | EmailSendMsgHandle.setEmailFrom(emailFrom); |
| | | }*/ |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | |
| | | import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | import org.springframework.context.annotation.Import; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; |
| | | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
| | | import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; |
| | | import springfox.documentation.builders.ApiInfoBuilder; |
| | | import springfox.documentation.builders.ParameterBuilder; |
| | | import springfox.documentation.builders.PathSelectors; |
| | | import springfox.documentation.builders.RequestHandlerSelectors; |
| | | import springfox.documentation.schema.ModelRef; |
| | | import springfox.documentation.service.*; |
| | | import springfox.documentation.spi.DocumentationType; |
| | | import springfox.documentation.spi.service.contexts.SecurityContext; |
| | | import springfox.documentation.spring.web.plugins.Docket; |
| | | import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @Author scott |
| | | */ |
| | | @Configuration |
| | | @EnableSwagger2WebMvc |
| | | @EnableKnife4j |
| | | @Import(BeanValidatorPluginsConfiguration.class) |
| | | public class Swagger2Config implements WebMvcConfigurer { |
| | | |
| | | /** |
| | | * |
| | | * æ¾ç¤ºswagger-ui.htmlææ¡£å±ç¤ºé¡µï¼è¿å¿
须注å
¥swaggerèµæºï¼ |
| | | * |
| | | * @param registry |
| | | */ |
| | | @Override |
| | | public void addResourceHandlers(ResourceHandlerRegistry registry) { |
| | | registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); |
| | | registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); |
| | | registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); |
| | | } |
| | | |
| | | /** |
| | | * swagger2çé
ç½®æä»¶ï¼è¿éå¯ä»¥é
ç½®swagger2çä¸äºåºæ¬çå
å®¹ï¼æ¯å¦æ«æçå
çç |
| | | * |
| | | * @return Docket |
| | | */ |
| | | @Bean(value = "defaultApi2") |
| | | public Docket defaultApi2() { |
| | | return new Docket(DocumentationType.SWAGGER_2) |
| | | .apiInfo(apiInfo()) |
| | | .select() |
| | | //æ¤å
è·¯å¾ä¸çç±»ï¼æçææ¥å£ææ¡£ |
| | | .apis(RequestHandlerSelectors.basePackage("org.jeecg")) |
| | | //å äºApiOperation注解çç±»ï¼æçææ¥å£ææ¡£ |
| | | .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) |
| | | .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) |
| | | .paths(PathSelectors.any()) |
| | | .build() |
| | | .securitySchemes(Collections.singletonList(securityScheme())) |
| | | .securityContexts(securityContexts()); |
| | | //.globalOperationParameters(setHeaderToken()); |
| | | } |
| | | |
| | | /*** |
| | | * oauth2é
ç½® |
| | | * éè¦å¢å swaggerææåè°å°å |
| | | * http://localhost:8888/webjars/springfox-swagger-ui/o2c.html |
| | | * @return |
| | | */ |
| | | @Bean |
| | | SecurityScheme securityScheme() { |
| | | return new ApiKey(CommonConstant.X_ACCESS_TOKEN, CommonConstant.X_ACCESS_TOKEN, "header"); |
| | | } |
| | | /** |
| | | * JWT token |
| | | * @return |
| | | */ |
| | | private List<Parameter> setHeaderToken() { |
| | | ParameterBuilder tokenPar = new ParameterBuilder(); |
| | | List<Parameter> pars = new ArrayList<>(); |
| | | tokenPar.name(CommonConstant.X_ACCESS_TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); |
| | | pars.add(tokenPar.build()); |
| | | return pars; |
| | | } |
| | | |
| | | /** |
| | | * apiææ¡£ç详ç»ä¿¡æ¯å½æ°,注æè¿éçæ³¨è§£å¼ç¨çæ¯åªä¸ª |
| | | * |
| | | * @return |
| | | */ |
| | | private ApiInfo apiInfo() { |
| | | return new ApiInfoBuilder() |
| | | // //大æ é¢ |
| | | .title("ç åä¿¡æ¯åç³»ç»") |
| | | // çæ¬å· |
| | | .version("1.0") |
| | | // .termsOfServiceUrl("NO terms of service") |
| | | // æè¿° |
| | | .description("åå°APIæ¥å£") |
| | | // ä½è
|
| | | .contact(new Contact("䏿µ·å
°å®ä¼ æç§æè¡ä»½æéå
¬å¸","www.shlb.com","xx@shlb.com")) |
| | | // .contact("JEECGå¢é") |
| | | .license("The Apache License, Version 2.0") |
| | | .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html") |
| | | .build(); |
| | | } |
| | | |
| | | /** |
| | | * æ°å¢ securityContexts ä¿æç»å½ç¶æ |
| | | */ |
| | | private List<SecurityContext> securityContexts() { |
| | | return new ArrayList( |
| | | Collections.singleton(SecurityContext.builder() |
| | | .securityReferences(defaultAuth()) |
| | | .forPaths(PathSelectors.regex("^(?!auth).*$")) |
| | | .build()) |
| | | ); |
| | | } |
| | | |
| | | private List<SecurityReference> defaultAuth() { |
| | | AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); |
| | | AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; |
| | | authorizationScopes[0] = authorizationScope; |
| | | return new ArrayList( |
| | | Collections.singleton(new SecurityReference(CommonConstant.X_ACCESS_TOKEN, authorizationScopes))); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.fasterxml.jackson.databind.module.SimpleModule; |
| | | import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Conditional; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.http.converter.HttpMessageConverter; |
| | | import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; |
| | | import org.springframework.web.cors.CorsConfiguration; |
| | | import org.springframework.web.cors.UrlBasedCorsConfigurationSource; |
| | | import org.springframework.web.filter.CorsFilter; |
| | | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; |
| | | import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; |
| | | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * Spring Boot 2.0 è§£å³è·¨åé®é¢ |
| | | * |
| | | * @Author qinfeng |
| | | * |
| | | */ |
| | | @Configuration |
| | | public class WebMvcConfiguration implements WebMvcConfigurer { |
| | | |
| | | @Value("${jeecg.path.upload}") |
| | | private String upLoadPath; |
| | | @Value("${jeecg.path.webapp}") |
| | | private String webAppPath; |
| | | @Value("${spring.resource.static-locations}") |
| | | private String staticLocations; |
| | | |
| | | /** |
| | | * éæèµæºçé
ç½® - 使å¾å¯ä»¥ä»ç£çä¸è¯»å Htmlãå¾çãè§é¢ãé³é¢ç |
| | | */ |
| | | @Override |
| | | public void addResourceHandlers(ResourceHandlerRegistry registry) { |
| | | registry.addResourceHandler("/**") |
| | | //update-begin-author:taoyan date:20211116 for: jeecg.path.webappé
ç½®æ æ #3126 |
| | | .addResourceLocations("file:" + upLoadPath + "//") |
| | | .addResourceLocations("file:" + webAppPath + "//") |
| | | //update-end-author:taoyan date:20211116 for: jeecg.path.webappé
ç½®æ æ #3126 |
| | | .addResourceLocations(staticLocations.split(",")); |
| | | } |
| | | |
| | | /** |
| | | * æ¹æ¡ä¸ï¼ é»è®¤è®¿é®æ ¹è·¯å¾è·³è½¬ doc.htmlé¡µé¢ ï¼swaggerææ¡£é¡µé¢ï¼ |
| | | * æ¹æ¡äºï¼ è®¿é®æ ¹è·¯å¾æ¹æè·³è½¬ index.htmlé¡µé¢ ï¼ç®åé¨ç½²æ¹æ¡ï¼ å¯ä»¥æå端æå
ç´æ¥æ¾å°é¡¹ç®ç webappï¼ä¸é¢çé
ç½®ï¼ |
| | | */ |
| | | @Override |
| | | public void addViewControllers(ViewControllerRegistry registry) { |
| | | registry.addViewController("/").setViewName("doc.html"); |
| | | } |
| | | |
| | | @Bean |
| | | @Conditional(CorsFilterCondition.class) |
| | | public CorsFilter corsFilter() { |
| | | final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); |
| | | final CorsConfiguration corsConfiguration = new CorsConfiguration(); |
| | | //æ¯å¦å
许请æ±å¸¦æéªè¯ä¿¡æ¯ |
| | | corsConfiguration.setAllowCredentials(true); |
| | | // å
许访é®ç客æ·ç«¯åå |
| | | corsConfiguration.addAllowedOrigin("*"); |
| | | // å
许æå¡ç«¯è®¿é®ç客æ·ç«¯è¯·æ±å¤´ |
| | | corsConfiguration.addAllowedHeader("*"); |
| | | // å
许访é®çæ¹æ³å,GET POSTç |
| | | corsConfiguration.addAllowedMethod("*"); |
| | | urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); |
| | | return new CorsFilter(urlBasedCorsConfigurationSource); |
| | | } |
| | | |
| | | /** |
| | | * æ·»å Long转json精度丢失çé
ç½® |
| | | * @Return: void |
| | | */ |
| | | @Override |
| | | public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { |
| | | MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | SimpleModule simpleModule = new SimpleModule(); |
| | | simpleModule.addSerializer(Long.class, ToStringSerializer.instance); |
| | | simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); |
| | | objectMapper.registerModule(simpleModule); |
| | | jackson2HttpMessageConverter.setObjectMapper(objectMapper); |
| | | converters.add(jackson2HttpMessageConverter); |
| | | } |
| | | |
| | | /** |
| | | * SpringBootAdminçHttptraceä¸è§äº |
| | | * https://blog.csdn.net/u013810234/article/details/110097201 |
| | | */ |
| | | @Bean |
| | | public InMemoryHttpTraceRepository getInMemoryHttpTrace(){ |
| | | return new InMemoryHttpTraceRepository(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.web.socket.server.standard.ServerEndpointExporter; |
| | | |
| | | @Configuration |
| | | public class WebSocketConfig { |
| | | /** |
| | | * 注å
¥ServerEndpointExporterï¼ |
| | | * è¿ä¸ªbeanä¼èªå¨æ³¨å使ç¨äº@ServerEndpoint注解声æçWebsocket endpoint |
| | | */ |
| | | @Bean |
| | | public ServerEndpointExporter serverEndpointExporter() { |
| | | return new ServerEndpointExporter(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | //package org.jeecg.config.mybatis; |
| | | // |
| | | //import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; |
| | | //import net.sf.jsqlparser.expression.BinaryExpression; |
| | | //import net.sf.jsqlparser.expression.Expression; |
| | | //import net.sf.jsqlparser.expression.Parenthesis; |
| | | //import net.sf.jsqlparser.expression.operators.conditional.AndExpression; |
| | | //import net.sf.jsqlparser.expression.operators.conditional.OrExpression; |
| | | //import net.sf.jsqlparser.expression.operators.relational.*; |
| | | //import net.sf.jsqlparser.schema.Column; |
| | | //import net.sf.jsqlparser.schema.Table; |
| | | //import net.sf.jsqlparser.statement.select.*; |
| | | // |
| | | //import java.util.List; |
| | | // |
| | | ///** |
| | | // * å¤åç§æ·æ¡ä»¶ |
| | | // */ |
| | | //public class JeecgTenantParser extends TenantSqlParser { |
| | | // |
| | | // /** |
| | | // * @param expression |
| | | // * @param table |
| | | // * @return |
| | | // */ |
| | | // protected Expression processTableAlias(Expression expression, Table table) { |
| | | // String tableAliasName; |
| | | // if (table.getAlias() == null) { |
| | | // tableAliasName = table.getName(); |
| | | // } else { |
| | | // tableAliasName = table.getAlias().getName(); |
| | | // } |
| | | // |
| | | // // in |
| | | // if (expression instanceof InExpression) { |
| | | // InExpression in = (InExpression) expression; |
| | | // if (in.getLeftExpression() instanceof Column) { |
| | | // setTableAliasNameForColumn((Column) in.getLeftExpression(), tableAliasName); |
| | | // } |
| | | // |
| | | // // æ¯è¾æä½ |
| | | // } else if (expression instanceof BinaryExpression) { |
| | | // BinaryExpression compare = (BinaryExpression) expression; |
| | | // if (compare.getLeftExpression() instanceof Column) { |
| | | // setTableAliasNameForColumn((Column) compare.getLeftExpression(), tableAliasName); |
| | | // } else if (compare.getRightExpression() instanceof Column) { |
| | | // setTableAliasNameForColumn((Column) compare.getRightExpression(), tableAliasName); |
| | | // } |
| | | // |
| | | // // between |
| | | // } else if (expression instanceof Between) { |
| | | // Between between = (Between) expression; |
| | | // if (between.getLeftExpression() instanceof Column) { |
| | | // setTableAliasNameForColumn((Column) between.getLeftExpression(), tableAliasName); |
| | | // } |
| | | // } |
| | | // return expression; |
| | | // } |
| | | // |
| | | // private void setTableAliasNameForColumn(Column column, String tableAliasName) { |
| | | // column.setColumnName(tableAliasName + "." + column.getColumnName()); |
| | | // } |
| | | // |
| | | // /** |
| | | // * é»è®¤æ¯æ tenant_id=1 æçäºæ¡ä»¶è¿½å |
| | | // * |
| | | // * @param currentExpression ç°æçæ¡ä»¶ï¼æ¯å¦ä½ 忥çsqlæ¥è¯¢æ¡ä»¶ |
| | | // * @param table |
| | | // * @return |
| | | // */ |
| | | // @Override |
| | | // protected Expression builderExpression(Expression currentExpression, Table table) { |
| | | // final Expression tenantExpression = this.getTenantHandler().getTenantId(true); |
| | | // Expression appendExpression; |
| | | // if (!(tenantExpression instanceof SupportsOldOracleJoinSyntax)) { |
| | | // appendExpression = new EqualsTo(); |
| | | // ((EqualsTo) appendExpression).setLeftExpression(this.getAliasColumn(table)); |
| | | // ((EqualsTo) appendExpression).setRightExpression(tenantExpression); |
| | | // } else { |
| | | // appendExpression = processTableAlias(tenantExpression, table); |
| | | // } |
| | | // if (currentExpression == null) { |
| | | // return appendExpression; |
| | | // } |
| | | // if (currentExpression instanceof BinaryExpression) { |
| | | // BinaryExpression binaryExpression = (BinaryExpression) currentExpression; |
| | | // if (binaryExpression.getLeftExpression() instanceof FromItem) { |
| | | // processFromItem((FromItem) binaryExpression.getLeftExpression()); |
| | | // } |
| | | // if (binaryExpression.getRightExpression() instanceof FromItem) { |
| | | // processFromItem((FromItem) binaryExpression.getRightExpression()); |
| | | // } |
| | | // } else if (currentExpression instanceof InExpression) { |
| | | // InExpression inExp = (InExpression) currentExpression; |
| | | // ItemsList rightItems = inExp.getRightItemsList(); |
| | | // if (rightItems instanceof SubSelect) { |
| | | // processSelectBody(((SubSelect) rightItems).getSelectBody()); |
| | | // } |
| | | // } |
| | | // if (currentExpression instanceof OrExpression) { |
| | | // return new AndExpression(new Parenthesis(currentExpression), appendExpression); |
| | | // } else { |
| | | // return new AndExpression(currentExpression, appendExpression); |
| | | // } |
| | | // } |
| | | // |
| | | // @Override |
| | | // protected void processPlainSelect(PlainSelect plainSelect, boolean addColumn) { |
| | | // FromItem fromItem = plainSelect.getFromItem(); |
| | | // if (fromItem instanceof Table) { |
| | | // Table fromTable = (Table) fromItem; |
| | | // if (!this.getTenantHandler().doTableFilter(fromTable.getName())) { |
| | | // plainSelect.setWhere(builderExpression(plainSelect.getWhere(), fromTable)); |
| | | // if (addColumn) { |
| | | // plainSelect.getSelectItems().add(new SelectExpressionItem(new Column(this.getTenantHandler().getTenantIdColumn()))); |
| | | // } |
| | | // } |
| | | // } else { |
| | | // processFromItem(fromItem); |
| | | // } |
| | | // List<Join> joins = plainSelect.getJoins(); |
| | | // if (joins != null && joins.size() > 0) { |
| | | // joins.forEach(j -> { |
| | | // processJoin(j); |
| | | // processFromItem(j.getRightItem()); |
| | | // }); |
| | | // } |
| | | // } |
| | | // |
| | | //} |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.mybatis; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.ibatis.binding.MapperMethod.ParamMap; |
| | | import org.apache.ibatis.executor.Executor; |
| | | import org.apache.ibatis.mapping.MappedStatement; |
| | | import org.apache.ibatis.mapping.SqlCommandType; |
| | | import org.apache.ibatis.plugin.*; |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.util.Date; |
| | | import java.util.Properties; |
| | | |
| | | /** |
| | | * mybatisæ¦æªå¨ï¼èªå¨æ³¨å
¥å建人ãå建æ¶é´ãä¿®æ¹äººãä¿®æ¹æ¶é´ |
| | | * @Author scott |
| | | * @Date 2019-01-19 |
| | | * |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | @Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) }) |
| | | public class MybatisInterceptor implements Interceptor { |
| | | |
| | | @Override |
| | | public Object intercept(Invocation invocation) throws Throwable { |
| | | MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; |
| | | String sqlId = mappedStatement.getId(); |
| | | log.debug("------sqlId------" + sqlId); |
| | | SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); |
| | | Object parameter = invocation.getArgs()[1]; |
| | | log.debug("------sqlCommandType------" + sqlCommandType); |
| | | |
| | | if (parameter == null) { |
| | | return invocation.proceed(); |
| | | } |
| | | if (SqlCommandType.INSERT == sqlCommandType) { |
| | | LoginUser sysUser = this.getLoginUser(); |
| | | Field[] fields = oConvertUtils.getAllFields(parameter); |
| | | for (Field field : fields) { |
| | | log.debug("------field.name------" + field.getName()); |
| | | try { |
| | | if ("createBy".equals(field.getName())) { |
| | | field.setAccessible(true); |
| | | Object local_createBy = field.get(parameter); |
| | | field.setAccessible(false); |
| | | if (local_createBy == null || local_createBy.equals("")) { |
| | | if (sysUser != null) { |
| | | // ç»å½äººè´¦å· |
| | | field.setAccessible(true); |
| | | field.set(parameter, sysUser.getUsername()); |
| | | field.setAccessible(false); |
| | | } |
| | | } |
| | | } |
| | | // 注å
¥å建æ¶é´ |
| | | if ("createTime".equals(field.getName())) { |
| | | field.setAccessible(true); |
| | | Object local_createDate = field.get(parameter); |
| | | field.setAccessible(false); |
| | | if (local_createDate == null || local_createDate.equals("")) { |
| | | field.setAccessible(true); |
| | | field.set(parameter, new Date()); |
| | | field.setAccessible(false); |
| | | } |
| | | } |
| | | //注å
¥é¨é¨ç¼ç |
| | | if ("sysOrgCode".equals(field.getName())) { |
| | | field.setAccessible(true); |
| | | Object local_sysOrgCode = field.get(parameter); |
| | | field.setAccessible(false); |
| | | if (local_sysOrgCode == null || local_sysOrgCode.equals("")) { |
| | | // è·åç»å½ç¨æ·ä¿¡æ¯ |
| | | if (sysUser != null) { |
| | | field.setAccessible(true); |
| | | field.set(parameter, sysUser.getOrgCode()); |
| | | field.setAccessible(false); |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | } |
| | | } |
| | | } |
| | | if (SqlCommandType.UPDATE == sqlCommandType) { |
| | | LoginUser sysUser = this.getLoginUser(); |
| | | Field[] fields = null; |
| | | if (parameter instanceof ParamMap) { |
| | | ParamMap<?> p = (ParamMap<?>) parameter; |
| | | //update-begin-author:scott date:20190729 for:æ¹éæ´æ°æ¥éissues/IZA3Q-- |
| | | if (p.containsKey("et")) { |
| | | parameter = p.get("et"); |
| | | } else { |
| | | parameter = p.get("param1"); |
| | | } |
| | | //update-end-author:scott date:20190729 for:æ¹éæ´æ°æ¥éissues/IZA3Q- |
| | | |
| | | //update-begin-author:scott date:20190729 for:æ´æ°æå®åæ®µæ¶æ¥é issues/#516- |
| | | if (parameter == null) { |
| | | return invocation.proceed(); |
| | | } |
| | | //update-end-author:scott date:20190729 for:æ´æ°æå®åæ®µæ¶æ¥é issues/#516- |
| | | |
| | | fields = oConvertUtils.getAllFields(parameter); |
| | | } else { |
| | | fields = oConvertUtils.getAllFields(parameter); |
| | | } |
| | | |
| | | for (Field field : fields) { |
| | | log.debug("------field.name------" + field.getName()); |
| | | try { |
| | | if ("updateBy".equals(field.getName())) { |
| | | //è·åç»å½ç¨æ·ä¿¡æ¯ |
| | | if (sysUser != null) { |
| | | // ç»å½è´¦å· |
| | | field.setAccessible(true); |
| | | field.set(parameter, sysUser.getUsername()); |
| | | field.setAccessible(false); |
| | | } |
| | | } |
| | | if ("updateTime".equals(field.getName())) { |
| | | field.setAccessible(true); |
| | | field.set(parameter, new Date()); |
| | | field.setAccessible(false); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | return invocation.proceed(); |
| | | } |
| | | |
| | | @Override |
| | | public Object plugin(Object target) { |
| | | return Plugin.wrap(target, this); |
| | | } |
| | | |
| | | @Override |
| | | public void setProperties(Properties properties) { |
| | | // TODO Auto-generated method stub |
| | | } |
| | | |
| | | //update-begin--Author:scott Date:20191213 forï¼å
³äºä½¿ç¨Quzrtz å¼å¯çº¿ç¨ä»»å¡ï¼ #465 |
| | | private LoginUser getLoginUser() { |
| | | LoginUser sysUser = null; |
| | | try { |
| | | sysUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser) SecurityUtils.getSubject().getPrincipal() : null; |
| | | } catch (Exception e) { |
| | | //e.printStackTrace(); |
| | | sysUser = null; |
| | | } |
| | | return sysUser; |
| | | } |
| | | //update-end--Author:scott Date:20191213 forï¼å
³äºä½¿ç¨Quzrtz å¼å¯çº¿ç¨ä»»å¡ï¼ #465 |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.mybatis; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.mybatis.spring.annotation.MapperScan; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; |
| | | import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; |
| | | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; |
| | | import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; |
| | | |
| | | import net.sf.jsqlparser.expression.Expression; |
| | | import net.sf.jsqlparser.expression.LongValue; |
| | | |
| | | /** |
| | | * åæ°æ®æºé
ç½®ï¼jeecg.datasource.open = falseæ¶çæï¼ |
| | | * @Author zhoujf |
| | | * |
| | | */ |
| | | @Configuration |
| | | @MapperScan(value={"org.jeecg.modules.**.mapper*"}) |
| | | public class MybatisPlusSaasConfig { |
| | | /** |
| | | * tenant_id åæ®µå |
| | | */ |
| | | private static final String TENANT_FIELD_NAME = "tenant_id"; |
| | | /** |
| | | * åªäºè¡¨éè¦åå¤ç§æ· 表éè¦æ·»å ä¸ä¸ªå段 tenant_id |
| | | */ |
| | | private static final List<String> tenantTable = new ArrayList<String>(); |
| | | |
| | | static { |
| | | tenantTable.add("demo"); |
| | | |
| | | // //è§è²ãèåãé¨é¨ |
| | | // tenantTable.add("sys_role"); |
| | | // tenantTable.add("sys_permission"); |
| | | // tenantTable.add("sys_depart"); |
| | | } |
| | | |
| | | |
| | | @Bean |
| | | public MybatisPlusInterceptor mybatisPlusInterceptor() { |
| | | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
| | | // å
add TenantLineInnerInterceptor å add PaginationInnerInterceptor |
| | | interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() { |
| | | @Override |
| | | public Expression getTenantId() { |
| | | String tenant_id = oConvertUtils.getString(TenantContext.getTenant(),"0"); |
| | | return new LongValue(tenant_id); |
| | | } |
| | | |
| | | @Override |
| | | public String getTenantIdColumn(){ |
| | | return TENANT_FIELD_NAME; |
| | | } |
| | | |
| | | // è¿å true 表示ä¸èµ°ç§æ·é»è¾ |
| | | @Override |
| | | public boolean ignoreTable(String tableName) { |
| | | for(String temp: tenantTable){ |
| | | if(temp.equalsIgnoreCase(tableName)){ |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | })); |
| | | interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); |
| | | return interceptor; |
| | | } |
| | | |
| | | // /** |
| | | // * ä¸ä¸ªçæ¬ä¼å é¤ï¼ç°å¨ä¸ºäºé¿å
ç¼ååºç°é®é¢ä¸å¾ä¸é
ç½® |
| | | // * @return |
| | | // */ |
| | | // @Bean |
| | | // public ConfigurationCustomizer configurationCustomizer() { |
| | | // return configuration -> configuration.setUseDeprecatedExecutor(false); |
| | | // } |
| | | // /** |
| | | // * mybatis-plus SQLæ§è¡æçæä»¶ãç产ç¯å¢å¯ä»¥å
³éã |
| | | // */ |
| | | // @Bean |
| | | // public PerformanceInterceptor performanceInterceptor() { |
| | | // return new PerformanceInterceptor(); |
| | | // } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.mybatis; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * å¤ç§æ· tenant_idåå¨å¨ |
| | | */ |
| | | @Slf4j |
| | | public class TenantContext { |
| | | |
| | | private static ThreadLocal<String> currentTenant = new ThreadLocal<>(); |
| | | |
| | | public static void setTenant(String tenant) { |
| | | log.debug(" setting tenant to " + tenant); |
| | | currentTenant.set(tenant); |
| | | } |
| | | |
| | | public static String getTenant() { |
| | | return currentTenant.get(); |
| | | } |
| | | |
| | | public static void clear(){ |
| | | currentTenant.remove(); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.oss; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.util.MinioUtil; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * Minioæä»¶ä¸ä¼ é
ç½®æä»¶ |
| | | */ |
| | | @Slf4j |
| | | @Configuration |
| | | public class MinioConfig { |
| | | @Value(value = "${jeecg.minio.minio_url}") |
| | | private String minioUrl; |
| | | @Value(value = "${jeecg.minio.minio_name}") |
| | | private String minioName; |
| | | @Value(value = "${jeecg.minio.minio_pass}") |
| | | private String minioPass; |
| | | @Value(value = "${jeecg.minio.bucketName}") |
| | | private String bucketName; |
| | | |
| | | @Bean |
| | | public void initMinio(){ |
| | | if(!minioUrl.startsWith("http")){ |
| | | minioUrl = "http://" + minioUrl; |
| | | } |
| | | if(!minioUrl.endsWith("/")){ |
| | | minioUrl = minioUrl.concat("/"); |
| | | } |
| | | MinioUtil.setMinioUrl(minioUrl); |
| | | MinioUtil.setMinioName(minioName); |
| | | MinioUtil.setMinioPass(minioPass); |
| | | MinioUtil.setBucketName(bucketName); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.oss; |
| | | |
| | | import org.jeecg.common.util.oss.OssBootUtil; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * äºåå¨ é
ç½® |
| | | */ |
| | | @Configuration |
| | | public class OssConfiguration { |
| | | |
| | | @Value("${jeecg.oss.endpoint}") |
| | | private String endpoint; |
| | | @Value("${jeecg.oss.accessKey}") |
| | | private String accessKeyId; |
| | | @Value("${jeecg.oss.secretKey}") |
| | | private String accessKeySecret; |
| | | @Value("${jeecg.oss.bucketName}") |
| | | private String bucketName; |
| | | @Value("${jeecg.oss.staticDomain:}") |
| | | private String staticDomain; |
| | | |
| | | |
| | | @Bean |
| | | public void initOssBootConfiguration() { |
| | | OssBootUtil.setEndPoint(endpoint); |
| | | OssBootUtil.setAccessKeyId(accessKeyId); |
| | | OssBootUtil.setAccessKeySecret(accessKeySecret); |
| | | OssBootUtil.setBucketName(bucketName); |
| | | OssBootUtil.setStaticDomain(staticDomain); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.shiro; |
| | | |
| | | import org.apache.shiro.authc.AuthenticationToken; |
| | | |
| | | /** |
| | | * @Author Scott |
| | | * @create 2018-07-12 15:19 |
| | | * @desc |
| | | **/ |
| | | public class JwtToken implements AuthenticationToken { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | private String token; |
| | | |
| | | public JwtToken(String token) { |
| | | this.token = token; |
| | | } |
| | | |
| | | @Override |
| | | public Object getPrincipal() { |
| | | return token; |
| | | } |
| | | |
| | | @Override |
| | | public Object getCredentials() { |
| | | return token; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.shiro; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.pool2.impl.GenericObjectPoolConfig; |
| | | import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; |
| | | import org.apache.shiro.mgt.DefaultSubjectDAO; |
| | | import org.apache.shiro.mgt.SecurityManager; |
| | | import org.apache.shiro.spring.LifecycleBeanPostProcessor; |
| | | import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; |
| | | import org.apache.shiro.spring.web.ShiroFilterFactoryBean; |
| | | import org.apache.shiro.web.mgt.DefaultWebSecurityManager; |
| | | import org.crazycake.shiro.IRedisManager; |
| | | import org.crazycake.shiro.RedisCacheManager; |
| | | import org.crazycake.shiro.RedisClusterManager; |
| | | import org.crazycake.shiro.RedisManager; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.jeecg.config.shiro.filters.CustomShiroFilterFactoryBean; |
| | | import org.jeecg.config.shiro.filters.JwtFilter; |
| | | import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.context.annotation.DependsOn; |
| | | import org.springframework.core.env.Environment; |
| | | import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; |
| | | import org.springframework.util.StringUtils; |
| | | import redis.clients.jedis.HostAndPort; |
| | | import redis.clients.jedis.JedisCluster; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.Filter; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * @author: Scott |
| | | * @date: 2018/2/7 |
| | | * @description: shiro é
置类 |
| | | */ |
| | | |
| | | @Slf4j |
| | | @Configuration |
| | | public class ShiroConfig { |
| | | |
| | | @Value("${jeecg.shiro.excludeUrls}") |
| | | private String excludeUrls; |
| | | @Resource |
| | | LettuceConnectionFactory lettuceConnectionFactory; |
| | | @Autowired |
| | | private Environment env; |
| | | |
| | | |
| | | /** |
| | | * Filter Chainå®ä¹è¯´æ |
| | | * |
| | | * 1ãä¸ä¸ªURLå¯ä»¥é
ç½®å¤ä¸ªFilterï¼ä½¿ç¨éå·åé |
| | | * 2ãå½è®¾ç½®å¤ä¸ªè¿æ»¤å¨æ¶ï¼å
¨é¨éªè¯éè¿ï¼æè§ä¸ºéè¿ |
| | | * 3ãé¨åè¿æ»¤å¨å¯æå®åæ°ï¼å¦permsï¼roles |
| | | */ |
| | | @Bean("shiroFilter") |
| | | public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { |
| | | CustomShiroFilterFactoryBean shiroFilterFactoryBean = new CustomShiroFilterFactoryBean(); |
| | | shiroFilterFactoryBean.setSecurityManager(securityManager); |
| | | // æ¦æªå¨ |
| | | Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>(); |
| | | if(oConvertUtils.isNotEmpty(excludeUrls)){ |
| | | String[] permissionUrl = excludeUrls.split(","); |
| | | for(String url : permissionUrl){ |
| | | filterChainDefinitionMap.put(url,"anon"); |
| | | } |
| | | } |
| | | // é
ç½®ä¸ä¼è¢«æ¦æªç龿¥ 顺åºå¤æ |
| | | filterChainDefinitionMap.put("/sys/cas/client/validateLogin", "anon"); //caséªè¯ç»å½ |
| | | filterChainDefinitionMap.put("/sys/randomImage/**", "anon"); //ç»å½éªè¯ç æ¥å£æé¤ |
| | | filterChainDefinitionMap.put("/sys/checkCaptcha", "anon"); //ç»å½éªè¯ç æ¥å£æé¤ |
| | | filterChainDefinitionMap.put("/sys/login", "anon"); //ç»å½æ¥å£æé¤ |
| | | filterChainDefinitionMap.put("/sys/mLogin", "anon"); //ç»å½æ¥å£æé¤ |
| | | filterChainDefinitionMap.put("/sys/logout", "anon"); //ç»åºæ¥å£æé¤ |
| | | filterChainDefinitionMap.put("/wx/message", "anon"); //å¾®ä¿¡æ¶æ¯æ¨é |
| | | filterChainDefinitionMap.put("/sys/thirdLogin/**", "anon"); //ç¬¬ä¸æ¹ç»å½ |
| | | filterChainDefinitionMap.put("/weekly/jeecg/hello", "anon"); //ç¬¬ä¸æ¹ç»å½ |
| | | filterChainDefinitionMap.put("/sys/getEncryptedString", "anon"); //è·åå å¯ä¸² |
| | | filterChainDefinitionMap.put("/sys/sms", "anon");//çä¿¡éªè¯ç |
| | | filterChainDefinitionMap.put("/sys/phoneLogin", "anon");//ææºç»å½ |
| | | filterChainDefinitionMap.put("/sys/user/checkOnlyUser", "anon");//æ ¡éªç¨æ·æ¯å¦åå¨ |
| | | filterChainDefinitionMap.put("/sys/user/register", "anon");//ç¨æ·æ³¨å |
| | | filterChainDefinitionMap.put("/sys/user/phoneVerification", "anon");//ç¨æ·å¿è®°å¯ç éªè¯ææºå· |
| | | filterChainDefinitionMap.put("/sys/user/passwordChange", "anon");//ç¨æ·æ´æ¹å¯ç |
| | | filterChainDefinitionMap.put("/sys/api/sendTemplateAnnouncement", "anon");//éç¥ TODO 使ç¨feginå
tokenæ¹æ¡ |
| | | filterChainDefinitionMap.put("/sys/api/sendCustomMsg", "anon");//éç¥ TODO 使ç¨feginå
tokenæ¹æ¡ |
| | | filterChainDefinitionMap.put("/auth/2step-code", "anon");//ç»å½éªè¯ç |
| | | filterChainDefinitionMap.put("/sys/common/static/**", "anon");//å¾çé¢è§ &ä¸è½½æä»¶ä¸éå¶token |
| | | filterChainDefinitionMap.put("/desk/file/static/**", "anon");//å¾çé¢è§ &ä¸è½½æä»¶ä¸éå¶token |
| | | filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdfé¢è§ |
| | | filterChainDefinitionMap.put("/generic/**", "anon");//pdfé¢è§éè¦æä»¶ |
| | | filterChainDefinitionMap.put("/", "anon"); |
| | | filterChainDefinitionMap.put("/doc.html", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.js", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.css", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.html", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.svg", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.pdf", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.jpg", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.png", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.ico", "anon"); |
| | | |
| | | // update-begin--Author:sunjianlei Date:20190813 forï¼æé¤å使 ¼å¼çåç¼ |
| | | filterChainDefinitionMap.put("/**/*.ttf", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.woff", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.woff2", "anon"); |
| | | // update-begin--Author:sunjianlei Date:20190813 forï¼æé¤å使 ¼å¼çåç¼ |
| | | |
| | | filterChainDefinitionMap.put("/druid/**", "anon"); |
| | | filterChainDefinitionMap.put("/swagger-ui.html", "anon"); |
| | | filterChainDefinitionMap.put("/swagger**/**", "anon"); |
| | | filterChainDefinitionMap.put("/webjars/**", "anon"); |
| | | filterChainDefinitionMap.put("/v2/**", "anon"); |
| | | |
| | | filterChainDefinitionMap.put("/sys/annountCement/show/**", "anon"); |
| | | |
| | | //ç§¯æ¨æ¥è¡¨æé¤ |
| | | filterChainDefinitionMap.put("/jmreport/**", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.js.map", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.css.map", "anon"); |
| | | |
| | | //æµè¯ç¤ºä¾ |
| | | filterChainDefinitionMap.put("/test/bigScreen/**", "anon"); //大屿¨¡æ¿ä¾å |
| | | //filterChainDefinitionMap.put("/test/jeecgDemo/rabbitMqClientTest/**", "anon"); //MQæµè¯ |
| | | //filterChainDefinitionMap.put("/test/jeecgDemo/html", "anon"); //模æ¿é¡µé¢ |
| | | //filterChainDefinitionMap.put("/test/jeecgDemo/redis/**", "anon"); //redisæµè¯ |
| | | |
| | | //websocketæé¤ |
| | | filterChainDefinitionMap.put("/websocket/**", "anon");//ç³»ç»éç¥åå
Œ |
| | | filterChainDefinitionMap.put("/newsWebsocket/**", "anon");//CMS模å |
| | | filterChainDefinitionMap.put("/vxeSocket/**", "anon");//JVxeTableæ çå·æ°ç¤ºä¾ |
| | | |
| | | //æ§è½çæ§ TODO åå¨å®å
¨æ¼æ´æ³é²TOEKNï¼duridè¿æ¥æ± ä¹æï¼ |
| | | filterChainDefinitionMap.put("/actuator/**", "anon"); |
| | | |
| | | // lb-docææ§ç®¡çï¼ æä»¶ä¸è½½é¢è§ |
| | | filterChainDefinitionMap.put("/fileTransfer/downloadfile/**", "anon"); |
| | | filterChainDefinitionMap.put("/fileTransfer/encryptDownload/**", "anon"); |
| | | filterChainDefinitionMap.put("/fileTransfer/encryptUpload/**", "anon"); |
| | | filterChainDefinitionMap.put("/fileTransfer/batchDownloadFile/**", "anon"); |
| | | filterChainDefinitionMap.put("/fileTransfer/preview/**", "anon"); |
| | | filterChainDefinitionMap.put("/office/IndexServlet/**", "anon"); |
| | | filterChainDefinitionMap.put("/document/test/**", "anon"); |
| | | // activiti |
| | | filterChainDefinitionMap.put("/act/**", "anon"); |
| | | filterChainDefinitionMap.put("/activiti/**", "anon"); |
| | | filterChainDefinitionMap.put("/diagram-viewer/**", "anon"); |
| | | filterChainDefinitionMap.put("/editor-app/**", "anon"); |
| | | |
| | | // æ·»å èªå·±çè¿æ»¤å¨å¹¶ä¸åå为jwt |
| | | Map<String, Filter> filterMap = new HashMap<String, Filter>(1); |
| | | //妿cloudServer为空 åè¯´ææ¯åä½ éè¦å 载跨åé
ç½®ãå¾®æå¡è·¨å忢ã |
| | | Object cloudServer = env.getProperty(CommonConstant.CLOUD_SERVER_KEY); |
| | | filterMap.put("jwt", new JwtFilter(cloudServer==null)); |
| | | shiroFilterFactoryBean.setFilters(filterMap); |
| | | // <!-- è¿æ»¤é¾å®ä¹ï¼ä»ä¸åä¸é¡ºåºæ§è¡ï¼ä¸è¬å°/**æ¾å¨æä¸ºä¸è¾¹ |
| | | filterChainDefinitionMap.put("/**", "jwt"); |
| | | |
| | | // æªææçé¢è¿åJSON |
| | | shiroFilterFactoryBean.setUnauthorizedUrl("/sys/common/403"); |
| | | shiroFilterFactoryBean.setLoginUrl("/sys/common/403"); |
| | | shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); |
| | | return shiroFilterFactoryBean; |
| | | } |
| | | |
| | | @Bean("securityManager") |
| | | public DefaultWebSecurityManager securityManager(ShiroRealm myRealm) { |
| | | DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); |
| | | securityManager.setRealm(myRealm); |
| | | |
| | | /* |
| | | * å
³éshiroèªå¸¦çsessionï¼è¯¦æ
è§ææ¡£ |
| | | * http://shiro.apache.org/session-management.html#SessionManagement- |
| | | * StatelessApplications%28Sessionless%29 |
| | | */ |
| | | DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO(); |
| | | DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator(); |
| | | defaultSessionStorageEvaluator.setSessionStorageEnabled(false); |
| | | subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator); |
| | | securityManager.setSubjectDAO(subjectDAO); |
| | | //èªå®ä¹ç¼åå®ç°,使ç¨redis |
| | | securityManager.setCacheManager(redisCacheManager()); |
| | | return securityManager; |
| | | } |
| | | |
| | | /** |
| | | * ä¸é¢çä»£ç æ¯æ·»å æ³¨è§£æ¯æ |
| | | * @return |
| | | */ |
| | | @Bean |
| | | @DependsOn("lifecycleBeanPostProcessor") |
| | | public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { |
| | | DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); |
| | | defaultAdvisorAutoProxyCreator.setProxyTargetClass(true); |
| | | /** |
| | | * è§£å³éå¤ä»£çé®é¢ github#994 |
| | | * æ·»å åç¼å¤æ ä¸å¹é
ä»»ä½Advisor |
| | | */ |
| | | defaultAdvisorAutoProxyCreator.setUsePrefix(true); |
| | | defaultAdvisorAutoProxyCreator.setAdvisorBeanNamePrefix("_no_advisor"); |
| | | return defaultAdvisorAutoProxyCreator; |
| | | } |
| | | |
| | | @Bean |
| | | public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { |
| | | return new LifecycleBeanPostProcessor(); |
| | | } |
| | | |
| | | @Bean |
| | | public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) { |
| | | AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); |
| | | advisor.setSecurityManager(securityManager); |
| | | return advisor; |
| | | } |
| | | |
| | | /** |
| | | * cacheManager ç¼å rediså®ç° |
| | | * 使ç¨çæ¯shiro-redis弿ºæä»¶ |
| | | * |
| | | * @return |
| | | */ |
| | | public RedisCacheManager redisCacheManager() { |
| | | log.info("===============(1)å建ç¼å管çå¨RedisCacheManager"); |
| | | RedisCacheManager redisCacheManager = new RedisCacheManager(); |
| | | redisCacheManager.setRedisManager(redisManager()); |
| | | //redisä¸é对ä¸åç¨æ·ç¼å(æ¤å¤çidéè¦å¯¹åºuserå®ä½ä¸çidåæ®µ,ç¨äºå¯ä¸æ è¯) |
| | | redisCacheManager.setPrincipalIdFieldName("id"); |
| | | //ç¨æ·æéä¿¡æ¯ç¼åæ¶é´ |
| | | redisCacheManager.setExpire(200000); |
| | | return redisCacheManager; |
| | | } |
| | | |
| | | /** |
| | | * é
ç½®shiro redisManager |
| | | * 使ç¨çæ¯shiro-redis弿ºæä»¶ |
| | | * |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public IRedisManager redisManager() { |
| | | log.info("===============(2)å建RedisManager,è¿æ¥Redis.."); |
| | | IRedisManager manager; |
| | | // redis åæºæ¯æï¼å¨éç¾¤ä¸ºç©ºï¼æè
éç¾¤æ æºå¨æ¶åä½¿ç¨ add by jzyadmin@163.com |
| | | if (lettuceConnectionFactory.getClusterConfiguration() == null || lettuceConnectionFactory.getClusterConfiguration().getClusterNodes().isEmpty()) { |
| | | RedisManager redisManager = new RedisManager(); |
| | | redisManager.setHost(lettuceConnectionFactory.getHostName()); |
| | | redisManager.setPort(lettuceConnectionFactory.getPort()); |
| | | redisManager.setDatabase(lettuceConnectionFactory.getDatabase()); |
| | | redisManager.setTimeout(0); |
| | | if (!StringUtils.isEmpty(lettuceConnectionFactory.getPassword())) { |
| | | redisManager.setPassword(lettuceConnectionFactory.getPassword()); |
| | | } |
| | | manager = redisManager; |
| | | }else{ |
| | | // rediséç¾¤æ¯æï¼ä¼å
使ç¨é群é
ç½® |
| | | RedisClusterManager redisManager = new RedisClusterManager(); |
| | | Set<HostAndPort> portSet = new HashSet<>(); |
| | | lettuceConnectionFactory.getClusterConfiguration().getClusterNodes().forEach(node -> portSet.add(new HostAndPort(node.getHost() , node.getPort()))); |
| | | //update-begin--Author:scott Date:20210531 forï¼ä¿®æ¹é群模å¼ä¸æªè®¾ç½®rediså¯ç çbug issues/I3QNIC |
| | | if (oConvertUtils.isNotEmpty(lettuceConnectionFactory.getPassword())) { |
| | | JedisCluster jedisCluster = new JedisCluster(portSet, 2000, 2000, 5, |
| | | lettuceConnectionFactory.getPassword(), new GenericObjectPoolConfig()); |
| | | redisManager.setPassword(lettuceConnectionFactory.getPassword()); |
| | | redisManager.setJedisCluster(jedisCluster); |
| | | } else { |
| | | JedisCluster jedisCluster = new JedisCluster(portSet); |
| | | redisManager.setJedisCluster(jedisCluster); |
| | | } |
| | | //update-end--Author:scott Date:20210531 forï¼ä¿®æ¹é群模å¼ä¸æªè®¾ç½®rediså¯ç çbug issues/I3QNIC |
| | | manager = redisManager; |
| | | } |
| | | return manager; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.shiro; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.shiro.authc.AuthenticationException; |
| | | import org.apache.shiro.authc.AuthenticationInfo; |
| | | import org.apache.shiro.authc.AuthenticationToken; |
| | | import org.apache.shiro.authc.SimpleAuthenticationInfo; |
| | | import org.apache.shiro.authz.AuthorizationInfo; |
| | | import org.apache.shiro.authz.SimpleAuthorizationInfo; |
| | | import org.apache.shiro.realm.AuthorizingRealm; |
| | | import org.apache.shiro.subject.PrincipalCollection; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.system.util.JwtUtil; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | import org.jeecg.common.util.RedisUtil; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.jeecg.config.mybatis.TenantContext; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * @Description: ç¨æ·ç»å½é´æåè·åç¨æ·ææ |
| | | * @Author: Scott |
| | | * @Date: 2019-4-23 8:13 |
| | | * @Version: 1.1 |
| | | */ |
| | | @Component |
| | | @Slf4j |
| | | public class ShiroRealm extends AuthorizingRealm { |
| | | @Lazy |
| | | @Resource |
| | | private CommonAPI commonAPI; |
| | | |
| | | @Lazy |
| | | @Resource |
| | | private RedisUtil redisUtil; |
| | | |
| | | /** |
| | | * å¿
é¡»éåæ¤æ¹æ³ï¼ä¸ç¶Shiro伿¥é |
| | | */ |
| | | @Override |
| | | public boolean supports(AuthenticationToken token) { |
| | | return token instanceof JwtToken; |
| | | } |
| | | |
| | | /** |
| | | * æéä¿¡æ¯è®¤è¯(å
æ¬è§è²ä»¥åæé)æ¯ç¨æ·è®¿é®controllerçæ¶åæè¿è¡éªè¯(redisåå¨çæ¤å¤æéä¿¡æ¯) |
| | | * è§¦åæ£æµç¨æ·æéæ¶æä¼è°ç¨æ¤æ¹æ³ï¼ä¾å¦checkRole,checkPermission |
| | | * |
| | | * @param principals èº«ä»½ä¿¡æ¯ |
| | | * @return AuthorizationInfo æéä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { |
| | | log.info("===============Shiroæé认è¯å¼å§============ [ rolesãpermissions]=========="); |
| | | String username = null; |
| | | if (principals != null) { |
| | | LoginUser sysUser = (LoginUser) principals.getPrimaryPrincipal(); |
| | | username = sysUser.getUsername(); |
| | | } |
| | | SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); |
| | | |
| | | // è®¾ç½®ç¨æ·æ¥æçè§è²éåï¼æ¯å¦âadmin,testâ |
| | | Set<String> roleSet = commonAPI.queryUserRoles(username); |
| | | System.out.println(roleSet.toString()); |
| | | info.setRoles(roleSet); |
| | | |
| | | // è®¾ç½®ç¨æ·æ¥æçæééåï¼æ¯å¦âsys:role:add,sys:user:addâ |
| | | Set<String> permissionSet = commonAPI.queryUserAuths(username); |
| | | info.addStringPermissions(permissionSet); |
| | | System.out.println(permissionSet); |
| | | log.info("===============Shiroæéè®¤è¯æå=============="); |
| | | return info; |
| | | } |
| | | |
| | | /** |
| | | * ç¨æ·ä¿¡æ¯è®¤è¯æ¯å¨ç¨æ·è¿è¡ç»å½çæ¶åè¿è¡éªè¯(ä¸åredis) |
| | | * ä¹å°±æ¯è¯´éªè¯ç¨æ·è¾å
¥çè´¦å·åå¯ç æ¯å¦æ£ç¡®ï¼é误æåºå¼å¸¸ |
| | | * |
| | | * @param auth ç¨æ·ç»å½çè´¦å·å¯ç ä¿¡æ¯ |
| | | * @return è¿åå°è£
äºç¨æ·ä¿¡æ¯ç AuthenticationInfo å®ä¾ |
| | | * @throws AuthenticationException |
| | | */ |
| | | @Override |
| | | protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken auth) throws AuthenticationException { |
| | | log.debug("===============Shiro身份认è¯å¼å§============doGetAuthenticationInfo=========="); |
| | | String token = (String) auth.getCredentials(); |
| | | if (token == null) { |
| | | log.info("ââââââââ身份认è¯å¤±è´¥ââââââââââIPå°å: "+ oConvertUtils.getIpAddrByRequest(SpringContextUtils.getHttpServletRequest())); |
| | | throw new AuthenticationException("token为空!"); |
| | | } |
| | | // æ ¡éªtokenæææ§ |
| | | LoginUser loginUser = null; |
| | | try { |
| | | loginUser = this.checkUserTokenIsEffect(token); |
| | | } catch (AuthenticationException e) { |
| | | JwtUtil.responseError(SpringContextUtils.getHttpServletResponse(),401,e.getMessage()); |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | return new SimpleAuthenticationInfo(loginUser, token, getName()); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªtokençæææ§ |
| | | * |
| | | * @param token |
| | | */ |
| | | public LoginUser checkUserTokenIsEffect(String token) throws AuthenticationException { |
| | | // è§£å¯è·å¾usernameï¼ç¨äºåæ°æ®åºè¿è¡å¯¹æ¯ |
| | | String username = JwtUtil.getUsername(token); |
| | | if (username == null) { |
| | | throw new AuthenticationException("tokenéæ³æ æ!"); |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | log.debug("âââæ ¡éªtokenæ¯å¦ææââââcheckUserTokenIsEffectâââââââ "+ token); |
| | | LoginUser loginUser = commonAPI.getUserByName(username); |
| | | if (loginUser == null) { |
| | | throw new AuthenticationException("ç¨æ·ä¸åå¨!"); |
| | | } |
| | | // å¤æç¨æ·ç¶æ |
| | | if (loginUser.getStatus() != 1) { |
| | | throw new AuthenticationException("è´¦å·å·²è¢«éå®,请è系管çå!"); |
| | | } |
| | | // æ ¡éªtokenæ¯å¦è¶
æ¶å¤±æ & æè
è´¦å·å¯ç æ¯å¦é误 |
| | | if (!jwtTokenRefresh(token, username, loginUser.getPassword())) { |
| | | throw new AuthenticationException(CommonConstant.TOKEN_IS_INVALID_MSG); |
| | | } |
| | | //update-begin-author:taoyan date:20210609 for:æ ¡éªç¨æ·çtenant_idååç«¯ä¼ è¿æ¥çæ¯å¦ä¸è´ |
| | | String userTenantIds = loginUser.getRelTenantIds(); |
| | | if(oConvertUtils.isNotEmpty(userTenantIds)){ |
| | | String contextTenantId = TenantContext.getTenant(); |
| | | if(oConvertUtils.isNotEmpty(contextTenantId) && !"0".equals(contextTenantId)){ |
| | | if(String.join(",",userTenantIds).indexOf(contextTenantId)<0){ |
| | | throw new AuthenticationException("ç¨æ·ç§æ·ä¿¡æ¯åæ´,è¯·éæ°ç»é!"); |
| | | } |
| | | } |
| | | } |
| | | //update-end-author:taoyan date:20210609 for:æ ¡éªç¨æ·çtenant_idååç«¯ä¼ è¿æ¥çæ¯å¦ä¸è´ |
| | | return loginUser; |
| | | } |
| | | |
| | | /** |
| | | * JWTTokenå·æ°çå½å¨æ ï¼å®ç°ï¼ ç¨æ·å¨çº¿æä½ä¸æçº¿åè½ï¼ |
| | | * 1ãç»å½æååå°ç¨æ·çJWTçæçTokenä½ä¸ºkãvåå¨å°cacheç¼åéé¢(è¿æ¶åkãvå¼ä¸æ ·)ï¼ç¼åæææè®¾ç½®ä¸ºJwtæææ¶é´ç2å |
| | | * 2ãå½è¯¥ç¨æ·åæ¬¡è¯·æ±æ¶ï¼éè¿JWTFilterå±å±æ ¡éªä¹åä¼è¿å
¥å°doGetAuthenticationInfoè¿è¡èº«ä»½éªè¯ |
| | | * 3ãå½è¯¥ç¨æ·è¿æ¬¡è¯·æ±jwtçæçtokenå¼å·²ç»è¶
æ¶ï¼ä½è¯¥token对åºcacheä¸çkè¿æ¯åå¨ï¼åè¡¨ç¤ºè¯¥ç¨æ·ä¸ç´å¨æä½åªæ¯JWTçtoken失æäºï¼ç¨åºä¼ç»token对åºçkæ å°çvå¼éæ°çæJWTTokenå¹¶è¦çvå¼ï¼è¯¥ç¼åçå½å¨æéæ°è®¡ç® |
| | | * 4ãå½è¯¥ç¨æ·è¿æ¬¡è¯·æ±jwtå¨çæçtokenå¼å·²ç»è¶
æ¶ï¼å¹¶å¨cacheä¸ä¸åå¨å¯¹åºçkï¼åè¡¨ç¤ºè¯¥ç¨æ·è´¦æ·ç©ºé²è¶
æ¶ï¼è¿åç¨æ·ä¿¡æ¯å·²å¤±æï¼è¯·éæ°ç»å½ã |
| | | * 注æï¼ å端请æ±Headerä¸è®¾ç½®Authorizationä¿æä¸åï¼æ ¡éªæææ§ä»¥ç¼åä¸çtoken为åã |
| | | * ç¨æ·è¿ææ¶é´ = Jwtæææ¶é´ * 2ã |
| | | * |
| | | * @param userName |
| | | * @param passWord |
| | | * @return |
| | | */ |
| | | public boolean jwtTokenRefresh(String token, String userName, String passWord) { |
| | | String cacheToken = String.valueOf(redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + token)); |
| | | if (oConvertUtils.isNotEmpty(cacheToken)) { |
| | | // æ ¡éªtokenæææ§ |
| | | if (!JwtUtil.verify(cacheToken, userName, passWord)) { |
| | | String newAuthorization = JwtUtil.sign(userName, passWord); |
| | | // 设置è¶
æ¶æ¶é´ |
| | | redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, newAuthorization); |
| | | redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME *2 / 1000); |
| | | log.debug("ââââââââââç¨æ·å¨çº¿æä½ï¼æ´æ°tokenä¿è¯ä¸æçº¿âââââââââjwtTokenRefreshâââââââ "+ token); |
| | | } |
| | | //update-begin--Author:scott Date:20191005 forï¼è§£å³æ¯æ¬¡è¯·æ±ï¼é½éåredisä¸ tokenç¼åé®é¢ |
| | | // else { |
| | | // // 设置è¶
æ¶æ¶é´ |
| | | // redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, cacheToken); |
| | | // redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000); |
| | | // } |
| | | //update-end--Author:scott Date:20191005 forï¼è§£å³æ¯æ¬¡è¯·æ±ï¼é½éåredisä¸ tokenç¼åé®é¢ |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * æ¸
é¤å½åç¨æ·çæé认è¯ç¼å |
| | | * |
| | | * @param principals æéä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public void clearCache(PrincipalCollection principals) { |
| | | super.clearCache(principals); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.shiro.filters; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.shiro.spring.web.ShiroFilterFactoryBean; |
| | | import org.apache.shiro.web.filter.InvalidRequestFilter; |
| | | import org.apache.shiro.web.filter.mgt.DefaultFilter; |
| | | import org.apache.shiro.web.filter.mgt.FilterChainManager; |
| | | import org.apache.shiro.web.filter.mgt.FilterChainResolver; |
| | | import org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver; |
| | | import org.apache.shiro.web.mgt.WebSecurityManager; |
| | | import org.apache.shiro.web.servlet.AbstractShiroFilter; |
| | | import org.apache.shiro.mgt.SecurityManager; |
| | | import org.springframework.beans.factory.BeanInitializationException; |
| | | |
| | | import javax.servlet.Filter; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * èªå®ä¹ShiroFilterFactoryBeanè§£å³èµæºä¸æè·¯å¾é®é¢ |
| | | */ |
| | | @Slf4j |
| | | public class CustomShiroFilterFactoryBean extends ShiroFilterFactoryBean { |
| | | @Override |
| | | public Class getObjectType() { |
| | | return MySpringShiroFilter.class; |
| | | } |
| | | |
| | | @Override |
| | | protected AbstractShiroFilter createInstance() throws Exception { |
| | | |
| | | SecurityManager securityManager = getSecurityManager(); |
| | | if (securityManager == null) { |
| | | String msg = "SecurityManager property must be set."; |
| | | throw new BeanInitializationException(msg); |
| | | } |
| | | |
| | | if (!(securityManager instanceof WebSecurityManager)) { |
| | | String msg = "The security manager does not implement the WebSecurityManager interface."; |
| | | throw new BeanInitializationException(msg); |
| | | } |
| | | |
| | | FilterChainManager manager = createFilterChainManager(); |
| | | //Expose the constructed FilterChainManager by first wrapping it in a |
| | | // FilterChainResolver implementation. The AbstractShiroFilter implementations |
| | | // do not know about FilterChainManagers - only resolvers: |
| | | PathMatchingFilterChainResolver chainResolver = new PathMatchingFilterChainResolver(); |
| | | chainResolver.setFilterChainManager(manager); |
| | | |
| | | Map<String, Filter> filterMap = manager.getFilters(); |
| | | Filter invalidRequestFilter = filterMap.get(DefaultFilter.invalidRequest.name()); |
| | | if (invalidRequestFilter instanceof InvalidRequestFilter) { |
| | | //æ¤å¤æ¯å
³é®,设置falseè·³è¿URLæºå¸¦ä¸æ400ï¼servletPathä¸ææ ¡éªbug |
| | | ((InvalidRequestFilter) invalidRequestFilter).setBlockNonAscii(false); |
| | | } |
| | | //Now create a concrete ShiroFilter instance and apply the acquired SecurityManager and built |
| | | //FilterChainResolver. It doesn't matter that the instance is an anonymous inner class |
| | | //here - we're just using it because it is a concrete AbstractShiroFilter instance that accepts |
| | | //injection of the SecurityManager and FilterChainResolver: |
| | | return new MySpringShiroFilter((WebSecurityManager) securityManager, chainResolver); |
| | | } |
| | | |
| | | private static final class MySpringShiroFilter extends AbstractShiroFilter { |
| | | protected MySpringShiroFilter(WebSecurityManager webSecurityManager, FilterChainResolver resolver) { |
| | | if (webSecurityManager == null) { |
| | | throw new IllegalArgumentException("WebSecurityManager property cannot be null."); |
| | | } else { |
| | | this.setSecurityManager(webSecurityManager); |
| | | if (resolver != null) { |
| | | this.setFilterChainResolver(resolver); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.shiro.filters; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.system.util.JwtUtil; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.jeecg.config.mybatis.TenantContext; |
| | | import org.jeecg.config.shiro.JwtToken; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.web.bind.annotation.RequestMethod; |
| | | |
| | | import javax.servlet.ServletRequest; |
| | | import javax.servlet.ServletResponse; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | | * @Description: é´æç»å½æ¦æªå¨ |
| | | * @Author: Scott |
| | | * @Date: 2018/10/7 |
| | | **/ |
| | | @Slf4j |
| | | public class JwtFilter extends BasicHttpAuthenticationFilter { |
| | | |
| | | /** |
| | | * é»è®¤å¼å¯è·¨å设置ï¼ä½¿ç¨åä½ï¼ |
| | | * å¾®æå¡æ
åµä¸ï¼æ¤å±æ§è®¾ç½®ä¸ºfalse |
| | | */ |
| | | private boolean allowOrigin = true; |
| | | |
| | | public JwtFilter(){} |
| | | public JwtFilter(boolean allowOrigin){ |
| | | this.allowOrigin = allowOrigin; |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡ç»å½è®¤è¯ |
| | | * |
| | | * @param request |
| | | * @param response |
| | | * @param mappedValue |
| | | * @return |
| | | */ |
| | | @Override |
| | | protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { |
| | | try { |
| | | executeLogin(request, response); |
| | | return true; |
| | | } catch (Exception e) { |
| | | JwtUtil.responseError(response,401,CommonConstant.TOKEN_IS_INVALID_MSG); |
| | | return false; |
| | | //throw new AuthenticationException("Token失æï¼è¯·éæ°ç»å½", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * |
| | | */ |
| | | @Override |
| | | protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception { |
| | | HttpServletRequest httpServletRequest = (HttpServletRequest) request; |
| | | String token = httpServletRequest.getHeader(CommonConstant.X_ACCESS_TOKEN); |
| | | // update-begin--Author:lvdandan Date:20210105 forï¼JT-355 OAè天添å tokenéªè¯ï¼è·åtokenåæ° |
| | | if (oConvertUtils.isEmpty(token)) { |
| | | token = httpServletRequest.getParameter("token"); |
| | | } |
| | | // update-end--Author:lvdandan Date:20210105 forï¼JT-355 OAè天添å tokenéªè¯ï¼è·åtokenåæ° |
| | | |
| | | JwtToken jwtToken = new JwtToken(token); |
| | | // æäº¤ç»realmè¿è¡ç»å
¥ï¼å¦æé误ä»ä¼æåºå¼å¸¸å¹¶è¢«æè· |
| | | getSubject(request, response).login(jwtToken); |
| | | // å¦ææ²¡ææåºå¼å¸¸å代表ç»å
¥æåï¼è¿åtrue |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 对跨åæä¾æ¯æ |
| | | */ |
| | | @Override |
| | | protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { |
| | | HttpServletRequest httpServletRequest = (HttpServletRequest) request; |
| | | HttpServletResponse httpServletResponse = (HttpServletResponse) response; |
| | | if(allowOrigin){ |
| | | httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin")); |
| | | httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE"); |
| | | httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers")); |
| | | //update-begin-author:scott date:20200907 for:issues/I1TAAP åå端å离ï¼shiroè¿æ»¤å¨é
ç½®å¼èµ·çè·¨åé®é¢ |
| | | // æ¯å¦å
许åéCookieï¼é»è®¤Cookieä¸å
æ¬å¨CORS请æ±ä¹ä¸ã设为trueæ¶ï¼è¡¨ç¤ºæå¡å¨å
许Cookieå
å«å¨è¯·æ±ä¸ã |
| | | httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true"); |
| | | //update-end-author:scott date:20200907 for:issues/I1TAAP åå端å离ï¼shiroè¿æ»¤å¨é
ç½®å¼èµ·çè·¨åé®é¢ |
| | | } |
| | | // è·¨åæ¶ä¼é¦å
åéä¸ä¸ªoption请æ±ï¼è¿éæä»¬ç»option请æ±ç´æ¥è¿åæ£å¸¸ç¶æ |
| | | if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) { |
| | | httpServletResponse.setStatus(HttpStatus.OK.value()); |
| | | return false; |
| | | } |
| | | //update-begin-author:taoyan date:20200708 for:å¤ç§æ·ç¨å° |
| | | String tenant_id = httpServletRequest.getHeader(CommonConstant.TENANT_ID); |
| | | TenantContext.setTenant(tenant_id); |
| | | //update-end-author:taoyan date:20200708 for:å¤ç§æ·ç¨å° |
| | | return super.preHandle(request, response); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.shiro.filters; |
| | | |
| | | import javax.servlet.ServletRequest; |
| | | import javax.servlet.ServletResponse; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import org.apache.shiro.subject.Subject; |
| | | import org.apache.shiro.web.filter.AccessControlFilter; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * @Author Scott |
| | | * @create 2019-02-01 15:56 |
| | | * @desc é´æè¯·æ±URLè®¿é®æéæ¦æªå¨ |
| | | */ |
| | | @Slf4j |
| | | public class ResourceCheckFilter extends AccessControlFilter { |
| | | |
| | | private String errorUrl; |
| | | |
| | | public String getErrorUrl() { |
| | | return errorUrl; |
| | | } |
| | | |
| | | public void setErrorUrl(String errorUrl) { |
| | | this.errorUrl = errorUrl; |
| | | } |
| | | |
| | | /** |
| | | * 表示æ¯å¦å
è®¸è®¿é® ï¼å¦æå
许访é®è¿åtrueï¼å¦åfalseï¼ |
| | | * |
| | | * @param servletRequest |
| | | * @param servletResponse |
| | | * @param o 表示å卿¦æªå¨ä¸æ¬å·éé¢çå符串 mappedValue å°±æ¯ [urls] é
ç½®ä¸æ¦æªå¨åæ°é¨å |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o) throws Exception { |
| | | Subject subject = getSubject(servletRequest, servletResponse); |
| | | String url = getPathWithinApplication(servletRequest); |
| | | log.info("å½åç¨æ·æ£å¨è®¿é®ç url => " + url); |
| | | return subject.isPermitted(url); |
| | | } |
| | | |
| | | /** |
| | | * onAccessDeniedï¼è¡¨ç¤ºå½è®¿é®æç»æ¶æ¯å¦å·²ç»å¤çäºï¼ 妿è¿å true 表示éè¦ç»§ç»å¤çï¼ å¦æè¿å false |
| | | * è¡¨ç¤ºè¯¥æ¦æªå¨å®ä¾å·²ç»å¤çäºï¼å°ç´æ¥è¿åå³å¯ã |
| | | * |
| | | * @param servletRequest |
| | | * @param servletResponse |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws Exception { |
| | | log.info("å½ isAccessAllowed è¿å false çæ¶åï¼æä¼æ§è¡ method onAccessDenied "); |
| | | |
| | | HttpServletRequest request = (HttpServletRequest) servletRequest; |
| | | HttpServletResponse response = (HttpServletResponse) servletResponse; |
| | | response.sendRedirect(request.getContextPath() + this.errorUrl); |
| | | |
| | | // è¿å false 表示已ç»å¤çï¼ä¾å¦é¡µé¢è·³è½¬å¥çï¼è¡¨ç¤ºä¸å¨èµ°ä»¥ä¸çæ¦æªå¨äºï¼å¦æè¿æé
ç½®çè¯ï¼ |
| | | return false; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.sign.interceptor; |
| | | |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; |
| | | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
| | | |
| | | /** |
| | | * ç¾å æ¦æªå¨é
ç½® |
| | | */ |
| | | @Configuration |
| | | public class SignAuthConfiguration implements WebMvcConfigurer { |
| | | public static String[] urlList = new String[] {"/sys/dict/getDictItems/*", "/sys/dict/loadDict/*", |
| | | "/sys/dict/loadDictOrderByValue/*", "/sys/dict/loadDictItem/*", "/sys/dict/loadTreeData", |
| | | "/sys/api/queryTableDictItemsByCode", "/sys/api/queryFilterTableDictInfo", "/sys/api/queryTableDictByKeys", |
| | | "/sys/api/translateDictFromTable", "/sys/api/translateDictFromTableByKeys"}; |
| | | @Bean |
| | | public SignAuthInterceptor signAuthInterceptor() { |
| | | return new SignAuthInterceptor(); |
| | | } |
| | | |
| | | @Override |
| | | public void addInterceptors(InterceptorRegistry registry) { |
| | | registry.addInterceptor(signAuthInterceptor()).addPathPatterns(urlList); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.sign.interceptor; |
| | | |
| | | |
| | | import java.io.PrintWriter; |
| | | import java.util.SortedMap; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.util.DateUtils; |
| | | import org.jeecg.config.sign.util.BodyReaderHttpServletRequestWrapper; |
| | | import org.jeecg.config.sign.util.HttpUtils; |
| | | import org.jeecg.config.sign.util.SignUtil; |
| | | import org.springframework.web.servlet.HandlerInterceptor; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * ç¾åæ¦æªå¨ |
| | | * @author qinfeng |
| | | */ |
| | | @Slf4j |
| | | public class SignAuthInterceptor implements HandlerInterceptor { |
| | | /** |
| | | * 5åéæææ |
| | | */ |
| | | private final static long MAX_EXPIRE = 5 * 60; |
| | | |
| | | @Override |
| | | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { |
| | | log.info("request URI = " + request.getRequestURI()); |
| | | HttpServletRequest requestWrapper = new BodyReaderHttpServletRequestWrapper(request); |
| | | //è·åå
¨é¨åæ°(å
æ¬URLåbodyä¸ç) |
| | | SortedMap<String, String> allParams = HttpUtils.getAllParams(requestWrapper); |
| | | //坹忰è¿è¡ç¾åéªè¯ |
| | | String headerSign = request.getHeader(CommonConstant.X_SIGN); |
| | | String timesTamp = request.getHeader(CommonConstant.X_TIMESTAMP); |
| | | |
| | | //1.æ ¡éªæ¶é´ææ¶æ¯ |
| | | try { |
| | | DateUtils.parseDate(timesTamp, "yyyyMMddHHmmss"); |
| | | } catch (Exception e) { |
| | | throw new IllegalArgumentException("ç¾åéªè¯å¤±è´¥:X-TIMESTAMPæ ¼å¼å¿
须为:yyyyMMddHHmmss"); |
| | | } |
| | | Long clientTimestamp = Long.parseLong(timesTamp); |
| | | //夿æ¶é´æ³ timestamp=201808091113 |
| | | if ((DateUtils.getCurrentTimestamp() - clientTimestamp) > MAX_EXPIRE) { |
| | | throw new IllegalArgumentException("ç¾åéªè¯å¤±è´¥:X-TIMESTAMPå·²è¿æ"); |
| | | } |
| | | |
| | | //2.æ ¡éªç¾å |
| | | boolean isSigned = SignUtil.verifySign(allParams,headerSign); |
| | | |
| | | if (isSigned) { |
| | | log.debug("Sign ç¾åéè¿ï¼Header Sign : {}",headerSign); |
| | | return true; |
| | | } else { |
| | | log.error("request URI = " + request.getRequestURI()); |
| | | log.error("Sign ç¾åæ ¡éªå¤±è´¥ï¼Header Sign : {}",headerSign); |
| | | //æ ¡éªå¤±è´¥è¿åå端 |
| | | response.setCharacterEncoding("UTF-8"); |
| | | response.setContentType("application/json; charset=utf-8"); |
| | | PrintWriter out = response.getWriter(); |
| | | Result<?> result = Result.error("Signç¾åæ ¡éªå¤±è´¥ï¼"); |
| | | out.print(JSON.toJSON(result)); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.sign.util; |
| | | |
| | | import javax.servlet.ReadListener; |
| | | import javax.servlet.ServletInputStream; |
| | | import javax.servlet.ServletRequest; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletRequestWrapper; |
| | | import java.io.*; |
| | | import java.nio.charset.Charset; |
| | | |
| | | /** |
| | | * ä¿åè¿æ»¤å¨éé¢çæµ |
| | | * |
| | | * @author jeecg |
| | | * @date 20210621 |
| | | */ |
| | | public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper { |
| | | |
| | | private final byte[] body; |
| | | |
| | | public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) { |
| | | |
| | | super(request); |
| | | String sessionStream = getBodyString(request); |
| | | body = sessionStream.getBytes(Charset.forName("UTF-8")); |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±Body |
| | | * |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public String getBodyString(final ServletRequest request) { |
| | | |
| | | StringBuilder sb = new StringBuilder(); |
| | | try (InputStream inputStream = cloneInputStream(request.getInputStream()); |
| | | BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")))) { |
| | | String line; |
| | | while ((line = reader.readLine()) != null) { |
| | | sb.append(line); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * Description: å¤å¶è¾å
¥æµ</br> |
| | | * |
| | | * @param inputStream |
| | | * @return</br> |
| | | */ |
| | | public InputStream cloneInputStream(ServletInputStream inputStream) { |
| | | |
| | | ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
| | | byte[] buffer = new byte[1024]; |
| | | int len; |
| | | try { |
| | | while ((len = inputStream.read(buffer)) > -1) { |
| | | byteArrayOutputStream.write(buffer, 0, len); |
| | | } |
| | | byteArrayOutputStream.flush(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); |
| | | } |
| | | |
| | | @Override |
| | | public BufferedReader getReader() { |
| | | |
| | | return new BufferedReader(new InputStreamReader(getInputStream())); |
| | | } |
| | | |
| | | @Override |
| | | public ServletInputStream getInputStream() { |
| | | |
| | | final ByteArrayInputStream bais = new ByteArrayInputStream(body); |
| | | return new ServletInputStream() { |
| | | |
| | | @Override |
| | | public int read() { |
| | | |
| | | return bais.read(); |
| | | } |
| | | |
| | | @Override |
| | | public boolean isFinished() { |
| | | |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isReady() { |
| | | |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public void setReadListener(ReadListener readListener) { |
| | | |
| | | } |
| | | }; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.sign.util; |
| | | |
| | | import java.io.BufferedReader; |
| | | import java.io.IOException; |
| | | import java.io.InputStreamReader; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLDecoder; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.SortedMap; |
| | | import java.util.TreeMap; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.http.HttpMethod; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | |
| | | /** |
| | | * http å·¥å
·ç±» è·å请æ±ä¸çåæ° |
| | | * |
| | | * @author jeecg |
| | | * @date 20210621 |
| | | */ |
| | | @Slf4j |
| | | public class HttpUtils { |
| | | |
| | | /** |
| | | * å°URLçåæ°åbodyåæ°åå¹¶ |
| | | * |
| | | * @author jeecg |
| | | * @date 20210621 |
| | | * @param request |
| | | */ |
| | | public static SortedMap<String, String> getAllParams(HttpServletRequest request) throws IOException { |
| | | |
| | | SortedMap<String, String> result = new TreeMap<>(); |
| | | // è·åURL䏿å带éå·çåæ°åé sys/dict/getDictItems/sys_user,realname,username |
| | | String pathVariable = request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") + 1); |
| | | if (pathVariable.contains(",")) { |
| | | log.info(" pathVariable: {}",pathVariable); |
| | | String deString = URLDecoder.decode(pathVariable, "UTF-8"); |
| | | log.info(" pathVariable decode: {}",deString); |
| | | result.put(SignUtil.xPathVariable, deString); |
| | | } |
| | | // è·åURLä¸çåæ° |
| | | Map<String, String> urlParams = getUrlParams(request); |
| | | for (Map.Entry entry : urlParams.entrySet()) { |
| | | result.put((String)entry.getKey(), (String)entry.getValue()); |
| | | } |
| | | Map<String, String> allRequestParam = new HashMap<>(16); |
| | | // get请æ±ä¸éè¦æ¿bodyåæ° |
| | | if (!HttpMethod.GET.name().equals(request.getMethod())) { |
| | | allRequestParam = getAllRequestParam(request); |
| | | } |
| | | // å°URLçåæ°åbodyåæ°è¿è¡åå¹¶ |
| | | if (allRequestParam != null) { |
| | | for (Map.Entry entry : allRequestParam.entrySet()) { |
| | | result.put((String)entry.getKey(), (String)entry.getValue()); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * å°URLçåæ°åbodyåæ°åå¹¶ |
| | | * |
| | | * @author jeecg |
| | | * @date 20210621 |
| | | * @param queryString |
| | | */ |
| | | public static SortedMap<String, String> getAllParams(String url, String queryString, byte[] body, String method) |
| | | throws IOException { |
| | | |
| | | SortedMap<String, String> result = new TreeMap<>(); |
| | | // è·åURL䏿å带éå·çåæ°åé sys/dict/getDictItems/sys_user,realname,username |
| | | String pathVariable = url.substring(url.lastIndexOf("/") + 1); |
| | | if (pathVariable.contains(",")) { |
| | | log.info(" pathVariable: {}",pathVariable); |
| | | String deString = URLDecoder.decode(pathVariable, "UTF-8"); |
| | | log.info(" pathVariable decode: {}",deString); |
| | | result.put(SignUtil.xPathVariable, deString); |
| | | } |
| | | // è·åURLä¸çåæ° |
| | | Map<String, String> urlParams = getUrlParams(queryString); |
| | | for (Map.Entry entry : urlParams.entrySet()) { |
| | | result.put((String)entry.getKey(), (String)entry.getValue()); |
| | | } |
| | | Map<String, String> allRequestParam = new HashMap<>(16); |
| | | // get请æ±ä¸éè¦æ¿bodyåæ° |
| | | if (!HttpMethod.GET.name().equals(method)) { |
| | | allRequestParam = getAllRequestParam(body); |
| | | } |
| | | // å°URLçåæ°åbodyåæ°è¿è¡åå¹¶ |
| | | if (allRequestParam != null) { |
| | | for (Map.Entry entry : allRequestParam.entrySet()) { |
| | | result.put((String)entry.getKey(), (String)entry.getValue()); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * è·å Body åæ° |
| | | * |
| | | * @date 15:04 20210621 |
| | | * @param request |
| | | */ |
| | | public static Map<String, String> getAllRequestParam(final HttpServletRequest request) throws IOException { |
| | | |
| | | BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); |
| | | String str = ""; |
| | | StringBuilder wholeStr = new StringBuilder(); |
| | | // ä¸è¡ä¸è¡ç读åbodyä½éé¢çå
å®¹ï¼ |
| | | while ((str = reader.readLine()) != null) { |
| | | wholeStr.append(str); |
| | | } |
| | | // 转åæjson对象 |
| | | return JSONObject.parseObject(wholeStr.toString(), Map.class); |
| | | } |
| | | |
| | | /** |
| | | * è·å Body åæ° |
| | | * |
| | | * @date 15:04 20210621 |
| | | * @param body |
| | | */ |
| | | public static Map<String, String> getAllRequestParam(final byte[] body) throws IOException { |
| | | if(body==null){ |
| | | return null; |
| | | } |
| | | String wholeStr = new String(body); |
| | | // 转åæjson对象 |
| | | return JSONObject.parseObject(wholeStr.toString(), Map.class); |
| | | } |
| | | |
| | | /** |
| | | * å°URL请æ±åæ°è½¬æ¢æMap |
| | | * |
| | | * @param request |
| | | */ |
| | | public static Map<String, String> getUrlParams(HttpServletRequest request) { |
| | | Map<String, String> result = new HashMap<>(16); |
| | | if (oConvertUtils.isEmpty(request.getQueryString())) { |
| | | return result; |
| | | } |
| | | String param = ""; |
| | | try { |
| | | param = URLDecoder.decode(request.getQueryString(), "utf-8"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | String[] params = param.split("&"); |
| | | for (String s : params) { |
| | | int index = s.indexOf("="); |
| | | result.put(s.substring(0, index), s.substring(index + 1)); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * å°URL请æ±åæ°è½¬æ¢æMap |
| | | * |
| | | * @param queryString |
| | | */ |
| | | public static Map<String, String> getUrlParams(String queryString) { |
| | | Map<String, String> result = new HashMap<>(16); |
| | | if (oConvertUtils.isEmpty(queryString)) { |
| | | return result; |
| | | } |
| | | String param = ""; |
| | | try { |
| | | param = URLDecoder.decode(queryString, "utf-8"); |
| | | } catch (UnsupportedEncodingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | String[] params = param.split("&"); |
| | | for (String s : params) { |
| | | int index = s.indexOf("="); |
| | | result.put(s.substring(0, index), s.substring(index + 1)); |
| | | } |
| | | return result; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.sign.util; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.jeecg.config.StaticConfig; |
| | | import org.springframework.util.DigestUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.util.SortedMap; |
| | | |
| | | /** |
| | | * ç¾åå·¥å
·ç±» |
| | | * |
| | | * @author jeecg |
| | | * @date 20210621 |
| | | */ |
| | | @Slf4j |
| | | public class SignUtil { |
| | | public static final String xPathVariable = "x-path-variable"; |
| | | |
| | | /** |
| | | * @param params |
| | | * ææç请æ±åæ°é½ä¼å¨è¿éè¿è¡æåºå å¯ |
| | | * @return éªè¯ç¾åç»æ |
| | | */ |
| | | public static boolean verifySign(SortedMap<String, String> params,String headerSign) { |
| | | if (params == null || StringUtils.isEmpty(headerSign)) { |
| | | return false; |
| | | } |
| | | // æåæ°å å¯ |
| | | String paramsSign = getParamsSign(params); |
| | | log.info("Param Sign : {}", paramsSign); |
| | | return !StringUtils.isEmpty(paramsSign) && headerSign.equals(paramsSign); |
| | | } |
| | | |
| | | /** |
| | | * @param params |
| | | * ææç请æ±åæ°é½ä¼å¨è¿éè¿è¡æåºå å¯ |
| | | * @return å¾å°ç¾å |
| | | */ |
| | | public static String getParamsSign(SortedMap<String, String> params) { |
| | | //廿 Url éçæ¶é´æ³ |
| | | params.remove("_t"); |
| | | String paramsJsonStr = JSONObject.toJSONString(params); |
| | | log.info("Param paramsJsonStr : {}", paramsJsonStr); |
| | | StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class); |
| | | String signatureSecret = staticConfig.getSignatureSecret(); |
| | | if(oConvertUtils.isEmpty(signatureSecret) || signatureSecret.contains("${")){ |
| | | throw new JeecgBootException("ç¾åå¯é¥ ${jeecg.signatureSecret} 缺å°é
ç½® ï¼ï¼"); |
| | | } |
| | | return DigestUtils.md5DigestAsHex((paramsJsonStr + signatureSecret).getBytes()).toUpperCase(); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.thirdapp; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * ç¬¬ä¸æ¹App对æ¥é
ç½® |
| | | */ |
| | | @Configuration |
| | | public class ThirdAppConfig { |
| | | |
| | | /** |
| | | * éé |
| | | */ |
| | | public final static String DINGTALK = "DINGTALK"; |
| | | /** |
| | | * ä¼ä¸å¾®ä¿¡ |
| | | */ |
| | | public final static String WECHAT_ENTERPRISE = "WECHAT_ENTERPRISE"; |
| | | |
| | | /** |
| | | * æ¯å¦å¯ç¨ ç¬¬ä¸æ¹Appå¯¹æ¥ |
| | | */ |
| | | @Value("${third-app.enabled:false}") |
| | | private boolean enabled; |
| | | |
| | | /** |
| | | * ç³»ç»ç±»åï¼ç®åæ¯æï¼WECHAT_ENTERPRISEï¼ä¼ä¸å¾®ä¿¡ï¼ï¼DINGTALK ï¼ééï¼ |
| | | */ |
| | | @Autowired |
| | | private ThirdAppTypeConfig type; |
| | | |
| | | public boolean isEnabled() { |
| | | return enabled; |
| | | } |
| | | |
| | | public ThirdAppConfig setEnabled(boolean enabled) { |
| | | this.enabled = enabled; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·åä¼ä¸å¾®ä¿¡é
ç½® |
| | | */ |
| | | public ThirdAppTypeItemVo getWechatEnterprise() { |
| | | return this.type.getWECHAT_ENTERPRISE(); |
| | | } |
| | | |
| | | /** |
| | | * è·åééé
ç½® |
| | | */ |
| | | public ThirdAppTypeItemVo getDingtalk() { |
| | | return this.type.getDINGTALK(); |
| | | } |
| | | |
| | | /** |
| | | * è·åä¼ä¸å¾®ä¿¡æ¯å¦å¯ç¨ |
| | | */ |
| | | public boolean isWechatEnterpriseEnabled() { |
| | | try { |
| | | return this.enabled && this.getWechatEnterprise().isEnabled(); |
| | | } catch (Exception e) { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åé鿝å¦å¯ç¨ |
| | | */ |
| | | public boolean isDingtalkEnabled() { |
| | | try { |
| | | return this.enabled && this.getDingtalk().isEnabled(); |
| | | } catch (Exception e) { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.thirdapp; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * ç¬¬ä¸æ¹APPé
ç½® |
| | | * |
| | | * @author sunjianlei |
| | | */ |
| | | @Data |
| | | @Configuration |
| | | @ConfigurationProperties(prefix = "third-app.type") |
| | | public class ThirdAppTypeConfig { |
| | | |
| | | /** |
| | | * 对åºä¼ä¸å¾®ä¿¡é
ç½® |
| | | */ |
| | | private ThirdAppTypeItemVo WECHAT_ENTERPRISE; |
| | | /** |
| | | * 对åºééé
ç½® |
| | | */ |
| | | private ThirdAppTypeItemVo DINGTALK; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.thirdapp; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * ç¬¬ä¸æ¹Appå¯¹æ¥ |
| | | */ |
| | | @Data |
| | | public class ThirdAppTypeItemVo { |
| | | |
| | | /** |
| | | * æ¯å¦å¯ç¨ |
| | | */ |
| | | private boolean enabled; |
| | | /** |
| | | * åºç¨Key |
| | | */ |
| | | private String clientId; |
| | | /** |
| | | * åºç¨Secret |
| | | */ |
| | | private String clientSecret; |
| | | /** |
| | | * åºç¨ID |
| | | */ |
| | | private String agentId; |
| | | /** |
| | | * ç®åä»
ä¼ä¸å¾®ä¿¡ç¨å°ï¼èªå»ºåºç¨Secret |
| | | */ |
| | | private String agentAppSecret; |
| | | |
| | | public int getAgentIdInt() { |
| | | return Integer.parseInt(agentId); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.modules.base.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.InterceptorIgnore; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import org.jeecg.common.api.dto.LogDTO; |
| | | |
| | | public interface BaseCommonMapper { |
| | | |
| | | /** |
| | | * ä¿åæ¥å¿ |
| | | * @param dto |
| | | */ |
| | | //@SqlParser(filter=true) |
| | | @InterceptorIgnore(illegalSql = "true", tenantLine = "true") |
| | | void saveLog(@Param("dto")LogDTO dto); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="org.jeecg.modules.base.mapper.BaseCommonMapper"> |
| | | |
| | | <!-- ä¿åæ¥å¿11 --> |
| | | <insert id="saveLog" parameterType="Object"> |
| | | insert into sys_log (id, log_type, log_content, method, operate_type, request_param, ip, userid, username, cost_time, create_time) |
| | | values( |
| | | #{dto.id,jdbcType=VARCHAR}, |
| | | #{dto.logType,jdbcType=INTEGER}, |
| | | #{dto.logContent,jdbcType=VARCHAR}, |
| | | #{dto.method,jdbcType=VARCHAR}, |
| | | #{dto.operateType,jdbcType=INTEGER}, |
| | | #{dto.requestParam,jdbcType=VARCHAR}, |
| | | #{dto.ip,jdbcType=VARCHAR}, |
| | | #{dto.userid,jdbcType=VARCHAR}, |
| | | #{dto.username,jdbcType=VARCHAR}, |
| | | #{dto.costTime,jdbcType=BIGINT}, |
| | | #{dto.createTime,jdbcType=TIMESTAMP} |
| | | ) |
| | | </insert> |
| | | |
| | | </mapper> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.modules.base.service; |
| | | |
| | | import org.jeecg.common.api.dto.LogDTO; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | |
| | | /** |
| | | * commonæ¥å£ |
| | | */ |
| | | public interface BaseCommonService { |
| | | |
| | | /** |
| | | * ä¿åæ¥å¿ |
| | | * @param logDTO |
| | | */ |
| | | void addLog(LogDTO logDTO); |
| | | |
| | | /** |
| | | * ä¿åæ¥å¿ |
| | | * @param LogContent |
| | | * @param logType |
| | | * @param operateType |
| | | * @param user |
| | | */ |
| | | void addLog(String LogContent, Integer logType, Integer operateType, LoginUser user); |
| | | |
| | | /** |
| | | * ä¿åæ¥å¿ |
| | | * @param LogContent |
| | | * @param logType |
| | | * @param operateType |
| | | */ |
| | | void addLog(String LogContent, Integer logType, Integer operateType); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.modules.base.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.jeecg.common.api.dto.LogDTO; |
| | | import org.jeecg.common.constant.CacheConstant; |
| | | import org.jeecg.modules.base.mapper.BaseCommonMapper; |
| | | import org.jeecg.modules.base.service.BaseCommonService; |
| | | import org.jeecg.common.system.vo.LoginUser; |
| | | import org.jeecg.common.system.vo.SysPermissionDataRuleModel; |
| | | import org.jeecg.common.system.vo.SysUserCacheInfo; |
| | | import org.jeecg.common.util.IPUtils; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.AntPathMatcher; |
| | | import org.springframework.util.PathMatcher; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.*; |
| | | |
| | | @Service |
| | | @Slf4j |
| | | public class BaseCommonServiceImpl implements BaseCommonService { |
| | | |
| | | @Resource |
| | | private BaseCommonMapper baseCommonMapper; |
| | | |
| | | @Override |
| | | public void addLog(LogDTO logDTO) { |
| | | if(oConvertUtils.isEmpty(logDTO.getId())){ |
| | | logDTO.setId(String.valueOf(IdWorker.getId())); |
| | | } |
| | | //ä¿åæ¥å¿ï¼å¼å¸¸æè·å¤çï¼é²æ¢æ°æ®å¤ªå¤§åå¨å¤±è´¥ï¼å¯¼è´ä¸å¡å¤±è´¥ï¼JT-238 |
| | | try { |
| | | baseCommonMapper.saveLog(logDTO); |
| | | } catch (Exception e) { |
| | | log.warn(" LogContent length : "+logDTO.getLogContent().length()); |
| | | log.warn(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void addLog(String logContent, Integer logType, Integer operatetype, LoginUser user) { |
| | | LogDTO sysLog = new LogDTO(); |
| | | sysLog.setId(String.valueOf(IdWorker.getId())); |
| | | //注解ä¸çæè¿°,æä½æ¥å¿å
容 |
| | | sysLog.setLogContent(logContent); |
| | | sysLog.setLogType(logType); |
| | | sysLog.setOperateType(operatetype); |
| | | try { |
| | | //è·årequest |
| | | HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); |
| | | //设置IPå°å |
| | | sysLog.setIp(IPUtils.getIpAddr(request)); |
| | | } catch (Exception e) { |
| | | sysLog.setIp("127.0.0.1"); |
| | | } |
| | | //è·åç»å½ç¨æ·ä¿¡æ¯ |
| | | if(user==null){ |
| | | try { |
| | | user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
| | | } catch (Exception e) { |
| | | //e.printStackTrace(); |
| | | } |
| | | } |
| | | if(user!=null){ |
| | | sysLog.setUserid(user.getUsername()); |
| | | sysLog.setUsername(user.getRealname()); |
| | | } |
| | | sysLog.setCreateTime(new Date()); |
| | | //ä¿åæ¥å¿ï¼å¼å¸¸æè·å¤çï¼é²æ¢æ°æ®å¤ªå¤§åå¨å¤±è´¥ï¼å¯¼è´ä¸å¡å¤±è´¥ï¼JT-238 |
| | | try { |
| | | baseCommonMapper.saveLog(sysLog); |
| | | } catch (Exception e) { |
| | | log.warn(" LogContent length : "+sysLog.getLogContent().length()); |
| | | log.warn(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void addLog(String logContent, Integer logType, Integer operateType) { |
| | | addLog(logContent, logType, operateType, null); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "86":{ |
| | | "110000":"å京å¸", |
| | | "120000":"天津å¸", |
| | | "130000":"æ²³åç", |
| | | "140000":"山西ç", |
| | | "150000":"å
èå¤èªæ²»åº", |
| | | "210000":"è¾½å®ç", |
| | | "220000":"åæç", |
| | | "230000":"é»é¾æ±ç", |
| | | "310000":"䏿µ·å¸", |
| | | "320000":"æ±èç", |
| | | "330000":"æµæ±ç", |
| | | "340000":"å®å¾½ç", |
| | | "350000":"ç¦å»ºç", |
| | | "360000":"æ±è¥¿ç", |
| | | "370000":"å±±ä¸ç", |
| | | "410000":"æ²³åç", |
| | | "420000":"æ¹åç", |
| | | "430000":"æ¹åç", |
| | | "440000":"广ä¸ç", |
| | | "450000":"广西壮æèªæ²»åº", |
| | | "460000":"æµ·åç", |
| | | "500000":"éåºå¸", |
| | | "510000":"åå·ç", |
| | | "520000":"è´µå·ç", |
| | | "530000":"äºåç", |
| | | "540000":"西èèªæ²»åº", |
| | | "610000":"é西ç", |
| | | "620000":"çèç", |
| | | "630000":"éæµ·ç", |
| | | "640000":"å®å¤åæèªæ²»åº", |
| | | "650000":"æ°çç»´å¾å°èªæ²»åº", |
| | | "710000":"å°æ¹¾ç", |
| | | "910000":"港澳" |
| | | }, |
| | | "110000":{"110100":"å¸è¾åº"}, |
| | | "110100":{"110101":"ä¸ååº","110102":"西ååº","110105":"æé³åº","110106":"丰å°åº","110107":"ç³æ¯å±±åº","110108":"æµ·æ·åº","110109":"é¨å¤´æ²åº","110111":"æ¿å±±åº","110112":"éå·åº","110113":"顺ä¹åº","110114":"æå¹³åº","110115":"大å
´åº","110116":"ææåº","110117":"平谷åº","110118":"å¯äºåº","110119":"å»¶åºåº"}, |
| | | "120000":{"120100":"å¸è¾åº"}, |
| | | "120100":{"120101":"åå¹³åº","120102":"æ²³ä¸åº","120103":"河西åº","120104":"åå¼åº","120105":"æ²³ååº","120106":"红桥åº","120110":"ä¸ä¸½åº","120111":"西éåº","120112":"æ´¥ååº","120113":"åè¾°åº","120114":"æ¦æ¸
åº","120115":"å®å»åº","120116":"滨海æ°åº","120117":"宿²³åº","120118":"éæµ·åº","120119":"èå·åº"},"130000":{"130100":"ç³å®¶åºå¸","130200":"åå±±å¸","130300":"秦çå²å¸","130400":"é¯é¸å¸","130500":"é¢å°å¸","130600":"ä¿å®å¸","130700":"å¼ å®¶å£å¸","130800":"æ¿å¾·å¸","130900":"æ²§å·å¸","131000":"å»åå¸","131100":"è¡¡æ°´å¸","139001":"å®å·å¸","139002":"è¾éå¸"},"130100":{"130102":"é¿å®åº","130104":"桥西åº","130105":"æ°ååº","130107":"äºéç¿åº","130108":"è£ååº","130109":"èååº","130110":"鹿æ³åº","130111":"æ ¾ååº","130121":"äºéå¿","130123":"æ£å®å¿","130125":"è¡åå¿","130126":"çµå¯¿å¿","130127":"é«éå¿","130128":"深泽å¿","130129":"èµçå¿","130130":"æ æå¿","130131":"平山å¿","130132":"å
æ°å¿","130133":"èµµå¿","130183":"æå·å¸","130184":"æ°ä¹å¸"},"130200":{"130202":"è·¯ååº","130203":"è·¯ååº","130204":"å¤å¶åº","130205":"å¼å¹³åº","130207":"丰ååº","130208":"丰润åº","130209":"æ¹å¦ç¸åº","130223":"滦å¿","130224":"滦åå¿","130225":"ä¹äºå¿","130227":"è¿è¥¿å¿","130229":"çç°å¿","130281":"éµåå¸","130283":"è¿å®å¸"},"130300":{"130302":"海港åº","130303":"山海å
³åº","130304":"åæ´æ²³åº","130306":"æå®åº","130321":"é龿»¡æèªæ²»å¿","130322":"æé»å¿","130324":"å¢é¾å¿"},"130400":{"130402":"é¯å±±åº","130403":"ä¸å°åº","130404":"å¤å
´åº","130406":"å³°å³°ç¿åº","130421":"é¯é¸å¿","130423":"临漳å¿","130424":"æå®å¿","130425":"大åå¿","130426":"æ¶å¿","130427":"ç£å¿","130428":"è¥ä¹¡å¿","130429":"永年å¿","130430":"é±å¿","130431":"鸡泽å¿","130432":"广平å¿","130433":"é¦é¶å¿","130434":"éå¿","130435":"æ²å¨å¿","130481":"æ¦å®å¸"},"130500":{"130502":"æ¡¥ä¸åº","130503":"桥西åº","130521":"é¢å°å¿","130522":"临åå¿","130523":"å
ä¸å¿","130524":"æä¹¡å¿","130525":"éå°§å¿","130526":"ä»»å¿","130527":"ååå¿","130528":"宿å¿","130529":"巨鹿å¿","130530":"æ°æ²³å¿","130531":"广å®å¿","130532":"平乡å¿","130533":"å¨å¿","130534":"æ¸
æ²³å¿","130535":"临西å¿","130581":"å宫å¸","130582":"æ²æ²³å¸"},"130600":{"130602":"ç«ç§åº","130606":"è²æ± åº","130607":"满ååº","130608":"æ¸
èåº","130609":"徿°´åº","130623":"æ¶æ°´å¿","130624":"éå¹³å¿","130626":"å®å
´å¿","130627":"åå¿","130628":"é«é³å¿","130629":"容åå¿","130630":"æ¶æºå¿","130631":"æé½å¿","130632":"宿°å¿","130633":"æå¿","130634":"æ²é³å¿","130635":"è ¡å¿","130636":"顺平å¿","130637":"åéå¿","130638":"éå¿","130681":"æ¶¿å·å¸","130683":"å®å½å¸","130684":"é«ç¢åºå¸"},"130700":{"130702":"æ¡¥ä¸åº","130703":"桥西åº","130705":"宣ååº","130706":"ä¸è±ååº","130708":"ä¸å
¨åº","130709":"å´ç¤¼åº","130722":"å¼ åå¿","130723":"康ä¿å¿","130724":"æ²½æºå¿","130725":"å°ä¹å¿","130726":"èå¿","130727":"é³åå¿","130728":"æå®å¿","130730":"ææ¥å¿","130731":"涿鹿å¿","130732":"赤åå¿"},"130800":{"130802":"åæ¡¥åº","130803":"åæ»¦åº","130804":"é¹°æè¥åç¿åº","130821":"æ¿å¾·å¿","130822":"å
´éå¿","130823":"å¹³æ³å¿","130824":"滦平å¿","130825":"éåå¿","130826":"䏰宿»¡æèªæ²»å¿","130827":"宽忻¡æèªæ²»å¿","130828":"å´åºæ»¡æèå¤æèªæ²»å¿"},"130900":{"130902":"æ°ååº","130903":"è¿æ²³åº","130921":"æ²§å¿","130922":"éå¿","130923":"ä¸å
å¿","130924":"æµ·å
´å¿","130925":"çå±±å¿","130926":"èå®å¿","130927":"åç®å¿","130928":"å´æ¡¥å¿","130929":"ç®å¿","130930":"åæåæèªæ²»å¿","130981":"æ³å¤´å¸","130982":"ä»»ä¸å¸","130983":"é»éª
å¸","130984":"æ²³é´å¸"},"131000":{"131002":"宿¬¡åº","131003":"广é³åº","131022":"åºå®å¿","131023":"æ°¸æ¸
å¿","131024":"馿²³å¿","131025":"大åå¿","131026":"æå®å¿","131028":"大ååæèªæ²»å¿","131081":"é¸å·å¸","131082":"䏿²³å¸"},"131100":{"131102":"æ¡ååº","131103":"åå·åº","131121":"æ£å¼ºå¿","131122":"æ¦éå¿","131123":"æ¦å¼ºå¿","131124":"饶é³å¿","131125":"å®å¹³å¿","131126":"æ
åå¿","131127":"æ¯å¿","131128":"éåå¿","131182":"æ·±å·å¸"},"139001":{"1390011":"çæ©é","13900111":"é¢éé","139001001":"åååºè¡é","139001002":"åååºè¡é","139001003":"西ååºè¡é","139001004":"é¿å®è·¯è¡é","139001101":"æ¸
é£åºé","139001102":"åºæé","139001103":"ç è·¯é","139001104":"ææåºé","139001105":"å®ååºé","139001106":"ä¸äºé","139001107":"大è¾åºé","139001108":"䏿ºé","139001109":"é«è¬é","139001111":"æäº²é¡¾é","139001112":"åä½é","139001113":"å¼å
é","139001115":"卿é","139001116":"æ¯å¢é","139001203":"ä¸çæ¥ä¹¡","139001204":"å·å¤´åºåæä¹¡","139001205":"æ¨å®¶åºä¹¡","139001206":"大鹿åºä¹¡","139001208":"西å乡"},"139002":{"1390021":"è¾éé","1390022":"天宫è¥ä¹¡","1390025":"è¾éç»æµå¼ååº","139002101":"æ§åé","139002102":"å¼ å¤åºé","139002103":"ä½ä¼¯é","139002104":"æ°å头é","139002105":"æ°åé","139002106":"åæºé±é","139002107":"çå£é","139002201":"åè¥ä¹¡","139002202":"马åºä¹¡","139002203":"åç¦äºä¹¡","139002204":"ç°å®¶åºä¹¡","139002205":"ä¸éå¢ä¹¡","139002206":"å°è¾åºä¹¡"},"140000":{"140100":"太åå¸","140200":"大åå¸","140300":"鳿³å¸","140400":"é¿æ²»å¸","140500":"æåå¸","140600":"æå·å¸","140700":"æä¸å¸","140800":"è¿åå¸","140900":"å¿»å·å¸","141000":"临汾å¸","141100":"忢å¸"},"140100":{"140105":"å°åºåº","140106":"è¿æ³½åº","140107":"æè±å²åº","140108":"å°èåªåº","140109":"䏿æåº","140110":"ææºåº","140121":"æ¸
å¾å¿","140122":"鳿²å¿","140123":"å¨ç¦å¿","140181":"å¤äº¤å¸"},"140200":{"140202":"ååº","140203":"ç¿åº","140211":"åéåº","140212":"æ°è£åº","140221":"é³é«å¿","140222":"天éå¿","140223":"广çµå¿","140224":"çµä¸å¿","140225":"æµæºå¿","140226":"å·¦äºå¿","140227":"大åå¿"},"140300":{"140302":"ååº","140303":"ç¿åº","140311":"éåº","140321":"å¹³å®å¿","140322":"çå¿"},"140400":{"140402":"ååº","140411":"éåº","140421":"é¿æ²»å¿","140423":"è¥å£å¿","140424":"屯çå¿","140425":"平顺å¿","140426":"é»åå¿","140427":"壶å
³å¿","140428":"é¿åå¿","140429":"æ¦ä¹¡å¿","140430":"æ²å¿","140431":"æ²æºå¿","140481":"æ½åå¸"},"140500":{"140502":"ååº","140521":"æ²æ°´å¿","140522":"é³åå¿","140524":"éµå·å¿","140525":"æ³½å·å¿","140581":"é«å¹³å¸"},"140600":{"140602":"æååº","140603":"å¹³é²åº","140621":"å±±é´å¿","140622":"åºå¿","140623":"å³çå¿","140624":"æä»å¿"},"140700":{"140702":"æ¦æ¬¡åº","140721":"æ¦ç¤¾å¿","140722":"å·¦æå¿","140723":"å顺å¿","140724":"æé³å¿","140725":"寿é³å¿","140726":"太谷å¿","140727":"ç¥å¿","140728":"å¹³é¥å¿","140729":"çµç³å¿","140781":"ä»ä¼å¸"},"140800":{"140802":"çæ¹åº","140821":"临çå¿","140822":"ä¸è£å¿","140823":"é»åå¿","140824":"稷山å¿","140825":"æ°ç»å¿","140826":"ç»å¿","140827":"壿²å¿","140828":"å¤å¿","140829":"å¹³éå¿","140830":"è®åå¿","140881":"æ°¸æµå¸","140882":"河津å¸"},"140900":{"140902":"å¿»åºåº","140921":"å®è¥å¿","140922":"äºå°å¿","140923":"代å¿","140924":"ç¹å³å¿","140925":"宿¦å¿","140926":"éä¹å¿","140927":"ç¥æ± å¿","140928":"äºå¯¨å¿","140929":"å²¢å²å¿","140930":"æ²³æ²å¿","140931":"ä¿å¾·å¿","140932":"åå
³å¿","140981":"åå¹³å¸"}, |
| | | "141000":{"141002":"å°§é½åº","141021":"æ²æ²å¿","141022":"翼åå¿","141023":"è¥æ±¾å¿","141024":"æ´ªæ´å¿","141025":"å¤å¿","141026":"宿³½å¿","141027":"浮山å¿","141028":"åå¿","141029":"乡å®å¿","141030":"大å®å¿","141031":"é°å¿","141032":"æ°¸åå¿","141033":"è²å¿","141034":"汾西å¿","141081":"侯马å¸","141082":"éå·å¸"},"141100":{"141102":"离ç³åº","141121":"ææ°´å¿","141122":"交åå¿","141123":"å
´å¿","141124":"临å¿","141125":"æ³æå¿","141126":"ç³æ¥¼å¿","141127":"å²å¿","141128":"æ¹å±±å¿","141129":"ä¸é³å¿","141130":"交å£å¿","141181":"åä¹å¸","141182":"æ±¾é³å¸"},"150000":{"150100":"å¼å浩ç¹å¸","150200":"å
头å¸","150300":"乿µ·å¸","150400":"赤峰å¸","150500":"éè¾½å¸","150600":"éå°å¤æ¯å¸","150700":"å¼ä¼¦è´å°å¸","150800":"巴彦æ·å°å¸","150900":"ä¹å
°å¯å¸å¸","152200":"å
´å®ç","152500":"顿éåç","152900":"é¿æåç"},"150100":{"150102":"æ°ååº","150103":"åæ°åº","150104":"çæ³åº","150105":"èµç½åº","150121":"åé»ç¹å·¦æ","150122":"æå
æå¿","150123":"åææ ¼å°å¿","150124":"æ¸
æ°´æ²³å¿","150125":"æ¦å·å¿"},"150200":{"150202":"䏿²³åº","150203":"æé½ä»åº","150204":"éå±±åº","150205":"ç³æåº","150206":"ç½äºéåç¿åº","150207":"ä¹ååº","150221":"åé»ç¹å³æ","150222":"åºé³å¿","150223":"è¾¾å°ç½èæå®èåæ"},"150300":{"150302":"æµ·åæ¹¾åº","150303":"æµ·ååº","150304":"ä¹è¾¾åº"},"150400":{"150402":"红山åº","150403":"å
å®å±±åº","150404":"æ¾å±±åº","150421":"é¿é²ç§å°æ²æ","150422":"å·´æå·¦æ","150423":"å·´æå³æ","150424":"æè¥¿å¿","150425":"å
ä»å
è
¾æ","150426":"ç¿çç¹æ","150428":"ååæ²æ","150429":"å®åå¿","150430":"ææ±æ"},"150500":{"150502":"ç§å°æ²åº","150521":"ç§å°æ²å·¦ç¿¼ä¸æ","150522":"ç§å°æ²å·¦ç¿¼åæ","150523":"å¼é²å¿","150524":"åºä¼¦æ","150525":"奿¼æ","150526":"æé²ç¹æ","150581":"éæéåå¸"},"150600":{"150602":"ä¸èåº","150603":"康巴ä»åº","150621":"è¾¾æç¹æ","150622":"åæ ¼å°æ","150623":"éæå
åæ","150624":"éæå
æ","150625":"æé¦æ","150626":"ä¹å®¡æ","150627":"ä¼ééæ´æ"},"150700":{"150702":"æµ·æå°åº","150703":"æèµè¯ºå°åº","150721":"é¿è£æ","150722":"è«åè¾¾ç¦è¾¾æ¡å°æèªæ²»æ","150723":"é伦æ¥èªæ²»æ","150724":"鿏©å
æèªæ²»æ","150725":"éå·´å°èæ","150726":"æ°å·´å°èå·¦æ","150727":"æ°å·´å°è峿","150781":"满洲éå¸","150782":"çå
ç³å¸","150783":"æå
°å±¯å¸","150784":"é¢å°å¤çº³å¸","150785":"æ ¹æ²³å¸"},"150800":{"150802":"临河åº","150821":"äºåå¿","150822":"磴å£å¿","150823":"乿ç¹åæ","150824":"乿ç¹ä¸æ","150825":"乿ç¹åæ","150826":"æé¦åæ"},"150900":{"150902":"éå®åº","150921":"åèµå¿","150922":"åå¾·å¿","150923":"åé½å¿","150924":"å
´åå¿","150925":"ååå¿","150926":"å¯åå°å³ç¿¼åæ","150927":"å¯åå°å³ç¿¼ä¸æ","150928":"å¯åå°å³ç¿¼åæ","150929":"ååçæ","150981":"丰éå¸"},"152200":{"152201":"ä¹å
°æµ©ç¹å¸","152202":"é¿å°å±±å¸","152221":"ç§å°æ²å³ç¿¼åæ","152222":"ç§å°æ²å³ç¿¼ä¸æ","152223":"æèµç¹æ","152224":"çªæ³å¿"},"152500":{"152501":"äºè¿æµ©ç¹å¸","152502":"é¡ææµ©ç¹å¸","152522":"é¿å·´åæ","152523":"èå°¼ç¹å·¦æ","152524":"èå°¼ç¹å³æ","152525":"ä¸ä¹ç ç©æ²æ","152526":"西ä¹ç ç©æ²æ","152527":"太ä»å¯ºæ","152528":"é¶é»æ","152529":"æ£é¶ç½æ","152530":"æ£èæ","152531":"å¤ä¼¦å¿"},"152900":{"152921":"é¿æåå·¦æ","152922":"é¿æå峿","152923":"颿µçº³æ"},"210000":{"210100":"æ²é³å¸","210200":"大è¿å¸","210300":"éå±±å¸","210400":"æé¡ºå¸","210500":"æ¬æºªå¸","210600":"丹ä¸å¸","210700":"é¦å·å¸","210800":"è¥å£å¸","210900":"éæ°å¸","211000":"è¾½é³å¸","211100":"çé¦å¸","211200":"éå²å¸","211300":"æé³å¸","211400":"è«è¦å²å¸"},"210100":{"210102":"åå¹³åº","210103":"æ²æ²³åº","210104":"大ä¸åº","210105":"çå§åº","210106":"é西åº","210111":"è家屯åº","210112":"æµååº","210113":"æ²åæ°åº","210114":"äºæ´ªåº","210115":"è¾½ä¸åº","210123":"康平å¿","210124":"æ³åºå¿","210181":"æ°æ°å¸"},"210200":{"210202":"ä¸å±±åº","210203":"西å²åº","210204":"æ²æ²³å£åº","210211":"çäºååº","210212":"æ
顺å£åº","210213":"éå·åº","210214":"æ®å
°åºåº","210224":"é¿æµ·å¿","210281":"ç¦æ¿åºå¸","210283":"åºæ²³å¸"},"210300":{"210302":"éä¸åº","210303":"é西åº","210304":"ç«å±±åº","210311":"åå±±åº","210321":"å°å®å¿","210323":"岫岩满æèªæ²»å¿","210381":"æµ·åå¸"},"210400":{"210402":"æ°æåº","210403":"䏿´²åº","210404":"æè±åº","210411":"顺ååº","210421":"æé¡ºå¿","210422":"æ°å®¾æ»¡æèªæ²»å¿","210423":"æ¸
åæ»¡æèªæ²»å¿"},"210500":{"210502":"平山åº","210503":"溪æ¹åº","210504":"æå±±åº","210505":"åè¬åº","210521":"æ¬æºªæ»¡æèªæ²»å¿","210522":"æ¡ä»æ»¡æèªæ²»å¿"},"210600":{"210602":"å
å®åº","210603":"æ¯å
´åº","210604":"æ¯å®åº","210624":"å®½ç¸æ»¡æèªæ²»å¿","210681":"䏿¸¯å¸","210682":"å¤åå¸"},"210700":{"210702":"å¤å¡åº","210703":"åæ²³åº","210711":"太ååº","210726":"é»å±±å¿","210727":"ä¹å¿","210781":"åæµ·å¸","210782":"åéå¸"},"210800":{"210802":"ç«ååº","210803":"西å¸åº","210804":"é²
é±¼ååº","210811":"èè¾¹åº","210881":"çå·å¸","210882":"å¤§ç³æ¡¥å¸"},"210900":{"210902":"æµ·å·åº","210903":"æ°é±åº","210904":"太平åº","210905":"æ¸
æ²³é¨åº","210911":"ç»æ²³åº","210921":"éæ°èå¤æèªæ²»å¿","210922":"å½°æ¦å¿"},"211000":{"211002":"ç½å¡åº","211003":"æå£åº","211004":"å®ä¼åº","211005":"å¼é¿å²åº","211011":"å¤ªåæ²³åº","211021":"è¾½é³å¿","211081":"ç¯å¡å¸"},"211100":{"211102":"åå°ååº","211103":"å
´éå°åº","211104":"大洼åº","211122":"çå±±å¿"},"211200":{"211202":"é¶å·åº","211204":"æ¸
æ²³åº","211221":"éå²å¿","211223":"西丰å¿","211224":"æå¾å¿","211281":"è°å
µå±±å¸","211282":"å¼åå¸"},"211300":{"211302":"åå¡åº","211303":"é¾ååº","211321":"æé³å¿","211322":"建平å¿","211324":"ååæ²å·¦ç¿¼èå¤æèªæ²»å¿","211381":"å票å¸","211382":"åæºå¸"},"211400":{"211402":"è¿å±±åº","211403":"龿¸¯åº","211404":"å票åº","211421":"绥ä¸å¿","211422":"建æå¿","211481":"å
´åå¸"},"220000":{"220100":"é¿æ¥å¸","220200":"åæå¸","220300":"åå¹³å¸","220400":"è¾½æºå¸","220500":"éåå¸","220600":"ç½å±±å¸","220700":"æ¾åå¸","220800":"ç½åå¸","222400":"å»¶è¾¹æé²æèªæ²»å·"},"220100":{"220102":"åå
³åº","220103":"宽ååº","220104":"æé³åº","220105":"äºéåº","220106":"绿ååº","220112":"åé³åº","220113":"ä¹å°åº","220122":"åå®å¿","220182":"æ¦æ å¸","220183":"å¾·æ å¸"},"220200":{"220202":"æéåº","220203":"龿½åº","220204":"è¹è¥åº","220211":"丰满åº","220221":"æ°¸åå¿","220281":"èæ²³å¸","220282":"桦ç¸å¸","220283":"èå
°å¸","220284":"ç£ç³å¸"},"220300":{"220302":"é西åº","220303":"éä¸åº","220322":"梨æ å¿","220323":"ä¼é满æèªæ²»å¿","220381":"å
¬ä¸»å²å¸","220382":"åè¾½å¸"},"220400":{"220402":"é¾å±±åº","220403":"西å®åº","220421":"ä¸ä¸°å¿","220422":"ä¸è¾½å¿"},"220500":{"220502":"䏿åº","220503":"äºéæ±åº","220521":"éåå¿","220523":"è¾åå¿","220524":"æ³æ²³å¿","220581":"æ¢
æ²³å£å¸","220582":"éå®å¸"},"220600":{"220602":"æµæ±åº","220605":"æ±æºåº","220621":"ææ¾å¿","220622":"éå®å¿","220623":"é¿ç½æé²æèªæ²»å¿","220681":"临æ±å¸"},"220700":{"220702":"宿±åº","220721":"åéå°ç½æ¯èå¤æèªæ²»å¿","220722":"é¿å²å¿","220723":"ä¹¾å®å¿","220781":"æ¶ä½å¸"},"220800":{"220802":"æ´®ååº","220821":"éèµå¿","220822":"鿦å¿","220881":"æ´®åå¸","220882":"大å®å¸"},"222400":{"222401":"å»¶åå¸","222402":"å¾ä»¬å¸","222403":"æ¦åå¸","222404":"ç²æ¥å¸","222405":"é¾äºå¸","222406":"åé¾å¸","222424":"汪æ¸
å¿","222426":"å®å¾å¿"},"230000":{"230100":"åå°æ»¨å¸","230200":"é½é½åå°å¸","230300":"鸡西å¸","230400":"鹤å²å¸","230500":"åé¸å±±å¸","230600":"大åºå¸","230700":"伿¥å¸","230800":"ä½³æ¨æ¯å¸","230900":"ä¸å°æ²³å¸","231000":"ç¡ä¸¹æ±å¸","231100":"黿²³å¸","231200":"绥åå¸","232700":"大å
´å®å²å°åº"},"230100":{"230102":"ééåº","230103":"åå²åº","230104":"éå¤åº","230108":"å¹³æ¿åº","230109":"æ¾ååº","230110":"é¦ååº","230111":"å¼å
°åº","230112":"é¿ååº","230113":"åååº","230123":"ä¾å
°å¿","230124":"æ¹æ£å¿","230125":"宾å¿","230126":"巴彦å¿","230127":"æ¨å
°å¿","230128":"éæ²³å¿","230129":"延寿å¿","230183":"å°å¿å¸","230184":"äºå¸¸å¸"},"230200":{"230202":"龿²åº","230203":"建ååº","230204":"ééåº","230205":"æææºªåº","230206":"坿å°åºåº","230207":"碾åå±±åº","230208":"æ¢
éæ¯è¾¾æ¡å°æåº","230221":"龿±å¿","230223":"ä¾å®å¿","230224":"æ³°æ¥å¿","230225":"çåå¿","230227":"å¯è£å¿","230229":"å
å±±å¿","230230":"å
ä¸å¿","230231":"ææ³å¿","230281":"è®·æ²³å¸"},"230300":{"230302":"鸡å åº","230303":"æå±±åº","230304":"æ»´éåº","230305":"梨æ åº","230306":"ååæ²³åº","230307":"麻山åº","230321":"鸡ä¸å¿","230381":"èæå¸","230382":"å¯å±±å¸"},"230400":{"230402":"åé³åº","230403":"å·¥ååº","230404":"åå±±åº","230405":"å
´å®åº","230406":"ä¸å±±åº","230407":"å
´å±±åº","230421":"èåå¿","230422":"绥滨å¿"},"230500":{"230502":"å°å±±åº","230503":"å²ä¸åº","230505":"åæ¹å°åº","230506":"å®å±±åº","230521":"éè´¤å¿","230522":"åè°å¿","230523":"宿¸
å¿","230524":"饶河å¿"},"230600":{"230602":"è¨å°å¾åº","230603":"é¾å¤åº","230604":"让è¡è·¯åº","230605":"红å²åº","230606":"大ååº","230621":"èå·å¿","230622":"èæºå¿","230623":"æç¸å¿","230624":"æå°ä¼¯ç¹èå¤æèªæ²»å¿"},"230700":{"230702":"伿¥åº","230703":"åå²åº","230704":"å好åº","230705":"西æåº","230706":"ç¿ å³¦åº","230707":"æ°éåº","230708":"ç¾æºªåº","230709":"é山屯åº","230710":"äºè¥åº","230711":"ä¹é©¬æ²³åº","230712":"æ±¤æºæ²³åº","230713":"带å²åº","230714":"ä¹ä¼å²åº","230715":"红æåº","230716":"ä¸çå²åº","230722":"åè«å¿","230781":"éåå¸"},"230800":{"230803":"åé³åº","230804":"åè¿åº","230805":"ä¸é£åº","230811":"éåº","230822":"桦åå¿","230826":"桦å·å¿","230828":"汤åå¿","230881":"åæ±å¸","230882":"å¯é¦å¸","230883":"æè¿å¸"},"230900":{"230902":"æ°å
´åº","230903":"æ¡å±±åº","230904":"èåæ²³åº","230921":"åå©å¿"},"231000":{"231002":"ä¸å®åº","231003":"鳿åº","231004":"ç±æ°åº","231005":"西å®åº","231025":"æå£å¿","231081":"ç»¥è¬æ²³å¸","231083":"æµ·æå¸","231084":"å®å®å¸","231085":"ç©æ£±å¸","231086":"ä¸å®å¸"},"231100":{"231102":"ç±è¾åº","231121":"å«©æ±å¿","231123":"éå
å¿","231124":"åå´å¿","231181":"åå®å¸","231182":"äºå¤§è¿æ± å¸"},"231200":{"231202":"åæåº","231221":"æå¥å¿","231222":"å
°è¥¿å¿","231223":"éåå¿","231224":"åºå®å¿","231225":"ææ°´å¿","231226":"绥棱å¿","231281":"å®è¾¾å¸","231282":"èä¸å¸","231283":"海伦å¸"},"232700":{"232721":"å¼çå¿","232722":"塿²³å¿","232723":"æ¼ æ²³å¿"},"310000":{"310100":"å¸è¾åº"}, |
| | | "310100":{"310101":"黿µ¦åº","310104":"徿±åº","310105":"é¿å®åº","310106":"éå®åº","310107":"æ®éåº","310109":"è¹å£åº","310110":"æ¨æµ¦åº","310112":"éµè¡åº","310113":"å®å±±åº","310114":"åå®åº","310115":"æµ¦ä¸æ°åº","310116":"éå±±åº","310117":"æ¾æ±åº","310118":"éæµ¦åº","310120":"å¥è´¤åº","310151":"å´æåº"},"320000":{"320100":"å京å¸","320200":"æ é¡å¸","320300":"å¾å·å¸","320400":"常å·å¸","320500":"èå·å¸","320600":"åéå¸","320700":"è¿äºæ¸¯å¸","320800":"æ·®å®å¸","320900":"çåå¸","321000":"æ¬å·å¸","321100":"éæ±å¸","321200":"æ³°å·å¸","321300":"宿è¿å¸"},"320100":{"320102":"çæ¦åº","320104":"秦淮åº","320105":"建éºåº","320106":"鼿¥¼åº","320111":"浦å£åº","320113":"æ éåº","320114":"é¨è±å°åº","320115":"æ±å®åº","320116":"å
ååº","320117":"溧水åº","320118":"髿·³åº"}, |
| | | "320200":{"320205":"é¡å±±åº","320206":"æ å±±åº","320211":"滨æ¹åº","320213":"æ¢æºªåº","320214":"æ°å´åº","320281":"æ±é´å¸","320282":"å®å
´å¸"},"320300":{"320302":"鼿¥¼åº","320303":"äºé¾åº","320305":"贾汪åº","320311":"æ³å±±åº","320312":"éå±±åº","320321":"丰å¿","320322":"æ²å¿","320324":"ç¢å®å¿","320381":"æ°æ²å¸","320382":"é³å·å¸"}, |
| | | "320400":{"320402":"天å®åº","320404":"鿥¼åº","320411":"æ°ååº","320412":"æ¦è¿åº","320413":"éååº","320481":"溧é³å¸"},"320500":{"320505":"èä¸åº","320506":"å´ä¸åº","320507":"ç¸ååº","320508":"å§èåº","320509":"å´æ±åº","320581":"常çå¸","320582":"å¼ å®¶æ¸¯å¸","320583":"æå±±å¸","320585":"太ä»å¸"},"320600":{"320602":"å´å·åº","320611":"港é¸åº","320612":"éå·åº","320621":"æµ·å®å¿","320623":"å¦ä¸å¿","320681":"å¯ä¸å¸","320682":"å¦çå¸","320684":"æµ·é¨å¸"},"320700":{"320703":"è¿äºåº","320706":"æµ·å·åº","320707":"èµ£æ¦åº","320722":"䏿µ·å¿","320723":"çäºå¿","320724":"çåå¿"},"320800":{"320803":"æ·®å®åº","320804":"æ·®é´åº","320812":"æ¸
æ±æµ¦åº","320813":"洪泽åº","320826":"æ¶æ°´å¿","320830":"ç±çå¿","320831":"éæ¹å¿"},"320900":{"320902":"äºæ¹åº","320903":"çé½åº","320904":"大丰åº","320921":"åæ°´å¿","320922":"滨海å¿","320923":"éå®å¿","320924":"å°é³å¿","320925":"建æ¹å¿","320981":"ä¸å°å¸"},"321000":{"321002":"广éµåº","321003":"éæ±åº","321012":"æ±é½åº","321023":"å®åºå¿","321081":"仪å¾å¸","321084":"é«é®å¸"},"321100":{"321102":"京å£åº","321111":"润å·åº","321112":"丹å¾åº","321181":"丹é³å¸","321182":"æ¬ä¸å¸","321183":"å¥å®¹å¸"},"321200":{"321202":"æµ·éµåº","321203":"髿¸¯åº","321204":"å§å °åº","321281":"å
´åå¸","321282":"éæ±å¸","321283":"æ³°å
´å¸"},"321300":{"321302":"宿ååº","321311":"宿豫åº","321322":"æ²é³å¿","321323":"æ³é³å¿","321324":"æ³æ´ªå¿"},"330000":{"330100":"æå·å¸","330200":"宿³¢å¸","330300":"温å·å¸","330400":"åå
´å¸","330500":"æ¹å·å¸","330600":"ç»å
´å¸","330700":"éåå¸","330800":"è¡¢å·å¸","330900":"èå±±å¸","331000":"å°å·å¸","331100":"丽水å¸"},"330100":{"330102":"ä¸ååº","330103":"ä¸ååº","330104":"æ±å¹²åº","330105":"æ±å¢
åº","330106":"西æ¹åº","330108":"滨æ±åº","330109":"è§å±±åº","330110":"使åº","330111":"å¯é³åº","330122":"æ¡åºå¿","330127":"æ·³å®å¿","330182":"建德å¸","330185":"临å®å¸"},"330200":{"330203":"æµ·æåº","330204":"æ±ä¸åº","330205":"æ±ååº","330206":"åä»åº","330211":"éæµ·åº","330212":"éå·åº","330225":"象山å¿","330226":"宿µ·å¿","330281":"ä½å§å¸","330282":"æ
溪å¸","330283":"å¥åå¸"},"330300":{"330302":"鹿ååº","330303":"龿¹¾åº","330304":"ç¯æµ·åº","330305":"æ´å¤´åº","330324":"æ°¸åå¿","330326":"å¹³é³å¿","330327":"èåå¿","330328":"ææå¿","330329":"泰顺å¿","330381":"çå®å¸","330382":"乿¸
å¸"},"330400":{"330402":"åæ¹åº","330411":"ç§æ´²åº","330421":"ååå¿","330424":"æµ·çå¿","330481":"æµ·å®å¸","330482":"å¹³æ¹å¸","330483":"æ¡ä¹¡å¸"},"330500":{"330502":"å´å
´åº","330503":"åæµåº","330521":"å¾·æ¸
å¿","330522":"é¿å
´å¿","330523":"å®åå¿"},"330600":{"330602":"è¶ååº","330603":"æ¯æ¡¥åº","330604":"ä¸èåº","330624":"æ°æå¿","330681":"诸æ¨å¸","330683":"åµå·å¸"},"330700":{"330702":"婺ååº","330703":"éä¸åº","330723":"æ¦ä¹å¿","330726":"浦æ±å¿","330727":"ç£å®å¿","330781":"å
°æºªå¸","330782":"ä¹ä¹å¸","330783":"ä¸é³å¸","330784":"永康å¸"},"330800":{"330802":"æ¯ååº","330803":"è¡¢æ±åº","330822":"常山å¿","330824":"å¼åå¿","330825":"龿¸¸å¿","330881":"æ±å±±å¸"},"330900":{"330902":"宿µ·åº","330903":"æ®éåº","330921":"岱山å¿","330922":"嵿³å¿"},"331000":{"331002":"æ¤æ±åº","331003":"é»å²©åº","331004":"路桥åº","331021":"çç¯å¿","331022":"ä¸é¨å¿","331023":"天å°å¿","331024":"ä»å±
å¿","331081":"温å²å¸","331082":"临海å¸"},"331100":{"331102":"è²é½åº","331121":"éç°å¿","331122":"ç¼äºå¿","331123":"éæå¿","331124":"æ¾é³å¿","331125":"äºåå¿","331126":"åºå
å¿","331127":"æ¯å®ç²æèªæ²»å¿","331181":"龿³å¸"},"340000":{"340100":"åè¥å¸","340200":"èæ¹å¸","340300":"èå å¸","340400":"æ·®åå¸","340500":"马éå±±å¸","340600":"æ·®åå¸","340700":"ééµå¸","340800":"å®åºå¸","341000":"é»å±±å¸","341100":"æ»å·å¸","341200":"éé³å¸","341300":"宿å·å¸","341500":"å
å®å¸","341600":"亳å·å¸","341700":"æ± å·å¸","341800":"宣åå¸"},"340100":{"340102":"ç¶æµ·åº","340103":"åºé³åº","340104":"èå±±åº","340111":"å
æ²³åº","340121":"é¿ä¸°å¿","340122":"è¥ä¸å¿","340123":"è¥è¥¿å¿","340124":"åºæ±å¿","340181":"å·¢æ¹å¸"},"340200":{"340202":"éæ¹åº","340203":"弿±åº","340207":"é¸ æ±åº","340208":"ä¸å±±åº","340221":"èæ¹å¿","340222":"ç¹æå¿","340223":"åéµå¿","340225":"æ 为å¿"},"340300":{"340302":"é¾åæ¹åº","340303":"èå±±åº","340304":"禹ä¼åº","340311":"æ·®ä¸åº","340321":"æè¿å¿","340322":"äºæ²³å¿","340323":"åºéå¿"},"340400":{"340402":"大éåº","340403":"ç°å®¶åºµåº","340404":"谢家éåº","340405":"å
«å
¬å±±åº","340406":"æ½éåº","340421":"å¤å°å¿","340422":"寿å¿"},"340500":{"340503":"è±å±±åº","340504":"é¨å±±åº","340506":"åæåº","340521":"彿¶å¿","340522":"å«å±±å¿","340523":"åå¿"},"340600":{"340602":"æéåº","340603":"ç¸å±±åº","340604":"çå±±åº","340621":"æ¿æºªå¿"},"340700":{"340705":"éå®åº","340706":"ä¹å®åº","340711":"éåº","340722":"æé³å¿"},"340800":{"340802":"è¿æ±åº","340803":"大è§åº","340811":"å®ç§åº","340822":"æå®å¿","340824":"æ½å±±å¿","340825":"太æ¹å¿","340826":"宿æ¾å¿","340827":"ææ±å¿","340828":"岳西å¿","340881":"æ¡åå¸"},"341000":{"341002":"屯溪åº","341003":"é»å±±åº","341004":"å¾½å·åº","341021":"æå¿","341022":"ä¼å®å¿","341023":"é»å¿","341024":"ç¥é¨å¿"},"341100":{"341102":"ç
çåº","341103":"åè°¯åº","341122":"æ¥å®å¿","341124":"å
¨æ¤å¿","341125":"å®è¿å¿","341126":"å¤é³å¿","341181":"天é¿å¸","341182":"æå
å¸"},"341200":{"341202":"é¢å·åº","341203":"é¢ä¸åº","341204":"颿³åº","341221":"临æ³å¿","341222":"太åå¿","341225":"éåå¿","341226":"é¢ä¸å¿","341282":"çé¦å¸"},"341300":{"341302":"åæ¡¥åº","341321":"ç å±±å¿","341322":"è§å¿","341323":"çµç§å¿","341324":"æ³å¿"},"341500":{"341502":"éå®åº","341503":"è£å®åº","341504":"å¶éåº","341522":"éé±å¿","341523":"èåå¿","341524":"é寨å¿","341525":"éå±±å¿"},"341600":{"341602":"è°¯ååº","341621":"æ¶¡é³å¿","341622":"èåå¿","341623":"å©è¾å¿"},"341700":{"341702":"è´µæ± åº","341721":"ä¸è³å¿","341722":"ç³å°å¿","341723":"éé³å¿"},"341800":{"341802":"宣å·åº","341821":"éæºªå¿","341822":"广德å¿","341823":"æ³¾å¿","341824":"绩溪å¿","341825":"æå¾·å¿","341881":"å®å½å¸"},"350000":{"350100":"ç¦å·å¸","350200":"å¦é¨å¸","350300":"èç°å¸","350400":"䏿å¸","350500":"æ³å·å¸","350600":"æ¼³å·å¸","350700":"åå¹³å¸","350800":"é¾å²©å¸","350900":"å®å¾·å¸"},"350100":{"350102":"鼿¥¼åº","350103":"å°æ±åº","350104":"ä»å±±åº","350105":"马尾åº","350111":"æå®åº","350121":"é½ä¾¯å¿","350122":"è¿æ±å¿","350123":"ç½æºå¿","350124":"齿¸
å¿","350125":"永泰å¿","350128":"å¹³æ½å¿","350181":"ç¦æ¸
å¸","350182":"é¿ä¹å¸"},"350200":{"350203":"ææåº","350205":"æµ·æ²§åº","350206":"æ¹éåº","350211":"éç¾åº","350212":"åå®åº","350213":"ç¿å®åº"},"350300":{"350302":"åå¢åº","350303":"æ¶µæ±åº","350304":"èååº","350305":"ç§å±¿åº","350322":"仿¸¸å¿"},"350400":{"350402":"æ¢
ååº","350403":"ä¸å
åº","350421":"ææºªå¿","350423":"æ¸
æµå¿","350424":"å®åå¿","350425":"大ç°å¿","350426":"尤溪å¿","350427":"æ²å¿","350428":"å°ä¹å¿","350429":"æ³°å®å¿","350430":"建å®å¿","350481":"æ°¸å®å¸"},"350500":{"350502":"鲤ååº","350503":"丰泽åº","350504":"æ´æ±åº","350505":"æ³æ¸¯åº","350521":"æ å®å¿","350524":"宿ºªå¿","350525":"æ°¸æ¥å¿","350526":"å¾·åå¿","350527":"éé¨å¿","350581":"ç³ç®å¸","350582":"ææ±å¸","350583":"åå®å¸"},"350600":{"350602":"èååº","350603":"龿åº","350622":"äºéå¿","350623":"漳浦å¿","350624":"è¯å®å¿","350625":"é¿æ³°å¿","350626":"ä¸å±±å¿","350627":"åéå¿","350628":"å¹³åå¿","350629":"åå®å¿","350681":"龿µ·å¸"},"350700":{"350702":"å»¶å¹³åº","350703":"建é³åº","350721":"顺æå¿","350722":"浦åå¿","350723":"å
æ³½å¿","350724":"æ¾æºªå¿","350725":"æ¿åå¿","350781":"鵿¦å¸","350782":"æ¦å¤·å±±å¸","350783":"建ç¯å¸"},"350800":{"350802":"æ°ç½åº","350803":"æ°¸å®åº","350821":"é¿æ±å¿","350823":"䏿å¿","350824":"æ¦å¹³å¿","350825":"è¿åå¿","350881":"漳平å¸"},"350900":{"350902":"èååº","350921":"éæµ¦å¿","350922":"å¤ç°å¿","350923":"å±åå¿","350924":"寿å®å¿","350925":"å¨å®å¿","350926":"æè£å¿","350981":"ç¦å®å¸","350982":"ç¦é¼å¸"},"360000":{"360100":"åæå¸","360200":"æ¯å¾·éå¸","360300":"è乡å¸","360400":"乿±å¸","360500":"æ°ä½å¸","360600":"é¹°æ½å¸","360700":"èµ£å·å¸","360800":"åå®å¸","360900":"宿¥å¸","361000":"æå·å¸","361100":"ä¸é¥¶å¸"},"360100":{"360102":"䏿¹åº","360103":"西æ¹åº","360104":"éäºè°±åº","360105":"æ¹¾éåº","360111":"éå±±æ¹åº","360112":"æ°å»ºåº","360121":"åæå¿","360123":"å®ä¹å¿","360124":"è¿è´¤å¿"},"360200":{"360202":"ææ±åº","360203":"ç å±±åº","360222":"æµ®æ¢å¿","360281":"ä¹å¹³å¸"},"360300":{"360302":"宿ºåº","360313":"æ¹ä¸åº","360321":"è²è±å¿","360322":"䏿 å¿","360323":"è¦æºªå¿"},"360400":{"360402":"æ¿æºªåº","360403":"æµé³åº","360421":"乿±å¿","360423":"æ¦å®å¿","360424":"修水å¿","360425":"永修å¿","360426":"å¾·å®å¿","360428":"齿å¿","360429":"æ¹å£å¿","360430":"彿³½å¿","360481":"çæå¸","360482":"å
±éåå¸","360483":"åºå±±å¸"},"360500":{"360502":"æ¸æ°´åº","360521":"åå®å¿"},"360600":{"360602":"ææ¹åº","360622":"使±å¿","360681":"贵溪å¸"},"360700":{"360702":"ç« è´¡åº","360703":"å康åº","360721":"èµ£å¿","360722":"信丰å¿","360723":"大ä½å¿","360724":"ä¸ç¹å¿","360725":"å´ä¹å¿","360726":"å®è¿å¿","360727":"é¾åå¿","360728":"å®åå¿","360729":"å
¨åå¿","360730":"å®é½å¿","360731":"äºé½å¿","360732":"å
´å½å¿","360733":"伿å¿","360734":"寻ä¹å¿","360735":"ç³åå¿","360781":"çéå¸"},"360800":{"360802":"åå·åº","360803":"éååº","360821":"åå®å¿","360822":"åæ°´å¿","360823":"峡æ±å¿","360824":"æ°å¹²å¿","360825":"永丰å¿","360826":"æ³°åå¿","360827":"éå·å¿","360828":"ä¸å®å¿","360829":"å®ç¦å¿","360830":"æ°¸æ°å¿","360881":"äºåå±±å¸"},"360900":{"360902":"è¢å·åº","360921":"奿°å¿","360922":"ä¸è½½å¿","360923":"ä¸é«å¿","360924":"å®ä¸°å¿","360925":"éå®å¿","360926":"éé¼å¿","360981":"丰åå¸","360982":"æ¨æ å¸","360983":"é«å®å¸"},"361000":{"361002":"临å·åº","361021":"ååå¿","361022":"é»å·å¿","361023":"å丰å¿","361024":"å´ä»å¿","361025":"ä¹å®å¿","361026":"å®é»å¿","361027":"éæºªå¿","361028":"èµæºªå¿","361029":"ä¸ä¹¡å¿","361030":"广æå¿"},"361100":{"361102":"ä¿¡å·åº","361103":"广丰åº","361121":"ä¸é¥¶å¿","361123":"çå±±å¿","361124":"é
å±±å¿","361125":"横峰å¿","361126":"å¼é³å¿","361127":"ä½å¹²å¿","361128":"é±é³å¿","361129":"ä¸å¹´å¿","361130":"婺æºå¿","361181":"å¾·å
´å¸"},"370000":{"370100":"æµåå¸","370200":"éå²å¸","370300":"æ·åå¸","370400":"æ£åºå¸","370500":"ä¸è¥å¸","370600":"çå°å¸","370700":"æ½åå¸","370800":"æµå®å¸","370900":"æ³°å®å¸","371000":"卿µ·å¸","371100":"æ¥ç
§å¸","371200":"è±èå¸","371300":"临æ²å¸","371400":"å¾·å·å¸","371500":"èåå¸","371600":"滨å·å¸","371700":"èæ³½å¸"},"370100":{"370102":"åä¸åº","370103":"å¸ä¸åº","370104":"æ§è«åº","370105":"天桥åº","370112":"åååº","370113":"é¿æ¸
åº","370124":"å¹³é´å¿","370125":"æµé³å¿","370126":"åæ²³å¿","370181":"ç« ä¸å¸"},"370200":{"370202":"å¸ååº","370203":"å¸ååº","370211":"é»å²åº","370212":"å´å±±åº","370213":"ææ²§åº","370214":"åé³åº","370281":"è¶å·å¸","370282":"å³å¢¨å¸","370283":"平度å¸","370285":"è±è¥¿å¸"},"370300":{"370302":"æ·å·åº","370303":"å¼ åºåº","370304":"åå±±åº","370305":"临æ·åº","370306":"卿åº","370321":"æ¡å°å¿","370322":"é«éå¿","370323":"æ²æºå¿"},"370400":{"370402":"å¸ä¸åº","370403":"èååº","370404":"å³ååº","370405":"å°å¿åºåº","370406":"å±±äºåº","370481":"æ»å·å¸"},"370500":{"370502":"ä¸è¥åº","370503":"æ²³å£åº","370505":"å¦å©åº","370522":"婿´¥å¿","370523":"广饶å¿"},"370600":{"370602":"èç½åº","370611":"ç¦å±±åº","370612":"çå¹³åº","370613":"è±å±±åº","370634":"é¿å²å¿","370681":"é¾å£å¸","370682":"è±é³å¸","370683":"è±å·å¸","370684":"è¬è±å¸","370685":"æè¿å¸","370686":"æ éå¸","370687":"æµ·é³å¸"},"370700":{"370702":"æ½ååº","370703":"å¯äºåº","370704":"åååº","370705":"奿åº","370724":"临æå¿","370725":"æä¹å¿","370781":"éå·å¸","370782":"诸åå¸","370783":"寿å
å¸","370784":"å®ä¸å¸","370785":"é«å¯å¸","370786":"æéå¸"},"370800":{"370811":"ä»»ååº","370812":"å
å·åº","370826":"微山å¿","370827":"é±¼å°å¿","370828":"é乡å¿","370829":"å祥å¿","370830":"æ±¶ä¸å¿","370831":"æ³æ°´å¿","370832":"æ¢å±±å¿","370881":"æ²éå¸","370883":"é¹åå¸"},"370900":{"370902":"æ³°å±±åº","370911":"岱岳åº","370921":"å®é³å¿","370923":"ä¸å¹³å¿","370982":"æ°æ³°å¸","370983":"è¥åå¸"},"371000":{"371002":"ç¯ç¿ åº","371003":"æç»åº","371082":"è£æå¸","371083":"乳山å¸"},"371100":{"371102":"䏿¸¯åº","371103":"å²å±±åº","371121":"äºè²å¿","371122":"èå¿"},"371200":{"371202":"è±ååº","371203":"é¢ååº"},"371300":{"371302":"å
°å±±åº","371311":"ç½åºåº","371312":"æ²³ä¸åº","371321":"æ²åå¿","371322":"é¯åå¿","371323":"æ²æ°´å¿","371324":"å
°éµå¿","371325":"è´¹å¿","371326":"å¹³éå¿","371327":"èåå¿","371328":"èé´å¿","371329":"临æ²å¿"},"371400":{"371402":"å¾·ååº","371403":"éµååº","371422":"宿´¥å¿","371423":"åºäºå¿","371424":"临éå¿","371425":"齿²³å¿","371426":"å¹³åå¿","371427":"夿´¥å¿","371428":"æ¦åå¿","371481":"ä¹éµå¸","371482":"禹åå¸"},"371500":{"371502":"䏿åºåº","371521":"é³è°·å¿","371522":"èå¿","371523":"èå¹³å¿","371524":"ä¸é¿å¿","371525":"å å¿","371526":"é«åå¿","371581":"临æ¸
å¸"},"371600":{"371602":"滨ååº","371603":"æ²¾ååº","371621":"æ æ°å¿","371622":"é³ä¿¡å¿","371623":"æ æ££å¿","371625":"åå
´å¿","371626":"é¹å¹³å¿"},"371700":{"371702":"ç¡ä¸¹åº","371703":"å®é¶åº","371721":"æ¹å¿","371722":"åå¿","371723":"ææ¦å¿","371724":"å·¨éå¿","371725":"éåå¿","371726":"éåå¿","371728":"䏿å¿"},"410000":{"410100":"éå·å¸","410200":"å¼å°å¸","410300":"æ´é³å¸","410400":"平顶山å¸","410500":"å®é³å¸","410600":"鹤å£å¸","410700":"æ°ä¹¡å¸","410800":"ç¦ä½å¸","410900":"æ¿®é³å¸","411000":"许æå¸","411100":"漯河å¸","411200":"ä¸é¨å³¡å¸","411300":"åé³å¸","411400":"åä¸å¸","411500":"ä¿¡é³å¸","411600":"å¨å£å¸","411700":"驻马åºå¸","419001":"æµæºå¸"},"410100":{"410102":"ä¸ååº","410103":"äºä¸åº","410104":"管ååæåº","410105":"éæ°´åº","410106":"ä¸è¡åº","410108":"æ æµåº","410122":"ä¸çå¿","410181":"å·©ä¹å¸","410182":"è¥é³å¸","410183":"æ°å¯å¸","410184":"æ°éå¸","410185":"ç»å°å¸"},"410200":{"410202":"é¾äºåº","410203":"顺河åæåº","410204":"鼿¥¼åº","410205":"禹çå°åº","410211":"éæåº","410212":"祥符åº","410221":"æå¿","410222":"é许å¿","410223":"å°æ°å¿","410225":"å
°èå¿"},"410300":{"410302":"èååº","410303":"西工åº","410304":"çæ²³åæåº","410305":"涧西åº","410306":"åå©åº","410311":"æ´é¾åº","410322":"åæ´¥å¿","410323":"æ°å®å¿","410324":"æ ¾å·å¿","410325":"嵩å¿","410326":"æ±é³å¿","410327":"å®é³å¿","410328":"æ´å®å¿","410329":"ä¼å·å¿","410381":"åå¸å¸"},"410400":{"410402":"æ°ååº","410403":"å«ä¸åº","410404":"ç³é¾åº","410411":"æ¹æ²³åº","410421":"å®ä¸°å¿","410422":"å¶å¿","410423":"é²å±±å¿","410425":"éå¿","410481":"èé¢å¸","410482":"æ±å·å¸"},"410500":{"410502":"æå³°åº","410503":"åå
³åº","410505":"æ®·é½åº","410506":"é¾å®åº","410522":"å®é³å¿","410523":"汤é´å¿","410526":"æ»å¿","410527":"å
é»å¿","410581":"æå·å¸"},"410600":{"410602":"鹤山åº","410603":"å±±ååº","410611":"æ·æ»¨åº","410621":"æµå¿","410622":"æ·å¿"},"410700":{"410702":"红æåº","410703":"嫿»¨åº","410704":"夿³åº","410711":"ç§éåº","410721":"æ°ä¹¡å¿","410724":"è·åå¿","410725":"åé³å¿","410726":"å»¶æ´¥å¿","410727":"å°ä¸å¿","410728":"é¿å£å¿","410781":"å«è¾å¸","410782":"è¾å¿å¸"},"410800":{"410802":"è§£æ¾åº","410803":"ä¸ç«åº","410804":"马æåº","410811":"å±±é³åº","410821":"ä¿®æ¦å¿","410822":"åç±å¿","410823":"æ¦éå¿","410825":"温å¿","410882":"æ²é³å¸","410883":"åå·å¸"},"410900":{"410902":"åé¾åº","410922":"æ¸
丰å¿","410923":"åä¹å¿","410926":"èå¿","410927":"å°åå¿","410928":"æ¿®é³å¿"},"411000":{"411002":"éé½åº","411023":"许æå¿","411024":"é¢éµå¿","411025":"è¥åå¿","411081":"禹å·å¸","411082":"é¿èå¸"},"411100":{"411102":"æºæ±åº","411103":"é¾ååº","411104":"å¬éµåº","411121":"èé³å¿","411122":"临é¢å¿"},"411200":{"411202":"æ¹æ»¨åº","411203":"éå·åº","411221":"æ¸æ± å¿","411224":"墿°å¿","411281":"ä¹é©¬å¸","411282":"çµå®å¸"},"411300":{"411302":"å®ååº","411303":"å§é¾åº","411321":"åå¬å¿","411322":"æ¹åå¿","411323":"西峡å¿","411324":"éå¹³å¿","411325":"å
乡å¿","411326":"æ·
å·å¿","411327":"社æå¿","411328":"åæ²³å¿","411329":"æ°éå¿","411330":"æ¡æå¿","411381":"éå·å¸"},"411400":{"411402":"æ¢ååº","411403":"ç¢é³åº","411421":"æ°æå¿","411422":"ç¢å¿","411423":"å®éµå¿","411424":"æåå¿","411425":"èåå¿","411426":"å¤éå¿","411481":"æ°¸åå¸"},"411500":{"411502":"æµæ²³åº","411503":"平桥åº","411521":"ç½å±±å¿","411522":"å
å±±å¿","411523":"æ°å¿","411524":"ååå¿","411525":"åºå§å¿","411526":"æ½¢å·å¿","411527":"淮滨å¿","411528":"æ¯å¿"},"411600":{"411602":"å·æ±åº","411621":"æ¶æ²å¿","411622":"西åå¿","411623":"åæ°´å¿","411624":"æ²ä¸å¿","411625":"é¸åå¿","411626":"æ·®é³å¿","411627":"太康å¿","411628":"鹿éå¿","411681":"项åå¸"},"411700":{"411702":"é©¿ååº","411721":"西平å¿","411722":"ä¸è¡å¿","411723":"å¹³èå¿","411724":"æ£é³å¿","411725":"确山å¿","411726":"æ³é³å¿","411727":"æ±åå¿","411728":"éå¹³å¿","411729":"æ°è¡å¿"},"419001":{"4190011":"æµæºå¸å
äºé","41900111":"æµæºå¸ä¸å¶é","419001001":"æµæºå¸æ²åè¡é","419001002":"æµæºå¸æµæ°´è¡é","419001003":"æµæºå¸åæµ·è¡é","419001004":"æµæºå¸å¤©åè¡é","419001005":"æµæºå¸çæ³è¡é","419001101":"æµæºå¸äºé¾å£é","419001102":"æµæºå¸è½µåé","419001103":"æµæºå¸æ¿çé","419001104":"æµæºå¸éµåé","419001105":"æµæºå¸å¡å¤´é","419001106":"æµæºå¸æ¢¨æé","419001107":"æµæºå¸å¤§å³ªé","419001108":"æµæºå¸æç¤¼é","419001109":"æµæºå¸çå±é"},"420000":{"420100":"æ¦æ±å¸","420200":"é»ç³å¸","420300":"åå °å¸","420500":"宿å¸","420600":"è¥é³å¸","420700":"éå·å¸","420800":"èé¨å¸","420900":"åæå¸","421000":"èå·å¸","421100":"é»åå¸","421200":"å¸å®å¸","421300":"éå·å¸","422800":"æ©æ½åå®¶æèæèªæ²»å·","429004":"仿¡å¸","429005":"æ½æ±å¸","429006":"天é¨å¸","429021":"ç¥åæ¶æåº"},"420100":{"420102":"æ±å²¸åº","420103":"æ±æ±åº","420104":"ç¡å£åº","420105":"æ±é³åº","420106":"æ¦æåº","420107":"éå±±åº","420111":"洪山åº","420112":"ä¸è¥¿æ¹åº","420113":"æ±ååº","420114":"è¡ç¸åº","420115":"æ±å¤åº","420116":"é»éåº","420117":"æ°æ´²åº"},"420200":{"420202":"é»ç³æ¸¯åº","420203":"西å¡å±±åº","420204":"ä¸éåº","420205":"éå±±åº","420222":"鳿°å¿","420281":"大å¶å¸"},"420300":{"420302":"è
ç®åº","420303":"å¼ æ¹¾åº","420304":"é§é³åº","420322":"é§è¥¿å¿","420323":"竹山å¿","420324":"竹溪å¿","420325":"æ¿å¿","420381":"丹æ±å£å¸"},"420500":{"420502":"西éµåº","420503":"ä¼å®¶å²åº","420504":"ç¹ååº","420505":"çäºåº","420506":"夷éµåº","420525":"è¿å®å¿","420526":"å
´å±±å¿","420527":"ç§å½å¿","420528":"é¿é³åå®¶æèªæ²»å¿","420529":"äºå³°åå®¶æèªæ²»å¿","420581":"å®é½å¸","420582":"å½é³å¸","420583":"ææ±å¸"},"420600":{"420602":"è¥ååº","420606":"æ¨ååº","420607":"è¥å·åº","420624":"åæ¼³å¿","420625":"è°·åå¿","420626":"ä¿åº·å¿","420682":"èæ²³å£å¸","420683":"æ£é³å¸","420684":"å®åå¸"},"420700":{"420702":"æ¢åæ¹åº","420703":"å容åº","420704":"éååº"},"420800":{"420802":"ä¸å®åº","420804":"æååº","420821":"京山å¿","420822":"æ²æ´å¿","420881":"é祥å¸"},"420900":{"420902":"åååº","420921":"åæå¿","420922":"大æå¿","420923":"äºæ¢¦å¿","420981":"åºåå¸","420982":"å®éå¸","420984":"æ±å·å¸"},"421000":{"421002":"æ²å¸åº","421003":"èå·åº","421022":"å
¬å®å¿","421023":"çå©å¿","421024":"æ±éµå¿","421081":"ç³é¦å¸","421083":"æ´ªæ¹å¸","421087":"æ¾æ»å¸"},"421100":{"421102":"é»å·åº","421121":"å¢é£å¿","421122":"红å®å¿","421123":"ç½ç°å¿","421124":"è±å±±å¿","421125":"æµ æ°´å¿","421126":"è²æ¥å¿","421127":"黿¢
å¿","421181":"麻åå¸","421182":"æ¦ç©´å¸"},"421200":{"421202":"å¸å®åº","421221":"åé±¼å¿","421222":"éåå¿","421223":"å´é³å¿","421224":"éå±±å¿","421281":"赤å£å¸"},"421300":{"421303":"æ¾é½åº","421321":"éå¿","421381":"广水å¸"},"422800":{"422801":"æ©æ½å¸","422802":"å©å·å¸","422822":"建å§å¿","422823":"å·´ä¸å¿","422825":"宣æ©å¿","422826":"å¸ä¸°å¿","422827":"æ¥å¤å¿","422828":"鹤峰å¿"},"429004":{"4290041":"éåºé","4290044":"å·¥ä¸ååº","42900411":"å¼ æ²é","429004001":"æ²å´è¡é","429004002":"干河è¡é","429004003":"é¾åå±±","429004101":"æ¯å´é","429004102":"è±æ²³é","429004103":"ä¸ä¼æ½é","429004104":"è¡åºé","429004105":"é¿åå£é","429004106":"è¥¿æµæ²³é","429004107":"æ²æ¹é","429004108":"æ¨æå°¾é","429004109":"å½åºé","429004111":"éæ²³é","429004112":"æ²ååæé","429004113":"éæµ·å£é","429004114":"éåºé","429004401":"ä¹åå¸åç§åº","429004402":"æ²æ¹åç§åº","429004404":"äºæ¹æ¸åº","429004405":"èµµè¥¿å¸æåº","429004407":"ç禽è¯ç§åº","429004408":"ææ¹é£æ¯åº"},"429005":{"4290051":"ç«¹æ ¹æ»©é","4290054":"æ±æ±ç³æ²¹ç®¡çå±","42900545":"å¨ç¶ç®¡çåº","429005001":"åæ","429005002":"æ¨å¸","429005003":"å¨ç¶","429005004":"广å","429005005":"泰丰","429005006":"é«åº","429005101":"æ¸æ´é","429005102":"çåºé","429005103":"é«ç³ç¢é","429005104":"çå£é","429005105":"èæ°é","429005106":"浩å£é","429005107":"积çå£é","429005108":"å¼ éé","429005109":"龿¹¾é","429005401":"æ½æ±ç»æµå¼ååº","429005451":"åæ¹ç®¡çåº","429005452":"çå£ç®¡çåº","429005453":"æ»å£ç®¡çåº","429005454":"ç½é¹æ¹ç®¡çåº","429005455":"è¿ç²®æ¹ç®¡çåº","429005457":"浩å£åç§åº"},"429006":{"4290061":"å¤å®é","42900611":"麻æ´é","42900612":"ç³æ²³é","42900645":"èæ¹ååº","429006001":"ç«éµè¡é","429006002":"侨乡è¡éå¼ååº","429006003":"æ¨æè¡é","429006101":"æå¸é","429006102":"å¼ æ¸¯é","429006103":"èåºé","429006104":"汪åºé","429006105":"æ¸èªé","429006106":"黿½é","429006107":"å²³å£é","429006108":"横æé","429006109":"å½å¸é","429006111":"å¤ç¥¥é","429006112":"干驿é","429006113":"马湾é","429006114":"å¢å¸é","429006115":"å°æ¿é","429006116":"ä¹çé","429006118":"çå¸é","429006119":"è¡å¸é","429006121":"ä½åå±±é","429006201":"忽乡","429006451":"ç½è
æ¹ååº","429006452":"æ²æ¹ç®¡å§ä¼"},"429021":{"4290211":"æ¾æé","4290212":"宿´ä¹¡","429021101":"鳿¥é","429021102":"æ¨é±¼é","429021103":"红åªé","429021104":"æ°åé","429021105":"乿¹é","429021202":"ä¸è°·åªåå®¶æä¹¡"},"430000":{"430100":"é¿æ²å¸","430200":"æ ªæ´²å¸","430300":"æ¹æ½å¸","430400":"è¡¡é³å¸","430500":"éµé³å¸","430600":"å²³é³å¸","430700":"常德å¸","430800":"å¼ å®¶çå¸","430900":"çé³å¸","431000":"é´å·å¸","431100":"æ°¸å·å¸","431200":"æåå¸","431300":"å¨åºå¸","433100":"æ¹è¥¿åå®¶æèæèªæ²»å·"},"430100":{"430102":"èèåº","430103":"天å¿åº","430104":"å²³éºåº","430105":"å¼ç¦åº","430111":"é¨è±åº","430112":"æååº","430121":"é¿æ²å¿","430124":"å®ä¹¡å¿","430181":"æµé³å¸"},"430200":{"430202":"è·å¡åº","430203":"è¦æ·åº","430204":"ç³å³°åº","430211":"天å
åº","430221":"æ ªæ´²å¿","430223":"æ¸å¿","430224":"è¶éµå¿","430225":"çéµå¿","430281":"é´éµå¸"},"430300":{"430302":"鍿¹åº","430304":"å²³å¡åº","430321":"æ¹æ½å¿","430381":"æ¹ä¹¡å¸","430382":"é¶å±±å¸"},"430400":{"430405":"ç æåº","430406":"éå³°åº","430407":"ç³é¼åº","430408":"è¸æ¹åº","430412":"åå²³åº","430421":"è¡¡é³å¿","430422":"è¡¡åå¿","430423":"è¡¡å±±å¿","430424":"è¡¡ä¸å¿","430426":"ç¥ä¸å¿","430481":"èé³å¸","430482":"常å®å¸"},"430500":{"430502":"忏
åº","430503":"大祥åº","430511":"åå¡åº","430521":"éµä¸å¿","430522":"æ°éµå¿","430523":"éµé³å¿","430524":"éåå¿","430525":"æ´å£å¿","430527":"绥å®å¿","430528":"æ°å®å¿","430529":"忥èæèªæ²»å¿","430581":"æ¦åå¸"},"430600":{"430602":"岳鳿¥¼åº","430603":"äºæºªåº","430611":"åå±±åº","430621":"å²³é³å¿","430623":"å容å¿","430624":"æ¹é´å¿","430626":"å¹³æ±å¿","430681":"汨ç½å¸","430682":"临æ¹å¸"},"430700":{"430702":"æ¦éµåº","430703":"é¼ååº","430721":"å®ä¹¡å¿","430722":"æ±å¯¿å¿","430723":"æ¾§å¿","430724":"临澧å¿","430725":"æ¡æºå¿","430726":"ç³é¨å¿","430781":"æ´¥å¸å¸"},"430800":{"430802":"æ°¸å®åº","430811":"æ¦éµæºåº","430821":"æ
å©å¿","430822":"æ¡æ¤å¿"},"430900":{"430902":"èµé³åº","430903":"赫山åº","430921":"åå¿","430922":"æ¡æ±å¿","430923":"å®åå¿","430981":"æ²
æ±å¸"},"431000":{"431002":"åæ¹åº","431003":"èä»åº","431021":"æ¡é³å¿","431022":"å®ç« å¿","431023":"æ°¸å
´å¿","431024":"å禾å¿","431025":"临æ¦å¿","431026":"æ±åå¿","431027":"æ¡ä¸å¿","431028":"å®ä»å¿","431081":"èµå
´å¸"},"431100":{"431102":"é¶éµåº","431103":"å·æ°´æ»©åº","431121":"ç¥é³å¿","431122":"ä¸å®å¿","431123":"åçå¿","431124":"éå¿","431125":"æ±æ°¸å¿","431126":"å®è¿å¿","431127":"èå±±å¿","431128":"æ°ç°å¿","431129":"æ±åç¶æèªæ²»å¿"},"431200":{"431202":"鹤ååº","431221":"䏿¹å¿","431222":"æ²
éµå¿","431223":"辰溪å¿","431224":"æºæµ¦å¿","431225":"ä¼åå¿","431226":"麻é³èæèªæ²»å¿","431227":"æ°æä¾æèªæ²»å¿","431228":"è·æ±ä¾æèªæ²»å¿","431229":"éå·èæä¾æèªæ²»å¿","431230":"ééä¾æèªæ²»å¿","431281":"æ´ªæ±å¸"},"431300":{"431302":"卿åº","431321":"åå³°å¿","431322":"æ°åå¿","431381":"å·æ°´æ±å¸","431382":"æ¶æºå¸"},"433100":{"433101":"åé¦å¸","433122":"泸溪å¿","433123":"å¤å°å¿","433124":"è±å£å¿","433125":"ä¿éå¿","433126":"å¤ä¸å¿","433127":"永顺å¿","433130":"é¾å±±å¿"},"440000":{"440100":"广å·å¸","440200":"é¶å
³å¸","440300":"æ·±å³å¸","440400":"ç æµ·å¸","440500":"æ±å¤´å¸","440600":"ä½å±±å¸","440700":"æ±é¨å¸","440800":"æ¹æ±å¸","440900":"èåå¸","441200":"èåºå¸","441300":"æ å·å¸","441400":"æ¢
å·å¸","441500":"æ±å°¾å¸","441600":"æ²³æºå¸","441700":"鳿±å¸","441800":"æ¸
è¿å¸","441900":"ä¸èå¸","442000":"ä¸å±±å¸","445100":"æ½®å·å¸","445200":"æé³å¸","445300":"äºæµ®å¸"},"440100":{"440103":"èæ¹¾åº","440104":"è¶ç§åº","440105":"æµ·ç åº","440106":"天河åº","440111":"ç½äºåº","440112":"é»ååº","440113":"çªç¦ºåº","440114":"è±é½åº","440115":"åæ²åº","440117":"ä»ååº","440118":"å¢ååº"},"440200":{"440203":"æ¦æ±åº","440204":"æµæ±åº","440205":"æ²æ±åº","440222":"å§å
´å¿","440224":"ä»åå¿","440229":"ç¿æºå¿","440232":"ä¹³æºç¶æèªæ²»å¿","440233":"æ°ä¸°å¿","440281":"乿å¸","440282":"åéå¸"},"440300":{"440303":"ç½æ¹åº","440304":"ç¦ç°åº","440305":"åå±±åº","440306":"å®å®åº","440307":"é¾å²åº","440308":"çç°åº"},"440400":{"440402":"馿´²åº","440403":"æé¨åº","440404":"éæ¹¾åº"},"440500":{"440507":"龿¹åº","440511":"éå¹³åº","440512":"æ¿ æ±åº","440513":"æ½®é³åº","440514":"æ½®ååº","440515":"æ¾æµ·åº","440523":"åæ¾³å¿"},"440600":{"440604":"ç¦
ååº","440605":"åæµ·åº","440606":"顺德åº","440607":"䏿°´åº","440608":"髿åº"},"440700":{"440703":"è¬æ±åº","440704":"æ±æµ·åº","440705":"æ°ä¼åº","440781":"å°å±±å¸","440783":"å¼å¹³å¸","440784":"鹤山å¸","440785":"æ©å¹³å¸"},"440800":{"440802":"赤ååº","440803":"éå±±åº","440804":"å¡å¤´åº","440811":"éº»ç« åº","440823":"éæºªå¿","440825":"å¾é»å¿","440881":"廿±å¸","440882":"é·å·å¸","440883":"å´å·å¸"},"440900":{"440902":"èååº","440904":"çµç½åº","440981":"é«å·å¸","440982":"åå·å¸","440983":"ä¿¡å®å¸"},"441200":{"441202":"端å·åº","441203":"鼿¹åº","441204":"é«è¦åº","441223":"广å®å¿","441224":"æéå¿","441225":"å°å¼å¿","441226":"å¾·åºå¿","441284":"åä¼å¸"},"441300":{"441302":"æ ååº","441303":"æ é³åº","441322":"åç½å¿","441323":"æ ä¸å¿","441324":"é¾é¨å¿"},"441400":{"441402":"æ¢
æ±åº","441403":"æ¢
å¿åº","441422":"大åå¿","441423":"丰顺å¿","441424":"äºåå¿","441426":"å¹³è¿å¿","441427":"èå²å¿","441481":"å
´å®å¸"},"441500":{"441502":"ååº","441521":"海丰å¿","441523":"éæ²³å¿","441581":"é丰å¸"},"441600":{"441602":"æºååº","441621":"ç´«éå¿","441622":"é¾å·å¿","441623":"è¿å¹³å¿","441624":"åå¹³å¿","441625":"䏿ºå¿"},"441700":{"441702":"æ±ååº","441704":"é³ä¸åº","441721":"é³è¥¿å¿","441781":"鳿¥å¸"},"441800":{"441802":"æ¸
ååº","441803":"æ¸
æ°åº","441821":"ä½åå¿","441823":"é³å±±å¿","441825":"è¿å±±å£®æç¶æèªæ²»å¿","441826":"è¿åç¶æèªæ²»å¿","441881":"è±å¾·å¸","441882":"è¿å·å¸"},"441900":{"441900003":"ä¸åè¡é","441900004":"ååè¡é","441900005":"䏿±è¡é","441900006":"èåè¡é","441900101":"ç³ç¢£é","441900102":"ç³é¾é","441900103":"è¶å±±é","441900104":"ç³æé","441900105":"ä¼ç³é","441900106":"横沥é","441900107":"桥头é","441900108":"è°¢å²é","441900109":"ä¸åé","441900110":"常平é","441900111":"寮æ¥é","441900112":"æ¨æ¨å¤´é","441900113":"大æé","441900114":"黿±é","441900115":"æ¸
溪é","441900116":"å¡å¦é","441900117":"å¤å²é","441900118":"大å²å±±é","441900119":"é¿å®é","441900121":"èé¨é","441900122":"åè¡é","441900123":"æ²ç°é","441900124":"éæ»é","441900125":"æ´ªæ¢
é","441900126":"麻æ¶é","441900127":"æç墩é","441900128":"ä¸å é","441900129":"é«åé","441900401":"æ¾å±±æ¹ç®¡å§ä¼","441900402":"è鍿¸¯ç®¡å§ä¼","441900403":"ä¸èçæå"},"442000":{"442000001":"ç³å²åºè¡é","442000002":"ä¸åºè¡é","442000003":"ç«ç¬å¼ååºè¡é","442000004":"西åºè¡é","442000005":"ååºè¡é","442000006":"äºæ¡å±±è¡é","442000100":"å°æ¦é","442000101":"é»åé","442000102":"æ°ä¼é","442000103":"ä¸å¤é","442000104":"ä¸åé","442000105":"å¤éé","442000106":"æ²æºªé","442000107":"妿´²é","442000108":"港å£é","442000109":"ä¸è§é","442000110":"横æ é","442000111":"å头é","442000112":"éæ²é","442000113":"åæé","442000114":"ä¸ä¹¡é","442000115":"æ¿èé","442000116":"大æ¶é","442000117":"ç¥æ¹¾é"},"445100":{"445102":"æ¹æ¡¥åº","445103":"æ½®å®åº","445122":"饶平å¿"},"445200":{"445202":"æ¦ååº","445203":"æä¸åº","445222":"æè¥¿å¿","445224":"æ æ¥å¿","445281":"æ®å®å¸"},"445300":{"445302":"äºååº","445303":"äºå®åº","445321":"æ°å
´å¿","445322":"éåå¿","445381":"ç½å®å¸"},"450000":{"450100":"åå®å¸","450200":"æ³å·å¸","450300":"æ¡æå¸","450400":"梧å·å¸","450500":"åæµ·å¸","450600":"é²å港å¸","450700":"é¦å·å¸","450800":"贵港å¸","450900":"çæå¸","451000":"ç¾è²å¸","451100":"è´ºå·å¸","451200":"æ²³æ± å¸","451300":"æ¥å®¾å¸","451400":"å´å·¦å¸"},"450100":{"450102":"å
´å®åº","450103":"éç§åº","450105":"æ±ååº","450107":"西乡å¡åº","450108":"è¯åºåº","450109":"éå®åº","450110":"æ¦é¸£åº","450123":"éå®å¿","450124":"马山å¿","450125":"䏿å¿","450126":"宾é³å¿","450127":"横å¿"},"450200":{"450202":"åä¸åº","450203":"鱼峰åº","450204":"æ³ååº","450205":"æ³ååº","450206":"æ³æ±åº","450222":"æ³åå¿","450223":"鹿寨å¿","450224":"èå®å¿","450225":"èæ°´èæèªæ²»å¿","450226":"䏿±ä¾æèªæ²»å¿"},"450300":{"450302":"ç§å³°åº","450303":"å 彩åº","450304":"象山åº","450305":"䏿åº","450311":"éå±±åº","450312":"临æ¡åº","450321":"鳿å¿","450323":"çµå·å¿","450324":"å
¨å·å¿","450325":"å
´å®å¿","450326":"æ°¸ç¦å¿","450327":"çé³å¿","450328":"é¾èåæèªæ²»å¿","450329":"èµæºå¿","450330":"å¹³ä¹å¿","450331":"èæµ¦å¿","450332":"æåç¶æèªæ²»å¿"},"450400":{"450403":"ä¸ç§åº","450405":"é¿æ´²åº","450406":"é¾å©åº","450421":"èæ¢§å¿","450422":"è¤å¿","450423":"èå±±å¿","450481":"岿ºªå¸"},"450500":{"450502":"æµ·ååº","450503":"é¶æµ·åº","450512":"é山港åº","450521":"åæµ¦å¿"},"450600":{"450602":"港å£åº","450603":"é²ååº","450621":"䏿å¿","450681":"ä¸å
´å¸"},"450700":{"450702":"é¦ååº","450703":"é¦ååº","450721":"çµå±±å¿","450722":"浦åå¿"},"450800":{"450802":"港ååº","450803":"港ååº","450804":"è¦å¡åº","450821":"å¹³åå¿","450881":"æ¡å¹³å¸"},"450900":{"450902":"çå·åº","450903":"ç¦ç»µåº","450921":"容å¿","450922":"éå·å¿","450923":"åç½å¿","450924":"å
´ä¸å¿","450981":"åæµå¸"},"451000":{"451002":"峿±åº","451021":"ç°é³å¿","451022":"ç°ä¸å¿","451023":"å¹³æå¿","451024":"å¾·ä¿å¿","451026":"é£å¡å¿","451027":"åäºå¿","451028":"ä¹ä¸å¿","451029":"ç°æå¿","451030":"西æå¿","451031":"éæåæèªæ²»å¿","451081":"é西å¸"},"451100":{"451102":"å
«æ¥åº","451103":"å¹³æ¡åº","451121":"æå¹³å¿","451122":"éå±±å¿","451123":"å¯å·ç¶æèªæ²»å¿"},"451200":{"451202":"éåæ±åº","451221":"å丹å¿","451222":"天峨å¿","451223":"å¤å±±å¿","451224":"ä¸å
°å¿","451225":"ç½å仫佬æèªæ²»å¿","451226":"ç¯æ±æ¯åæèªæ²»å¿","451227":"å·´é©¬ç¶æèªæ²»å¿","451228":"é½å®ç¶æèªæ²»å¿","451229":"大åç¶æèªæ²»å¿","451281":"å®å·å¸"},"451300":{"451302":"å
´å®¾åº","451321":"å¿»åå¿","451322":"象å·å¿","451323":"æ¦å®£å¿","451324":"éç§ç¶æèªæ²»å¿","451381":"åå±±å¸"},"451400":{"451402":"æ±å·åº","451421":"æ¶ç»¥å¿","451422":"宿å¿","451423":"é¾å·å¿","451424":"大æ°å¿","451425":"天çå¿","451481":"å祥å¸"},"460000":{"460100":"æµ·å£å¸","460200":"ä¸äºå¸","460300":"䏿²å¸","460400":"åå·å¸","469001":"äºæå±±å¸","469002":"ç¼æµ·å¸","469005":"ææå¸","469006":"ä¸å®å¸","469007":"䏿¹å¸","469021":"å®å®å¿","469022":"屯æå¿","469023":"æ¾è¿å¿","469024":"临é«å¿","469025":"ç½æ²é»æèªæ²»å¿","469026":"ææ±é»æèªæ²»å¿","469027":"ä¹ä¸é»æèªæ²»å¿","469028":"鵿°´é»æèªæ²»å¿","469029":"ä¿äºé»æèæèªæ²»å¿","469030":"ç¼ä¸é»æèæèªæ²»å¿"},"460100":{"460105":"ç§è±åº","460106":"é¾ååº","460107":"ç¼å±±åº","460108":"ç¾å
°åº"},"460200":{"460202":"æµ·æ£ åº","460203":"åé³åº","460204":"天涯åº","460205":"å´å·åº"},"460300":{"460321":"西æ²ç¾¤å²","460322":"åæ²ç¾¤å²","460323":"䏿²ç¾¤å²çå²ç¤åå
¶æµ·å"},"460400":{"4604001":"é£å¤§é","4604004":"å½è¥è¥¿å¹ååº","4604005":"ååçä½å¦é¢","46040011":"ä¸é½é","460400101":"ååºé","460400102":"å丰é","460400103":"大æé","460400104":"é
æé","460400105":"å
°æ´é","460400106":"å
æé","460400107":"æ¨æ£ é","460400108":"海头é","460400109":"峨èé","460400111":"çäºé","460400112":"ç½é©¬äºé","460400113":"ä¸åé","460400114":"ææµ¦é","460400115":"䏿é","460400116":"æ°å·é","460400404":"å½è¥è¥¿èååº","460400405":"å½è¥èæ´ååº","460400407":"å½è¥å
«ä¸ååº","460400499":"æ´æµ¦ç»æµå¼ååº"},"469001":{"4690011":"éä»é","4690012":"ç
好乡","4690014":"ç
好ååº","469001101":"åå£é","469001102":"æ¯é³é","469001103":"çªé³é","469001201":"æ¯é乡","469001202":"水满乡"},"469002":{"4690021":"å积é","4690024":"å½è¥ä¸å¤ªååº","4690025":"彬æå±±å侨ååº","46900211":"大路é","469002101":"䏿³é","469002102":"ç³å£é","469002103":"ä¸åé","469002104":"åé³é","469002105":"鳿±é","469002106":"龿±é","469002107":"æ½é¨é","469002108":"塿´é","469002109":"é¿å¡é","469002111":"ä¼å±±é","469002402":"å½è¥ä¸çº¢ååº","469002403":"å½è¥ä¸åååº"},"469005":{"4690051":"æåé","4690054":"å½è¥ä¸è·¯ååº","46900511":"ææ´é","469005101":"éå
´é","469005102":"è¬è±é","469005103":"伿é","469005104":"ä¸è·¯é","469005105":"æ½çé","469005106":"ä¸éé","469005107":"ææé","469005108":"ä¸éé","469005109":"龿¥¼é","469005111":"ç¿ç°é","469005112":"æ±ç½é","469005113":"å¯å¡é","469005114":"é¦å±±é","469005115":"éºåé","469005116":"å
¬å¡é","469005401":"å½è¥åé³ååº","469005402":"å½è¥ç½è±ååº"},"469006":{"4690061":"ä¸åé","4690064":"å½è¥ä¸å
´ååº","4690065":"å
´éå侨ååº","46900611":"åæ¡¥é","469006101":"龿»é","469006102":"åä¹é","469006103":"åå®é","469006104":"大èé","469006105":"䏿¾³é","469006106":"礼纪é","469006107":"é¿ä¸°é","469006108":"å±±æ ¹é","469006109":"å大é","469006111":"䏿´ç½é","469006401":"å½è¥ä¸åååº","469006404":"å½è¥æ°ä¸ååº","469006501":"å°æ¹å½è¥å
è¿æåº"},"469007":{"4690071":"å
«æé","4690072":"天å®ä¹¡","4690074":"å½è¥å¹¿åååº","4690075":"䏿¹å侨ååº","469007101":"䏿²³é","469007102":"大ç°é","469007103":"æåé","469007104":"æ¿æ¡¥é","469007105":"ä¸å®¶é","469007106":"åæ´é","469007107":"æ°é¾é","469007201":"æ±è¾¹ä¹¡"},"469021":{"4690211":"å®åé","4690214":"å½è¥ä¸çååº","469021101":"æ°ç«¹é","469021102":"龿¹é","469021103":"é»ç«¹é","469021104":"é·é¸£é","469021105":"é¾é¨é","469021106":"龿²³é","469021107":"å²å£é","469021108":"ç¿°æé","469021109":"坿é","469021401":"å½è¥åæµ·ååº","469021402":"å½è¥é鸡å²ååº"},"469022":{"4690221":"屯åé","4690224":"å½è¥ä¸å»ºååº","469022101":"æ°å
´é","469022102":"æ«æ¨é","469022103":"ä¹å¡é","469022104":"ååé","469022105":"åå¤é","469022106":"å¡å¿é","469022107":"西æé","469022401":"å½è¥ä¸å¤ååº"},"469023":{"4690231":"éæ±é","4690234":"å½è¥çº¢å
ååº","46902311":"大丰é","469023101":"èåé","469023102":"çæºªé","469023103":"æ°¸åé","469023104":"å ä¹é","469023105":"æåé","469023106":"ä¸å
´é","469023107":"ä»å
´é","469023108":"ç¦å±±é","469023109":"桥头é","469023402":"å½è¥è¥¿è¾¾ååº","469023405":"å½è¥éå®ååº"},"469024":{"4690241":"临åé","4690244":"å½è¥çº¢åååº","469024101":"æ³¢è²é","469024102":"ä¸è±é","469024103":"ååé","469024104":"çæ¡é","469024105":"夿é","469024106":"åèé","469024107":"åå®é","469024108":"æ°çé","469024109":"è°æ¥¼é","469024401":"å½è¥å æ¥ååº"},"469025":{"4690251":"çåé","4690252":"ç»æ°´ä¹¡","469025101":"ä¸åé","469025102":"馿ºªé","469025103":"æå®é","469025201":"å
é¨ä¹¡","469025202":"åå¼ä¹¡","469025203":"éé¾ä¹¡","469025204":"鿾乡","469025205":"éæ³¢ä¹¡","469025206":"è£é¦ä¹¡","469025401":"å½è¥ç½æ²ååº","469025404":"å½è¥é¾æ±ååº","469025408":"å½è¥é¦æºªååº"},"469026":{"4690261":"ç³ç¢é","4690262":"çä¸ä¹¡","4690265":"å½è¥é¸ç岿åº","469026101":"åæ²³é","469026102":"åæç°é","469026103":"ä¹çé","469026104":"æåé","469026105":"æµ·å°¾é","469026106":"ä¸åé","469026401":"å½è¥çº¢æååº","469026501":"æµ·åç¿ä¸èåæéå
¬å¸"},"469027":{"4690271":"æ±ç±é","4690275":"å½è¥å°å³°å²æä¸å
¬å¸","46902711":"èºææµ·é","469027101":"ä¸å²é","469027102":"大å®é","469027103":"å¿ä»²é","469027104":"åå®¶é","469027105":"乿é","469027106":"å©å½é","469027107":"黿µé","469027108":"ä½ç½é","469027109":"å°å³°é","469027401":"å½è¥å±±è£ååº","469027402":"å½è¥ä¹å
ååº","469027405":"å½è¥ä¿å½ååº","469027501":"å½è¥èºææµ·çåº"},"469028":{"4690281":"椰æé","4690282":"æè乡","4690284":"å½è¥å²é¨ååº","4690285":"å½è¥åç½å±±æä¸å
¬å¸","469028101":"å
å¡é","469028102":"䏿é","469028103":"è±å·é","469028104":"é广é","469028105":"æç½é","469028106":"æ¬å·é","469028107":"æ°æé","469028108":"é»å®é","469028201":"群è±ä¹¡","469028401":"å½è¥åå¹³ååº"},"469029":{"4690291":"ä¿åé","4690292":"å
å¼ä¹¡","469029101":"ä»ç²é","469029102":"å èé","469029103":"åæ°´é","469029104":"æ°æ¿é","469029105":"ä¸éé","469029201":"åæä¹¡","469029202":"æ¯æä¹¡","469029401":"å½è¥æ°æååº","469029402":"æµ·åä¿äºç带ä½ç©ç ç©¶æ","469029403":"å½è¥éæ±ååº","469029405":"å½è¥ä¸éååº"},"469030":{"4690301":"è¥æ ¹é","4690302":"åç½å±±ä¹¡","4690305":"æµ·å黿¯å±±ç级èªç¶ä¿æ¤åºç®¡çç«","469030101":"æ¹¾å²é","469030102":"黿¯å±±é","469030103":"åå¹³é","469030104":"é¿å¾é","469030105":"红æ¯é","469030106":"ä¸å¹³é","469030201":"ä¸å®ä¹¡","469030202":"ä»è¿ä¹¡","469030402":"å½è¥é³æ±ååº","469030403":"å½è¥ä¹ç³ååº","469030406":"å½è¥å éååº","469030407":"å½è¥é¿å¾ååº"},"500000":{"500100":"å¸è¾åº","500228":"æ¢å¹³å¿","500229":"åå£å¿","500230":"丰é½å¿","500231":"嫿±å¿","500232":"æ¦éå¿","500233":"å¿ å¿","500235":"äºé³å¿","500236":"å¥èå¿","500237":"å·«å±±å¿","500238":"巫溪å¿","500240":"ç³æ±åå®¶æèªæ²»å¿","500241":"ç§å±±åå®¶æèæèªæ²»å¿","500242":"é
é³åå®¶æèæèªæ²»å¿","500243":"彿°´èæåå®¶æèªæ²»å¿"},"500100":{"500101":"ä¸å·åº","500102":"涪éµåº","500103":"æ¸ä¸åº","500104":"大渡å£åº","500105":"æ±ååº","500106":"æ²åªååº","500107":"ä¹é¾å¡åº","500108":"å岸åº","500109":"åç¢åº","500110":"綦æ±åº","500111":"大足åº","500112":"æ¸ååº","500113":"å·´ååº","500114":"黿±åº","500115":"é¿å¯¿åº","500116":"æ±æ´¥åº","500117":"åå·åº","500118":"æ°¸å·åº","500119":"åå·åº","500120":"ç§å±±åº","500151":"鿢åº","500152":"æ½¼ååº","500153":"è£æåº","500154":"å¼å·åº"},"500228":{"5002282":"å®è乡","5002284":"æ¢å¹³å¿ååº","50022811":"èå¥é","50022812":"åå
´é","500228001":"æ¢å¹³å¿æ¢å±±è¡é","500228002":"æ¢å¹³å¿åæ¡è¡é","500228101":"ä»è´¤é","500228102":"礼让é","500228103":"äºé¾é","500228104":"å±é¦é","500228106":"è¢é©¿é","500228107":"æ°çé","500228108":"ç¦ç¦é","500228109":"é带é","500228111":"æè¾¾é","500228112":"è«å¹³é","500228113":"åæé","500228114":"åé¾é","500228115":"碧山é","500228116":"èåé","500228117":"䏿é","500228118":"é¾é¨é","500228119":"æåé","500228121":"ç³å®é","500228122":"æå®¶é","500228123":"大è§é","500228124":"竹山é","500228125":"è é¾é","500228126":"ææ¡¥é","500228127":"æ²æ°´é","500228201":"éé¨ä¹¡","500228202":"é¾è乡","500228203":"å¤å¹³ä¹¡","500228205":"ç´«ç
§ä¹¡","500228401":"æ¢å¹³å¿åæ¡å·¥ä¸ååº"},"500229":{"50022911":"å¸å®é","50022921":"åæ²³ä¹¡","50022922":"ååªä¹¡","500229001":"èåè¡é","500229002":"å¤å
´è¡é","500229102":"å·´å±±é","500229103":"åªåé","500229104":"åºåé","500229105":"æéé","500229106":"ä¿®é½é","500229107":"é«è§é","500229108":"é«çé","500229109":"ä¸å®é","500229111":"髿¥ é","500229201":"é¾ç°ä¹¡","500229202":"åå±ä¹¡","500229205":"å·¦å²ä¹¡","500229208":"沿河乡","500229211":"è¼å乡","500229212":"鸡鸣乡","500229214":"卿ºªä¹¡","500229216":"æä¸ä¹¡","500229217":"治平乡","500229219":"å²å¤©ä¹¡","500229221":"河鱼乡"},"500230":{"500230":"åå±±è¡é","50023011":"å
´ä¹é","50023012":"å
´é¾é","50023021":"ä¸å»ºä¹¡","500230101":"èå¨é","500230102":"社åé","500230103":"ä¸å
é","500230104":"许æå¯ºé","500230105":"è£å®¶é","500230106":"æ 人é","500230107":"åç´é","500230109":"é«å®¶é","500230111":"åè·¯é","500230112":"æ±æ± é","500230113":"龿²³é","500230114":"æ¦å¹³é","500230115":"å
鸾é","500230116":"æ¹æ®é","500230118":"å天æ¹é","500230119":"ä¿åé","500230121":"仿²é","500230122":"é¾åé","500230123":"æ¨é¾é","500230124":"åé¾é","500230125":"ä»å¥³æ¹é","500230202":"éé¾ä¹¡","500230206":"太平å乡","500230207":"é½ç£ä¹¡","500230209":"æ å乡"},"500231":{"50023111":"太平é","50023112":"裴å
´é","500231001":"æ¡æºªè¡é","500231002":"æ¡é³è¡é","500231101":"æ°æ°é","500231102":"æ²åªé","500231103":"å¨åé","500231104":"æ®é¡ºé","500231105":"æ°¸å®é","500231106":"é«å®é","500231107":"é«å³°é","500231108":"äºæ´é","500231109":"æ¾æºªé","500231111":"鹤游é","500231112":"åªå±±é","500231113":"ç å°é","500231114":"æ¹åé","500231115":"æ å®¶é","500231116":"å
å®¶é","500231117":"ç½å®¶é","500231118":"永平é","500231119":"䏿ºªé","500231121":"黿²é","500231122":"é¿é¾é","500231202":"æ²æ²³ä¹¡","500231204":"大ç³ä¹¡"},"500232":{"5002321":"å··å£é","5002322":"夿¥ä¹¡","50023211":"ååé","50023221":"ååªèæåå®¶æä¹¡","500232101":"ç«çé","500232102":"ç½é©¬é","500232103":"鏿±é","500232104":"é¿åé","500232105":"æ±å£é","500232106":"平桥é","500232107":"ç¾è§é","500232108":"ä»å¥³å±±é","500232109":"æ¡æ¢é","500232111":"å顺é","500232112":"åæ²³é","500232202":"åºå乡","500232203":"ç³æ¡¥èæåå®¶æä¹¡","500232205":"é»èºä¹¡","500232206":"æ²§æ²ä¹¡","500232207":"æå¤èæåå®¶æä¹¡","500232208":"åå°ä¹¡","500232209":"ç½äºä¹¡","500232211":"浩å£èæä»¡ä½¬æä¹¡","500232212":"æ¥é¾ä¹¡","500232213":"赵家乡","500232214":"å¤§æ´æ²³ä¹¡"},"500233":{"50023311":"å®åé","50023312":"ç½ç³é","50023321":"å
´å³°ä¹¡","500233001":"å¿ å·è¡é","500233002":"ç½å
¬è¡é","500233101":"æ°çé","500233102":"任家é","500233103":"乿¨é","500233104":"æ´æ¸¡é","500233105":"䏿ºªé","500233106":"å¤å
´é","500233107":"ç³å®é","500233108":"æ±æºªé","500233109":"é鹤é","500233111":"ç³é»é","500233112":"马çé","500233113":"é鸡é","500233114":"æ°ç«é","500233115":"åæ¡é","500233116":"æå±±é","500233117":"è±æ¡¥é","500233118":"永丰é","500233119":"䏿±é","500233122":"é»éé","500233201":"å广乡","500233203":"ç³å乡","500233204":"磨ååå®¶æä¹¡","500233206":"æ¶äºä¹¡","500233208":"é声乡"},"500235":{"50023513":"æ¡åªé","50023514":"èèé","500235001":"åæ±è¡é","500235002":"éé¾è¡é","500235003":"人åè¡é","500235004":"çé¾è¡é","500235105":"é¾è§é","500235107":"æ
éµé","500235108":"红ç®é","500235115":"è·¯é³é","500235116":"ååé","500235118":"æ¸ é©¬é","500235121":"é»ç³é","500235122":"å·´é³é","500235123":"æ²å¸é","500235124":"é±¼æ³é","500235125":"å¤é¸£é","500235127":"å®åªé","500235128":"åæºªé","500235129":"ååé","500235131":"æ±å£é","500235132":"é«é³é","500235133":"å¹³å®é","500235135":"äºé³é","500235136":"äºå®é","500235137":"æ éé","500235138":"åé¾é","500235139":"泥溪é","500235141":"å
»é¹¿é","500235142":"æ°´å£é","500235143":"å °åªé","500235144":"龿´é","500235145":"åå¶é","500235146":"èçµé","500235147":"大é³é","500235208":"å¤é乡","500235215":"æ°æ´¥ä¹¡","500235216":"æ®å®ä¹¡","500235218":"æ´é¹¿ä¹¡","500235219":"ç³é¨ä¹¡","500235239":"ä¸å乡","500235242":"æ¸
æ°´åå®¶æèªæ²»ä¹¡"},"500236":{"50023612":"康ä¹é","50023613":"æ°æ°é","50023627":"康åªä¹¡","500236001":"æ°¸å®è¡é","500236002":"é±¼å¤è¡é","500236003":"å¤é¨è¡é","500236117":"ç½å¸é","500236118":"èå é","500236119":"汾河é","500236121":"大æ é","500236122":"竹åé","500236123":"å
¬å¹³é","500236124":"æ±è¡£é","500236125":"ç²é«é","500236126":"ç¾å¸é","500236127":"å祥é","500236128":"å
´éé","500236129":"éé¾é","500236131":"æ°¸ä¹é","500236132":"å®åªé","500236133":"äºé©¬é","500236134":"éè²é","500236265":"岩湾乡","500236266":"å¹³å®ä¹¡","500236267":"红å乡","500236269":"ç³å²ä¹¡","500236272":"太ååå®¶æä¹¡","500236274":"鹤峰乡","500236275":"å¯åªä¹¡","500236276":"é¿å®åå®¶æä¹¡","500236277":"龿¡¥åå®¶æä¹¡","500236278":"äºé¾åå®¶æä¹¡"},"500237":{"5002372":"红椿乡","50023711":"éé¼é","50023721":"建åªä¹¡","500237001":"é«åè¡é","500237002":"é¾é¨è¡é","500237101":"åºå®é","500237102":"大æé","500237103":"ç¦ç°é","500237104":"龿ºªé","500237105":"åé¾é","500237106":"å®é³é","500237107":"骡åªé","500237108":"æ±é¾é","500237109":"宿¸¡é","500237111":"巫峡é","500237207":"两åªä¹¡","500237208":"æ²å°ºä¹¡","500237211":"大溪乡","500237214":"éåªä¹¡","500237216":"平河乡","500237219":"å½é³ä¹¡","500237222":"竹贤乡","500237225":"䏿ºªä¹¡","500237227":"å¹ç³ä¹¡","500237229":"ç¬åªä¹¡","500237231":"é家乡"},"500238":{"5002381":"åå¢é","5002384":"çº¢æ± åç»æµå¼ååº","50023811":"å³°çµé","50023821":"é¿æ¡ä¹¡","50023824":"åé³ä¹¡","500238001":"宿²³è¡é","500238002":"ææ¨è¡é","500238101":"å¤å°é","500238102":"å®åé","500238103":"ä¸ç£ºé","500238104":"å¤è·¯é","500238105":"æå³°é","500238106":"å¾å®¶é","500238107":"ç½é¹¿é","500238108":"å°å±±é","500238109":"ä¸å ¡é","500238111":"å¡åé","500238112":"æé³é","500238113":"ç°åé","500238114":"éåé","500238115":"è±è§é","500238116":"è²è²é","500238117":"ååé","500238204":"èå©ä¹¡","500238207":"大河乡","500238208":"天æä¹¡","500238226":"é±¼é³ä¹¡","500238227":"ä¹é¾ä¹¡","500238234":"ä¸å²ä¹¡","500238237":"è±å°ä¹¡","500238239":"å
°è±ä¹¡","500238242":"䏿¢ä¹¡","500238243":"天å
乡"},"500240":{"500240":"ä¸è·¯è¡é","50024011":"龿²é","50024021":"ç³å®¶ä¹¡","500240101":"西沱é","500240103":"æ¦å´é","500240104":"临溪é","500240105":"黿°´é","500240106":"马æ¦é","500240107":"æ²åé","500240108":"çåºé","500240109":"沿溪é","500240111":"é±¼æ± é","500240112":"䏿²³é","500240113":"大æé","500240114":"桥头é","500240115":"䏿é","500240116":"å·æ°´é","500240117":"é»é¹¤é","500240203":"é»åºä¹¡","500240204":"䏿乡","500240205":"å
å¡ä¹¡","500240207":"ä¸ç乡","500240208":"ç家乡","500240209":"æ²³å´ä¹¡","500240212":"æ«æ¨ä¹¡","500240213":"ä¸ç乡","500240214":"æ´æ°ä¹¡","500240216":"龿½ä¹¡","500240217":"æ°ä¹ä¹¡","500240218":"éé乡","500240219":"é竹乡"},"500241":{"50024111":"é
æ±é","500241001":"ä¸åè¡é","500241002":"乿¨è¡é","500241003":"å¹³å¯è¡é","500241102":"æ¸
溪åºé","500241103":"éå£é","500241104":"溶溪é","500241105":"å®åºé","500241106":"龿± é","500241107":"ç³å ¤é","500241108":"峨溶é","500241109":"æ´ªå®é","500241111":"ç³è¶é","500241112":"æ¢
æ±é","500241113":"å
°æ¡¥é","500241114":"èç°é","500241115":"溪å£é","500241116":"妿³é","500241117":"å®åé","500241118":"éä»é","500241119":"éçµé","500241201":"åæºªä¹¡","500241207":"æµ·æ´ä¹¡","500241208":"大溪乡","500241211":"æ¶æ´ä¹¡","500241214":"ä¸å¹³ä¹¡","500241215":"岿ºªä¹¡"},"500242":{"5002422":"æ¶å¸ä¹¡","50024211":"æ³æºªé","50024221":"ååªä¹¡","50024222":"æ¸
æ³ä¹¡","500242001":"æ¡è±æºè¡é","500242002":"éå¤è¡é","500242101":"龿½é","500242102":"麻æºé","500242103":"é
é
¬é","500242104":"大溪é","500242105":"å
´éé","500242106":"黿°´é","500242107":"ä¸å¸é","500242108":"龿»©é","500242109":"ææºªé","500242111":"é
æ°´æ²³é","500242112":"èå²é","500242113":"å°æ²³é","500242114":"æ¿æºªé","500242202":"éé¼ä¹¡","500242204":"å¯å¤§ä¹¡","500242205":"åæä¹¡","500242206":"äºç¦ä¹¡","500242207":"æ¨å¶ä¹¡","500242208":"æ¯å乡","500242209":"è±ç°ä¹¡","500242211":"天é¦ä¹¡","500242212":"å®å±
乡","500242213":"䏿¨ä¹¡","500242214":"两罾乡","500242215":"æ¿æ¡¥ä¹¡","500242216":"宿¸
乡","500242217":"åè
°ç乡","500242218":"车ç°ä¹¡","500242219":"è
´å°ä¹¡","500242221":"åºæºªä¹¡","500242222":"浪åªä¹¡","500242223":"忳乡","500242224":"æ¥ æ¨ä¹¡"},"500243":{"50024311":"ä¸è¶³é","50024321":"走马乡","500243001":"æ±èè¡é","500243002":"ç»åºè¡é","500243003":"éæ°´è¡é","500243101":"ä¿å®¶é","500243102":"éå±±é","500243103":"é«è°·é","500243104":"æ¡æé","500243105":"鹿è§é","500243106":"é»å®¶é","500243107":"æ®åé","500243108":"é¾å°é","500243109":"è¿æ¹é","500243111":"å¹³å®é","500243112":"é¿çé","500243113":"æ°ç°é","500243114":"éåé","500243115":"太åé","500243116":"龿ºªé","500243117":"æ¢
ååé","500243118":"大åé","500243201":"岩ä¸ä¹¡","500243202":"鹿鸣乡","500243204":"æ££æ£ ä¹¡","500243206":"ä¸ä¹ä¹¡","500243207":"èå乡","500243208":"ç³æ³ä¹¡","500243211":"è¦å¡ä¹¡","500243213":"乿¢ä¹¡","500243217":"诸ä½ä¹¡","500243219":"æ¡æ¥¼ä¹¡","500243222":"åæä¹¡","500243223":"åé¾ä¹¡","500243224":"ç³ç乡","500243225":"大å乡","500243226":"润溪乡","500243227":"ææºªä¹¡","500243228":"é¾å¡ä¹¡"},"510000":{"510100":"æé½å¸","510300":"èªè´¡å¸","510400":"ææè±å¸","510500":"泸å·å¸","510600":"å¾·é³å¸","510700":"绵é³å¸","510800":"广å
å¸","510900":"éå®å¸","511000":"å
æ±å¸","511100":"ä¹å±±å¸","511300":"åå
å¸","511400":"çå±±å¸","511500":"å®å®¾å¸","511600":"广å®å¸","511700":"è¾¾å·å¸","511800":"é
å®å¸","511900":"å·´ä¸å¸","512000":"èµé³å¸","513200":"é¿åèæç¾æèªæ²»å·","513300":"çåèæèªæ²»å·","513400":"åå±±å½æèªæ²»å·"},"510100":{"510104":"馿±åº","510105":"éç¾åº","510106":"éçåº","510107":"æ¦ä¾¯åº","510108":"æååº","510112":"龿³é©¿åº","510113":"éç½æ±åº","510114":"æ°é½åº","510115":"温æ±åº","510116":"åæµåº","510121":"éå å¿","510124":"é«å¿","510129":"大éå¿","510131":"è²æ±å¿","510132":"æ°æ´¥å¿","510181":"齿±å °å¸","510182":"å½å·å¸","510183":"éå´å¸","510184":"å´å·å¸","510185":"ç®é³å¸"},"510300":{"510302":"èªæµäºåº","510303":"è´¡äºåº","510304":"大å®åº","510311":"沿滩åº","510321":"è£å¿","510322":"å¯é¡ºå¿"},"510400":{"510402":"ä¸åº","510403":"西åº","510411":"ä»ååº","510421":"ç±³æå¿","510422":"çè¾¹å¿"},"510500":{"510502":"æ±é³åº","510503":"纳溪åº","510504":"é¾é©¬æ½åº","510521":"泸å¿","510522":"åæ±å¿","510524":"åæ°¸å¿","510525":"å¤èºå¿"},"510600":{"510603":"æé³åº","510623":"䏿±å¿","510626":"ç½æ±å¿","510681":"广æ±å¸","510682":"ä»é¡å¸","510683":"绵竹å¸"},"510700":{"510703":"涪ååº","510704":"游ä»åº","510705":"å®å·åº","510722":"ä¸å°å¿","510723":"çäºå¿","510725":"æ¢æ½¼å¿","510726":"åå·ç¾æèªæ²»å¿","510727":"å¹³æ¦å¿","510781":"æ±æ²¹å¸"},"510800":{"510802":"å©å·åº","510811":"æååº","510812":"æå¤©åº","510821":"æºèå¿","510822":"éå·å¿","510823":"åéå¿","510824":"èæºªå¿"},"510900":{"510903":"è¹å±±åº","510904":"å®å±
åº","510921":"è¬æºªå¿","510922":"å°æ´ªå¿","510923":"大è±å¿"},"511000":{"511002":"å¸ä¸åº","511011":"ä¸å
´åº","511024":"å¨è¿å¿","511025":"èµä¸å¿","511028":"éæå¿"},"511100":{"511102":"å¸ä¸åº","511111":"æ²æ¹¾åº","511112":"äºéæ¡¥åº","511113":"é壿²³åº","511123":"ç为å¿","511124":"äºç å¿","511126":"夹æ±å¿","511129":"æ²å·å¿","511132":"å³¨è¾¹å½æèªæ²»å¿","511133":"é©¬è¾¹å½æèªæ²»å¿","511181":"峨çå±±å¸"},"511300":{"511302":"顺åºåº","511303":"é«åªåº","511304":"åéµåº","511321":"åé¨å¿","511322":"è¥å±±å¿","511323":"è¬å®å¿","511324":"仪éå¿","511325":"西å
å¿","511381":"éä¸å¸"},"511400":{"511402":"ä¸å¡åº","511403":"å½å±±åº","511421":"ä»å¯¿å¿","511423":"æ´ªé
å¿","511424":"丹棱å¿","511425":"éç¥å¿"},"511500":{"511502":"ç¿ å±åº","511503":"åæºªåº","511521":"å®å®¾å¿","511523":"æ±å®å¿","511524":"é¿å®å¿","511525":"é«å¿","511526":"çå¿","511527":"ç è¿å¿","511528":"å
´æå¿","511529":"å±å±±å¿"},"511600":{"511602":"广å®åº","511603":"åéåº","511621":"å²³æ± å¿","511622":"æ¦èå¿","511623":"黿°´å¿","511681":"åè¥å¸"},"511700":{"511702":"éå·åº","511703":"è¾¾å·åº","511722":"宣æ±å¿","511723":"弿±å¿","511724":"大竹å¿","511725":"æ¸ å¿","511781":"䏿ºå¸"},"511800":{"511802":"é¨ååº","511803":"åå±±åº","511822":"è¥ç»å¿","511823":"æ±æºå¿","511824":"ç³æ£å¿","511825":"天å
¨å¿","511826":"è¦å±±å¿","511827":"å®å
´å¿"},"511900":{"511902":"å·´å·åº","511903":"æ©é³åº","511921":"éæ±å¿","511922":"åæ±å¿","511923":"å¹³æå¿"},"512000":{"512002":"éæ±åº","512021":"å®å²³å¿","512022":"ä¹è³å¿"},"513200":{"513201":"马å°åº·å¸","513221":"æ±¶å·å¿","513222":"çå¿","513223":"èå¿","513224":"æ¾æ½å¿","513225":"ä¹å¯¨æ²å¿","513226":"éå·å¿","513227":"å°éå¿","513228":"黿°´å¿","513230":"壤å¡å¿","513231":"é¿åå¿","513232":"è¥å°çå¿","513233":"红åå¿"},"513300":{"513301":"康å®å¸","513322":"泸å®å¿","513323":"丹巴å¿","513324":"ä¹é¾å¿","513325":"é
æ±å¿","513326":"éåå¿","513327":"çéå¿","513328":"çåå¿","513329":"æ°é¾å¿","513330":"å¾·æ ¼å¿","513331":"ç½çå¿","513332":"ç³æ¸ å¿","513333":"è²è¾¾å¿","513334":"çå¡å¿","513335":"å·´å¡å¿","513336":"乡åå¿","513337":"稻åå¿","513338":"å¾è£å¿"},"513400":{"513401":"西æå¸","513422":"æ¨éèæèªæ²»å¿","513423":"çæºå¿","513424":"å¾·æå¿","513425":"ä¼çå¿","513426":"ä¼ä¸å¿","513427":"å®åå¿","513428":"æ®æ ¼å¿","513429":"叿å¿","513430":"éé³å¿","513431":"æè§å¿","513432":"åå¾·å¿","513433":"åå®å¿","513434":"è¶è¥¿å¿","513435":"çæ´å¿","513436":"ç¾å§å¿","513437":"é·æ³¢å¿"},"520000":{"520100":"è´µé³å¸","520200":"å
çæ°´å¸","520300":"éµä¹å¸","520400":"å®é¡ºå¸","520500":"æ¯èå¸","520600":"éä»å¸","522300":"é»è¥¿åå¸ä¾æèæèªæ²»å·","522600":"é»ä¸åèæä¾æèªæ²»å·","522700":"é»åå¸ä¾æèæèªæ²»å·"},"520100":{"520102":"åæåº","520103":"äºå²©åº","520111":"è±æºªåº","520112":"ä¹å½åº","520113":"ç½äºåº","520115":"è§å±±æ¹åº","520121":"å¼é³å¿","520122":"æ¯ç½å¿","520123":"ä¿®æå¿","520181":"æ¸
éå¸"},"520200":{"520201":"éå±±åº","520203":"å
æç¹åº","520221":"æ°´åå¿","520222":"çå¿"},"520300":{"520302":"红è±å²åº","520303":"æ±å·åº","520304":"æå·åº","520322":"æ¡æ¢å¿","520323":"绥é³å¿","520324":"æ£å®å¿","520325":"éç仡佬æèæèªæ²»å¿","520326":"å¡å·ä»¡ä½¬æèæèªæ²»å¿","520327":"å¤åå¿","520328":"æ¹æ½å¿","520329":"ä½åºå¿","520330":"ä¹ æ°´å¿","520381":"赤水å¸","520382":"仿å¸"},"520400":{"520402":"西ç§åº","520403":"å¹³ååº","520422":"æ®å®å¿","520423":"éå®å¸ä¾æèæèªæ²»å¿","520424":"å
³å²å¸ä¾æèæèªæ²»å¿","520425":"ç´«äºèæå¸ä¾æèªæ²»å¿"},"520500":{"520502":"䏿å
³åº","520521":"大æ¹å¿","520522":"é»è¥¿å¿","520523":"éæ²å¿","520524":"ç»éå¿","520525":"纳éå¿","520526":"å¨å®å½æåæèæèªæ²»å¿","520527":"èµ«ç« å¿"},"520600":{"520602":"碧æ±åº","520603":"ä¸å±±åº","520621":"æ±å£å¿","520622":"çå±ä¾æèªæ²»å¿","520623":"ç³é¡å¿","520624":"æåå¿","520625":"å°æ±åå®¶æèæèªæ²»å¿","520626":"å¾·æ±å¿","520627":"沿河åå®¶æèªæ²»å¿","520628":"æ¾æ¡èæèªæ²»å¿"},"522300":{"522301":"å
´ä¹å¸","522322":"å
´ä»å¿","522323":"æ®å®å¿","522324":"æ´éå¿","522325":"è´ä¸°å¿","522326":"æè°å¿","522327":"å亨å¿","522328":"å®é¾å¿"},"522600":{"522601":"å¯éå¸","522622":"é»å¹³å¿","522623":"æ½ç§å¿","522624":"ä¸ç©å¿","522625":"éè¿å¿","522626":"å²å·©å¿","522627":"天æ±å¿","522628":"é¦å±å¿","522629":"åæ²³å¿","522630":"å°æ±å¿","522631":"é»å¹³å¿","522632":"æ¦æ±å¿","522633":"仿±å¿","522634":"é·å±±å¿","522635":"麻æ±å¿","522636":"丹寨å¿"},"522700":{"522701":"é½åå¸","522702":"ç¦æ³å¸","522722":"èæ³¢å¿","522723":"è´µå®å¿","522725":"ç®å®å¿","522726":"ç¬å±±å¿","522727":"å¹³å¡å¿","522728":"ç½ç¸å¿","522729":"é¿é¡ºå¿","522730":"é¾éå¿","522731":"æ æ°´å¿","522732":"ä¸é½æ°´æèªæ²»å¿"},"530000":{"530100":"ææå¸","530300":"æ²éå¸","530400":"çæºªå¸","530500":"ä¿å±±å¸","530600":"æéå¸","530700":"丽æ±å¸","530800":"æ®æ´±å¸","530900":"临沧å¸","532300":"æ¥éå½æèªæ²»å·","532500":"红河åå°¼æå½æèªæ²»å·","532600":"æå±±å£®æèæèªæ²»å·","532800":"西åççº³å£æèªæ²»å·","532900":"大çç½æèªæ²»å·","533100":"å¾·å®å£ææ¯é¢æèªæ²»å·","533300":"ææ±åå³æèªæ²»å·","533400":"迪åºèæèªæ²»å·"},"530100":{"530102":"äºååº","530103":"çé¾åº","530111":"宿¸¡åº","530112":"西山åº","530113":"ä¸å·åº","530114":"åè´¡åº","530122":"æå®å¿","530124":"坿°å¿","530125":"å®è¯å¿","530126":"ç³æå½æèªæ²»å¿","530127":"嵩æå¿","530128":"ç¦å彿èæèªæ²»å¿","530129":"寻ç¸åæå½æèªæ²»å¿","530181":"å®å®å¸"},"530300":{"530302":"éºéºåº","530303":"æ²¾çåº","530321":"马é¾å¿","530322":"éè¯å¿","530323":"å¸å®å¿","530324":"ç½å¹³å¿","530325":"坿ºå¿","530326":"伿³½å¿","530381":"宣å¨å¸"},"530400":{"530402":"红å¡åº","530403":"æ±å·åº","530422":"æ¾æ±å¿","530423":"éæµ·å¿","530424":"åå®å¿","530425":"æé¨å¿","530426":"å³¨å±±å½æèªæ²»å¿","530427":"æ°å¹³å½æå£æèªæ²»å¿","530428":"å
æ±åå°¼æå½æå£æèªæ²»å¿"},"530500":{"530502":"éé³åº","530521":"æ½ç¸å¿","530523":"é¾éµå¿","530524":"æå®å¿","530581":"è
¾å²å¸"},"530600":{"530602":"æé³åº","530621":"é²ç¸å¿","530622":"å·§å®¶å¿","530623":"çæ´¥å¿","530624":"大å
³å¿","530625":"æ°¸åå¿","530626":"绥æ±å¿","530627":"ééå¿","530628":"å½è¯å¿","530629":"å¨ä¿¡å¿","530630":"æ°´å¯å¿"},"530700":{"530702":"å¤ååº","530721":"çé¾çº³è¥¿æèªæ²»å¿","530722":"æ°¸èå¿","530723":"ååªå¿","530724":"å®èå½æèªæ²»å¿"},"530800":{"530802":"æè
åº","530821":"宿´±åå°¼æå½æèªæ²»å¿","530822":"墨æ±åå°¼æèªæ²»å¿","530823":"æ¯ä¸å½æèªæ²»å¿","530824":"æ¯è°·å£æå½æèªæ²»å¿","530825":"éæ²
彿åå°¼ææç¥æèªæ²»å¿","530826":"æ±ååå°¼æå½æèªæ²»å¿","530827":"åè¿å£ææç¥æä½¤æèªæ²»å¿","530828":"æ¾æ²§æç¥æèªæ²»å¿","530829":"西ç佤æèªæ²»å¿"},"530900":{"530902":"临ç¿åº","530921":"å¤åºå¿","530922":"äºå¿","530923":"永德å¿","530924":"é康å¿","530925":"åæ±æç¥æä½¤æå¸ææå£æèªæ²»å¿","530926":"è¿é©¬å£æä½¤æèªæ²»å¿","530927":"æ²§æºä½¤æèªæ²»å¿"},"532300":{"532301":"æ¥éå¸","532322":"åæå¿","532323":"çå®å¿","532324":"ååå¿","532325":"å§å®å¿","532326":"大å§å¿","532327":"æ°¸ä»å¿","532328":"å
è°å¿","532329":"æ¦å®å¿","532331":"ç¦ä¸°å¿"},"532500":{"532501":"个æ§å¸","532502":"å¼è¿å¸","532503":"èèªå¸","532504":"å¼¥åå¸","532523":"å±è¾¹èæèªæ²»å¿","532524":"建水å¿","532525":"ç³å±å¿","532527":"泸西å¿","532528":"å
é³å¿","532529":"红河å¿","532530":"éå¹³èæç¶æå£æèªæ²»å¿","532531":"绿æ¥å¿","532532":"æ²³å£ç¶æèªæ²»å¿"},"532600":{"532601":"æå±±å¸","532622":"ç å±±å¿","532623":"西ç´å¿","532624":"麻æ å¡å¿","532625":"马å
³å¿","532626":"ä¸åå¿","532627":"广åå¿","532628":"å¯å®å¿"},"532800":{"532801":"æ¯æ´ªå¸","532822":"åæµ·å¿","532823":"åè
å¿"},"532900":{"532901":"大çå¸","532922":"æ¼¾æ¿å½æèªæ²»å¿","532923":"祥äºå¿","532924":"宾å·å¿","532925":"弥渡å¿","532926":"åæ¶§å½æèªæ²»å¿","532927":"å·å±±å½æåæèªæ²»å¿","532928":"永平å¿","532929":"äºé¾å¿","532930":"æ´±æºå¿","532931":"åå·å¿","532932":"鹤åºå¿"},"533100":{"533102":"ç丽å¸","533103":"èå¸","533122":"æ¢æ²³å¿","533123":"çæ±å¿","533124":"éå·å¿"},"533300":{"533301":"泸水å¸","533323":"ç¦è´¡å¿","533324":"è´¡å±±ç¬é¾æææèªæ²»å¿","533325":"å
°åªç½ææ®ç±³æèªæ²»å¿"},"533400":{"533401":"馿 ¼éæå¸","533422":"å¾·é¦å¿","533423":"维西åå³æèªæ²»å¿"},"540000":{"540100":"æè¨å¸","540200":"æ¥ååå¸","540300":"æé½å¸","540400":"æèå¸","540500":"å±±åå¸","542400":"飿²å°åº","542500":"é¿éå°åº"},"540100":{"540102":"åå
³åº","540103":"å é¾å¾·åºåº","540121":"æå¨å¿","540122":"å½éå¿","540123":"å°¼æ¨å¿","540124":"æ²æ°´å¿","540126":"è¾¾åå¿","540127":"墨竹工å¡å¿"},"540200":{"540202":"æ¡ç ååº","540221":"忍æå¿","540222":"æ±åå¿","540223":"宿¥å¿","540224":"è¨è¿¦å¿","540225":"æåå¿","540226":"æä»å¿","540227":"è°¢éé¨å¿","540228":"ç½æå¿","540229":"ä»å¸å¿","540230":"康马å¿","540231":"å®ç»å¿","540232":"仲巴å¿","540233":"äºä¸å¿","540234":"åéå¿","540235":"èææ¨å¿","540236":"è¨åå¿","540237":"å²å·´å¿"},"540300":{"540302":"å¡è¥åº","540321":"æ±è¾¾å¿","540322":"è´¡è§å¿","540323":"ç±»ä¹é½å¿","540324":"ä¸éå¿","540325":"å¯é
å¿","540326":"å
«å®¿å¿","540327":"左贡å¿","540328":"è康å¿","540329":"æ´éå¿","540330":"è¾¹åå¿"},"540400":{"540402":"å·´å®åº","540421":"工叿±è¾¾å¿","540422":"ç±³æå¿","540423":"墨è±å¿","540424":"æ³¢å¯å¿","540425":"å¯é
å¿","540426":"æå¿"},"540500":{"540502":"ä¹ä¸åº","540521":"æåå¿","540522":"è´¡åå¿","540523":"æ¡æ¥å¿","540524":"ç¼ç»å¿","540525":"æ²æ¾å¿","540526":"æªç¾å¿","540527":"æ´æå¿","540528":"å æ¥å¿","540529":"éåå¿","540530":"éé£å¿","540531":"浪å¡åå¿"},"542400":{"542421":"飿²å¿","542422":"åé»å¿","542423":"æ¯å¦å¿","542424":"èè£å¿","542425":"å®å¤å¿","542426":"ç³æå¿","542427":"ç´¢å¿","542428":"çæå¿","542429":"å·´éå¿","542430":"å°¼çå¿","542431":"åæ¹å¿"},"542500":{"542521":"æ®å
°å¿","542522":"æè¾¾å¿","542523":"å¶å°å¿","542524":"æ¥åå¿","542525":"é©åå¿","542526":"æ¹åå¿","542527":"æªå¤å¿"},"610000":{"610100":"西å®å¸","610200":"éå·å¸","610300":"å®é¸¡å¸","610400":"å¸é³å¸","610500":"æ¸åå¸","610600":"å»¶å®å¸","610700":"æ±ä¸å¸","610800":"æ¦æå¸","610900":"å®åº·å¸","611000":"åæ´å¸"},"610100":{"610102":"æ°ååº","610103":"ç¢æåº","610104":"è²æ¹åº","610111":"çæ¡¥åº","610112":"æªå¤®åº","610113":"éå¡åº","610114":"éè¯åº","610115":"临潼åº","610116":"é¿å®åº","610117":"é«éµåº","610122":"èç°å¿","610124":"å¨è³å¿","610125":"æ·å¿"},"610200":{"610202":"ççåº","610203":"å°å°åº","610204":"èå·åº","610222":"å®åå¿"},"610300":{"610302":"æ¸æ»¨åº","610303":"éå°åº","610304":"éä»åº","610322":"å¤ç¿å¿","610323":"å²å±±å¿","610324":"æ¶é£å¿","610326":"çå¿","610327":"éå¿","610328":"åé³å¿","610329":"éºæ¸¸å¿","610330":"å¤å¿","610331":"太ç½å¿"},"610400":{"610402":"秦é½åº","610403":"æ¨éµåº","610404":"æ¸ååº","610422":"ä¸åå¿","610423":"æ³¾é³å¿","610424":"ä¹¾å¿","610425":"礼æ³å¿","610426":"永寿å¿","610427":"彬å¿","610428":"é¿æ¦å¿","610429":"æ¬éå¿","610430":"æ·³åå¿","610431":"æ¦åå¿","610481":"å
´å¹³å¸"},"610500":{"610502":"临æ¸åº","610503":"åå·åº","610522":"æ½¼å
³å¿","610523":"大èå¿","610524":"åé³å¿","610525":"æ¾åå¿","610526":"è²åå¿","610527":"ç½æ°´å¿","610528":"å¯å¹³å¿","610581":"é©åå¸","610582":"åé´å¸"},"610600":{"610602":"å®å¡åº","610603":"å®å¡åº","610621":"å»¶é¿å¿","610622":"å»¶å·å¿","610623":"åé¿å¿","610625":"å¿ä¸¹å¿","610626":"å´èµ·å¿","610627":"çæ³å¿","610628":"å¯å¿","610629":"æ´å·å¿","610630":"å®å·å¿","610631":"é»é¾å¿","610632":"é»éµå¿"},"610700":{"610702":"æ±å°åº","610721":"åéå¿","610722":"ååºå¿","610723":"æ´å¿","610724":"西乡å¿","610725":"åå¿","610726":"å®å¼ºå¿","610727":"ç¥é³å¿","610728":"éå·´å¿","610729":"çåå¿","610730":"ä½åªå¿"},"610800":{"610802":"æ¦é³åº","610803":"横山åº","610821":"ç¥æ¨å¿","610822":"åºè°·å¿","610824":"éè¾¹å¿","610825":"å®è¾¹å¿","610826":"绥德å¿","610827":"ç±³èå¿","610828":"ä½³å¿","610829":"å´å ¡å¿","610830":"æ¸
æ¶§å¿","610831":"åæ´²å¿"},"610900":{"610902":"æ±æ»¨åº","610921":"æ±é´å¿","610922":"ç³æ³å¿","610923":"å®éå¿","610924":"ç´«é³å¿","610925":"å²çå¿","610926":"å¹³å©å¿","610927":"éåªå¿","610928":"æ¬é³å¿","610929":"ç½æ²³å¿"},"611000":{"611002":"åå·åº","611021":"æ´åå¿","611022":"丹å¤å¿","611023":"ååå¿","611024":"å±±é³å¿","611025":"éå®å¿","611026":"ææ°´å¿"},"620000":{"620100":"å
°å·å¸","620200":"å峪å
³å¸","620300":"éæå¸","620400":"ç½é¶å¸","620500":"天水å¸","620600":"æ¦å¨å¸","620700":"å¼ æå¸","620800":"å¹³åå¸","620900":"é
æ³å¸","621000":"åºé³å¸","621100":"å®è¥¿å¸","621200":"éåå¸","622900":"临å¤åæèªæ²»å·","623000":"çåèæèªæ²»å·"},"620100":{"620102":"åå
³åº","620103":"ä¸éæ²³åº","620104":"西åºåº","620105":"å®å®åº","620111":"红å¤åº","620121":"æ°¸ç»å¿","620122":"çå
°å¿","620123":"æ¦ä¸å¿"},"620200":{},"620300":{"620302":"éå·åº","620321":"æ°¸æå¿"},"620400":{"620402":"ç½é¶åº","620403":"å¹³å·åº","620421":"éè¿å¿","620422":"ä¼å®å¿","620423":"æ¯æ³°å¿"},"620500":{"620502":"秦å·åº","620503":"麦积åº","620521":"æ¸
æ°´å¿","620522":"秦å®å¿","620523":"çè°·å¿","620524":"æ¦å±±å¿","620525":"å¼ å®¶å·åæèªæ²»å¿"},"620600":{"620602":"åå·åº","620621":"æ°å¤å¿","620622":"夿µªå¿","620623":"天ç¥èæèªæ²»å¿"},"620700":{"620702":"çå·åº","620721":"èåè£åºæèªæ²»å¿","620722":"æ°ä¹å¿","620723":"临泽å¿","620724":"é«å°å¿","620725":"山丹å¿"},"620800":{"620802":"å´å³åº","620821":"æ³¾å·å¿","620822":"çµå°å¿","620823":"å´ä¿¡å¿","620824":"åäºå¿","620825":"åºæµªå¿","620826":"éå®å¿"},"620900":{"620902":"èå·åº","620921":"éå¡å¿","620922":"çå·å¿","620923":"èåèå¤æèªæ²»å¿","620924":"é¿å
å¡åè¨å
æèªæ²»å¿","620981":"çé¨å¸","620982":"æ¦ç
å¸"},"621000":{"621002":"西峰åº","621021":"åºåå¿","621022":"ç¯å¿","621023":"åæ± å¿","621024":"åæ°´å¿","621025":"æ£å®å¿","621026":"å®å¿","621027":"éåå¿"},"621100":{"621102":"å®å®åº","621121":"鿏å¿","621122":"é西å¿","621123":"æ¸æºå¿","621124":"临洮å¿","621125":"æ¼³å¿","621126":"å²·å¿"},"621200":{"621202":"æ¦é½åº","621221":"æå¿","621222":"æå¿","621223":"宿å¿","621224":"康å¿","621225":"西åå¿","621226":"礼å¿","621227":"å¾½å¿","621228":"两å½å¿"},"622900":{"622901":"临å¤å¸","622921":"临å¤å¿","622922":"康ä¹å¿","622923":"æ°¸éå¿","622924":"广河å¿","622925":"åæ¿å¿","622926":"ä¸ä¹¡æèªæ²»å¿","622927":"积ç³å±±ä¿å®æä¸ä¹¡ææææèªæ²»å¿"},"623000":{"623001":"åä½å¸","623021":"临æ½å¿","623022":"åå°¼å¿","623023":"èæ²å¿","623024":"è¿é¨å¿","623025":"çæ²å¿","623026":"ç¢æ²å¿","623027":"夿²³å¿"},"630000":{"630100":"西å®å¸","630200":"æµ·ä¸å¸","632200":"æµ·åèæèªæ²»å·","632300":"é»åèæèªæ²»å·","632500":"æµ·åèæèªæ²»å·","632600":"ææ´èæèªæ²»å·","632700":"çæ èæèªæ²»å·","632800":"海西è夿èæèªæ²»å·"},"630100":{"630102":"åä¸åº","630103":"åä¸åº","630104":"å西åº","630105":"åååº","630121":"大éåæåæèªæ²»å¿","630122":"æ¹ä¸å¿","630123":"æ¹æºå¿"},"630200":{"630202":"ä¹é½åº","630203":"å¹³å®åº","630222":"æ°ååæåæèªæ²»å¿","630223":"äºå©åæèªæ²»å¿","630224":"åéåæèªæ²»å¿","630225":"å¾ªåæææèªæ²»å¿"},"632200":{"632221":"鍿ºåæèªæ²»å¿","632222":"ç¥è¿å¿","632223":"æµ·æå¿","632224":"åå¯å¿"},"632300":{"632321":"åä»å¿","632322":"å°æå¿","632323":"æ³½åºå¿","632324":"æ²³åèå¤æèªæ²»å¿"},"632500":{"632521":"å
±åå¿","632522":"åå¾·å¿","632523":"贵德å¿","632524":"å
´æµ·å¿","632525":"è´µåå¿"},"632600":{"632621":"çæ²å¿","632622":"ççå¿","632623":"çå¾·å¿","632624":"è¾¾æ¥å¿","632625":"ä¹
æ²»å¿","632626":"çå¤å¿"},"632700":{"632701":"çæ å¸","632722":"æå¤å¿","632723":"ç§°å¤å¿","632724":"æ²»å¤å¿","632725":"åè°¦å¿","632726":"æ²éº»è±å¿"},"632800":{"632801":"æ ¼å°æ¨å¸","632802":"德令åå¸","632821":"ä¹å
°å¿","632822":"é½å
°å¿","632823":"天峻å¿"},"640000":{"640100":"é¶å·å¸","640200":"ç³å´å±±å¸","640300":"å´å¿ å¸","640400":"åºåå¸","640500":"ä¸å«å¸"},"640100":{"640104":"å
´åºåº","640105":"西å¤åº","640106":"éå¤åº","640121":"æ°¸å®å¿","640122":"è´ºå
°å¿","640181":"çµæ¦å¸"},"640200":{"640202":"大æ¦å£åº","640205":"æ ååº","640221":"å¹³ç½å¿"},"640300":{"640302":"å©éåº","640303":"çº¢å¯ºå ¡åº","640323":"çæ± å¿","640324":"åå¿å¿","640381":"éé峡å¸"},"640400":{"640402":"åå·åº","640422":"西åå¿","640423":"éå¾·å¿","640424":"æ³¾æºå¿","640425":"å½é³å¿"},"640500":{"640502":"æ²å¡å¤´åº","640521":"ä¸å®å¿","640522":"æµ·åå¿"},"650000":{"650100":"ä¹é²æ¨é½å¸","650200":"å
æçä¾å¸","650400":"åé²çªå¸","650500":"åå¯å¸","652300":"æååæèªæ²»å·","652700":"åå°å¡æèå¤èªæ²»å·","652800":"å·´é³éæ¥èå¤èªæ²»å·","652900":"é¿å
èå°åº","653000":"å
ååèæ¯å°å
åèªæ²»å·","653100":"åä»å°åº","653200":"åç°å°åº","654000":"ä¼çåè¨å
èªæ²»å·","654200":"å¡åå°åº","654300":"é¿åæ³°å°åº","659001":"ç³æ²³åå¸","659002":"é¿æå°å¸","659003":"徿¨èå
å¸","659004":"äºå®¶æ¸ å¸","659006":"éé¨å
³å¸"},"650100":{"650102":"天山åº","650103":"æ²ä¾å·´å
åº","650104":"æ°å¸åº","650105":"水磨æ²åº","650106":"头屯河åº","650107":"è¾¾åååº","650109":"ç±³ä¸åº","650121":"ä¹é²æ¨é½å¿"},"650200":{"650202":"ç¬å±±ååº","650203":"å
æçä¾åº","650204":"ç½ç¢±æ»©åº","650205":"ä¹å°ç¦¾åº"},"650400":{"650402":"髿åº","650421":"é¯åå¿","650422":"æå
éå¿"},"650500":{"650502":"ä¼å·åº","650521":"å·´éå¤åè¨å
èªæ²»å¿","650522":"ä¼å¾å¿"},"652300":{"652301":"æåå¸","652302":"é康å¸","652323":"å¼å¾å£å¿","652324":"ç纳æ¯å¿","652325":"å¥å°å¿","652327":"忍è¨å°å¿","652328":"æ¨ååè¨å
èªæ²»å¿"},"652700":{"652701":"åä¹å¸","652702":"é¿æå±±å£å¸","652722":"精河å¿","652723":"温æ³å¿"},"652800":{"652801":"åºå°åå¸","652822":"è½®å°å¿","652823":"å°çå¿","652824":"è¥ç¾å¿","652825":"䏿«å¿","652826":"çèåæèªæ²»å¿","652827":"åéå¿","652828":"åç¡å¿","652829":"åæ¹å¿"},"652900":{"652901":"é¿å
èå¸","652922":"温宿å¿","652923":"åºè½¦å¿","652924":"æ²é
å¿","652925":"æ°åå¿","652926":"æåå¿","652927":"ä¹ä»å¿","652928":"é¿ç¦æå¿","652929":"æ¯åªå¿"},"653000":{"653001":"é¿å¾ä»å¸","653022":"é¿å
é¶å¿","653023":"é¿åå¥å¿","653024":"乿°å¿"},"653100":{"653101":"åä»å¸","653121":"çéå¿","653122":"çåå¿","653123":"è±åæ²å¿","653124":"æ³½æ®å¿","653125":"è车å¿","653126":"å¶åå¿","653127":"麦çæå¿","653128":"å²³æ®æ¹å¿","653129":"ä¼½å¸å¿","653130":"å·´æ¥å¿","653131":"å¡ä»åºå°å¹²å¡åå
èªæ²»å¿"},"653200":{"653201":"åç°å¸","653221":"åç°å¿","653222":"墨çå¿","653223":"ç®å±±å¿","653224":"æ´æµ¦å¿","653225":"çåå¿","653226":"äºç°å¿","653227":"æ°ä¸°å¿"},"654000":{"654002":"ä¼å®å¸","654003":"å¥å±¯å¸","654004":"éå°ææ¯å¸","654021":"ä¼å®å¿","654022":"å¯å¸æ¥å°é¡ä¼¯èªæ²»å¿","654023":"éåå¿","654024":"å·©çå¿","654025":"æ°æºå¿","654026":"æèå¿","654027":"ç¹å
æ¯å¿","654028":"å°¼åå
å¿"},"654200":{"654201":"å¡åå¸","654202":"ä¹èå¸","654221":"颿å¿","654223":"æ²æ¹¾å¿","654224":"æéå¿","654225":"è£æ°å¿","654226":"åå¸å
èµå°èå¤èªæ²»å¿"},"654300":{"654301":"é¿åæ³°å¸","654321":"å¸å°æ´¥å¿","654322":"å¯è´å¿","654323":"ç¦æµ·å¿","654324":"åå·´æ²³å¿","654325":"éæ²³å¿","654326":"忍ä¹å¿"},"659001":{"6590011":"åæ³é","6590015":"å
µå¢ä¸äºäºå¢","659001001":"æ°åè¡é","659001002":"åé³è¡é","659001003":"红山è¡é","659001004":"èè¡è¡é","659001005":"ä¸åè¡é","659001101":"ç³æ²³åé"},"659002":{"6590022":"æåä¾ä¹¡","6590025":"å
µå¢ä¸å¢","65900252":"å
µå¢ä¸å¢","659002001":"éé¶å·è·¯è¡é","659002002":"幸ç¦è·¯è¡é","659002003":"éæ¾è·¯è¡é","659002004":"åå£è¡é","659002402":"å·¥ä¸ååº","659002501":"å
µå¢å
«å¢","659002503":"å
µå¢åå¢","659002504":"å
µå¢åä¸å¢","659002505":"å
µå¢åäºå¢","659002506":"å
µå¢åä¸å¢","659002507":"å
µå¢ååå¢","659002509":"å
µå¢åå
å¢","659002511":"å
µå¢ç¬¬ä¸å¸æ°´å©æ°´çµå·¥ç¨å¤","659002512":"å
µå¢ç¬¬ä¸å¸å¡éæ¨çåºæ°´å©ç®¡çå¤","659002513":"é¿æå°ååº","659002514":"å
µå¢ç¬¬ä¸å¸å¹¸ç¦ååº","659002515":"ä¸å¿çç±","659002516":"å
µå¢ä¸å¢","659002517":"å
µå¢åä¸å¸æ²äºåæ°´å©ç®¡çå¤","659002518":"西工ä¸ååºç®¡çå§åä¼","659002519":"å
µå¢äºå¢"},"659003":{"65900351":"å
µå¢äºåå¢","659003001":"é½å¹²å´åè¡é","659003002":"åæµ·è¡é","659003003":"æ°¸å®åè¡é","659003504":"å
µå¢åååå¢","659003509":"å
µå¢ååä¹å¢","659003511":"å
µå¢äºåä¸å¢","659003513":"å
µå¢äºåä¸å¢","659003514":"å
µå¢å¾æ¨èå
å¸åææåé"},"659004":{"6590045":"å
µå¢ä¸é¶ä¸å¢","659004001":"åå¦è·¯è¡é","659004002":"éæ¹è·¯è¡é","659004003":"人æ°è·¯è¡é","659004501":"å
µå¢ä¸é¶äºå¢","659004502":"å
µå¢ä¸é¶ä¸å¢"}, |
| | | "659006":{"6590061":"åå¤å
¶é","659006101":"å丰é"}, |
| | | "710000":{"710100":"å°æ¹¾ç"}, |
| | | "710100":{"710101":"éé¨","710102":"è¿æ±","710103":"èæ ","710104":"åæ","710105":"æ¾æ¹","710106":"å±ä¸","710107":"å°ä¸","710108":"å°ä¸","710109":"å°å","710110":"å°å","710111":"æ¡å","710112":"äºæ","710113":"æ°å","710114":"å½°å","710115":"åä¹","710116":"æ°ç«¹","710117":"è±è²","710118":"å®å
°","710119":"é«é","710120":"åºé"}, |
| | | "910000":{"810000":"馿¸¯ç¹å«è¡æ¿åº","820000":"æ¾³é¨ç¹å«è¡æ¿åº"}, |
| | | "810000":{"810101":"ä¸è¥¿åº","810102":"ä¸åº","810103":"ä¹é¾ååº","810104":"è§å¡åº","810105":"深水ååº","810106":"æ¹¾ä»åº","810107":"é»å¤§ä»åº","810108":"æ²¹å°æºåº","810109":"离å²åº","810110":"èµéåº","810111":"ååº","810112":"西贡åº","810113":"æ²ç°åº","810114":"屯é¨åº","810115":"大ååº","810116":"èæ¹¾åº","810117":"å
æåº","810118":"馿¸¯","810119":"ä¹é¾","810120":"æ°ç"}, |
| | | "820000":{"820101":"离å²","820102":"æ¾³é¨åå²","820103":"å¼ä»","820104":"è·¯å¼å","820105":"è·¯ç¯"} |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <artifactId>lb-boot-base</artifactId> |
| | | <version>3.0</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <description>å
Œ
±æ¨¡å</description> |
| | | <artifactId>jeecg-boot-base-tools</artifactId> |
| | | |
| | | <dependencies> |
| | | <!--éæspringmvcæ¡æ¶ --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-web</artifactId> |
| | | <optional>true</optional> |
| | | </dependency> |
| | | <!-- Redis --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-data-redis</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.commons</groupId> |
| | | <artifactId>commons-pool2</artifactId> |
| | | </dependency> |
| | | <!--å è½½hutool--> |
| | | <dependency> |
| | | <groupId>cn.hutool</groupId> |
| | | <artifactId>hutool-core</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.hutool</groupId> |
| | | <artifactId>hutool-crypto</artifactId> |
| | | </dependency> |
| | | <!--å è½½beanutils--> |
| | | <dependency> |
| | | <groupId>commons-beanutils</groupId> |
| | | <artifactId>commons-beanutils</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.annotation; |
| | | |
| | | import org.springframework.core.annotation.AliasFor; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.annotation.*; |
| | | |
| | | /** |
| | | * @Author:zyf |
| | | * @Date:2019-07-31 10:43 |
| | | * @Description: æ¶æ¯éååå§å注解 |
| | | **/ |
| | | @Documented |
| | | @Inherited |
| | | @Target({ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Component |
| | | public @interface RabbitComponent { |
| | | @AliasFor( |
| | | annotation = Component.class |
| | | ) |
| | | String value(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.base; |
| | | |
| | | |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | |
| | | import org.apache.commons.beanutils.ConvertUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Optional; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * èªå®ä¹Map |
| | | */ |
| | | public class BaseMap extends HashMap<String, Object> { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | |
| | | public BaseMap() { |
| | | |
| | | } |
| | | |
| | | public BaseMap(Map<String, Object> map) { |
| | | this.putAll(map); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public BaseMap put(String key, Object value) { |
| | | super.put(key, Optional.ofNullable(value).orElse("")); |
| | | return this; |
| | | } |
| | | |
| | | public BaseMap add(String key, Object value) { |
| | | super.put(key, Optional.ofNullable(value).orElse("")); |
| | | return this; |
| | | } |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public <T> T get(String key) { |
| | | Object obj = super.get(key); |
| | | if (ObjectUtil.isNotEmpty(obj)) { |
| | | return (T) obj; |
| | | } else { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public Boolean getBoolean(String key) { |
| | | Object obj = super.get(key); |
| | | if (ObjectUtil.isNotEmpty(obj)) { |
| | | return Boolean.valueOf(obj.toString()); |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | public Long getLong(String key) { |
| | | Object v = get(key); |
| | | if (ObjectUtil.isNotEmpty(v)) { |
| | | return new Long(v.toString()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public Long[] getLongs(String key) { |
| | | Object v = get(key); |
| | | if (ObjectUtil.isNotEmpty(v)) { |
| | | return (Long[]) v; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public List<Long> getListLong(String key) { |
| | | List<String> list = get(key); |
| | | if (ObjectUtil.isNotEmpty(list)) { |
| | | return list.stream().map(e -> new Long(e)).collect(Collectors.toList()); |
| | | } else { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | public Long[] getLongIds(String key) { |
| | | Object ids = get(key); |
| | | if (ObjectUtil.isNotEmpty(ids)) { |
| | | return (Long[]) ConvertUtils.convert(ids.toString().split(","), Long.class); |
| | | } else { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | |
| | | public Integer getInt(String key, Integer def) { |
| | | Object v = get(key); |
| | | if (ObjectUtil.isNotEmpty(v)) { |
| | | return Integer.parseInt(v.toString()); |
| | | } else { |
| | | return def; |
| | | } |
| | | } |
| | | |
| | | public Integer getInt(String key) { |
| | | Object v = get(key); |
| | | if (ObjectUtil.isNotEmpty(v)) { |
| | | return Integer.parseInt(v.toString()); |
| | | } else { |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | public BigDecimal getBigDecimal(String key) { |
| | | Object v = get(key); |
| | | if (ObjectUtil.isNotEmpty(v)) { |
| | | return new BigDecimal(v.toString()); |
| | | } |
| | | return new BigDecimal("0"); |
| | | } |
| | | |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public <T> T get(String key, T def) { |
| | | Object obj = super.get(key); |
| | | if (ObjectUtil.isEmpty(obj)) { |
| | | return def; |
| | | } |
| | | return (T) obj; |
| | | } |
| | | |
| | | public static BaseMap toBaseMap(Map<String, Object> obj) { |
| | | BaseMap map = new BaseMap(); |
| | | map.putAll(obj); |
| | | return map; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.config; |
| | | |
| | | import org.jeecg.common.util.SpringContextHolder; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | @Configuration |
| | | public class CommonConfig { |
| | | |
| | | /** |
| | | * Springä¸ä¸æå·¥å
·é
ç½® |
| | | * |
| | | * @return |
| | | */ |
| | | @Bean |
| | | @ConditionalOnMissingBean(SpringContextHolder.class) |
| | | public SpringContextHolder springContextHolder() { |
| | | SpringContextHolder holder = new SpringContextHolder(); |
| | | return holder; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.config.mqtoken; |
| | | |
| | | import java.io.IOException; |
| | | |
| | | import javax.servlet.*; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | /** |
| | | * åæ¾tokenå°ä¸ä¸æä¾éåè°ç¨feignä½¿ç¨ |
| | | * @author zyf |
| | | */ |
| | | public class TransmitUserTokenFilter implements Filter { |
| | | |
| | | private static String X_ACCESS_TOKEN="X-Access-Token"; |
| | | |
| | | public TransmitUserTokenFilter() { |
| | | } |
| | | |
| | | @Override |
| | | public void init(FilterConfig filterConfig) throws ServletException { |
| | | } |
| | | |
| | | @Override |
| | | public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { |
| | | this.initUserInfo((HttpServletRequest) request); |
| | | chain.doFilter(request, response); |
| | | } |
| | | |
| | | private void initUserInfo(HttpServletRequest request) { |
| | | String token = request.getHeader(X_ACCESS_TOKEN); |
| | | if (token!=null) { |
| | | try { |
| | | //å°tokenæ¾å
¥ä¸ä¸æä¸ |
| | | UserTokenContext.setToken(token); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void destroy() { |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.config.mqtoken; |
| | | |
| | | |
| | | /** |
| | | * ç¨æ·tokenä¸ä¸æ |
| | | * @author zyf |
| | | */ |
| | | public class UserTokenContext { |
| | | |
| | | private static ThreadLocal<String> userToken = new ThreadLocal<String>(); |
| | | |
| | | public UserTokenContext() { |
| | | } |
| | | |
| | | public static String getToken(){ |
| | | return userToken.get(); |
| | | } |
| | | |
| | | public static void setToken(String token){ |
| | | userToken.set(token); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * @author: huangxutao |
| | | * @date: 2019-06-14 |
| | | * @description: ç¼å常é |
| | | */ |
| | | public interface CacheConstant { |
| | | |
| | | /** |
| | | * åå
¸ä¿¡æ¯ç¼åï¼å«ç¦ç¨çåå
¸é¡¹ï¼ |
| | | */ |
| | | public static final String SYS_DICT_CACHE = "sys:cache:dict"; |
| | | public static final String SYS_DICT_CACHE_XMZT = "sys:cache:dict:xmzt"; |
| | | public static final String SYS_DICT_CACHE_XMLX = "sys:cache:dict:xmlx"; |
| | | public static final String SYS_DICT_CACHE_CPLB = "sys:cache:dict:cplb"; |
| | | public static final String SYS_DICT_CACHE_LCB = "sys:cache:dict:lcb"; |
| | | public static final String SYS_DICT_CACHE_FXDJ = "sys:cache:dict:fxdj"; |
| | | |
| | | /** |
| | | * ç¼åé¡¹ç® |
| | | */ |
| | | public static final String PRO_PROJECT_LIST = "pro:project:list:all"; |
| | | /** |
| | | * åå
¸ä¿¡æ¯ç¼å status为ææç |
| | | */ |
| | | public static final String SYS_ENABLE_DICT_CACHE = "sys:cache:dictEnable"; |
| | | /** |
| | | * 表åå
¸ä¿¡æ¯ç¼å |
| | | */ |
| | | public static final String SYS_DICT_TABLE_CACHE = "sys:cache:dictTable"; |
| | | public static final String SYS_DICT_TABLE_BY_KEYS_CACHE = SYS_DICT_TABLE_CACHE + "ByKeys"; |
| | | |
| | | /** |
| | | * æ°æ®æéé
ç½®ç¼å |
| | | */ |
| | | public static final String SYS_DATA_PERMISSIONS_CACHE = "sys:cache:permission:datarules"; |
| | | |
| | | /** |
| | | * ç¼åç¨æ·ä¿¡æ¯ |
| | | */ |
| | | public static final String SYS_USERS_CACHE = "sys:cache:user"; |
| | | |
| | | /** |
| | | * å
¨é¨é¨é¨ä¿¡æ¯ç¼å |
| | | */ |
| | | public static final String SYS_DEPARTS_CACHE = "sys:cache:depart:alldata"; |
| | | public static final String SYS_ORG_DEPART_CACHE = "sys:cache:depart:org"; |
| | | //ç¼åææç¨æ· |
| | | public static final String SYS_USER_ALL_CACHE = "sys:cache:user:all"; |
| | | |
| | | /** |
| | | * é¨é¨æåä¿¡æ¯ç¼å |
| | | */ |
| | | public static final String PERMISSION_DEPARTS = "permission:cache:departs"; |
| | | /** |
| | | * é¨é¨æåä¿¡æ¯ç¼å |
| | | */ |
| | | public static final String PERMISSION_DEPARTS_USERS = "permission:cache:departsusers"; |
| | | /** |
| | | * ç»å½ç¨æ·è§è² |
| | | */ |
| | | public static final String PERMISSION_USER_ROLE = "permission:cache:userrole"; |
| | | /** |
| | | * ç»å½ç¨æ·é¨é¨è§è² |
| | | */ |
| | | public static final String PERMISSION_USER_DEPART_ROLE = "permission:cache:userdepartrole"; |
| | | |
| | | /** |
| | | * å
¨é¨é¨é¨idsç¼å |
| | | */ |
| | | public static final String SYS_DEPART_IDS_CACHE = "sys:cache:depart:allids"; |
| | | |
| | | |
| | | /** |
| | | * æµè¯ç¼åkey |
| | | */ |
| | | public static final String TEST_DEMO_CACHE = "test:demo"; |
| | | |
| | | /** |
| | | * åå
¸ä¿¡æ¯ç¼å |
| | | */ |
| | | public static final String SYS_DYNAMICDB_CACHE = "sys:cache:dbconnect:dynamic:"; |
| | | |
| | | /** |
| | | * gatewayè·¯ç±ç¼å |
| | | */ |
| | | public static final String GATEWAY_ROUTES = "sys:cache:cloud:gateway_routes"; |
| | | |
| | | |
| | | /** |
| | | * gatewayè·¯ç± reload key |
| | | */ |
| | | public static final String ROUTE_JVM_RELOAD_TOPIC = "gateway_jvm_route_reload_topic"; |
| | | |
| | | /** |
| | | * TODO åä½ä»£ç å¾
å é¤ |
| | | *æä»¶ååæè¡æ¦ |
| | | */ |
| | | public static final String PLUGIN_MALL_RANKING = "pluginMall::rankingList"; |
| | | /** |
| | | * TODO åä½ä»£ç å¾
å é¤ |
| | | *æä»¶ååæè¡æ¦ |
| | | */ |
| | | public static final String PLUGIN_MALL_PAGE_LIST = "pluginMall::queryPageList"; |
| | | |
| | | |
| | | /** |
| | | * onlineå表页é
置信æ¯ç¼åkey |
| | | */ |
| | | public static final String ONLINE_LIST = "sys:cache:online:list"; |
| | | |
| | | /** |
| | | * online表å页é
置信æ¯ç¼åkey |
| | | */ |
| | | public static final String ONLINE_FORM = "sys:cache:online:form"; |
| | | |
| | | /** |
| | | * onlineæ¥è¡¨ |
| | | */ |
| | | public static final String ONLINE_RP = "sys:cache:online:rp"; |
| | | |
| | | /** |
| | | * onlineå¾è¡¨ |
| | | */ |
| | | public static final String ONLINE_GRAPH = "sys:cache:online:graph"; |
| | | |
| | | /** |
| | | * éè¿æä»¶è·¯å¾åæä»¶åç§°ç¼åæä»¶ |
| | | */ |
| | | |
| | | public static final String DOC_FILE_PATH_CACHE = "doc:cache:filePath:path_name"; |
| | | |
| | | /** |
| | | * ç¼åå·²å é¤çdoc_fileçid |
| | | */ |
| | | public static final String DOC_FILE_DELETE_CACHE = "doc:cache:file:delete"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | public class GlobalConstants { |
| | | |
| | | /** |
| | | * ä¸å¡å¤çå¨beanNameä¼ éåæ° |
| | | */ |
| | | public static final String HANDLER_NAME = "handlerName"; |
| | | |
| | | /** |
| | | * redisæ¶æ¯ééåç§° |
| | | */ |
| | | public static final String REDIS_TOPIC_NAME="jeecg_redis_topic"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.modules.redis.client; |
| | | |
| | | import org.jeecg.common.base.BaseMap; |
| | | import org.jeecg.common.constant.GlobalConstants; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | /** |
| | | * redis客æ·ç«¯ |
| | | */ |
| | | @Configuration |
| | | public class JeecgRedisClient { |
| | | |
| | | @Resource |
| | | private RedisTemplate<String, Object> redisTemplate; |
| | | |
| | | |
| | | /** |
| | | * åéæ¶æ¯ |
| | | * |
| | | * @param handlerName |
| | | * @param params |
| | | */ |
| | | public void sendMessage(String handlerName, BaseMap params) { |
| | | params.put(GlobalConstants.HANDLER_NAME, handlerName); |
| | | redisTemplate.convertAndSend(GlobalConstants.REDIS_TOPIC_NAME, params); |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.modules.redis.config; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonAutoDetect; |
| | | import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; |
| | | import com.fasterxml.jackson.annotation.PropertyAccessor; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import org.jeecg.common.constant.CacheConstant; |
| | | import org.jeecg.common.constant.GlobalConstants; |
| | | |
| | | import org.jeecg.common.modules.redis.receiver.RedisReceiver; |
| | | import org.jeecg.common.modules.redis.writer.JeecgRedisCacheWriter; |
| | | import org.springframework.cache.CacheManager; |
| | | import org.springframework.cache.annotation.CachingConfigurerSupport; |
| | | import org.springframework.cache.annotation.EnableCaching; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.data.redis.cache.RedisCacheConfiguration; |
| | | import org.springframework.data.redis.cache.RedisCacheManager; |
| | | import org.springframework.data.redis.cache.RedisCacheWriter; |
| | | import org.springframework.data.redis.connection.RedisConnectionFactory; |
| | | import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.data.redis.listener.ChannelTopic; |
| | | import org.springframework.data.redis.listener.RedisMessageListenerContainer; |
| | | import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; |
| | | import org.springframework.data.redis.serializer.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.time.Duration; |
| | | |
| | | import static java.util.Collections.singletonMap; |
| | | |
| | | /** |
| | | * å¼å¯ç¼åæ¯æ |
| | | * @author zyf |
| | | * @Return: |
| | | */ |
| | | @Slf4j |
| | | @EnableCaching |
| | | @Configuration |
| | | public class RedisConfig extends CachingConfigurerSupport { |
| | | |
| | | @Resource |
| | | private LettuceConnectionFactory lettuceConnectionFactory; |
| | | |
| | | // /** |
| | | // * @description èªå®ä¹çç¼åkeyççæçç¥ è¥æ³ä½¿ç¨è¿ä¸ªkey |
| | | // * åªéè¦è®²æ³¨è§£ä¸keyGeneratorçå¼è®¾ç½®ä¸ºkeyGeneratorå³å¯</br> |
| | | // * @return èªå®ä¹çç¥çæçkey |
| | | // */ |
| | | // @Override |
| | | // @Bean |
| | | // public KeyGenerator keyGenerator() { |
| | | // return new KeyGenerator() { |
| | | // @Override |
| | | // public Object generate(Object target, Method method, Object... params) { |
| | | // StringBuilder sb = new StringBuilder(); |
| | | // sb.append(target.getClass().getName()); |
| | | // sb.append(method.getDeclaringClass().getName()); |
| | | // Arrays.stream(params).map(Object::toString).forEach(sb::append); |
| | | // return sb.toString(); |
| | | // } |
| | | // }; |
| | | // } |
| | | |
| | | /** |
| | | * RedisTemplateé
ç½® |
| | | * @param lettuceConnectionFactory |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { |
| | | log.info(" --- redis config init --- "); |
| | | Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = jacksonSerializer(); |
| | | RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>(); |
| | | redisTemplate.setConnectionFactory(lettuceConnectionFactory); |
| | | RedisSerializer<String> stringSerializer = new StringRedisSerializer(); |
| | | |
| | | // keyåºåå |
| | | redisTemplate.setKeySerializer(stringSerializer); |
| | | // valueåºåå |
| | | redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); |
| | | // Hash keyåºåå |
| | | redisTemplate.setHashKeySerializer(stringSerializer); |
| | | // Hash valueåºåå |
| | | redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); |
| | | redisTemplate.afterPropertiesSet(); |
| | | return redisTemplate; |
| | | } |
| | | |
| | | /** |
| | | * ç¼åé
置管çå¨ |
| | | * |
| | | * @param factory |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public CacheManager cacheManager(LettuceConnectionFactory factory) { |
| | | Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = jacksonSerializer(); |
| | | // é
ç½®åºååï¼è§£å³ä¹±ç çé®é¢ï¼,å¹¶ä¸é
ç½®ç¼åé»è®¤æææ 6å°æ¶ |
| | | RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(6)); |
| | | RedisCacheConfiguration redisCacheConfiguration = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) |
| | | .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)); |
| | | //.disableCachingNullValues(); |
| | | |
| | | // 以éåå
¥çæ¹å¼å建RedisCacheWriter对象 |
| | | //update-begin-author:taoyan date:20210316 for:注解CacheEvictæ ¹æ®keyå é¤redisæ¯æéé
符* |
| | | RedisCacheWriter writer = new JeecgRedisCacheWriter(factory, Duration.ofMillis(50L)); |
| | | //RedisCacheWriter.lockingRedisCacheWriter(factory); |
| | | // å建é»è®¤ç¼åé
置对象 |
| | | /* é»è®¤é
ç½®ï¼è®¾ç½®ç¼åæææ 1å°æ¶*/ |
| | | //RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1)); |
| | | /* èªå®ä¹é
ç½®test:demo çè¶
æ¶æ¶é´ä¸º 5åé*/ |
| | | RedisCacheManager cacheManager = RedisCacheManager.builder(writer).cacheDefaults(redisCacheConfiguration) |
| | | .withInitialCacheConfigurations(singletonMap(CacheConstant.SYS_DICT_TABLE_CACHE, |
| | | RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(10)).disableCachingNullValues() |
| | | .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)))) |
| | | .withInitialCacheConfigurations(singletonMap(CacheConstant.TEST_DEMO_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(5)).disableCachingNullValues())) |
| | | .withInitialCacheConfigurations(singletonMap(CacheConstant.PLUGIN_MALL_RANKING, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(24)).disableCachingNullValues())) |
| | | .withInitialCacheConfigurations(singletonMap(CacheConstant.PLUGIN_MALL_PAGE_LIST, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(24)).disableCachingNullValues())) |
| | | .transactionAware().build(); |
| | | //update-end-author:taoyan date:20210316 for:注解CacheEvictæ ¹æ®keyå é¤redisæ¯æéé
符* |
| | | return cacheManager; |
| | | } |
| | | |
| | | /** |
| | | * redis çå¬é
ç½® |
| | | * |
| | | * @param redisConnectionFactory redis é
ç½® |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory, RedisReceiver redisReceiver, MessageListenerAdapter commonListenerAdapter) { |
| | | RedisMessageListenerContainer container = new RedisMessageListenerContainer(); |
| | | container.setConnectionFactory(redisConnectionFactory); |
| | | container.addMessageListener(commonListenerAdapter, new ChannelTopic(GlobalConstants.REDIS_TOPIC_NAME)); |
| | | return container; |
| | | } |
| | | |
| | | |
| | | @Bean |
| | | MessageListenerAdapter commonListenerAdapter(RedisReceiver redisReceiver) { |
| | | MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(redisReceiver, "onMessage"); |
| | | messageListenerAdapter.setSerializer(jacksonSerializer()); |
| | | return messageListenerAdapter; |
| | | } |
| | | |
| | | private Jackson2JsonRedisSerializer jacksonSerializer() { |
| | | Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); |
| | | objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); |
| | | jackson2JsonRedisSerializer.setObjectMapper(objectMapper); |
| | | return jackson2JsonRedisSerializer; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.modules.redis.listener; |
| | | |
| | | import org.jeecg.common.base.BaseMap; |
| | | |
| | | /** |
| | | * èªå®ä¹æ¶æ¯çå¬ |
| | | */ |
| | | public interface JeecgRedisListerer { |
| | | |
| | | void onMessage(BaseMap message); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.modules.redis.receiver; |
| | | |
| | | |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import lombok.Data; |
| | | import org.jeecg.common.base.BaseMap; |
| | | import org.jeecg.common.constant.GlobalConstants; |
| | | import org.jeecg.common.modules.redis.listener.JeecgRedisListerer; |
| | | import org.jeecg.common.util.SpringContextHolder; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * @author zyf |
| | | */ |
| | | @Component |
| | | @Data |
| | | public class RedisReceiver { |
| | | |
| | | |
| | | /** |
| | | * æ¥åæ¶æ¯å¹¶è°ç¨ä¸å¡é»è¾å¤çå¨ |
| | | * |
| | | * @param params |
| | | */ |
| | | public void onMessage(BaseMap params) { |
| | | Object handlerName = params.get(GlobalConstants.HANDLER_NAME); |
| | | JeecgRedisListerer messageListener = SpringContextHolder.getHandler(handlerName.toString(), JeecgRedisListerer.class); |
| | | if (ObjectUtil.isNotEmpty(messageListener)) { |
| | | messageListener.onMessage(params); |
| | | } |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.modules.redis.writer; |
| | | |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.time.Duration; |
| | | import java.util.Collections; |
| | | import java.util.Optional; |
| | | import java.util.Set; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.function.Consumer; |
| | | import java.util.function.Function; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.dao.PessimisticLockingFailureException; |
| | | import org.springframework.data.redis.cache.RedisCacheWriter; |
| | | import org.springframework.data.redis.connection.RedisConnection; |
| | | import org.springframework.data.redis.connection.RedisConnectionFactory; |
| | | import org.springframework.data.redis.connection.RedisStringCommands.SetOption; |
| | | import org.springframework.data.redis.core.types.Expiration; |
| | | import org.springframework.lang.Nullable; |
| | | import org.springframework.util.Assert; |
| | | |
| | | /** |
| | | * 该类åç
§ DefaultRedisCacheWriter éåäº remove æ¹æ³å®ç°éé
符*å é¤ |
| | | */ |
| | | @Slf4j |
| | | public class JeecgRedisCacheWriter implements RedisCacheWriter { |
| | | |
| | | private final RedisConnectionFactory connectionFactory; |
| | | private final Duration sleepTime; |
| | | |
| | | public JeecgRedisCacheWriter(RedisConnectionFactory connectionFactory) { |
| | | this(connectionFactory, Duration.ZERO); |
| | | } |
| | | |
| | | public JeecgRedisCacheWriter(RedisConnectionFactory connectionFactory, Duration sleepTime) { |
| | | Assert.notNull(connectionFactory, "ConnectionFactory must not be null!"); |
| | | Assert.notNull(sleepTime, "SleepTime must not be null!"); |
| | | this.connectionFactory = connectionFactory; |
| | | this.sleepTime = sleepTime; |
| | | } |
| | | |
| | | public void put(String name, byte[] key, byte[] value, @Nullable Duration ttl) { |
| | | Assert.notNull(name, "Name must not be null!"); |
| | | Assert.notNull(key, "Key must not be null!"); |
| | | Assert.notNull(value, "Value must not be null!"); |
| | | this.execute(name, (connection) -> { |
| | | if (shouldExpireWithin(ttl)) { |
| | | connection.set(key, value, Expiration.from(ttl.toMillis(), TimeUnit.MILLISECONDS), SetOption.upsert()); |
| | | } else { |
| | | connection.set(key, value); |
| | | } |
| | | |
| | | return "OK"; |
| | | }); |
| | | } |
| | | |
| | | public byte[] get(String name, byte[] key) { |
| | | Assert.notNull(name, "Name must not be null!"); |
| | | Assert.notNull(key, "Key must not be null!"); |
| | | return (byte[])this.execute(name, (connection) -> { |
| | | return connection.get(key); |
| | | }); |
| | | } |
| | | |
| | | public byte[] putIfAbsent(String name, byte[] key, byte[] value, @Nullable Duration ttl) { |
| | | Assert.notNull(name, "Name must not be null!"); |
| | | Assert.notNull(key, "Key must not be null!"); |
| | | Assert.notNull(value, "Value must not be null!"); |
| | | return (byte[])this.execute(name, (connection) -> { |
| | | if (this.isLockingCacheWriter()) { |
| | | this.doLock(name, connection); |
| | | } |
| | | |
| | | Object var7; |
| | | try { |
| | | boolean put; |
| | | if (shouldExpireWithin(ttl)) { |
| | | put = connection.set(key, value, Expiration.from(ttl), SetOption.ifAbsent()); |
| | | } else { |
| | | put = connection.setNX(key, value); |
| | | } |
| | | |
| | | if (!put) { |
| | | byte[] var11 = connection.get(key); |
| | | return var11; |
| | | } |
| | | |
| | | var7 = null; |
| | | } finally { |
| | | if (this.isLockingCacheWriter()) { |
| | | this.doUnlock(name, connection); |
| | | } |
| | | |
| | | } |
| | | |
| | | return (byte[])var7; |
| | | }); |
| | | } |
| | | |
| | | public void remove(String name, byte[] key) { |
| | | Assert.notNull(name, "Name must not be null!"); |
| | | Assert.notNull(key, "Key must not be null!"); |
| | | String keyString = new String(key); |
| | | log.info("redis remove key:" + keyString); |
| | | if(keyString!=null && keyString.endsWith("*")){ |
| | | execute(name, connection -> { |
| | | // è·åæä¸ªåç¼ææ¥æçææçé®ï¼æä¸ªåç¼å¼å¤´ï¼åé¢è¯å®æ¯* |
| | | Set<byte[]> keys = connection.keys(key); |
| | | int delNum = 0; |
| | | for (byte[] keyByte : keys) { |
| | | delNum += connection.del(keyByte); |
| | | } |
| | | return delNum; |
| | | }); |
| | | }else{ |
| | | this.execute(name, (connection) -> { |
| | | return connection.del(new byte[][]{key}); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | public void clean(String name, byte[] pattern) { |
| | | Assert.notNull(name, "Name must not be null!"); |
| | | Assert.notNull(pattern, "Pattern must not be null!"); |
| | | this.execute(name, (connection) -> { |
| | | boolean wasLocked = false; |
| | | |
| | | try { |
| | | if (this.isLockingCacheWriter()) { |
| | | this.doLock(name, connection); |
| | | wasLocked = true; |
| | | } |
| | | |
| | | byte[][] keys = (byte[][])((Set)Optional.ofNullable(connection.keys(pattern)).orElse(Collections.emptySet())).toArray(new byte[0][]); |
| | | if (keys.length > 0) { |
| | | connection.del(keys); |
| | | } |
| | | } finally { |
| | | if (wasLocked && this.isLockingCacheWriter()) { |
| | | this.doUnlock(name, connection); |
| | | } |
| | | |
| | | } |
| | | |
| | | return "OK"; |
| | | }); |
| | | } |
| | | |
| | | void lock(String name) { |
| | | this.execute(name, (connection) -> { |
| | | return this.doLock(name, connection); |
| | | }); |
| | | } |
| | | |
| | | void unlock(String name) { |
| | | this.executeLockFree((connection) -> { |
| | | this.doUnlock(name, connection); |
| | | }); |
| | | } |
| | | |
| | | private Boolean doLock(String name, RedisConnection connection) { |
| | | return connection.setNX(createCacheLockKey(name), new byte[0]); |
| | | } |
| | | |
| | | private Long doUnlock(String name, RedisConnection connection) { |
| | | return connection.del(new byte[][]{createCacheLockKey(name)}); |
| | | } |
| | | |
| | | boolean doCheckLock(String name, RedisConnection connection) { |
| | | return connection.exists(createCacheLockKey(name)); |
| | | } |
| | | |
| | | private boolean isLockingCacheWriter() { |
| | | return !this.sleepTime.isZero() && !this.sleepTime.isNegative(); |
| | | } |
| | | |
| | | private <T> T execute(String name, Function<RedisConnection, T> callback) { |
| | | RedisConnection connection = this.connectionFactory.getConnection(); |
| | | |
| | | try { |
| | | this.checkAndPotentiallyWaitUntilUnlocked(name, connection); |
| | | return callback.apply(connection); |
| | | } finally { |
| | | connection.close(); |
| | | } |
| | | |
| | | } |
| | | |
| | | private void executeLockFree(Consumer<RedisConnection> callback) { |
| | | RedisConnection connection = this.connectionFactory.getConnection(); |
| | | |
| | | try { |
| | | callback.accept(connection); |
| | | } finally { |
| | | connection.close(); |
| | | } |
| | | |
| | | } |
| | | |
| | | private void checkAndPotentiallyWaitUntilUnlocked(String name, RedisConnection connection) { |
| | | if (this.isLockingCacheWriter()) { |
| | | try { |
| | | while(this.doCheckLock(name, connection)) { |
| | | Thread.sleep(this.sleepTime.toMillis()); |
| | | } |
| | | |
| | | } catch (InterruptedException var4) { |
| | | Thread.currentThread().interrupt(); |
| | | throw new PessimisticLockingFailureException(String.format("Interrupted while waiting to unlock cache %s", name), var4); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private static boolean shouldExpireWithin(@Nullable Duration ttl) { |
| | | return ttl != null && !ttl.isZero() && !ttl.isNegative(); |
| | | } |
| | | |
| | | private static byte[] createCacheLockKey(String name) { |
| | | return (name + "~lock").getBytes(StandardCharsets.UTF_8); |
| | | } |
| | | } |
lb-boot/lb-boot-base/jeecg-boot-base-tools/src/main/java/org/jeecg/common/util/RedisUtil.java
lb-boot/lb-boot-base/jeecg-boot-base-tools/src/main/java/org/jeecg/common/util/SpringContextHolder.java
lb-boot/lb-boot-base/jeecg-boot-base-tools/src/main/java/org/jeecg/common/util/StringUtils.java
lb-boot/lb-boot-base/pom.xml
lb-boot/lb-boot-db/Dockerfile
lb-boot/lb-boot-db/lb-boot.sql
lb-boot/lb-boot-db/lb-doc.sql
lb-boot/lb-boot-db/nacos.sql
lb-boot/lb-boot-module-activiti/pom.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/Constant.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/ActBusiness.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/ActNode.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/ActZprocess.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/ActivitiConstant.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/Assignee.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/BaseAuditStatisticsEntity.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/BaseTaskEntity.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/Department.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/FlowCondition.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/entity/Role.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/vo/ActDoAndApplyVo.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/vo/BaseVO.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/vo/DeleteBatchVO.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/vo/HistoricProcessInsVo.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/vo/HistoricTaskVo.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/vo/ProcessInsVo.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/vo/ProcessNodeVo.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/base/vo/TaskVo.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/config/ActivitiConfig.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/config/CustomProcessDiagramCanvas.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/config/CustomProcessDiagramGenerator.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/exception/CustomException.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/exception/ExceptionCode.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/utils/DictEnum.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/utils/DictModelConstant.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/common/utils/StringUtils.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/controller/ActBusinessController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/controller/ActProcessInsController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/controller/ActTaskController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/controller/ActivitiModelController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/controller/ActivitiProcessController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/controller/ReModelController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/controller/ReProcdefController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/controller/ServiceController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/manage/CustomGroupEntityManager.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/manage/CustomUserEntityManager.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/ActBusinessMapper.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/ActNodeMapper.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/ActZprocessMapper.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/ReModelMapper.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/ReProcdefMapper.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/xml/ActBusinessMapper.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/xml/ActNodeMapper.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/xml/ActZprocessMapper.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/xml/ReModelMapper.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/mapper/xml/ReProcdefMapper.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/model/converter/ActivitiConverter.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/model/entity/ReModelEntity.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/model/entity/ReProcdefEntity.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/IActBusinessService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/IActNodeService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/IActZprocessService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/ReModelService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/ReProcdefService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/impl/ActBusinessServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/impl/ActNodeServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/impl/ActZprocessServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/impl/ReModelServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/service/impl/ReProcdefServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/controller/ApplyLeaveController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/entity/ApplyLeave.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/lisener/ContactResultListener.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/lisener/CustomEventListener.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/lisener/ProblemResultListener.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/lisener/ProcessResultListener.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/mapper/ApplyLeaveMapper.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/mapper/ApplyProcessMapper.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/mapper/xml/mysql/ApplyLeaveMapper.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/mapper/xml/mysql/ApplyProcessMapper.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/mapper/xml/oracle/ApplyProcessMapper.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/service/ApplyProcessService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/service/IApplyLeaveService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/service/impl/ApplyLeaveServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/apply/service/impl/ApplyProcessServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/applyForm/controller/ApplyFormController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/applyForm/entity/ApplyForm.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/applyForm/mapper/ApplyFormMapper.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/applyForm/mapper/xml/ApplyFormMapper.xml
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/applyForm/service/IApplyFormService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/applyForm/service/impl/ApplyFormServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/controller/ApprovalController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/controller/ApprovalTaskController.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/model/dto/ApprovalOpinionDTO.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/model/dto/CurrTaskNodeInfoDTO.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/model/dto/DynamicFormConf.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/model/vo/ApprovalOpinionVO.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/model/vo/ApprovalTaskQueryVo.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/model/vo/ApprovalVO.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/model/vo/HistoryTaskVO.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/model/vo/TaskCountDataVO.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/model/vo/TaskVO.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/service/ApprovalService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/service/ApprovalTaskService.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/service/impl/ApprovalServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/approval/service/impl/ApprovalTaskServiceImpl.java
lb-boot/lb-boot-module-activiti/src/main/java/org/jeecg/modules/system/controller/SystemController.java
lb-boot/lb-boot-module-activiti/src/main/resources/processes/会议室预约申请bak20200914.bpmn20.xml
lb-boot/lb-boot-module-activiti/src/main/resources/processes/投稿bak20200915.bpmn20.xml
lb-boot/lb-boot-module-activiti/src/main/resources/processes/报修bak20200914.bpmn20.xml
lb-boot/lb-boot-module-activiti/src/main/resources/processes/物品领用bak20200914.bpmn20.xml
lb-boot/lb-boot-module-activiti/src/main/resources/processes/财务预算bak20200914.bpmn20.xml
lb-boot/lb-boot-module-activiti/src/main/resources/processes/采购验收bak20200914.bpmn20.xml
lb-boot/lb-boot-module-activiti/src/main/resources/static/stencilset.json
lb-boot/lb-boot-module-demo/pom.xml
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/JeecgDemoCloudApplication.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/cloud/controller/JcloudDemoController.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/cloud/provider/JcloudDemoProvider.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/cloud/service/JcloudDemoService.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/cloud/service/impl/JcloudDemoServiceImpl.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/MockController.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/area.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/area_mini.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/area_options.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_0.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_1.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_2.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_3.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_31.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/getCntrNoCountInfo.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/getTubiao.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/graphreport_chart.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/permission.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/permission_no_page.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/role.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/service.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/sysdatalog.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/task_process.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/user.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/user_info.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/userinfo.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/workplace_activity.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/workplace_projects.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/workplace_radar.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/workplace_teams.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/controller/VxeMockController.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/entity/MockEntity.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/json/ddjh.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/json/ddjh_s8.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/json/dlglong.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/websocket/VXESocket.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/BigScreenTemplatController.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDemoController.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderMainController.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderTabMainController.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JoaDemoController.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JeecgDemo.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JeecgOrderCustomer.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JeecgOrderMain.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JeecgOrderTicket.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JoaDemo.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgDemoMapper.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgOrderCustomerMapper.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgOrderMainMapper.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgOrderTicketMapper.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JoaDemoMapper.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgDemoMapper.xml
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderCustomerMapper.xml
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderMainMapper.xml
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderTicketMapper.xml
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JoaDemoMapper.xml
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJeecgDemoService.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderCustomerService.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderMainService.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderTicketService.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJoaDemoService.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgDemoServiceImpl.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderCustomerServiceImpl.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderMainServiceImpl.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderTicketServiceImpl.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JoaDemoServiceImpl.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/test/vo/JeecgOrderMainPage.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/demo/xxljob/TestJobHandler.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/dlglong/controller/DlMockController.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/dlglong/entity/MockEntity.java
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/dlglong/json/ddjh.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/dlglong/json/ddjh_s8.json
lb-boot/lb-boot-module-demo/src/main/java/org/jeecg/modules/dlglong/json/dlglong.json
lb-boot/lb-boot-module-demo/src/main/resources/application.yml
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/css/easyui.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/css/jquery-ui.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/css/main_design1.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/css/room.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/images/content_comm.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/images/content_comm1.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/images/content_down.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/images/content_down1.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/images/index.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/images/index1.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/images/screenbg_design1.jpg
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/images/war_room_main.jpg
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/js/big_design1.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/js/china.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/js/echarts-wordcloud.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/js/echarts.min.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/js/geoCoord.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/js/jquery.easyui.min.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/js/jquery.min.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/js/resize.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template1/js/room.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/css/style.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/arrow.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/bg_img03.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/bg_img04.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/border_bg01.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/box_title.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/chart_icon.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/chart_icon_on.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/close.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/close_icon.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/data_icon.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/data_icon_on.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/fangda.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/index_bg.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/jian.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/line-blue.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/line_bg.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/line_img.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/menu_btn.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/menu_on.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/next.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/people_iocn.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/plus.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/popUP_bg.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/prev.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/select_icon.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/select_icon_on.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/selsct_time.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/settings_icon.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/settings_icon_on.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/teacher_icon.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/title_bg01.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/title_border.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/title_line.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/weather_img01.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/中雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/中雨转大雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/中雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/中雪转大雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/冻雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/多云.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大暴雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大暴雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大雨转暴雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大雪转暴雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/小雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/小雨转中雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/小雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/小雪转中雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/强沙尘暴.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/扬沙.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/晴.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/暴雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/暴雨转大暴雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/暴雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/沙尘暴.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/浮尘.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/特大暴雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/阴.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/阵雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/阵雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/雨加雪.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/雷阵雨.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/雷阵雨加冰雹.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/雾.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/images/weather/霾.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/base.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/china.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/echarts.min.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/jquery-3.3.1.min.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/extend/layer.ext.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/laydate.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/need/laydate.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/skins/danlan/icon.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/skins/danlan/laydate.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/skins/default/icon.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/skins/default/laydate.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layer.min.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/layim.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/layim.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/loading.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/icon-ext.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/icon.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/icon_ext.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/loading-0.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/loading-1.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/loading-2.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/textbg.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_ico0.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_loading0.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_loading1.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_loading2.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_loading3.gif
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_title0.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/layer.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/layer.ext.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/moon/default.png
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/moon/style.css
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/pop_base.js
lb-boot/lb-boot-module-demo/src/main/resources/static/bigscreen/template2/js/rem.js
lb-boot/lb-boot-module-demo/src/main/resources/templates/bigscreen/template1/index.ftl
lb-boot/lb-boot-module-demo/src/main/resources/templates/bigscreen/template2/index.ftl
lb-boot/lb-boot-module-desk/initDB.txt
lb-boot/lb-boot-module-desk/lb-boot-module-desk-api/pom.xml
lb-boot/lb-boot-module-desk/lb-boot-module-desk-api/src/main/java/org/jeecg/modules/desk/api/JeecgHelloApi.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-api/src/main/java/org/jeecg/modules/desk/api/fallback/JeecgHelloFallback.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-api/src/main/java/org/jeecg/modules/desk/entity/DeskFile.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-api/src/main/java/org/jeecg/modules/desk/entity/JeecgHelloEntity.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-api/src/main/java/org/jeecg/modules/desk/vo/DeskFileTree.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-api/src/main/java/org/jeecg/modules/desk/vo/JeecgHelloPage.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/pom.xml
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/src/main/java/org/jeecg/modules/desk/controller/DeskFileController.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/src/main/java/org/jeecg/modules/desk/controller/JeecgHelloController.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/src/main/java/org/jeecg/modules/desk/mapper/DeskFileMapper.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/src/main/java/org/jeecg/modules/desk/mapper/JeecgHelloMapper.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/src/main/java/org/jeecg/modules/desk/mapper/xml/DeskFileMapper.xml
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/src/main/java/org/jeecg/modules/desk/service/IDeskFileService.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/src/main/java/org/jeecg/modules/desk/service/IJeecgHelloService.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/src/main/java/org/jeecg/modules/desk/service/impl/DeskFileServiceImpl.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-biz/src/main/java/org/jeecg/modules/desk/service/impl/JeecgHelloServiceImpl.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-start/pom.xml
lb-boot/lb-boot-module-desk/lb-boot-module-desk-start/src/main/java/org/jeecg/JeecgDeskCloudApplication.java
lb-boot/lb-boot-module-desk/lb-boot-module-desk-start/src/main/resources/application.yml
lb-boot/lb-boot-module-desk/lb-boot-module-desk-start/src/main/resources/bootstrap.yml
lb-boot/lb-boot-module-desk/pom.xml
lb-boot/lb-boot-module-doc/Dockerfile
lb-boot/lb-boot-module-doc/doc/布署手册.docx
lb-boot/lb-boot-module-doc/doc/文控管理系统概要设计说明书.docx
lb-boot/lb-boot-module-doc/doc/文控系统操作手册.docx
lb-boot/lb-boot-module-doc/doc/需求.md
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/pom.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/api/JeecgSystemClient.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/api/LbDocApi.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/api/fallback/JeecgSystemClientFallback.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/api/fallback/LbDocFallback.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/constant/Constant.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/constant/FileType.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/BatchDeleteFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/BatchDeleteRecoveryFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/BatchDownloadFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/BatchMoveFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/CopyFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/CreateOfficeFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/DeleteFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/DeleteRecoveryFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/DocTreeDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/DownloadFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/EditOfficeFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/MoveFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/PreviewDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/PreviewOfficeFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/RenameFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/RestoreFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/UnzipFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/UpdateFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/dto/UploadFileDTO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/DeptPathPermission.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/DocFile.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/DocFilePath.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/DocOperationHis.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/Favorite.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/FileModel.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/Image.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/LbDocEntity.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/PathPermission.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/Range.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/RecoveryFile.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/UploadTask.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/UploadTaskDetail.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/entity/UserStorageFlow.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/enums/ResultCodeEnum.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/enums/UploadFileStatusEnum.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/exception/CopyException.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/exception/NotLoginException.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/exception/QiwenException.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/exception/UFOPException.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/exception/WriteException.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/util/CharsetUtils.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/util/ConfigManager.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/util/DocumentManager.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/util/FileUtility.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/util/MD5.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/util/MimeUtils.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/util/UFOPUtils.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/CompareFileVo.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/CopyFile.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/DeleteFile.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/DocTree.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/DownloadFile.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/FileDetailVO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/ImageOperation.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/LbDocPage.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/PathPermissionVO.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/Previewer.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/QiwenFile.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/RecoveryFileListVo.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/ThumbImage.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/UploadFile.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/UploadFileResult.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/UploadFileVo.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/VideoOperation.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-api/src/main/java/org/jeecg/modules/doc/vo/WriteFile.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/pom.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/AsyncTaskComp.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/Copier.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/DeleteException.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/Deleter.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/DocFileDealComp.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/DocOperationHisComp.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/DownloadException.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/Downloader.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/ExtractCallback.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/FileConstant.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/FileOperation.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/LocalStorageCopier.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/LocalStorageDeleter.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/LocalStorageDownloader.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/LocalStoragePreviewer.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/LocalStorageUploader.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/LocalStorageWriter.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/PathFileUtil.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/PathPermissionComp.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/QiwenMultipartFile.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/RedisLock.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/UfopConfig.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/UploadException.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/Uploader.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/component/Writer.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/DeptPathPermissionController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/DocFileController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/DocFilePathController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/DocOperationHisController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/FavoriteController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/FileTransferController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/LbDocController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/OfficeController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/PathPermissionController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/RecoveryFileController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/controller/UserStorageFlowController.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/handler/JobHandler.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/DeptPathPermissionMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/DocFileMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/DocFilePathMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/DocOperationHisMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/FavoriteMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/ImageMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/LbDocMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/PathPermissionMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/RecoveryFileMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/UploadTaskDetailMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/UploadTaskMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/UserStorageFlowMapper.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/DeptPathPermissionMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/DocFileMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/DocFilePathMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/DocOperationHisMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/FavoriteMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/PathPermissionMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/RecoveryFileMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/UploadTaskDetailMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/UploadTaskMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/mapper/xml/UserStorageFlowMapper.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IDeptPathPermissionService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IDocFilePathService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IDocFileService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IDocOperationHisService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IFavoriteService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IFiletransferService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/ILbDocService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IPathPermissionService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IRecoveryFileService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IUploadTaskDetailService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IUploadTaskService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/IUserStorageFlowService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/DeptPathPermissionServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/DocFilePathServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/DocFileServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/DocOperationHisServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/FavoriteServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/FiletransferService.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/LbDocServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/PathPermissionServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/RecoveryFileServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/UploadTaskDetailServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/UploadTaskServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/service/impl/UserStorageFlowServiceImpl.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/threadpool/AsyncThreadPoolAutoConfiguration.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/threadpool/AsyncThreadPoolProperties.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-biz/src/main/java/org/jeecg/modules/doc/threadpool/BaseAsyncUncaughtExceptionHandler.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/pom.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/java/org/jeecg/JeecgDocCloudApplication.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/java/test/FileTest.java
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/resources/application.yml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/resources/logback-spring.xml
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/resources/settings.properties
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/resources/static/template/Excel.xlsx
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/resources/static/template/PowerPoint.pptx
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/resources/static/template/Word.docx
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/resources/static/template/ppt.pptx
lb-boot/lb-boot-module-doc/lb-boot-module-doc-start/src/main/resources/static/template/xlsx.xlsx
lb-boot/lb-boot-module-doc/pom.xml
lb-boot/lb-boot-module-library/lb-boot-module-library-api/pom.xml
lb-boot/lb-boot-module-library/lb-boot-module-library-api/src/main/java/org/jeecg/modules/library/api/JeecgHelloApi.java
lb-boot/lb-boot-module-library/lb-boot-module-library-api/src/main/java/org/jeecg/modules/library/api/fallback/JeecgHelloFallback.java
lb-boot/lb-boot-module-library/lb-boot-module-library-api/src/main/java/org/jeecg/modules/library/entity/JeecgHelloEntity.java
lb-boot/lb-boot-module-library/lb-boot-module-library-api/src/main/java/org/jeecg/modules/library/entity/LibFirmware.java
lb-boot/lb-boot-module-library/lb-boot-module-library-api/src/main/java/org/jeecg/modules/library/vo/JeecgHelloPage.java
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/pom.xml
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/src/main/java/org/jeecg/modules/library/controller/JeecgHelloController.java
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/src/main/java/org/jeecg/modules/library/controller/LibFirmwareController.java
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/src/main/java/org/jeecg/modules/library/mapper/JeecgHelloMapper.java
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/src/main/java/org/jeecg/modules/library/mapper/LibFirmwareMapper.java
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/src/main/java/org/jeecg/modules/library/mapper/xml/LibFirmwareMapper.xml
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/src/main/java/org/jeecg/modules/library/service/IJeecgHelloService.java
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/src/main/java/org/jeecg/modules/library/service/ILibFirmwareService.java
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/src/main/java/org/jeecg/modules/library/service/impl/JeecgHelloServiceImpl.java
lb-boot/lb-boot-module-library/lb-boot-module-library-biz/src/main/java/org/jeecg/modules/library/service/impl/LibFirmwareServiceImpl.java
lb-boot/lb-boot-module-library/lb-boot-module-library-start/pom.xml
lb-boot/lb-boot-module-library/lb-boot-module-library-start/src/main/java/org/jeecg/JeecgLibraryCloudApplication.java
lb-boot/lb-boot-module-library/lb-boot-module-library-start/src/main/resources/application.yml
lb-boot/lb-boot-module-library/pom.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/pom.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/api/JeecgHelloApi.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/api/JeecgSystemClient.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/api/fallback/JeecgHelloFallback.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/api/fallback/JeecgSystemClientFallback.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/dto/LimsInsUseStatDto.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/dto/LimsInstrumentTypeDto.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/dto/LimsUsageRecordDto.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/DepartIdModel.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/JeecgHelloEntity.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsAppointment.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsAppointmentAudit.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsAppointmentOption.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsInspection.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsInspectionDetail.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsInspectionItem.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsInstrument.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsInstrumentType.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsRepairRecord.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/LimsUsageRecord.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/SysUser.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/entity/WxAccessToken.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/dto/LimsItemTargetDTO.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/dto/LimsTestingBatchDTO.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/dto/LimsTestingCategoryDTO.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/dto/LimsTestingItemDTO.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/dto/LimsTestingTypeDTO.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsBatchDetail.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsBatchResult.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsBatchSample.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsItemTarget.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsProdModel.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsProdType.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsTestingBatch.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsTestingCategory.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsTestingItem.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsTestingOutline.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsTestingProduct.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsTestingStandCond.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsTestingStandard.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/entity/LimsTestingType.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/vo/LimsBatchDetailVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/vo/LimsBatchResultVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/vo/LimsBatchSampleVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/vo/LimsTestingBatchVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/vo/LimsTestingTypeVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/testing/vo/OutlineTreeVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/validate/AddGroup.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/validate/EditGroup.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/vo/DuplicateCheckVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/vo/JeecgHelloPage.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/vo/LimsAppointmentAuditVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/vo/LimsAppointmentVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/vo/LimsInsUseStatVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/vo/LimsInspectionItemVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/vo/LimsInspectionRecordVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/vo/LimsInstrumentTypeVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-api/src/main/java/org/jeecg/modules/lims/vo/LimsInstrumentVo.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/pom.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/config/WxConfig.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/config/WxProperties.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/JeecgHelloController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsAppointmentAuditController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsAppointmentController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsAppointmentOptionController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsInspectionController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsInspectionDetailController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsInspectionItemController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsInstrumentController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsInstrumentTypeController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsRepairRecordController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsStatController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/LimsUsageRecordController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/controller/WxPushController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/handler/JobHandler.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/JeecgHelloMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsAppointmentAuditMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsAppointmentMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsAppointmentOptionMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsInspectionDetailMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsInspectionItemMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsInspectionMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsInstrumentMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsInstrumentTypeMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsRepairRecordMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/LimsUsageRecordMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsAppointmentAuditMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsAppointmentMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsAppointmentOptionMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsInspectionDetailMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsInspectionItemMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsInspectionMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsInstrumentMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsInstrumentTypeMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsRepairRecordMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/mapper/xml/LimsUsageRecordMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/IJeecgHelloService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsAppointmentAuditService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsAppointmentOptionService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsAppointmentService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsInspectionDetailService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsInspectionItemService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsInspectionService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsInstrumentService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsInstrumentTypeService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsRepairRecordService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/ILimsUsageRecordService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/IWxService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/JeecgHelloServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsAppointmentAuditServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsAppointmentOptionServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsAppointmentServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsInspectionDetailServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsInspectionItemServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsInspectionServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsInstrumentServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsInstrumentTypeServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsRepairRecordServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/LimsUsageRecordServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/service/impl/WxServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsBatchDetailController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsBatchResultController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsBatchSampleController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsItemTargetController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsMiniController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsProdModelController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsProdTypeController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsTestingBatchController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsTestingCategoryController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsTestingItemController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsTestingOutlineController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsTestingProductController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsTestingStandCondController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsTestingStandardController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/controller/LimsTestingTypeController.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsBatchDetailMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsBatchResultMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsBatchSampleMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsItemTargetMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsProdModelMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsProdTypeMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsTestingBatchMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsTestingCategoryMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsTestingItemMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsTestingOutlineMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsTestingProductMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsTestingStandCondMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsTestingStandardMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/LimsTestingTypeMapper.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsBatchDetailMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsBatchResultMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsBatchSampleMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsItemTargetMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsProdModelMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsProdTypeMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsTestingBatchMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsTestingCategoryMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsTestingItemMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsTestingOutlineMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsTestingProductMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsTestingStandCondMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsTestingStandardMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/mapper/xml/LimsTestingTypeMapper.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsBatchDetailService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsBatchResultService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsBatchSampleService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsItemTargetService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsProdModelService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsProdTypeService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsTestingBatchService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsTestingCategoryService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsTestingItemService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsTestingOutlineService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsTestingProductService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsTestingStandCondService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsTestingStandardService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/ILimsTestingTypeService.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsBatchDetailServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsBatchResultServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsBatchSampleServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsItemTargetServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsProdModelServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsProdTypeServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsTestingBatchServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsTestingCategoryServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsTestingItemServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsTestingOutlineServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsTestingProductServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsTestingStandCondServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsTestingStandardServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-biz/src/main/java/org/jeecg/modules/lims/testing/service/impl/LimsTestingTypeServiceImpl.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-start/pom.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-start/src/main/java/org/jeecg/JeecgLimsCloudApplication.java
lb-boot/lb-boot-module-lims/lb-boot-module-lims-start/src/main/resources/application.yml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-start/src/main/resources/logback-spring.xml
lb-boot/lb-boot-module-lims/lb-boot-module-lims-start/src/test/java/Test.java
lb-boot/lb-boot-module-lims/pom.xml
lb-boot/lb-boot-module-lis/lb-boot-module-lis-api/pom.xml
lb-boot/lb-boot-module-lis/lb-boot-module-lis-api/src/main/java/org/jeecg/modules/lis/api/JeecgHelloApi.java
lb-boot/lb-boot-module-lis/lb-boot-module-lis-api/src/main/java/org/jeecg/modules/lis/api/fallback/JeecgHelloFallback.java
lb-boot/lb-boot-module-lis/lb-boot-module-lis-api/src/main/java/org/jeecg/modules/lis/entity/JeecgHelloEntity.java
lb-boot/lb-boot-module-lis/lb-boot-module-lis-api/src/main/java/org/jeecg/modules/lis/vo/JeecgHelloPage.java
lb-boot/lb-boot-module-lis/lb-boot-module-lis-biz/pom.xml
lb-boot/lb-boot-module-lis/lb-boot-module-lis-biz/src/main/java/org/jeecg/modules/lis/controller/JeecgHelloController.java
lb-boot/lb-boot-module-lis/lb-boot-module-lis-biz/src/main/java/org/jeecg/modules/lis/mapper/JeecgHelloMapper.java
lb-boot/lb-boot-module-lis/lb-boot-module-lis-biz/src/main/java/org/jeecg/modules/lis/service/IJeecgHelloService.java
lb-boot/lb-boot-module-lis/lb-boot-module-lis-biz/src/main/java/org/jeecg/modules/lis/service/impl/JeecgHelloServiceImpl.java
lb-boot/lb-boot-module-lis/lb-boot-module-lis-start/pom.xml
lb-boot/lb-boot-module-lis/lb-boot-module-lis-start/src/main/java/org/jeecg/JeecgLisCloudApplication.java
lb-boot/lb-boot-module-lis/lb-boot-module-lis-start/src/main/resources/application.yml
lb-boot/lb-boot-module-lis/pom.xml
lb-boot/lb-boot-module-project/pom.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/LbProjectCloudApplication.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/board/controller/BoardController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/board/mapper/BoardMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/board/mapper/xml/BoardMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/board/model/ProjectModel.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/board/service/IBoardService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/board/service/impl/BoardService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/controller/BonSaleRecordController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/controller/customer/BonProjectController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/controller/customer/BonSalesRecordController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/entity/BonProject.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/entity/BonSaleRecord.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/entity/BonSalesRecord.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/mapper/BonProjectMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/mapper/BonSaleRecordMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/mapper/BonSalesRecordMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/mapper/xml/BonProjectMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/mapper/xml/BonSaleRecordMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/mapper/xml/BonSalesRecordMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/service/IBonProjectService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/service/IBonSaleRecordService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/service/IBonSalesRecordService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/service/impl/BonProjectServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/service/impl/BonSaleRecordServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/service/impl/BonSalesRecordServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bon/util/Constant.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/controller/BonusAllocationController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/controller/BonusPaymentController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/controller/BonusPaymentItemController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/controller/BonusQuotaParamController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/entity/BonusAllocation.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/entity/BonusPayment.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/entity/BonusPaymentItem.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/entity/BonusQuotaParam.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/mapper/BonusAllocationMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/mapper/BonusPaymentItemMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/mapper/BonusPaymentMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/mapper/BonusQuotaParamMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/mapper/xml/BonusAllocationMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/mapper/xml/BonusPaymentItemMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/mapper/xml/BonusPaymentMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/mapper/xml/BonusQuotaParamMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/service/IBonusAllocationService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/service/IBonusPaymentItemService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/service/IBonusPaymentService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/service/IBonusQuotaParamService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/service/impl/BonusAllocationServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/service/impl/BonusPaymentItemServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/service/impl/BonusPaymentServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/bonus/service/impl/BonusQuotaParamServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/excel/ExcelService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/excel/ExcelUtils.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/feign/SystemClient.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/feign/WeeklyClient.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/feign/model/SysDepart.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/feign/model/SysUser.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/feign/model/WekRecord.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/group/controller/ProProjectGroupController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/group/entity/ProProjectGroup.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/group/mapper/ProProjectGroupMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/group/mapper/xml/ProProjectGroupMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/group/service/IProProjectGroupService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/group/service/impl/ProProjectGroupServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/handler/JobHandler.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/controller/PaSoftBookController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/controller/PaSoftBookFileController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/entity/PaSoftbook.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/entity/PaSoftbookFile.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/mapper/PaSoftBookFileMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/mapper/PaSoftBookMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/mapper/xml/PaSoftBookFileMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/mapper/xml/PaSoftBookMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/service/IPaSoftBookFileService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/service/IPaSoftBookService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/service/impl/PaSoftBookFileService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/patent/service/impl/PaSoftBookService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/controller/BulletinBoardController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/controller/ProMilepostController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/controller/ProPmoController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/controller/ProProjectController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/controller/ProSummaryController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/controller/ProTemplateController.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/entity/ProMilepost.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/entity/ProProject.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/entity/ProProjectLink.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/entity/ProProjectLinkTree.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/entity/ProSummary.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/entity/ProTemplate.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/entity/ProjectTreeVo.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/ProMilepostMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/ProProjectLinkMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/ProProjectMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/ProSummaryMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/ProTemplateMapper.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/xml/ProMilepostMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/xml/ProProjectLinkMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/xml/ProProjectMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/xml/ProSummaryMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/mapper/xml/ProTemplateMapper.xml
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/IProMilepostService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/IProProjectLinkService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/IProProjectService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/IProSummaryService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/IProTemplateService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/impl/ProMilepostServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/impl/ProProjectLinkService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/impl/ProProjectService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/impl/ProSummaryServiceImpl.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/service/impl/ProTemplateService.java
lb-boot/lb-boot-module-project/src/main/java/org/jeecg/modules/project/vo/ProjectVo.java
lb-boot/lb-boot-module-project/src/main/resources/application.yml
lb-boot/lb-boot-module-project/src/test/java/ProjectTest.java
lb-boot/lb-boot-module-system/.gitattributes
lb-boot/lb-boot-module-system/Dockerfile
lb-boot/lb-boot-module-system/pom.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/JeecgOneGUI.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/JeecgOneToMainUtil.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/JeecgSystemApplication.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/config/init/SystemInitListener.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/config/init/TomcatFactoryConfig.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/api/client/SystenFeignApi.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/api/controller/SystemAPIController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/cas/util/CASServiceUtil.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/controller/HrmBoardController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/controller/HrmRoomController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/controller/HrmRoomSeatController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/entity/HrmRoom.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/entity/HrmRoomSeat.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/mapper/HrmRoomMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/mapper/HrmRoomSeatMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/mapper/xml/HrmRoomMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/mapper/xml/HrmRoomSeatMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/service/IHrmRoomSeatService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/service/IHrmRoomService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/service/impl/HrmRoomSeatServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/service/impl/HrmRoomServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/hrm/vo/HrmRoomVo.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/controller/SysMessageController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/controller/SysMessageTemplateController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/entity/MsgParams.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/entity/SysMessage.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/entity/SysMessageTemplate.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/handle/impl/WxSendMsgHandle.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/job/SendMsgJob.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/mapper/SysMessageMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/mapper/xml/SysMessageMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/mapper/xml/SysMessageTemplateMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/service/ISysMessageService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/service/impl/SysMessageServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/service/impl/SysMessageTemplateServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/TestSocketController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/RedisService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/impl/MailHealthIndicator.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/ngalain/aop/LogRecordAspect.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/ngalain/controller/NgAlainController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/oss/controller/OSSFileController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/oss/entity/OSSFile.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/oss/mapper/OSSFileMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/oss/service/IOSSFileService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/oss/service/impl/OSSFileServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/quartz/job/AsyncJob.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/quartz/mapper/xml/QuartzJobMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/CommonController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/MockVue3Controller.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysCheckRuleController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartOrgController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDepartTeamController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysFeedbackController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysFillRuleController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysGatewayRouteController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysLogController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysAnnouncementSend.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysCategory.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysCheckRule.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDataSource.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepart.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepartPermission.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepartRole.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepartRolePermission.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepartRoleUser.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepartTeam.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDepartTeamUser.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDict.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysFeedback.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysFillRule.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysGatewayRoute.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysLog.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysPermission.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysPermissionDataRule.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysPosition.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysRole.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysTenant.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysThirdAccount.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUser.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUserAgent.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysCheckRuleMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDataSourceMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartPermissionMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartRolePermissionMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleUserMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartTeamMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDepartTeamUserMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysFeedbackMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysFillRuleMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysGatewayRouteMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysPermissionDataRuleMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysPositionMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysThirdAccountMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserAgentMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysCategoryMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysCheckRuleMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataLogMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataSourceMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartPermissionMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartRoleMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartRolePermissionMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartRoleUserMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartTeamMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartTeamUserMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictItemMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysFeedbackMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysFillRuleMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysGatewayRouteMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysLogMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionDataRuleMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysPositionMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysTenantMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysThirdAccountMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserAgentMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserDepartMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/AnnouncementSendModel.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/DepartOrgVo.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/DepartUserModel.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/DuplicateCheckVo.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysDictTree.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/SysUserSysDepartModel.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeModel.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/rule/OrderNumberRule.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysCheckRuleService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDataSourceService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartRolePermissionService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartTeamService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDepartTeamUserService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysFeedbackService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysFillRuleService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysGatewayRouteService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysLogService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserAgentService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementSendServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysCheckRuleServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDataSourceServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartPermissionServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartTeamServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartTeamUserServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysFeedbackServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysFillRuleServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysPositionServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAccountServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserAgentServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/util/FindsDepartsChildrenUtil.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/util/PermissionDataUtil.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/util/SecurityUtil.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/util/XSSUtils.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDepartTeamVo.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDepartVo.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysDictPage.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysUserDepVo.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysUserOnlineVO.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/thirdapp/JdtDepartmentTreeVo.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwDepartmentTreeVo.java
lb-boot/lb-boot-module-system/src/main/java/org/jeecg/modules/system/vo/thirdapp/SyncInfoVo.java
lb-boot/lb-boot-module-system/src/main/resources/application-dev.yml
lb-boot/lb-boot-module-system/src/main/resources/application-prod.yml
lb-boot/lb-boot-module-system/src/main/resources/application-test.yml
lb-boot/lb-boot-module-system/src/main/resources/application.yml
lb-boot/lb-boot-module-system/src/main/resources/banner.txt
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/common/blob.ftl
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/common/init/initValue.ftl
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/common/init/initValueSub.ftl
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/common/utils.ftl
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/common/validatorRulesTemplate/core.ftl
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/common/validatorRulesTemplate/main.ftl
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/common/validatorRulesTemplate/sub.ftl
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue/[1-n]List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/subTables/[1-n]SubTable.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/controller/${entityPackage}/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/entity/${entityPackage}/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/mapper/${entityPackage}/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/mapper/${entityPackage}/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/service/${entityPackage}/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/service/${entityPackage}/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal__Style#Drawer.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/[1-n]List.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Modal.vuei
lb-boot/lb-boot-module-system/src/main/resources/jeecg/jeecg_config.properties
lb-boot/lb-boot-module-system/src/main/resources/jeecg/jeecg_database.properties
lb-boot/lb-boot-module-system/src/main/resources/logback-spring.xml
lb-boot/lb-boot-module-system/src/main/resources/static/demo1.html
lb-boot/lb-boot-module-system/src/main/resources/static/generic/LICENSE
lb-boot/lb-boot-module-system/src/main/resources/static/generic/build/pdf.js
lb-boot/lb-boot-module-system/src/main/resources/static/generic/build/pdf.worker.js
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/78-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/78-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/78-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/78-RKSJ-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/78-RKSJ-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/78-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/83pv-RKSJ-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Add-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Add-RKSJ-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Add-RKSJ-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Add-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-0.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-1.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-2.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-3.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-4.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-5.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-6.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-UCS2.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-GB1-0.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-GB1-1.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-GB1-2.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-GB1-3.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-GB1-4.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-GB1-5.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-GB1-UCS2.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-0.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-1.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-2.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-3.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-4.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-5.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-6.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-UCS2.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-0.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-1.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-2.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-UCS2.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/B5pc-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/B5pc-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/CNS-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/CNS-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/CNS1-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/CNS1-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/CNS2-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/CNS2-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/ETHK-B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/ETHK-B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/ETen-B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/ETen-B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/ETenms-B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/ETenms-B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Ext-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Ext-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GB-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GB-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GB-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GB-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBK-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBK-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBK2K-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBK2K-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBKp-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBKp-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBT-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBT-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBT-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBT-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBpc-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/GBpc-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKdla-B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKdla-B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKdlb-B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKdlb-B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKgccs-B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKgccs-B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKm314-B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKm314-B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKm471-B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKm471-B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKscs-B5-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/HKscs-B5-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Hankaku.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Hiragana.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSC-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSC-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSC-Johab-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSC-Johab-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSCms-UHC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSCms-UHC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Katakana.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/LICENSE
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/NWP-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/NWP-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/RKSJ-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/RKSJ-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/Roman.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-HW-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJISPro-UTF8-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-H.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/V.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/cmaps/WP-Symbol.bcmap
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/compatibility.js
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/compressed.tracemonkey-pldi-09.pdf
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/debugger.js
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/annotation-check.svg
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/annotation-comment.svg
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/annotation-help.svg
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/annotation-insert.svg
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/annotation-key.svg
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/annotation-newparagraph.svg
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/annotation-noicon.svg
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/annotation-note.svg
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/annotation-paragraph.svg
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/findbarButton-next-rtl.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/findbarButton-next-rtl@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/findbarButton-next.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/findbarButton-next@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/findbarButton-previous-rtl.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/findbarButton-previous-rtl@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/findbarButton-previous.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/findbarButton-previous@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/grab.cur
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/grabbing.cur
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/loading-icon.gif
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/loading-small.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/loading-small@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/shadow.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/texture.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-bookmark.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-bookmark@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-download.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-download@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-menuArrows.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-menuArrows@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-openFile.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-openFile@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-pageDown.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-pageDown@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-pageUp.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-pageUp@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-presentationMode.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-presentationMode@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-print.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-print@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-search.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-search@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-viewOutline.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-viewOutline@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-zoomIn.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-zoomIn@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-zoomOut.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/images/toolbarButton-zoomOut@2x.png
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/l10n.js
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/locale/locale.properties
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/locale/zh-CN/viewer.properties
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/viewer.css
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/viewer.html
lb-boot/lb-boot-module-system/src/main/resources/static/generic/web/viewer.js
lb-boot/lb-boot-module-system/src/main/resources/static/view/userlist.html
lb-boot/lb-boot-module-system/src/main/resources/templates/announcement/showContent.ftl
lb-boot/lb-boot-module-system/src/main/resources/templates/demo3.ftl
lb-boot/lb-boot-module-system/src/main/resources/templates/pdfPreviewIframe.ftl
lb-boot/lb-boot-module-system/src/main/resources/templates/thirdLogin.ftl
lb-boot/lb-boot-module-system/src/test/java/org/jeecg/SampleTest.java
lb-boot/lb-boot-module-system/src/test/java/org/jeecg/SecurityToolsTest.java
lb-boot/lb-boot-module-system/src/test/java/org/jeecg/modules/online/desform/test/DesformApiTest.java
lb-boot/lb-boot-module-system/src/test/java/org/jeecg/modules/online/desform/test/OnlineApiTest.java
lb-boot/lb-boot-module-system/src/test/java/org/jeecg/modules/system/test/SysUserTest.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/pom.xml
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/api/JeecgHelloApi.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/api/fallback/JeecgHelloFallback.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/entity/JeecgHelloEntity.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/entity/ProProject.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/entity/ProProjectLink.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/entity/WekEvaluate.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/entity/WekRecord.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/entity/WekUserRelation.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/feign/ProjectClient.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/feign/SystemClient.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/feign/model/SysDepart.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/feign/model/SysDepartTreeModel.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/feign/model/SysUser.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/vo/JeecgHelloPage.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/vo/ProjectTreeVo.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/vo/WekEvaluateBean.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/vo/WekProject.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/vo/WekResultBean.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/vo/WekTypeBean.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-api/src/main/java/org/jeecg/modules/weekly/vo/WekWeekBean.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/pom.xml
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/controller/JeecgHelloController.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/controller/WekEvaluateController.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/controller/WekRecordController.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/controller/WekUserRelationController.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/mapper/JeecgHelloMapper.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/mapper/WekEvaluateMapper.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/mapper/WekRecordMapper.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/mapper/WekUserRelationMapper.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/mapper/xml/WekEvaluateMapper.xml
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/mapper/xml/WekRecordMapper.xml
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/mapper/xml/WekUserRelationMapper.xml
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/service/IJeecgHelloService.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/service/IWekEvaluateService.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/service/IWekRecordService.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/service/IWekUserRelationService.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/service/impl/JeecgHelloServiceImpl.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/service/impl/WekEvaluateServiceImpl.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/service/impl/WekRecordServiceImpl.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-biz/src/main/java/org/jeecg/modules/weekly/service/impl/WekUserRelationServiceImpl.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-start/pom.xml
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-start/src/main/java/org/jeecg/JeecgWeeklyCloudApplication.java
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-start/src/main/resources/application.yml
lb-boot/lb-boot-module-weekly/lb-boot-module-weekly-start/src/test/java/WeeklyTest.java
lb-boot/lb-boot-module-weekly/pom.xml
lb-boot/lb-boot-starter/jeecg-boot-starter-cloud/nacos/jeecg-dev.yaml
lb-boot/lb-boot-starter/jeecg-boot-starter-cloud/nacos/jeecg-gateway-router.json
lb-boot/lb-boot-starter/jeecg-boot-starter-cloud/nacos/jeecg.yaml
lb-boot/lb-boot-starter/jeecg-boot-starter-cloud/pom.xml
lb-boot/lb-boot-starter/jeecg-boot-starter-cloud/src/main/java/org/jeecg/config/FeignConfig.java
lb-boot/lb-boot-starter/jeecg-boot-starter-cloud/src/main/java/org/jeecg/starter/cloud/config/PersonBeanConfiguration.java
lb-boot/lb-boot-starter/jeecg-boot-starter-cloud/src/main/java/org/jeecg/starter/cloud/feign/IJeecgFeignService.java
lb-boot/lb-boot-starter/jeecg-boot-starter-cloud/src/main/java/org/jeecg/starter/cloud/feign/impl/JeecgFeignService.java
lb-boot/lb-boot-starter/jeecg-boot-starter-cloud/src/main/resources/bootstrap.yml
lb-boot/lb-boot-starter/jeecg-boot-starter-job/pom.xml
lb-boot/lb-boot-starter/jeecg-boot-starter-job/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
lb-boot/lb-boot-starter/jeecg-boot-starter-job/src/main/java/org/jeecg/boot/starter/job/config/XxlJobConfiguration.java
lb-boot/lb-boot-starter/jeecg-boot-starter-job/src/main/java/org/jeecg/boot/starter/job/prop/XxlJobProperties.java
lb-boot/lb-boot-starter/jeecg-boot-starter-job/src/main/resources/META-INF/spring.factories
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/pom.xml
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/annotation/JLock.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/annotation/JRepeat.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/annotation/LockConstant.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/aspect/BaseAspect.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/aspect/DistributedLockHandler.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/aspect/RepeatSubmitAspect.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/client/RedissonLockClient.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/config/RedissonConfiguration.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/core/RedissonManager.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/core/strategy/RedissonConfigStrategy.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/core/strategy/impl/ClusterRedissonConfigStrategyImpl.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/core/strategy/impl/MasterslaveRedissonConfigStrategyImpl.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/core/strategy/impl/SentinelRedissonConfigStrategyImpl.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/core/strategy/impl/StandaloneRedissonConfigStrategyImpl.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/enums/GlobalConstant.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/enums/LockModel.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/enums/RedisConnectionType.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/java/org/jeecg/boot/starter/lock/prop/RedissonProperties.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/main/resources/META-INF/spring.factories
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/test/java/org/jeecg/boot/starter/lock/test/LockService.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/test/java/org/jeecg/boot/starter/lock/test/LockTest.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/test/java/org/jeecg/boot/starter/lock/test/LockTestApplication.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/test/java/org/jeecg/boot/starter/lock/test/TestUser.java
lb-boot/lb-boot-starter/jeecg-boot-starter-lock/src/test/resources/application.yml
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/pom.xml
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/client/RabbitMqClient.java
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/config/RabbitMqConfig.java
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/core/BaseRabbiMqHandler.java
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/core/MapMessageConverter.java
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/event/BaseApplicationEvent.java
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/event/EventObj.java
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/event/JeecgBusEventHandler.java
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/event/JeecgRemoteApplicationEvent.java
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/exchange/DelayExchangeBuilder.java
lb-boot/lb-boot-starter/jeecg-boot-starter-rabbitmq/src/main/java/org/jeecg/boot/starter/rabbitmq/listenter/MqListener.java
lb-boot/lb-boot-starter/pom.xml
lb-boot/lb-cloud-module/docker-compose.yml
lb-boot/lb-cloud-module/jeecg-cloud-gateway/Dockerfile
lb-boot/lb-cloud-module/jeecg-cloud-gateway/README.md
lb-boot/lb-cloud-module/jeecg-cloud-gateway/pom.xml
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/JeecgGatewayApplication.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/config/GatewayRoutersConfiguration.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/config/RateLimiterConfiguration.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/config/RouterDataType.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/fallback/FallbackController.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/filter/GlobalAccessTokenFilter.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/filter/SentinelFilterContextConfig.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/HystrixFallbackHandler.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/LoderRouderHandler.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/MySwaggerResourceProvider.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/SentinelBlockRequestHandler.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/SwaggerResourceController.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteLoader.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteService.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/GatewayRouteVo.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/MyRouteDefinition.java
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/resources/application.yml
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/resources/keyStore/7228817__shlanbao.cn.pfx
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/resources/keyStore/pfx-password.txt
lb-boot/lb-cloud-module/jeecg-cloud-gateway/src/main/resources/logback-spring.xml
lb-boot/lb-cloud-module/jeecg-cloud-monitor/pom.xml
lb-boot/lb-cloud-module/jeecg-cloud-monitor/src/main/java/org/jeecg/monitor/JeecgMonitorApplication.java
lb-boot/lb-cloud-module/jeecg-cloud-monitor/src/main/java/org/jeecg/monitor/config/SecuritySecureConfig.java
lb-boot/lb-cloud-module/jeecg-cloud-monitor/src/main/resources/application.yml
lb-boot/lb-cloud-module/jeecg-cloud-nacos/Dockerfile
lb-boot/lb-cloud-module/jeecg-cloud-nacos/pom.xml
lb-boot/lb-cloud-module/jeecg-cloud-nacos/src/main/java/com/alibaba/nacos/JeecgNacosApplication.java
lb-boot/lb-cloud-module/jeecg-cloud-nacos/src/main/resources/application.yml
lb-boot/lb-cloud-module/jeecg-cloud-sentinel/README.md
lb-boot/lb-cloud-module/jeecg-cloud-sentinel/pom.xml
lb-boot/lb-cloud-module/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/JeecgSentinelDashboardApplication.java
lb-boot/lb-cloud-module/jeecg-cloud-sentinel/src/main/resources/application.properties
lb-boot/lb-cloud-module/jeecg-cloud-system-start/Dockerfile
lb-boot/lb-cloud-module/jeecg-cloud-system-start/pom.xml
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/constant/CloudConstant.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/ebus/DemoBusEvent.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/controller/JeecgTestFeignController.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClient.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/JeecgTestClientDyn.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/feign/feign/fallback/JeecgTestClientFallback.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/lock/DemoLockTest.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver1.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver2.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloReceiver3.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/rabbitmq/HelloTimeReceiver.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/java/org/jeecg/modules/cloud/xxljob/DemoJobHandler.java
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/resources/application-dev.yml
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/resources/application.yml
lb-boot/lb-cloud-module/jeecg-cloud-system-start/src/main/resources/logback-spring.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/Dockerfile
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/README.md
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/doc/db/tables_xxl_job.sql
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/pom.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/IndexController.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobApiController.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobCodeController.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobLogController.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/UserController.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/alarm/JobAlarm.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/alarm/JobAlarmer.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/cron/CronExpression.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobLosedMonitorHelper.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/service/LoginService.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/service/XxlJobService.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/application.yml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/i18n/message_en.properties
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/i18n/message_zh_CN.properties
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/i18n/message_zh_TC.properties
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/logback.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css.map
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/moment/moment.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/dist/js/adminlte.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/favicon.ico
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/js/common.1.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/js/index.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/js/jobcode.index.1.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/js/jobgroup.index.1.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/js/jobinfo.index.1.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/js/joblog.detail.1.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/js/joblog.index.1.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/js/login.1.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/js/user.index.1.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/lib/codemirror.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/lib/codemirror.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/clike/clike.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/php/php.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/python/python.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/shell/shell.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/cronGen/cronGen.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/cronGen/cronGen_en.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/echarts/echarts.common.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/jquery/jquery.cookie.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/jquery/jquery.validate.min.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/layer.js
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/icon-ext.png
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/icon.png
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/layer.css
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-0.gif
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-1.gif
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-2.gif
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/common/common.exception.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/common/common.macro.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/help.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/index.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/jobcode/jobcode.index.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/jobgroup/jobgroup.index.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/jobinfo/jobinfo.index.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/joblog/joblog.detail.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/joblog/joblog.index.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/login.ftl
lb-boot/lb-cloud-module/jeecg-cloud-xxljob/src/main/resources/templates/user/user.index.ftl
lb-boot/lb-cloud-module/pom.xml
lb-boot/pom.xml
lb-boot/新建模块
lb-ui/.dockerignore
lb-ui/.editorconfig
lb-ui/.env
lb-ui/.env.development
lb-ui/.env.production
lb-ui/.env.test
lb-ui/.eslintignore
lb-ui/.gitattributes
lb-ui/.gitignore
lb-ui/.prettierrc
lb-ui/Dockerfile
lb-ui/LICENSE
lb-ui/README.md
lb-ui/babel.config.js
lb-ui/idea.config.js
lb-ui/package.json
lb-ui/public/avatar2.jpg
lb-ui/public/cdn/babel-polyfill/polyfill_7_2_5.js
lb-ui/public/cdn/font-icon/font_2316098_umqusozousr.js
lb-ui/public/codemirror/css/tomorrow-night.css
lb-ui/public/color.less
lb-ui/public/goright.png
lb-ui/public/index.html
lb-ui/public/logo.png
lb-ui/public/mavonEditor/css/github-markdown.css
lb-ui/public/mavonEditor/css/katex.min.css
lb-ui/public/mavonEditor/css/tomorrow-night.css
lb-ui/public/mavonEditor/js/highlight.min.js
lb-ui/public/mavonEditor/js/katex.min.js
lb-ui/public/mavonEditor/js/lang.hljs.js
lb-ui/public/static/diagram-viewer/images/bg.png
lb-ui/public/static/diagram-viewer/images/breadcrumbs.png
lb-ui/public/static/diagram-viewer/images/checker-bg.png
lb-ui/public/static/diagram-viewer/images/deployer/blue/message_catch.png
lb-ui/public/static/diagram-viewer/images/deployer/business_rule.png
lb-ui/public/static/diagram-viewer/images/deployer/error_catch.png
lb-ui/public/static/diagram-viewer/images/deployer/error_throw.png
lb-ui/public/static/diagram-viewer/images/deployer/manual.png
lb-ui/public/static/diagram-viewer/images/deployer/message_catch.png
lb-ui/public/static/diagram-viewer/images/deployer/message_throw.png
lb-ui/public/static/diagram-viewer/images/deployer/receive.png
lb-ui/public/static/diagram-viewer/images/deployer/script.png
lb-ui/public/static/diagram-viewer/images/deployer/send.png
lb-ui/public/static/diagram-viewer/images/deployer/service.png
lb-ui/public/static/diagram-viewer/images/deployer/signal_catch.png
lb-ui/public/static/diagram-viewer/images/deployer/signal_throw.png
lb-ui/public/static/diagram-viewer/images/deployer/timer.png
lb-ui/public/static/diagram-viewer/images/deployer/user.png
lb-ui/public/static/diagram-viewer/index.html
lb-ui/public/static/diagram-viewer/js/ActivitiRest.js
lb-ui/public/static/diagram-viewer/js/ActivityImpl.js
lb-ui/public/static/diagram-viewer/js/Color.js
lb-ui/public/static/diagram-viewer/js/LineBreakMeasurer.js
lb-ui/public/static/diagram-viewer/js/Polyline.js
lb-ui/public/static/diagram-viewer/js/ProcessDiagramCanvas.js
lb-ui/public/static/diagram-viewer/js/ProcessDiagramGenerator.js
lb-ui/public/static/diagram-viewer/js/jquery/jquery.asyncqueue.js
lb-ui/public/static/diagram-viewer/js/jquery/jquery.js
lb-ui/public/static/diagram-viewer/js/jquery/jquery.progressbar.js
lb-ui/public/static/diagram-viewer/js/jstools.js
lb-ui/public/static/diagram-viewer/js/raphael.2.1.1.js
lb-ui/public/static/diagram-viewer/js/raphael.js
lb-ui/public/static/diagram-viewer/js/raphael_uncompressed.js
lb-ui/public/static/diagram-viewer/js/textlayout.js
lb-ui/public/static/diagram-viewer/style.css
lb-ui/public/static/editor-app/app-cfg.js
lb-ui/public/static/editor-app/app.js
lb-ui/public/static/editor-app/configuration/properties-assignment-controller.js
lb-ui/public/static/editor-app/configuration/properties-condition-expression-controller.js
lb-ui/public/static/editor-app/configuration/properties-custom-controllers.js
lb-ui/public/static/editor-app/configuration/properties-default-controllers.js
lb-ui/public/static/editor-app/configuration/properties-event-listeners-controller.js
lb-ui/public/static/editor-app/configuration/properties-execution-listeners-controller.js
lb-ui/public/static/editor-app/configuration/properties-fields-controller.js
lb-ui/public/static/editor-app/configuration/properties-form-properties-controller.js
lb-ui/public/static/editor-app/configuration/properties-in-parameters-controller.js
lb-ui/public/static/editor-app/configuration/properties-message-definitions-controller.js
lb-ui/public/static/editor-app/configuration/properties-message-scope-controller.js
lb-ui/public/static/editor-app/configuration/properties-multiinstance-controller.js
lb-ui/public/static/editor-app/configuration/properties-out-parameters-controller.js
lb-ui/public/static/editor-app/configuration/properties-sequenceflow-order-controller.js
lb-ui/public/static/editor-app/configuration/properties-signal-definitions-controller.js
lb-ui/public/static/editor-app/configuration/properties-signal-scope-controller.js
lb-ui/public/static/editor-app/configuration/properties-task-listeners-controller.js
lb-ui/public/static/editor-app/configuration/properties.js
lb-ui/public/static/editor-app/configuration/properties/assignment-candidateGroup.html
lb-ui/public/static/editor-app/configuration/properties/assignment-display-template.html
lb-ui/public/static/editor-app/configuration/properties/assignment-popup-popup.html
lb-ui/public/static/editor-app/configuration/properties/assignment-popup.html
lb-ui/public/static/editor-app/configuration/properties/assignment-write-template.html
lb-ui/public/static/editor-app/configuration/properties/boolean-property-template.html
lb-ui/public/static/editor-app/configuration/properties/condition-expression-display-template.html
lb-ui/public/static/editor-app/configuration/properties/condition-expression-popup.html
lb-ui/public/static/editor-app/configuration/properties/condition-expression-write-template.html
lb-ui/public/static/editor-app/configuration/properties/default-value-display-template.html
lb-ui/public/static/editor-app/configuration/properties/event-listeners-display-template.html
lb-ui/public/static/editor-app/configuration/properties/event-listeners-popup.html
lb-ui/public/static/editor-app/configuration/properties/event-listeners-write-template.html
lb-ui/public/static/editor-app/configuration/properties/execution-listeners-display-template.html
lb-ui/public/static/editor-app/configuration/properties/execution-listeners-popup.html
lb-ui/public/static/editor-app/configuration/properties/execution-listeners-write-template.html
lb-ui/public/static/editor-app/configuration/properties/feedback-popup.html
lb-ui/public/static/editor-app/configuration/properties/fields-display-template.html
lb-ui/public/static/editor-app/configuration/properties/fields-popup.html
lb-ui/public/static/editor-app/configuration/properties/fields-write-template.html
lb-ui/public/static/editor-app/configuration/properties/form-properties-display-template.html
lb-ui/public/static/editor-app/configuration/properties/form-properties-popup.html
lb-ui/public/static/editor-app/configuration/properties/form-properties-write-template.html
lb-ui/public/static/editor-app/configuration/properties/in-parameters-display-template.html
lb-ui/public/static/editor-app/configuration/properties/in-parameters-popup.html
lb-ui/public/static/editor-app/configuration/properties/in-parameters-write-template.html
lb-ui/public/static/editor-app/configuration/properties/message-definitions-display-template.html
lb-ui/public/static/editor-app/configuration/properties/message-definitions-popup.html
lb-ui/public/static/editor-app/configuration/properties/message-definitions-write-template.html
lb-ui/public/static/editor-app/configuration/properties/message-property-write-template.html
lb-ui/public/static/editor-app/configuration/properties/multiinstance-property-write-template.html
lb-ui/public/static/editor-app/configuration/properties/out-parameters-display-template.html
lb-ui/public/static/editor-app/configuration/properties/out-parameters-popup.html
lb-ui/public/static/editor-app/configuration/properties/out-parameters-write-template.html
lb-ui/public/static/editor-app/configuration/properties/sequenceflow-order-display-template.html
lb-ui/public/static/editor-app/configuration/properties/sequenceflow-order-popup.html
lb-ui/public/static/editor-app/configuration/properties/sequenceflow-order-write-template.html
lb-ui/public/static/editor-app/configuration/properties/signal-definitions-display-template.html
lb-ui/public/static/editor-app/configuration/properties/signal-definitions-popup.html
lb-ui/public/static/editor-app/configuration/properties/signal-definitions-write-template.html
lb-ui/public/static/editor-app/configuration/properties/signal-property-write-template.html
lb-ui/public/static/editor-app/configuration/properties/string-property-write-mode-template.html
lb-ui/public/static/editor-app/configuration/properties/subprocess-reference-display-template.html
lb-ui/public/static/editor-app/configuration/properties/subprocess-reference-popup.html
lb-ui/public/static/editor-app/configuration/properties/subprocess-reference-write-template.html
lb-ui/public/static/editor-app/configuration/properties/task-listeners-display-template.html
lb-ui/public/static/editor-app/configuration/properties/task-listeners-popup.html
lb-ui/public/static/editor-app/configuration/properties/task-listeners-write-template.html
lb-ui/public/static/editor-app/configuration/properties/text-popup.html
lb-ui/public/static/editor-app/configuration/properties/text-property-write-template.html
lb-ui/public/static/editor-app/configuration/toolbar-custom-actions.js
lb-ui/public/static/editor-app/configuration/toolbar-default-actions.js
lb-ui/public/static/editor-app/configuration/toolbar.js
lb-ui/public/static/editor-app/configuration/url-config.js
lb-ui/public/static/editor-app/css/editor-ext.css
lb-ui/public/static/editor-app/css/style-common.css
lb-ui/public/static/editor-app/css/style-editor.css
lb-ui/public/static/editor-app/css/style.css
lb-ui/public/static/editor-app/editor-config.js
lb-ui/public/static/editor-app/editor-controller.js
lb-ui/public/static/editor-app/editor-utils.js
lb-ui/public/static/editor-app/editor.html
lb-ui/public/static/editor-app/editor/css/editor.css
lb-ui/public/static/editor-app/editor/i18n/translation_de.js
lb-ui/public/static/editor-app/editor/i18n/translation_en_us.js
lb-ui/public/static/editor-app/editor/i18n/translation_signavio_de.js
lb-ui/public/static/editor-app/editor/i18n/translation_signavio_en_us.js
lb-ui/public/static/editor-app/editor/oryx.debug.js
lb-ui/public/static/editor-app/editor/oryx.js
lb-ui/public/static/editor-app/eventbus.js
lb-ui/public/static/editor-app/fonts/activiti-admin-webfont.eot
lb-ui/public/static/editor-app/fonts/activiti-admin-webfont.svg
lb-ui/public/static/editor-app/fonts/activiti-admin-webfont.ttf
lb-ui/public/static/editor-app/fonts/activiti-admin-webfont.woff
lb-ui/public/static/editor-app/fonts/glyphicons-halflings-regular.eot
lb-ui/public/static/editor-app/fonts/glyphicons-halflings-regular.svg
lb-ui/public/static/editor-app/fonts/glyphicons-halflings-regular.ttf
lb-ui/public/static/editor-app/fonts/glyphicons-halflings-regular.woff
lb-ui/public/static/editor-app/header-controller.js
lb-ui/public/static/editor-app/i18n/en.json
lb-ui/public/static/editor-app/i18n/en.json_bak
lb-ui/public/static/editor-app/images/bpmn-error.png
lb-ui/public/static/editor-app/images/bpmn-warning.png
lb-ui/public/static/editor-app/images/datadefinition.png
lb-ui/public/static/editor-app/images/delete.png
lb-ui/public/static/editor-app/images/loading.gif
lb-ui/public/static/editor-app/images/logo-2x.png
lb-ui/public/static/editor-app/images/logo.png
lb-ui/public/static/editor-app/images/nw-handle-dark.gif
lb-ui/public/static/editor-app/images/se-handle-dark.gif
lb-ui/public/static/editor-app/images/shapemenu_highlight.png
lb-ui/public/static/editor-app/images/wrench.png
lb-ui/public/static/editor-app/libs/angular-cookies_1.2.13/angular-cookies.min.js
lb-ui/public/static/editor-app/libs/angular-cookies_1.2.13/angular-cookies.min.js.map
lb-ui/public/static/editor-app/libs/angular-dragdrop.min-1.0.3.js
lb-ui/public/static/editor-app/libs/angular-dragdrop_1.0.7/angular-dragdrop.min.js
lb-ui/public/static/editor-app/libs/angular-mocks_1.2.13/angular-mocks.js
lb-ui/public/static/editor-app/libs/angular-resource_1.2.13/angular-resource.js
lb-ui/public/static/editor-app/libs/angular-resource_1.2.13/angular-resource.min.js
lb-ui/public/static/editor-app/libs/angular-resource_1.2.13/angular-resource.min.js.map
lb-ui/public/static/editor-app/libs/angular-route_1.2.13/angular-route.js
lb-ui/public/static/editor-app/libs/angular-route_1.2.13/angular-route.min.js
lb-ui/public/static/editor-app/libs/angular-route_1.2.13/angular-route.min.js.map
lb-ui/public/static/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.js
lb-ui/public/static/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.min.js
lb-ui/public/static/editor-app/libs/angular-sanitize_1.2.13/angular-sanitize.min.js.map
lb-ui/public/static/editor-app/libs/angular-scroll_0.5.7/angular-scroll.min.js
lb-ui/public/static/editor-app/libs/angular-strap_2.0.5/angular-strap.min.js
lb-ui/public/static/editor-app/libs/angular-strap_2.0.5/angular-strap.tpl.min.js
lb-ui/public/static/editor-app/libs/angular-translate-loader-static-files/.bower.json
lb-ui/public/static/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.js
lb-ui/public/static/editor-app/libs/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js
lb-ui/public/static/editor-app/libs/angular-translate-storage-cookie/.bower.json
lb-ui/public/static/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.js
lb-ui/public/static/editor-app/libs/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js
lb-ui/public/static/editor-app/libs/angular-translate_2.4.2/angular-translate.js
lb-ui/public/static/editor-app/libs/angular-translate_2.4.2/angular-translate.min.js
lb-ui/public/static/editor-app/libs/angular_1.2.13/angular-animate.min.js
lb-ui/public/static/editor-app/libs/angular_1.2.13/angular.min.js
lb-ui/public/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker-bs3.css
lb-ui/public/static/editor-app/libs/bootstrap-daterangepicker_1.3.7/daterangepicker.js
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.css.map
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap-theme.min.css
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.css.map
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/css/bootstrap.min.css
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.eot
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.svg
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.ttf
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/fonts/glyphicons-halflings-regular.woff
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/js/bootstrap.js
lb-ui/public/static/editor-app/libs/bootstrap_3.1.1/js/bootstrap.min.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/.bower.json
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/.gitignore
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/CHANGES
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/CONTRIBUTORS.md
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/LICENSE
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/README.md
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/es5-sham.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/es5-sham.map
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/es5-sham.min.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/es5-shim.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/es5-shim.map
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/es5-shim.min.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/package.json
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h-kill.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h-matchers.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/helpers/h.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/index.html
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/index.min.html
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine-html.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine.css
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/lib/jasmine_favicon.png
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/lib/json2.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-array.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-date.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-function.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-number.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-object.js
lb-ui/public/static/editor-app/libs/es5-shim-15.3.4.5/tests/spec/s-string.js
lb-ui/public/static/editor-app/libs/jquery-ui-1.10.3.custom.min.js
lb-ui/public/static/editor-app/libs/jquery.autogrow-textarea.js
lb-ui/public/static/editor-app/libs/jquery_1.11.0/jquery.js
lb-ui/public/static/editor-app/libs/jquery_1.11.0/jquery.min.js
lb-ui/public/static/editor-app/libs/jquery_1.11.0/jquery.min.map
lb-ui/public/static/editor-app/libs/json3_3.2.6/LICENSE
lb-ui/public/static/editor-app/libs/json3_3.2.6/lib/json3.js
lb-ui/public/static/editor-app/libs/json3_3.2.6/lib/json3.min.js
lb-ui/public/static/editor-app/libs/momentjs_2.5.1/momentjs.min.js
lb-ui/public/static/editor-app/libs/mousetrap-1.4.5.min.js
lb-ui/public/static/editor-app/libs/ng-grid-2.0.7-min.js
lb-ui/public/static/editor-app/libs/ng-grid-2.0.7.min.css
lb-ui/public/static/editor-app/libs/pagination/tm.pagination.js
lb-ui/public/static/editor-app/libs/path_parser.js
lb-ui/public/static/editor-app/libs/prototype-1.5.1.js
lb-ui/public/static/editor-app/libs/ui-utils.min-0.0.4.js
lb-ui/public/static/editor-app/partials/root-stencil-item-template.html
lb-ui/public/static/editor-app/partials/stencil-item-template.html
lb-ui/public/static/editor-app/plugins.xml
lb-ui/public/static/editor-app/popups/icon-template.html
lb-ui/public/static/editor-app/popups/save-model.html
lb-ui/public/static/editor-app/popups/select-shape.html
lb-ui/public/static/editor-app/popups/unsaved-changes.html
lb-ui/public/static/editor-app/select-shape-controller.js
lb-ui/public/static/editor-app/stencil-controller.js
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.collapsed.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/event.subprocess.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/expanded.subprocess.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.business.rule.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.camel.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.manual.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.mule.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.receive.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.script.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.send.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.service.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.shell.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/list/type.user.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/subprocess.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/activity/task.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/artifact/text.annotation.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/cancel.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/compensation.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/error.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/message.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/signal.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/catching/timer.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/association.undirected.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/association.unidirectional.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/messageflow.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/connector/sequenceflow.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/dataobject/data.store.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/diagram.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/cancel.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/error.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/none.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/endevent/terminate.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/eventbased.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/exclusive.databased.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/inclusive.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/gateway/parallel.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/error.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/message.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/none.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/signal.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/startevent/timer.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/swimlane/lane.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/swimlane/pool.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/throwing/none.png
lb-ui/public/static/editor-app/stencilsets/bpmn2.0/icons/throwing/signal.png
lb-ui/public/static/editor-app/toolbar-controller.js
lb-ui/public/static/modeler.html
lb-ui/public/static/stencilset.json
lb-ui/public/tinymce/langs/zh_CN.js
lb-ui/public/tinymce/skins/lightgray/content.min.css
lb-ui/public/tinymce/skins/lightgray/skin.min.css
lb-ui/public/v2.js
lb-ui/src/App.vue
lb-ui/src/api/GroupRequest.js
lb-ui/src/api/activiti/activiti.js
lb-ui/src/api/api.js
lb-ui/src/api/index.js
lb-ui/src/api/lims.js
lb-ui/src/api/login.js
lb-ui/src/api/manage.js
lb-ui/src/api/pro.js
lb-ui/src/api/week.js
lb-ui/src/assets/audio/wave.gif
lb-ui/src/assets/background.svg
lb-ui/src/assets/checkcode.png
lb-ui/src/assets/company_logo.png
lb-ui/src/assets/daiban.png
lb-ui/src/assets/desk/cloud.png
lb-ui/src/assets/desk/f01.png
lb-ui/src/assets/desk/f03.png
lb-ui/src/assets/desk/icon/computer.png
lb-ui/src/assets/desk/icon/disk_shortcut_hover.png
lb-ui/src/assets/desk/icon/docm.png
lb-ui/src/assets/desk/icon/docx.png
lb-ui/src/assets/desk/icon/folder.png
lb-ui/src/assets/desk/icon/pdf.png
lb-ui/src/assets/desk/icon/xls.png
lb-ui/src/assets/desk/light.png
lb-ui/src/assets/desk/loginbg3.png
lb-ui/src/assets/desk/panel_tools.png
lb-ui/src/assets/desk/righttop.gif
lb-ui/src/assets/desk/rlist.gif
lb-ui/src/assets/desk/win.png
lb-ui/src/assets/duban.png
lb-ui/src/assets/file/dir.png
lb-ui/src/assets/file/file_7z.svg
lb-ui/src/assets/file/file_avi.png
lb-ui/src/assets/file/file_c#.png
lb-ui/src/assets/file/file_c++.png
lb-ui/src/assets/file/file_c.png
lb-ui/src/assets/file/file_chm.png
lb-ui/src/assets/file/file_css.png
lb-ui/src/assets/file/file_csv.png
lb-ui/src/assets/file/file_dmg.png
lb-ui/src/assets/file/file_excel.svg
lb-ui/src/assets/file/file_exe.png
lb-ui/src/assets/file/file_flac.svg
lb-ui/src/assets/file/file_gif.png
lb-ui/src/assets/file/file_go.png
lb-ui/src/assets/file/file_html.png
lb-ui/src/assets/file/file_img.png
lb-ui/src/assets/file/file_jar.png
lb-ui/src/assets/file/file_java.png
lb-ui/src/assets/file/file_js.png
lb-ui/src/assets/file/file_json.png
lb-ui/src/assets/file/file_jsp.png
lb-ui/src/assets/file/file_kotlin.png
lb-ui/src/assets/file/file_less.png
lb-ui/src/assets/file/file_lua.png
lb-ui/src/assets/file/file_markdown.png
lb-ui/src/assets/file/file_music.png
lb-ui/src/assets/file/file_nginx.png
lb-ui/src/assets/file/file_oa.png
lb-ui/src/assets/file/file_objective_c.png
lb-ui/src/assets/file/file_open.png
lb-ui/src/assets/file/file_pdf.png
lb-ui/src/assets/file/file_php.png
lb-ui/src/assets/file/file_powershell.png
lb-ui/src/assets/file/file_ppt.svg
lb-ui/src/assets/file/file_properties.png
lb-ui/src/assets/file/file_python.png
lb-ui/src/assets/file/file_r.png
lb-ui/src/assets/file/file_rar.png
lb-ui/src/assets/file/file_rtf.png
lb-ui/src/assets/file/file_rust.png
lb-ui/src/assets/file/file_sass.png
lb-ui/src/assets/file/file_scss.png
lb-ui/src/assets/file/file_shell.png
lb-ui/src/assets/file/file_sql.png
lb-ui/src/assets/file/file_stylus.png
lb-ui/src/assets/file/file_svg.png
lb-ui/src/assets/file/file_swift.png
lb-ui/src/assets/file/file_tar.svg
lb-ui/src/assets/file/file_txt.png
lb-ui/src/assets/file/file_typescript.png
lb-ui/src/assets/file/file_unknown.png
lb-ui/src/assets/file/file_vue.png
lb-ui/src/assets/file/file_word.svg
lb-ui/src/assets/file/file_xml.png
lb-ui/src/assets/file/file_yaml.png
lb-ui/src/assets/file/file_zip.png
lb-ui/src/assets/file/files.png
lb-ui/src/assets/file/files1.png
lb-ui/src/assets/file/less/mixins.less
lb-ui/src/assets/file/less/varibles.less
lb-ui/src/assets/guaz.png
lb-ui/src/assets/less/JAreaLinkage.less
lb-ui/src/assets/less/TableExpand.less
lb-ui/src/assets/less/codemirror_idea.css
lb-ui/src/assets/less/common.less
lb-ui/src/assets/less/index.less
lb-ui/src/assets/login-bg.svg
lb-ui/src/assets/login-box-bg.svg
lb-ui/src/assets/logo.png
lb-ui/src/assets/logo.svg
lb-ui/src/assets/nodata.png
lb-ui/src/assets/pdf4.jpg
lb-ui/src/assets/pro/icon_da.png
lb-ui/src/assets/pro/icon_db.png
lb-ui/src/assets/pro/icon_dy.png
lb-ui/src/assets/pro/icon_lcb.png
lb-ui/src/assets/pro/icon_ld.png
lb-ui/src/assets/pro/icon_right.png
lb-ui/src/assets/pro/icon_sl.png
lb-ui/src/assets/pro/icon_tx.png
lb-ui/src/assets/pro/icon_yb.png
lb-ui/src/assets/pro/img/img1.png
lb-ui/src/assets/pro/leader.png
lb-ui/src/assets/pro/person.png
lb-ui/src/assets/weekly/icon_down.png
lb-ui/src/assets/weekly/icon_top.png
lb-ui/src/assets/weekly/wr_logo.png
lb-ui/src/assets/workcoe.png
lb-ui/src/assets/zaiban.png
lb-ui/src/cas/sso.js
lb-ui/src/components/AvatarList/Item.vue
lb-ui/src/components/AvatarList/List.vue
lb-ui/src/components/AvatarList/index.js
lb-ui/src/components/AvatarList/index.less
lb-ui/src/components/ChartCard.vue
lb-ui/src/components/CountDown/CountDown.vue
lb-ui/src/components/CountDown/index.js
lb-ui/src/components/Ellipsis/Ellipsis.vue
lb-ui/src/components/Ellipsis/index.js
lb-ui/src/components/JVxeCells/JVxeFileCell.vue
lb-ui/src/components/JVxeCells/JVxeImageCell.vue
lb-ui/src/components/JVxeCells/JVxePopupCell.vue
lb-ui/src/components/JVxeCells/JVxeRadioCell.vue
lb-ui/src/components/JVxeCells/JVxeSelectDictSearchCell.js
lb-ui/src/components/JVxeCells/install.js
lb-ui/src/components/NumberInfo/NumberInfo.vue
lb-ui/src/components/NumberInfo/index.js
lb-ui/src/components/NumberInfo/index.less
lb-ui/src/components/README.md
lb-ui/src/components/Trend/Trend.vue
lb-ui/src/components/Trend/index.js
lb-ui/src/components/Trend/index.less
lb-ui/src/components/ZmTreeOrg/components/clone-org/index.vue
lb-ui/src/components/ZmTreeOrg/components/contextmenu/index.vue
lb-ui/src/components/ZmTreeOrg/components/contextmenu/menus.js
lb-ui/src/components/ZmTreeOrg/components/tree-org/index.js
lb-ui/src/components/ZmTreeOrg/components/tree-org/node.js
lb-ui/src/components/ZmTreeOrg/components/tree-org/scale-view.vue
lb-ui/src/components/ZmTreeOrg/components/tree-org/tree-org.vue
lb-ui/src/components/ZmTreeOrg/components/zm-draggable/index.vue
lb-ui/src/components/ZmTreeOrg/directives/drag/index.js
lb-ui/src/components/ZmTreeOrg/directives/focus/index.js
lb-ui/src/components/ZmTreeOrg/index.js
lb-ui/src/components/ZmTreeOrg/plugin/core/index.js
lb-ui/src/components/ZmTreeOrg/styles/index.less
lb-ui/src/components/ZmTreeOrg/svg/collapse.svg
lb-ui/src/components/ZmTreeOrg/svg/expand.svg
lb-ui/src/components/ZmTreeOrg/svg/fullscreen.svg
lb-ui/src/components/ZmTreeOrg/svg/unfullscreen.svg
lb-ui/src/components/ZmTreeOrg/utils/dom.js
lb-ui/src/components/ZmTreeOrg/utils/fns.js
lb-ui/src/components/ZmTreeOrg/utils/log.js
lb-ui/src/components/ZmTreeOrg/utils/polyfill.js
lb-ui/src/components/ZmTreeOrg/utils/utils.js
lb-ui/src/components/_util/Area.js
lb-ui/src/components/_util/StringUtil.js
lb-ui/src/components/_util/util.js
lb-ui/src/components/chart/AreaChartTy.vue
lb-ui/src/components/chart/Bar.vue
lb-ui/src/components/chart/BarAndLine.vue
lb-ui/src/components/chart/BarHorizontal.vue
lb-ui/src/components/chart/BarMultid.vue
lb-ui/src/components/chart/DashChartDemo.vue
lb-ui/src/components/chart/IndexBar.vue
lb-ui/src/components/chart/LineChartMultid.vue
lb-ui/src/components/chart/Liquid.vue
lb-ui/src/components/chart/MiniArea.vue
lb-ui/src/components/chart/MiniBar.vue
lb-ui/src/components/chart/MiniProgress.vue
lb-ui/src/components/chart/Pie.vue
lb-ui/src/components/chart/README.md
lb-ui/src/components/chart/Radar.vue
lb-ui/src/components/chart/RankList.vue
lb-ui/src/components/chart/StackBar.vue
lb-ui/src/components/chart/TransferBar.vue
lb-ui/src/components/chart/Trend.vue
lb-ui/src/components/chart/chart.less
lb-ui/src/components/chart/mixins/ChartMixins.js
lb-ui/src/components/dict/JDictSelectTag.vue
lb-ui/src/components/dict/JDictSelectUtil.js
lb-ui/src/components/dict/JMultiSelectTag.vue
lb-ui/src/components/dict/JSearchSelectTag.vue
lb-ui/src/components/dict/README.md
lb-ui/src/components/dict/index.js
lb-ui/src/components/index.less
lb-ui/src/components/jeecg/JAreaLinkage.vue
lb-ui/src/components/jeecg/JCategorySelect.vue
lb-ui/src/components/jeecg/JCheckbox.vue
lb-ui/src/components/jeecg/JCodeEditor.vue
lb-ui/src/components/jeecg/JCron.vue
lb-ui/src/components/jeecg/JDate.vue
lb-ui/src/components/jeecg/JEasyCron/EasyCron.vue
lb-ui/src/components/jeecg/JEasyCron/InputCron.vue
lb-ui/src/components/jeecg/JEasyCron/format-date.js
lb-ui/src/components/jeecg/JEasyCron/index.js
lb-ui/src/components/jeecg/JEasyCron/tabs/const.js
lb-ui/src/components/jeecg/JEasyCron/tabs/day.vue
lb-ui/src/components/jeecg/JEasyCron/tabs/hour.vue
lb-ui/src/components/jeecg/JEasyCron/tabs/minute.vue
lb-ui/src/components/jeecg/JEasyCron/tabs/mixin.js
lb-ui/src/components/jeecg/JEasyCron/tabs/mixin.less
lb-ui/src/components/jeecg/JEasyCron/tabs/month.vue
lb-ui/src/components/jeecg/JEasyCron/tabs/second.vue
lb-ui/src/components/jeecg/JEasyCron/tabs/week.vue
lb-ui/src/components/jeecg/JEasyCron/tabs/year.vue
lb-ui/src/components/jeecg/JEasyCron/validator.js
lb-ui/src/components/jeecg/JEditableTable.vue
lb-ui/src/components/jeecg/JEditor.vue
lb-ui/src/components/jeecg/JEllipsis.vue
lb-ui/src/components/jeecg/JFormContainer.vue
lb-ui/src/components/jeecg/JImageUpload.vue
lb-ui/src/components/jeecg/JImportModal.vue
lb-ui/src/components/jeecg/JInput.vue
lb-ui/src/components/jeecg/JMarkdownEditor/default-options.js
lb-ui/src/components/jeecg/JMarkdownEditor/index.vue
lb-ui/src/components/jeecg/JModal/JModal.vue
lb-ui/src/components/jeecg/JModal/JPrompt.vue
lb-ui/src/components/jeecg/JModal/index.js
lb-ui/src/components/jeecg/JPopup.vue
lb-ui/src/components/jeecg/JSelectMultiple.vue
lb-ui/src/components/jeecg/JSlider.vue
lb-ui/src/components/jeecg/JSuperQuery.vue
lb-ui/src/components/jeecg/JSwitch.vue
lb-ui/src/components/jeecg/JTime.vue
lb-ui/src/components/jeecg/JTreeDict.vue
lb-ui/src/components/jeecg/JTreeSelect.vue
lb-ui/src/components/jeecg/JTreeTable.vue
lb-ui/src/components/jeecg/JUpload.vue
lb-ui/src/components/jeecg/JVxeTable/components/JVxeDetailsModal.vue
lb-ui/src/components/jeecg/JVxeTable/components/JVxePagination.vue
lb-ui/src/components/jeecg/JVxeTable/components/JVxeSubPopover.vue
lb-ui/src/components/jeecg/JVxeTable/components/JVxeTable.js
lb-ui/src/components/jeecg/JVxeTable/components/JVxeToolbar.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeCheckboxCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeDateCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeDepartSelectCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeDragSortCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeInputCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeNormalCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeProgressCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeSelectCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeSlotCell.js
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeTagsCell.js
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeTextareaCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeTimeCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeUploadCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/JVxeUserSelectCell.vue
lb-ui/src/components/jeecg/JVxeTable/components/cells/ReloadEffect.js
lb-ui/src/components/jeecg/JVxeTable/index.js
lb-ui/src/components/jeecg/JVxeTable/install.js
lb-ui/src/components/jeecg/JVxeTable/jvxeTypes.js
lb-ui/src/components/jeecg/JVxeTable/less/j-vxe-table.less
lb-ui/src/components/jeecg/JVxeTable/less/reload-effect.less
lb-ui/src/components/jeecg/JVxeTable/less/size/tiny.less
lb-ui/src/components/jeecg/JVxeTable/mixins/JVxeCellMixins.js
lb-ui/src/components/jeecg/JVxeTable/mixins/vxe.web.socket.mixins.js
lb-ui/src/components/jeecg/JVxeTable/utils/cellUtils.js
lb-ui/src/components/jeecg/JVxeTable/utils/vxeUtils.js
lb-ui/src/components/jeecg/README.md
lb-ui/src/components/jeecg/README_JEditableTable.md
lb-ui/src/components/jeecg/README_JPopup.md
lb-ui/src/components/jeecg/index.js
lb-ui/src/components/jeecg/minipop/JFilePop.vue
lb-ui/src/components/jeecg/minipop/JInputPop.vue
lb-ui/src/components/jeecg/modal/JCronModal.vue
lb-ui/src/components/jeecg/modal/JPopupOnlReport.vue
lb-ui/src/components/jeecgbiz/JSelectBizComponent/JSelectBizComponentModal.vue
lb-ui/src/components/jeecgbiz/JSelectBizComponent/JSelectBizQueryItem.js
lb-ui/src/components/jeecgbiz/JSelectBizComponent/README.md
lb-ui/src/components/jeecgbiz/JSelectBizComponent/index.vue
lb-ui/src/components/jeecgbiz/JSelectDepart.vue
lb-ui/src/components/jeecgbiz/JSelectMultiDepUser.vue
lb-ui/src/components/jeecgbiz/JSelectMultiProject.vue
lb-ui/src/components/jeecgbiz/JSelectMultiUser.vue
lb-ui/src/components/jeecgbiz/JSelectPosition.vue
lb-ui/src/components/jeecgbiz/JSelectRole.vue
lb-ui/src/components/jeecgbiz/JSelectUserByDep.vue
lb-ui/src/components/jeecgbiz/README.md
lb-ui/src/components/jeecgbiz/modal/JSelectDepartModal.vue
lb-ui/src/components/jeecgbiz/modal/JSelectUserByDepModal.vue
lb-ui/src/components/jeecgbiz/modal/SelectUserListModal.vue
lb-ui/src/components/jeecgbiz/thirdApp/JThirdAppButton.vue
lb-ui/src/components/jeecgbiz/thirdApp/JThirdAppDropdown.vue
lb-ui/src/components/layouts/BasicLayout.vue
lb-ui/src/components/layouts/BlankLayout.vue
lb-ui/src/components/layouts/IframeFReportView.vue
lb-ui/src/components/layouts/IframePageView.vue
lb-ui/src/components/layouts/PageView.vue
lb-ui/src/components/layouts/RouteView.vue
lb-ui/src/components/layouts/TabLayout.vue
lb-ui/src/components/layouts/UserLayout.vue
lb-ui/src/components/layouts/index.js
lb-ui/src/components/lazy_antd.js
lb-ui/src/components/menu/Contextmenu.vue
lb-ui/src/components/menu/SideMenu.vue
lb-ui/src/components/menu/index.js
lb-ui/src/components/page/GlobalFooter.vue
lb-ui/src/components/page/GlobalHeader.vue
lb-ui/src/components/page/GlobalLayout.vue
lb-ui/src/components/page/PageHeader.vue
lb-ui/src/components/page/PageLayout.vue
lb-ui/src/components/page/SHeaderNotice.vue
lb-ui/src/components/setting/SettingDrawer.vue
lb-ui/src/components/setting/SettingItem.vue
lb-ui/src/components/table/README.md
lb-ui/src/components/table/StandardTable.vue
lb-ui/src/components/table/index.js
lb-ui/src/components/tools/Breadcrumb.vue
lb-ui/src/components/tools/DepartSelect.vue
lb-ui/src/components/tools/DetailList.vue
lb-ui/src/components/tools/DynamicNotice.vue
lb-ui/src/components/tools/FooterToolBar.vue
lb-ui/src/components/tools/HeadInfo.vue
lb-ui/src/components/tools/HeaderNotice.vue
lb-ui/src/components/tools/Logo.vue
lb-ui/src/components/tools/ShowAnnouncement.vue
lb-ui/src/components/tools/TwoStepCaptcha.vue
lb-ui/src/components/tools/UserMenu.vue
lb-ui/src/components/tools/UserPassword.vue
lb-ui/src/components/tools/setting.js
lb-ui/src/config/index.js
lb-ui/src/config/router.config.js
lb-ui/src/defaultSettings.js
lb-ui/src/icons.js
lb-ui/src/main.js
lb-ui/src/mixins/DisabledAuthFilterMixin.js
lb-ui/src/mixins/JEditableTableMixin.js
lb-ui/src/mixins/JEditableTableModelMixin.js
lb-ui/src/mixins/JVxeTableMixin.js
lb-ui/src/mixins/JVxeTableModelMixin.js
lb-ui/src/mixins/JeecgListMixin.js
lb-ui/src/mixins/OnlineCommonUtil.js
lb-ui/src/mixins/WebsocketMixin.js
lb-ui/src/permission.js
lb-ui/src/plugins/element.js
lb-ui/src/router/README.md
lb-ui/src/router/index.js
lb-ui/src/store/getters.js
lb-ui/src/store/index.js
lb-ui/src/store/modules/app.js
lb-ui/src/store/modules/enhance.js
lb-ui/src/store/modules/fileList.js
lb-ui/src/store/modules/online.js
lb-ui/src/store/modules/permission.js
lb-ui/src/store/modules/user.js
lb-ui/src/store/mutation-types.js
lb-ui/src/utils/JEditableTableUtil.js
lb-ui/src/utils/LunarFullCalendarUtil.js
lb-ui/src/utils/auth.js
lb-ui/src/utils/authFilter.js
lb-ui/src/utils/axios.js
lb-ui/src/utils/browser.js
lb-ui/src/utils/commonUploadFile.js
lb-ui/src/utils/desform/CustomExpression.js
lb-ui/src/utils/device.js
lb-ui/src/utils/encryption/aesEncrypt.js
lb-ui/src/utils/encryption/signMd5Utils.js
lb-ui/src/utils/filter.js
lb-ui/src/utils/hasPermission.js
lb-ui/src/utils/libs/globalFunction/common.js
lb-ui/src/utils/libs/globalFunction/file.js
lb-ui/src/utils/libs/globalFunction/index.js
lb-ui/src/utils/libs/map.js
lb-ui/src/utils/mixin.js
lb-ui/src/utils/permissions.js
lb-ui/src/utils/portal/constant.js
lb-ui/src/utils/props-util.js
lb-ui/src/utils/request.js
lb-ui/src/utils/rules.js
lb-ui/src/utils/storage.js
lb-ui/src/utils/util.js
lb-ui/src/utils/validate.js
lb-ui/src/utils/vueBus.js
lb-ui/src/views/Home.vue
lb-ui/src/views/account/center/Index.vue
lb-ui/src/views/account/center/page/App.vue
lb-ui/src/views/account/center/page/Article.vue
lb-ui/src/views/account/center/page/Project.vue
lb-ui/src/views/account/center/page/index.js
lb-ui/src/views/account/settings/AvatarModal.vue
lb-ui/src/views/account/settings/BaseSetting.vue
lb-ui/src/views/account/settings/Binding.vue
lb-ui/src/views/account/settings/Custom.vue
lb-ui/src/views/account/settings/Index.vue
lb-ui/src/views/account/settings/Notification.vue
lb-ui/src/views/account/settings/Security.vue
lb-ui/src/views/activiti/ActivitiFileList.vue
lb-ui/src/views/activiti/ActivitiFileModel.vue
lb-ui/src/views/activiti/ActivitiList.vue
lb-ui/src/views/activiti/ActivitiModel.vue
lb-ui/src/views/activiti/ActivitiModelModal.vue
lb-ui/src/views/activiti/ModelList.vue
lb-ui/src/views/activiti/ProcessModelList.vue
lb-ui/src/views/activiti/applyHome.vue
lb-ui/src/views/activiti/applyList.vue
lb-ui/src/views/activiti/doneManage.vue
lb-ui/src/views/activiti/form/demoForm.vue
lb-ui/src/views/activiti/historicDetail.vue
lb-ui/src/views/activiti/mixins/activitiApproveMixin.js
lb-ui/src/views/activiti/mixins/activitiMixin.js
lb-ui/src/views/activiti/processFinishManage.vue
lb-ui/src/views/activiti/processInsManage.vue
lb-ui/src/views/activiti/todoManage.vue
lb-ui/src/views/bon/2-customer/BonProjectList.vue
lb-ui/src/views/bon/2-customer/BonSalesRecordList.vue
lb-ui/src/views/bon/2-customer/index.vue
lb-ui/src/views/bon/2-customer/modules/BonProjectForm.vue
lb-ui/src/views/bon/2-customer/modules/BonProjectModal.Style#Drawer.vue
lb-ui/src/views/bon/2-customer/modules/BonProjectModal.vue
lb-ui/src/views/bon/2-customer/modules/BonSalesRecordForm.vue
lb-ui/src/views/bon/2-customer/modules/BonSalesRecordModal.Style#Drawer.vue
lb-ui/src/views/bon/2-customer/modules/BonSalesRecordModal.vue
lb-ui/src/views/bon/BonSaleRecordList.vue
lb-ui/src/views/bon/modules/BonSaleRecordForm.vue
lb-ui/src/views/bon/modules/BonSaleRecordModal.Style#Drawer.vue
lb-ui/src/views/bon/modules/BonSaleRecordModal.vue
lb-ui/src/views/bonus/BonusPaymentGx.vue
lb-ui/src/views/bonus/BonusPaymentKh.vue
lb-ui/src/views/bonus/BonusPaymentList.vue
lb-ui/src/views/bonus/BonusPaymentSc.vue
lb-ui/src/views/bonus/BonusPaymentXm.vue
lb-ui/src/views/bonus/modules/BonusPaymentModal.vue
lb-ui/src/views/bonus/modules/DeGxModal.vue
lb-ui/src/views/bonus/modules/DeKhModal.vue
lb-ui/src/views/bonus/modules/DeScModal.vue
lb-ui/src/views/bonus/modules/DeXmModal.vue
lb-ui/src/views/bonus/modules/FpGxModal.vue
lb-ui/src/views/bonus/modules/FpKhModal.vue
lb-ui/src/views/bonus/modules/FpScModal.vue
lb-ui/src/views/bonus/modules/FpXmModal.vue
lb-ui/src/views/bonus/modules/HsGxModal.vue
lb-ui/src/views/bonus/modules/HsKhModal.vue
lb-ui/src/views/bonus/modules/HsScModal.vue
lb-ui/src/views/bonus/modules/HsXmModal.vue
lb-ui/src/views/bonus/modules/KpModal.vue
lb-ui/src/views/bonus/modules/PaymentProjectModal.vue
lb-ui/src/views/dashboard/Analysis.vue
lb-ui/src/views/dashboard/IndexBdc.vue
lb-ui/src/views/dashboard/IndexChart.vue
lb-ui/src/views/dashboard/IndexTask.vue
lb-ui/src/views/dashboard/Monitor.vue
lb-ui/src/views/dashboard/Workplace.vue
lb-ui/src/views/dashboard/module/Gantt.vue
lb-ui/src/views/desktop/Home.vue
lb-ui/src/views/desktop/module/CustomModal.vue
lb-ui/src/views/desktop/module/EditableCell.vue
lb-ui/src/views/desktop/module/RecentModal.vue
lb-ui/src/views/desktop/module/UploadModal.vue
lb-ui/src/views/document/DeptPathRoleUserList.vue
lb-ui/src/views/document/DocOperationHisList.vue
lb-ui/src/views/document/File.vue
lb-ui/src/views/document/OnlyOffice.vue
lb-ui/src/views/document/PathRoleUserList.vue
lb-ui/src/views/document/RoleUserFlow.vue
lb-ui/src/views/document/components/box/audioPreview/BoxMask.vue
lb-ui/src/views/document/components/box/audioPreview/index.js
lb-ui/src/views/document/components/box/codePreview/BoxMask.vue
lb-ui/src/views/document/components/box/codePreview/fold.js
lb-ui/src/views/document/components/box/codePreview/index.js
lb-ui/src/views/document/components/box/codePreview/mode.js
lb-ui/src/views/document/components/box/codePreview/theme.js
lb-ui/src/views/document/components/box/contextMenu/Box.vue
lb-ui/src/views/document/components/box/contextMenu/index.js
lb-ui/src/views/document/components/box/imgPreview/BoxMask.vue
lb-ui/src/views/document/components/box/imgPreview/index.js
lb-ui/src/views/document/components/box/markdownPreview/BoxMask.vue
lb-ui/src/views/document/components/box/markdownPreview/index.js
lb-ui/src/views/document/components/box/selectFile/Box.vue
lb-ui/src/views/document/components/box/selectFile/index.js
lb-ui/src/views/document/components/box/uploadFile/Box.vue
lb-ui/src/views/document/components/box/uploadFile/index.js
lb-ui/src/views/document/components/box/videoPreview/BoxMask.vue
lb-ui/src/views/document/components/box/videoPreview/VideoPlayer.vue
lb-ui/src/views/document/components/box/videoPreview/index.js
lb-ui/src/views/document/components/dialog/addFile/Dialog.vue
lb-ui/src/views/document/components/dialog/addFile/index.js
lb-ui/src/views/document/components/dialog/addFolder/Dialog.vue
lb-ui/src/views/document/components/dialog/addFolder/index.js
lb-ui/src/views/document/components/dialog/compareFile/Dialog.vue
lb-ui/src/views/document/components/dialog/compareFile/index.js
lb-ui/src/views/document/components/dialog/copyFile/Dialog.vue
lb-ui/src/views/document/components/dialog/copyFile/index.js
lb-ui/src/views/document/components/dialog/deleteFile/Dialog.vue
lb-ui/src/views/document/components/dialog/deleteFile/index.js
lb-ui/src/views/document/components/dialog/moveFile/Dialog.vue
lb-ui/src/views/document/components/dialog/moveFile/index.js
lb-ui/src/views/document/components/dialog/renameFile/Dialog.vue
lb-ui/src/views/document/components/dialog/renameFile/index.js
lb-ui/src/views/document/components/dialog/restoreFile/Dialog.vue
lb-ui/src/views/document/components/dialog/restoreFile/index.js
lb-ui/src/views/document/components/dialog/saveShareFile/Dialog.vue
lb-ui/src/views/document/components/dialog/saveShareFile/index.js
lb-ui/src/views/document/components/dialog/shareFile/Dialog.vue
lb-ui/src/views/document/components/dialog/shareFile/index.js
lb-ui/src/views/document/components/dialog/showFileDetail/Dialog.vue
lb-ui/src/views/document/components/dialog/showFileDetail/index.js
lb-ui/src/views/document/components/dialog/unzipFile/Dialog.vue
lb-ui/src/views/document/components/dialog/unzipFile/index.js
lb-ui/src/views/document/components/fileOperationPlugins.js
lb-ui/src/views/document/modules/DocOperationHisForm.vue
lb-ui/src/views/document/modules/DocOperationHisModal.Style#Drawer.vue
lb-ui/src/views/document/modules/DocOperationHisModal.vue
lb-ui/src/views/document/modules/FileGrid.vue
lb-ui/src/views/document/modules/FileList.vue
lb-ui/src/views/document/modules/FileSide.vue
lb-ui/src/views/document/modules/FileTable.vue
lb-ui/src/views/document/modules/OperationMenu.vue
lb-ui/src/views/examples/form/BasicForm.vue
lb-ui/src/views/examples/form/advancedForm/AdvancedForm.vue
lb-ui/src/views/examples/form/advancedForm/RepositoryForm.vue
lb-ui/src/views/examples/form/advancedForm/TaskForm.vue
lb-ui/src/views/examples/form/stepForm/Step1.vue
lb-ui/src/views/examples/form/stepForm/Step2.vue
lb-ui/src/views/examples/form/stepForm/Step3.vue
lb-ui/src/views/examples/form/stepForm/StepForm.vue
lb-ui/src/views/examples/list/CardList.vue
lb-ui/src/views/examples/list/PermissionList.vue
lb-ui/src/views/examples/list/RoleList.vue
lb-ui/src/views/examples/list/StandardList.vue
lb-ui/src/views/examples/list/TableInnerEditList.vue
lb-ui/src/views/examples/list/TableList.vue
lb-ui/src/views/examples/list/UserList.vue
lb-ui/src/views/examples/list/modules/RoleModal.vue
lb-ui/src/views/examples/list/search/SearchLayout.vue
lb-ui/src/views/examples/profile/advanced/Advanced.vue
lb-ui/src/views/examples/profile/basic/Index.vue
lb-ui/src/views/exception/403.vue
lb-ui/src/views/exception/404.vue
lb-ui/src/views/exception/500.vue
lb-ui/src/views/exception/ExceptionPage.vue
lb-ui/src/views/exception/type.js
lb-ui/src/views/hrm/CompanyOrgTree.vue
lb-ui/src/views/hrm/DepartOrgTree.vue
lb-ui/src/views/hrm/DepartSeatPlan.vue
lb-ui/src/views/hrm/HrmRoomList.vue
lb-ui/src/views/hrm/HrmRoomUserList.vue
lb-ui/src/views/hrm/HrmUserList.vue
lb-ui/src/views/hrm/home.vue
lb-ui/src/views/hrm/modules/CompanyLeftDrawer.vue
lb-ui/src/views/hrm/modules/CompanyRightDrawer.vue
lb-ui/src/views/hrm/modules/DepartInfoList.vue
lb-ui/src/views/hrm/modules/DepartPostCheckList.vue
lb-ui/src/views/hrm/modules/HrmRoomForm.vue
lb-ui/src/views/hrm/modules/HrmRoomModal.vue
lb-ui/src/views/hrm/modules/HrmRoomUserForm.vue
lb-ui/src/views/hrm/modules/HrmRoomUserModal.vue
lb-ui/src/views/hrm/modules/RoomBlock.vue
lb-ui/src/views/hrm/modules/RoomSeatModal.vue
lb-ui/src/views/hrm/modules/seat.less
lb-ui/src/views/jeecg/ImagCropper.vue
lb-ui/src/views/jeecg/ImagPreview.vue
lb-ui/src/views/jeecg/ImgDragSort.vue
lb-ui/src/views/jeecg/ImgTurnPage.vue
lb-ui/src/views/jeecg/InterfaceTest.vue
lb-ui/src/views/jeecg/JVXETableDemo.vue
lb-ui/src/views/jeecg/JVxeDemo/JVxeDemo1.vue
lb-ui/src/views/jeecg/JVxeDemo/JVxeDemo2.vue
lb-ui/src/views/jeecg/JVxeDemo/JVxeDemo3.vue
lb-ui/src/views/jeecg/JVxeDemo/demo/JSBCDemo.vue
lb-ui/src/views/jeecg/JVxeDemo/demo/PopupSubTable.vue
lb-ui/src/views/jeecg/JVxeDemo/demo/SocketReload.vue
lb-ui/src/views/jeecg/JVxeDemo/layout-demo/ErpTemplate.vue
lb-ui/src/views/jeecg/JVxeDemo/layout-demo/Index.vue
lb-ui/src/views/jeecg/JVxeDemo/layout-demo/Template1.vue
lb-ui/src/views/jeecg/JVxeDemo/layout-demo/Template2.vue
lb-ui/src/views/jeecg/JVxeDemo/layout-demo/Template3.vue
lb-ui/src/views/jeecg/JVxeDemo/layout-demo/Template4.vue
lb-ui/src/views/jeecg/JVxeDemo/layout-demo/Template5.vue
lb-ui/src/views/jeecg/JeecgDemoList.vue
lb-ui/src/views/jeecg/JeecgEditableTableExample.vue
lb-ui/src/views/jeecg/JeecgOrderMainList.vue
lb-ui/src/views/jeecg/JeecgOrderMainListForJEditableTable.vue
lb-ui/src/views/jeecg/JeecgOrderMainListForJVxeTable.vue
lb-ui/src/views/jeecg/JeecgPdfView.vue
lb-ui/src/views/jeecg/JeecgTreeTable.vue
lb-ui/src/views/jeecg/PrintDemo.vue
lb-ui/src/views/jeecg/RowspanTable.vue
lb-ui/src/views/jeecg/SelectDemo.vue
lb-ui/src/views/jeecg/SplitPanel.vue
lb-ui/src/views/jeecg/TableExpandeSub.vue
lb-ui/src/views/jeecg/TableTotal.vue
lb-ui/src/views/jeecg/ThirdAppMessageTest.vue
lb-ui/src/views/jeecg/helloworld.vue
lb-ui/src/views/jeecg/helloworld2.vue
lb-ui/src/views/jeecg/modules/JEditableTable/DefaultTable.vue
lb-ui/src/views/jeecg/modules/JEditableTable/ReadOnlyTable.vue
lb-ui/src/views/jeecg/modules/JEditableTable/ThreeLinkage.vue
lb-ui/src/views/jeecg/modules/JeecgDemoModal.vue
lb-ui/src/views/jeecg/modules/JeecgDemoTabsModal.vue
lb-ui/src/views/jeecg/modules/JeecgOrderMainModal.vue
lb-ui/src/views/jeecg/modules/JeecgOrderModalForJEditableTable.vue
lb-ui/src/views/jeecg/modules/JeecgOrderModalForJVexTable.vue
lb-ui/src/views/jeecg/modules/PdfPreviewModal.vue
lb-ui/src/views/jeecg/modules/SplitPanelA.vue
lb-ui/src/views/jeecg/modules/SplitPanelB.vue
lb-ui/src/views/jeecg/modules/SplitPanelModal.vue
lb-ui/src/views/jeecg/modules/SuperQueryModal.vue
lb-ui/src/views/jeecg/modules/VueCronModal.vue
lb-ui/src/views/jeecg/report/Analysis.vue
lb-ui/src/views/jeecg/report/ArchivesStatisticst.vue
lb-ui/src/views/jeecg/report/ViserChartDemo.vue
lb-ui/src/views/jeecg/tablist/JeecgOrderCustomerList.vue
lb-ui/src/views/jeecg/tablist/JeecgOrderDMainList.vue
lb-ui/src/views/jeecg/tablist/JeecgOrderTicketList.vue
lb-ui/src/views/jeecg/tablist/form/JeecgOrderCustomerModal.vue
lb-ui/src/views/jeecg/tablist/form/JeecgOrderDMainModal.vue
lb-ui/src/views/jeecg/tablist/form/JeecgOrderTicketModal.vue
lb-ui/src/views/kb/IndexLcb.vue
lb-ui/src/views/kb/LCB.vue
lb-ui/src/views/kb/PMO.vue
lb-ui/src/views/kb/ProjectDetail.vue
lb-ui/src/views/kb/YLB.vue
lb-ui/src/views/kb/modules/LCBModal.vue
lb-ui/src/views/kb/modules/TimeLine.vue
lb-ui/src/views/kb/modules/indexGantt.vue
lb-ui/src/views/lims/LimsAppointmentList.vue
lb-ui/src/views/lims/LimsAppointmentOptionList.vue
lb-ui/src/views/lims/LimsInspectionDetailList.vue
lb-ui/src/views/lims/LimsInspectionItemList.vue
lb-ui/src/views/lims/LimsInspectionList.vue
lb-ui/src/views/lims/LimsInstrumentList.vue
lb-ui/src/views/lims/LimsInstrumentTypeList.vue
lb-ui/src/views/lims/LimsRepairRecordList.vue
lb-ui/src/views/lims/LimsUsageRecordList.vue
lb-ui/src/views/lims/limsStatPage.vue
lb-ui/src/views/lims/modules/LimsAppointmentForm.vue
lb-ui/src/views/lims/modules/LimsAppointmentModal.Style#Drawer.vue
lb-ui/src/views/lims/modules/LimsAppointmentModal.vue
lb-ui/src/views/lims/modules/LimsAppointmentOptionForm.vue
lb-ui/src/views/lims/modules/LimsAppointmentOptionModal.Style#Drawer.vue
lb-ui/src/views/lims/modules/LimsAppointmentOptionModal.vue
lb-ui/src/views/lims/modules/LimsInspectionDetailForm.vue
lb-ui/src/views/lims/modules/LimsInspectionDetailModal.Style#Drawer.vue
lb-ui/src/views/lims/modules/LimsInspectionDetailModal.vue
lb-ui/src/views/lims/modules/LimsInspectionForm.vue
lb-ui/src/views/lims/modules/LimsInspectionItemForm.vue
lb-ui/src/views/lims/modules/LimsInspectionItemModal.Style#Drawer.vue
lb-ui/src/views/lims/modules/LimsInspectionItemModal.vue
lb-ui/src/views/lims/modules/LimsInspectionModal.Style#Drawer.vue
lb-ui/src/views/lims/modules/LimsInspectionModal.vue
lb-ui/src/views/lims/modules/LimsInstrumentForm.vue
lb-ui/src/views/lims/modules/LimsInstrumentModal.Style#Drawer.vue
lb-ui/src/views/lims/modules/LimsInstrumentModal.vue
lb-ui/src/views/lims/modules/LimsInstrumentTypeForm.vue
lb-ui/src/views/lims/modules/LimsInstrumentTypeModal.Style#Drawer.vue
lb-ui/src/views/lims/modules/LimsInstrumentTypeModal.vue
lb-ui/src/views/lims/modules/LimsRepairRecordForm.vue
lb-ui/src/views/lims/modules/LimsRepairRecordModal.Style#Drawer.vue
lb-ui/src/views/lims/modules/LimsRepairRecordModal.vue
lb-ui/src/views/lims/modules/LimsUsageRecordForm.vue
lb-ui/src/views/lims/modules/LimsUsageRecordModal.Style#Drawer.vue
lb-ui/src/views/lims/modules/LimsUsageRecordModal.vue
lb-ui/src/views/lims/stat/EquUseStat.vue
lb-ui/src/views/lims/stat/RepairStat.vue
lb-ui/src/views/lims/stat/SpotStat.vue
lb-ui/src/views/lims/stat/UserUseStat.vue
lb-ui/src/views/limsTest/LimsBatchDetailList.vue
lb-ui/src/views/limsTest/LimsBatchResultList.vue
lb-ui/src/views/limsTest/LimsBatchSampleList.vue
lb-ui/src/views/limsTest/LimsItemTargetIdent.vue
lb-ui/src/views/limsTest/LimsItemTargetList.vue
lb-ui/src/views/limsTest/LimsProdTypeList.vue
lb-ui/src/views/limsTest/LimsTestingBatchList.vue
lb-ui/src/views/limsTest/LimsTestingOutlineList.vue
lb-ui/src/views/limsTest/LimsTestingProductList.vue
lb-ui/src/views/limsTest/LimsTestingStandardList.vue
lb-ui/src/views/limsTest/OutlineMaintainPage.vue
lb-ui/src/views/limsTest/ProductModelList.vue
lb-ui/src/views/limsTest/StandMaintainPage.vue
lb-ui/src/views/limsTest/components/CondTag.vue
lb-ui/src/views/limsTest/components/EdiStrtableCell.vue
lb-ui/src/views/limsTest/components/EditableCell.vue
lb-ui/src/views/limsTest/modules/LimsBatchDetailForm.vue
lb-ui/src/views/limsTest/modules/LimsBatchDetailModal.vue
lb-ui/src/views/limsTest/modules/LimsBatchResultForm.vue
lb-ui/src/views/limsTest/modules/LimsBatchResultModal.vue
lb-ui/src/views/limsTest/modules/LimsBatchSampleForm.vue
lb-ui/src/views/limsTest/modules/LimsBatchSampleModal.vue
lb-ui/src/views/limsTest/modules/LimsItemTargetForm.vue
lb-ui/src/views/limsTest/modules/LimsItemTargetModal.vue
lb-ui/src/views/limsTest/modules/LimsItemTargetTechForm.vue
lb-ui/src/views/limsTest/modules/LimsItemTargetTechModal.vue
lb-ui/src/views/limsTest/modules/LimsProdModelForm.vue
lb-ui/src/views/limsTest/modules/LimsProdModelModal.vue
lb-ui/src/views/limsTest/modules/LimsProdTypeForm.vue
lb-ui/src/views/limsTest/modules/LimsProdTypeModal.vue
lb-ui/src/views/limsTest/modules/LimsTestingBatchForm.vue
lb-ui/src/views/limsTest/modules/LimsTestingBatchModal.vue
lb-ui/src/views/limsTest/modules/LimsTestingBatchModal2.vue
lb-ui/src/views/limsTest/modules/LimsTestingCategoryForm.vue
lb-ui/src/views/limsTest/modules/LimsTestingCategoryModal.vue
lb-ui/src/views/limsTest/modules/LimsTestingItemForm.vue
lb-ui/src/views/limsTest/modules/LimsTestingOutlineForm.vue
lb-ui/src/views/limsTest/modules/LimsTestingOutlineModal.vue
lb-ui/src/views/limsTest/modules/LimsTestingProductForm.vue
lb-ui/src/views/limsTest/modules/LimsTestingProductModal.vue
lb-ui/src/views/limsTest/modules/LimsTestingStandardForm.vue
lb-ui/src/views/limsTest/modules/LimsTestingStandardModal.vue
lb-ui/src/views/limsTest/modules/LimsTestingTypeForm.vue
lb-ui/src/views/limsTest/modules/SelectOutlineModal.vue
lb-ui/src/views/limsTest/report/BatchDetailReport.vue
lb-ui/src/views/limsTest/report/InspectResultReport.vue
lb-ui/src/views/modules/message/SysMessageList.vue
lb-ui/src/views/modules/message/SysMessageTemplateList.vue
lb-ui/src/views/modules/message/modules/SysMessageModal.vue
lb-ui/src/views/modules/message/modules/SysMessageTemplateModal.vue
lb-ui/src/views/modules/message/modules/SysMessageTestModal.vue
lb-ui/src/views/modules/monitor/DiskMonitoring.vue
lb-ui/src/views/modules/monitor/HttpTrace.vue
lb-ui/src/views/modules/monitor/JvmInfo.vue
lb-ui/src/views/modules/monitor/RedisInfo.vue
lb-ui/src/views/modules/monitor/RedisTerminal.vue
lb-ui/src/views/modules/monitor/SystemInfo.vue
lb-ui/src/views/modules/monitor/TomcatInfo.vue
lb-ui/src/views/modules/oss/OSSFileList.vue
lb-ui/src/views/patent/PaSoftBookList.vue
lb-ui/src/views/patent/modules/PaSoftbookModal.vue
lb-ui/src/views/patent/modules/PaUploadFileModal.vue
lb-ui/src/views/pro/BoardInfo.vue
lb-ui/src/views/pro/MilestoneInfo.vue
lb-ui/src/views/pro/ProProjectGroupList.vue
lb-ui/src/views/pro/ProjectList.vue
lb-ui/src/views/pro/TemplateList.vue
lb-ui/src/views/pro/modules/LinkListComponent.vue
lb-ui/src/views/pro/modules/MilestoneModal.vue
lb-ui/src/views/pro/modules/ProGroupSelectModal.vue
lb-ui/src/views/pro/modules/ProProjectGroupForm.vue
lb-ui/src/views/pro/modules/ProProjectGroupModal.vue
lb-ui/src/views/pro/modules/ProjectModal.vue
lb-ui/src/views/pro/modules/ProjectModal1.vue
lb-ui/src/views/pro/modules/ProjectModal2.vue
lb-ui/src/views/pro/modules/ProjectModal3.vue
lb-ui/src/views/pro/modules/ProjectModal4.vue
lb-ui/src/views/pro/modules/ProjectModal5.vue
lb-ui/src/views/pro/modules/ProjectModal6.vue
lb-ui/src/views/pro/modules/ProjectModal7.vue
lb-ui/src/views/pro/modules/UploadTemplateModal.vue
lb-ui/src/views/pro/modules/linkModal.vue
lb-ui/src/views/pro/overView.vue
lb-ui/src/views/pro/report/ProjectListReport.vue
lb-ui/src/views/result/Error.vue
lb-ui/src/views/result/Result.vue
lb-ui/src/views/result/Success.vue
lb-ui/src/views/system/AddressList.vue
lb-ui/src/views/system/DataLogList.vue
lb-ui/src/views/system/DepartList.vue
lb-ui/src/views/system/DepartList2.vue
lb-ui/src/views/system/DepartListSync.vue
lb-ui/src/views/system/DepartTeamUserList.vue
lb-ui/src/views/system/DepartUserList.vue
lb-ui/src/views/system/DictDeleteList.vue
lb-ui/src/views/system/DictItemList.vue
lb-ui/src/views/system/DictList.vue
lb-ui/src/views/system/LogList.vue
lb-ui/src/views/system/NewPermissionList.vue
lb-ui/src/views/system/PermissionDataRuleList.vue
lb-ui/src/views/system/PermissionList.vue
lb-ui/src/views/system/QuartzJobList.vue
lb-ui/src/views/system/RoleList.vue
lb-ui/src/views/system/RoleUserList.vue
lb-ui/src/views/system/SysAnnouncementList.vue
lb-ui/src/views/system/SysCategoryList.vue
lb-ui/src/views/system/SysCheckRuleList.vue
lb-ui/src/views/system/SysDataSourceList.vue
lb-ui/src/views/system/SysFeedbackList.vue
lb-ui/src/views/system/SysFillRuleList.vue
lb-ui/src/views/system/SysGatewayRouteList.vue
lb-ui/src/views/system/SysGatewayRouteList2.vue
lb-ui/src/views/system/SysPositionList.vue
lb-ui/src/views/system/SysUserOnlineList.vue
lb-ui/src/views/system/TenantList.vue
lb-ui/src/views/system/UserAnnouncementList.vue
lb-ui/src/views/system/UserList.vue
lb-ui/src/views/system/modules/AddressListLeft.vue
lb-ui/src/views/system/modules/AddressListRight.vue
lb-ui/src/views/system/modules/DataLogCompareModal.vue
lb-ui/src/views/system/modules/DataLogModal.vue
lb-ui/src/views/system/modules/DepartAuthModal.vue
lb-ui/src/views/system/modules/DepartDataruleModal.vue
lb-ui/src/views/system/modules/DepartModal.vue
lb-ui/src/views/system/modules/DepartWindow.vue
lb-ui/src/views/system/modules/DeptBaseInfo.vue
lb-ui/src/views/system/modules/DeptRoleAuthModal.vue
lb-ui/src/views/system/modules/DeptRoleDataruleModal.vue
lb-ui/src/views/system/modules/DeptRoleInfo.vue
lb-ui/src/views/system/modules/DeptRoleUserModal.vue
lb-ui/src/views/system/modules/DeptTeamInfo.vue
lb-ui/src/views/system/modules/DeptUserInfo.vue
lb-ui/src/views/system/modules/DictItemModal.vue
lb-ui/src/views/system/modules/DictModal.vue
lb-ui/src/views/system/modules/GateWayRouteModal.vue
lb-ui/src/views/system/modules/PasswordModal.vue
lb-ui/src/views/system/modules/PermissionDataRuleModal.vue
lb-ui/src/views/system/modules/PermissionModal.vue
lb-ui/src/views/system/modules/QuartzJobModal.vue
lb-ui/src/views/system/modules/RoleDataruleModal.vue
lb-ui/src/views/system/modules/RoleModal.vue
lb-ui/src/views/system/modules/SelectUserListModal.vue
lb-ui/src/views/system/modules/SelectUserModal.vue
lb-ui/src/views/system/modules/SysAnnouncementModal.vue
lb-ui/src/views/system/modules/SysCategoryModal.vue
lb-ui/src/views/system/modules/SysCheckRuleModal.vue
lb-ui/src/views/system/modules/SysCheckRuleTestModal.vue
lb-ui/src/views/system/modules/SysDataSourceModal.vue
lb-ui/src/views/system/modules/SysDepartRoleModal.vue
lb-ui/src/views/system/modules/SysDepartTeamModal.vue
lb-ui/src/views/system/modules/SysFeedbackForm.vue
lb-ui/src/views/system/modules/SysFeedbackModal.vue
lb-ui/src/views/system/modules/SysFillRuleModal.vue
lb-ui/src/views/system/modules/SysPositionModal.vue
lb-ui/src/views/system/modules/SysUserAgentModal.vue
lb-ui/src/views/system/modules/TenantForm.vue
lb-ui/src/views/system/modules/TenantModal.vue
lb-ui/src/views/system/modules/UserModal.vue
lb-ui/src/views/system/modules/UserRecycleBinModal.vue
lb-ui/src/views/system/modules/UserRoleModal.vue
lb-ui/src/views/system/modules/icon/Icon.less
lb-ui/src/views/system/modules/icon/Icons.vue
lb-ui/src/views/user/Login.vue
lb-ui/src/views/user/LoginAccount.vue
lb-ui/src/views/user/LoginPhone.vue
lb-ui/src/views/user/LoginSelectDepartment.vue
lb-ui/src/views/user/LoginSelectTenant.vue
lb-ui/src/views/user/alteration/Alteration.vue
lb-ui/src/views/user/alteration/Step2.vue
lb-ui/src/views/user/alteration/Step3.vue
lb-ui/src/views/user/alteration/Step4.vue
lb-ui/src/views/user/oauth2/OAuth2Login.vue
lb-ui/src/views/user/register/Register.vue
lb-ui/src/views/user/register/RegisterResult.vue
lb-ui/src/views/user/third/JeecgThirdLoginMixin.js
lb-ui/src/views/user/third/ThirdLogin.vue
lb-ui/src/views/week/Weekly.vue
lb-ui/src/views/week/WeeklySubmitView.vue
lb-ui/src/views/week/modules/RightAllProjectWeekly.vue
lb-ui/src/views/week/modules/RightDepartUserWeekly.vue
lb-ui/src/views/week/modules/RightExportWeekly.vue
lb-ui/src/views/week/modules/RightJuniorBatchWeekly.vue
lb-ui/src/views/week/modules/RightJuniorWeekly.vue
lb-ui/src/views/week/modules/RightOwnWeekly.vue
lb-ui/src/views/week/modules/RightPersonalWeekly.vue
lb-ui/src/views/week/modules/RightProjectWeekly.vue
lb-ui/src/views/week/modules/RightStatisticsPro.vue
lb-ui/src/views/week/modules/RightStatisticsUser.vue
lb-ui/src/views/week/modules/RightStatisticsWeekly.vue
lb-ui/src/views/week/modules/RightWriteWeekly.vue
lb-ui/src/views/week/modules/StatisticsBar.vue
lb-ui/src/views/week/modules/StatisticsPie.vue
lb-ui/src/views/week/modules/WeeklyDetailModal.vue
lb-ui/src/views/week/modules/WeeklyLeft.vue
lb-ui/src/views/week/modules/WeeklyListCompent.vue
lb-ui/src/views/week/modules/WeeklyListProjectCompent.vue
lb-ui/src/views/week/modules/WeeklyRight.vue
lb-ui/src/vuebus/event-bus.js
lb-ui/vue.config.js |