Merge branch 'master' of http://210.22.126.130:1111/r/dry/herb
# Conflicts:
# .gitignore
# LICENSE
# README.md
¶Ô±ÈÐÂÎļþ |
| | |
| | | *.js linguist-language=Java |
| | | *.css linguist-language=Java |
| | | *.html linguist-language=Java |
| | | *.vue linguist-language=Java |
| | | *.sql linguist-language=Java |
¶Ô±ÈÐÂÎļþ |
| | |
| | | |
| | | |
| | |  |
| | | |
| | | |
| | | |
| | | JEECG BOOT Low Code Development Platform |
| | | =============== |
| | | |
| | | The Latest Versionï¼ 3.5.0ï¼Release dateï¼2023-03-08ï¼ |
| | | |
| | | |
| | | [](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE) |
| | | [](http://www.jeecg.com) |
| | | [](https://jeecg.blog.csdn.net) |
| | | [](https://github.com/zhangdaiscott/jeecg-boot) |
| | | [](https://github.com/zhangdaiscott/jeecg-boot) |
| | | [](https://github.com/zhangdaiscott/jeecg-boot) |
| | | |
| | | |
| | | |
| | | Project introduction |
| | | ----------------------------------- |
| | | |
| | | <h3 align="center">Java Low Code Platform for Enterprise web applications</h3> |
| | | |
| | | JeecgBoot is a `low code development platform` based on code `generators`! Front and back end separation architecture SpringBoot2.x, SpringCloud, Ant Design&Vue, Mybatis plus, Shiro, JWT, support for microservices. The powerful code generator makes the front and back end of the code generation, low code development! JeecgBoot leads a new low-code development paradigm (OnlineCoding-> Code Generator -> Manual MERGE) that helps resolve 70% of the duplication in Java projects and makes development more business-focused. Not only can quickly improve efficiency, save research and development costs, but also do not lose flexibility! |
| | | |
| | | JeecgBoot provides a series of low code modules to make Online development truly zero code: Online form development, online reports, report configuration capabilities, online chart design, large screen design, mobile configuration capabilities, form designer, online design flow, process automation configuration, plug-in capabilities (pluggable) and more! |
| | | |
| | | |
| | | The purpose of JEECG is: simple functions are implemented by OnlineCoding configuration, so that zero code development; Complex functions are generated by code generator and manually Merge to achieve low code development, which ensures both intelligence and flexibility. The implementation of low code development and support flexible coding at the same time, to solve the current low code products are generally not flexible drawbacks! |
| | | |
| | | JEECG Business process: Using workflow to implement and extend the task interface for developing and writing business logic, forms provides a variety of solutions: form designer, online configuration form, and coding form. At the same time, the separation design of process and form (loose coupling) is realized, and the flexible configuration of task nodes is supported, which not only ensures the confidentiality of the company's process, but also reduces the workload of developers. |
| | | |
| | | |
| | | Technical support |
| | | ----------------------------------- |
| | | |
| | | Problems or bugs in use can be found in [Making on the Issues](https://github.com/jeecgboot/jeecg-boot/issues/new) |
| | | |
| | | Official Support: http://jeecg.com/doc/help |
| | | |
| | | |
| | | Download the source code |
| | | ----------------------------------- |
| | | - The background source ï¼https://github.com/jeecgboot/jeecg-boot |
| | | - Front-end source (Vue3 version)ï¼https://github.com/jeecgboot/jeecgboot-vue3 |
| | | - Front-end source (Vue2 version)ï¼https://github.com/jeecgboot/ant-design-vue-jeecg |
| | | - APP Supporting frameworkï¼https://github.com/jeecgboot/jeecg-uniapp |
| | | |
| | | ##### Project description |
| | | |
| | | | Project | description | |
| | | |--------------------|------------------------| |
| | | | `jeecg-boot` | SpringBoot background source code (support microservices) | |
| | | | `jeecgboot-vue3` | Vue3+TS new front-end source code| |
| | | | `ant-design-vue-jeecg` |Vue2 version front-end source code | |
| | | | `jeecg-uniapp` | APP development framework, a code multi terminal adaptation, and support APP, small program, H5 | |
| | | | `jeecg-boot-starter` | [Stater relies on the project to be maintained separately. Click Download](https://gitee.com/jeecg/jeecg-boot-starter) | |
| | | | `More` | [Download more source code](https://github.com/jeecgboot) | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | For the project |
| | | ----------------------------------- |
| | | Jeecg-Boot low code development platform can be applied in the development of any J2EE project, especially for SAAS projects, enterprise information management system (MIS), internal office system (OA), enterprise resource planning system (ERP), customer relationship management system (CRM), etc. Its semi-intelligent manual Merge development method, Can significantly improve the development efficiency of more than 70%, greatly reduce the development cost. |
| | | |
| | | |
| | | |
| | | Docker starts the project |
| | | ----------------------------------- |
| | | |
| | | - [Docker starts the monomer background](http://doc.jeecg.com/2043889) |
| | | - [Docker starts the Vue3 front-end](http://vue3.jeecg.com/3028878) |
| | | |
| | | - [Docker starts the micro-service background](http://doc.jeecg.com/3043472) |
| | | - [Docker starts the Vue2 front-end](http://doc.jeecg.com/3043612) |
| | | |
| | | |
| | | |
| | | |
| | | Technical documentation |
| | | ----------------------------------- |
| | | |
| | | - Websiteï¼ [http://www.jeecg.com](http://www.jeecg.com) |
| | | |
| | | - Demo ï¼ [Vue3](http://boot3.jeecg.com) | [Vue2](http://boot.jeecg.com) |
| | | |
| | | - Docï¼ [Vue3](http://vue3.jeecg.com) | [Main](http://doc.jeecg.com) |
| | | |
| | | - Newbie guideï¼ [Quick start](http://www.jeecg.com/doc/quickstart) | [video](https://space.bilibili.com/454617261/channel/series) | [Q&A ](http://www.jeecg.com/doc/qa) | [help](http://jeecg.com/doc/help) | [1 minute experience](https://my.oschina.net/jeecg/blog/3083313) |
| | | |
| | | - Microservice Developmentï¼ [Monomer upgrade to microservice](http://doc.jeecg.com/3043471) |
| | | |
| | | - QQ group ï¼ â¥730954414ã683903138ãâ¤860162132(full)ãâ£774126647(full)ãâ¢816531124(full)ãâ¡769925425(full)ãâ 284271917(full) |
| | | |
| | | |
| | | |
| | | |
| | | ##### Star charts |
| | | |
| | | [](https://star-history.com/#jeecgboot/jeecg-boot) |
| | | |
| | | |
| | | |
| | | |
| | | Background directory Structure |
| | | ----------------------------------- |
| | | ``` |
| | | project structure |
| | | ââjeecg-boot-parent |
| | | â ââjeecg-boot-base-core |
| | | â ââjeecg-module-demo |
| | | â ââjeecg-module-system |
| | | â â ââjeecg-system-biz |
| | | â â ââjeecg-system-start system (8080ï¼ |
| | | â â ââjeecg-system-api |
| | | â â â ââjeecg-system-cloud-api |
| | | â â â ââjeecg-system-local-api |
| | | â ââjeecg-server-cloud |
| | | ââjeecg-cloud-gateway (9999) |
| | | ââjeecg-cloud-nacos --Nacos(8848) |
| | | ââjeecg-system-cloud-start --System(7001) |
| | | ââjeecg-demo-cloud-start --Demo(7002) |
| | | ââjeecg-visual |
| | | ââjeecg-cloud-monitor -- (9111) |
| | | ââjeecg-cloud-xxljob -- (9080) |
| | | ââjeecg-cloud-sentinel --sentinel (9000) |
| | | ââjeecg-cloud-test |
| | | ââjeecg-cloud-test-more |
| | | ââjeecg-cloud-test-rabbitmq |
| | | ââjeecg-cloud-test-seata |
| | | ââjeecg-cloud-test-shardingsphere |
| | | |
| | | ``` |
| | | |
| | | |
| | | |
| | | |
| | | Why JeecgBoot? |
| | | ----------------------------------- |
| | | * Adopt the latest mainstream front and back separation framework (Springboot+Mybatis+antd), easy to use; Code generator has low dependency, flexible expansion ability, and can quickly realize secondary development; |
| | | * Support microservices SpringCloud Alibaba(Nacos, Gateway, Sentinel, Skywalking), and provide switching mechanism to support free switching between single and microservices |
| | | * High development efficiency, using code generator, single table, tree list, one-to-many, one-to-one and other data models, add, delete, change and search function one-key generation, menu configuration directly use; |
| | | * Code generator provides powerful template mechanism, support custom template, currently provide four sets of style template (single table two sets, tree model one set, one to many three sets) |
| | | * Code generator is very intelligent, online business modeling, online configuration, WYSIWYG support 23 kinds of controls, a key to generate front and back end code, greatly improve the development efficiency, no longer worry about repeated work. |
| | | * Low code ability: Online online form (without coding, through online configuration of the form, to achieve the addition, deletion, change and check of the form, support single table, tree, one-to-many, one-to-one model, to achieve everyone can code) |
| | | * Low code ability: Online online report (without coding, through online configuration, to achieve data report, can quickly extract data, reduce development pressure, to achieve everyone can code) |
| | | * Low code ability: Online online chart (without coding, through online configuration, to achieve graphs, bar graphs, data reports, etc., support custom layout, to achieve everyone can code) |
| | | * Complete encapsulation of user, role, menu, organization, data dictionary, online scheduled tasks and other basic functions, support access authorization, button permission, data permission and other functions |
| | | * Commonly used common package, various tools (scheduled task, SMS interface, email sending,Excel import and export, etc.), basically meeting 80% of project requirements |
| | | * Easy Excel import and export, support single table export and one-to-many table mode export, generated code with import and export function |
| | | * Integrated simple report tools, image report and data export is very convenient, can be extremely convenient to generate graphical reports, pdf, excel, word and other reports; |
| | | * Before and after the separation technology, the page UI style is exquisite, for the commonly used components to do the encapsulation: time, row table control, interception display control, report component, editor and so on |
| | | * Query filter: query function automatically generated, the background dynamic spell SQL additional query conditions; Supports multiple matching modes (full matching, fuzzy query, included query, and unmatched query). |
| | | * Data permission (fine data permission control, control to row level, list level, form field level, realize different people see different data, different people operate different fields on the same page |
| | | * Page verification automatically generated (must be input, digital verification, amount verification, time and space, etc.); |
| | | * Support SAAS service model and provide SaaS multi-tenant architecture solution. |
| | | * Distributed file service, integration of minio, Ali OSS and other excellent third parties, to provide convenient file upload and management, but also support local storage. |
| | | * Mainstream database compatibility, a set of code is fully compatible with Mysql, Postgresql, Oracle, Sqlserver, MariaDB, dream and other mainstream databases. |
| | | * Integrate workflow activiti and realize only the configuration of flow direction in the page, which can greatly simplify the development of bpm workflow; Using bpm's process designer to draw the flow direction, a workflow is basically complete with a small amount of java code; |
| | | * Low code ability: online process design, using open source Activiti process engine, to achieve online drawing process, custom form, form attachment, business flow |
| | | * Multi-data source: its simple way of use, online configuration of data source configuration, convenient to grab data from other data; |
| | | * Provide single sign-on CAS integration solution, and complete docking code has been provided in the project |
| | | * Low code ability: form designer, support user custom form layout, support single table, one to many forms, support select, radio, checkbox, textarea, date, popup, list, macro and other controls |
| | | * Professional interface docking mechanism, unified using restful interface, integrated swagger-ui online interface documentation, Jwt token security verification, convenient client docking |
| | | * Interface security mechanism, can be refined control interface authorization, very simple to realize different clients only see their own data control |
| | | * Advanced combination query function, online configuration support primary and sub-table associated query, can save the query history |
| | | * Provide a variety of system monitoring, real-time tracking system running conditions (monitoring Redis, Tomcat, jvm, server information, request tracking, SQL monitoring) |
| | | * Message center (support SMS, email, wechat push, etc.) |
| | | * Integrate Websocket message notification mechanism |
| | | * Excellent mobile adaptive effect, providing APP release scheme: |
| | | * Support multiple languages and provide internationalization solutions; |
| | | * Data change record log, can record each change of data content, through the version comparison function to view historical changes |
| | | * The platform UI is powerful and mobile adaptation is implemented |
| | | * Platform home page style, provide a variety of combination mode, support custom style |
| | | * Provide easy to use print plug-in, support Google, Firefox, IE11+ and other browsers |
| | | * Rich sample code, provide a lot of learning case reference |
| | | * Using maven module development method |
| | | * Support dynamic menu routing |
| | | * RBAC (Role-Based Access Control) is used for permission control. |
| | | * Provide new row edit table JVXETable, easily meet a variety of complex ERP layout, with higher performance, more flexible extension, more powerful functions |
| | | |
| | | |
| | | |
| | | |
| | | Technical Architecture: |
| | | ----------------------------------- |
| | | |
| | | #### Development Environment |
| | | |
| | | - Language: Java 8+ (less than 17) |
| | | |
| | | - IDE(JAVA) : IDEA (lombok plug-in must be installed) |
| | | |
| | | - IDE(front-end) : Vscode, WebStorm, IDEA |
| | | |
| | | - Dependency management: Maven |
| | | |
| | | - Cache: Redis |
| | | |
| | | - Database: MySQL5.7 + & Oracle 11 g & Sqlserver2017 [More Databases](https://my.oschina.net/jeecg/blog/4905722) |
| | | |
| | | |
| | | #### backend |
| | | |
| | | - Basic framework: Spring Boot 2.6.6 |
| | | |
| | | - Microservice framework: Spring Cloud Alibaba 2021.0.1.0 |
| | | |
| | | - Persistence layer framework: MybatisPlus 3.5.1 |
| | | |
| | | - Report tool: JimuReport 1.5.2 |
| | | |
| | | - Security framework: Apache Shiro 1.8.0, Jwt 3.11.0 |
| | | |
| | | - Microservice technology stack: Spring Cloud Alibaba, Nacos, Gateway, Sentinel, Skywalking |
| | | |
| | | - Database connection pool: Alibaba Druid 1.1.22 |
| | | |
| | | - Log printing: logback |
| | | |
| | | - Others: autopoi, fastjson, poi, Swagger-ui, quartz, lombok (simplified code), etc. |
| | | |
| | | |
| | | #### The front end |
| | | |
| | | - Vue2 versionï¼`Vue2.6+@vue/cli+AntDesignVue+Viser-vue+Vuex` [detail](https://github.com/jeecgboot/ant-design-vue-jeecg) |
| | | - Vue3 versionï¼`Vue3.0+TypeScript+Vite+AntDesignVue+pinia+echarts` [detail](https://github.com/jeecgboot/jeecgboot-vue3) |
| | | |
| | | #### Support library |
| | | |
| | | | database | support | |
| | | | --- | --- | |
| | | | MySQL | â | |
| | | | Oracle11g | â | |
| | | | Sqlserver2017 | â | |
| | | | PostgreSQL | â | |
| | | | MariaDB | â | |
| | | | 达梦ã人大éä» | â | |
| | | |
| | | |
| | | |
| | | ## Microservice solutions |
| | | |
| | | |
| | | 1. Service registration and discovery Nacos â |
| | | |
| | | 2. Nacos â |
| | | |
| | | 3. Route gateway gateway(Three loading modes) â |
| | | |
| | | 4. Distributed http feign â |
| | | |
| | | 5. fuse degrade current limiting Sentinel â |
| | | |
| | | 6. Distributed files Minio and Alioss â |
| | | |
| | | 7. Unified permission control |
| | | |
| | | 8. Service monitoring SpringBootAdminâ |
| | | |
| | | 9. link tracking Skywalking [reference document](http://doc.jeecg.com/2350293) |
| | | |
| | | 10. Messaging middleware RabbitMQ â |
| | | |
| | | 11. Distributed task xxl-job â |
| | | |
| | | 12. Distributed Transaction Seata |
| | | |
| | | 13. Distributed log elk + kafka |
| | | |
| | | 14. Support docker-compose, k8s, jenkins |
| | | |
| | | 15. CAS SSO â |
| | | |
| | | 16. Route traffic limiting â |
| | | |
| | | |
| | | #### Microservice architecture diagram |
| | |  |
| | | |
| | | ### Jeecg Boot product functionality blueprint |
| | |  |
| | | |
| | | |
| | | |
| | | |
| | | ### Function module |
| | | ``` |
| | | ââç³»ç»ç®¡ç |
| | | â ââç¨æ·ç®¡ç |
| | | â ââè§è²ç®¡ç |
| | | â ââèå管ç |
| | | â ââæéè®¾ç½®ï¼æ¯ææé®æéãæ°æ®æéï¼ |
| | | â ââ表åæéï¼æ§å¶å段ç¦ç¨ãéèï¼ |
| | | â ââé¨é¨ç®¡ç |
| | | â ââæçé¨é¨ï¼äºçº§ç®¡çåï¼ |
| | | â ââåå
¸ç®¡ç |
| | | â ââåç±»åå
¸ |
| | | â ââç³»ç»å
Œ |
| | | â ââèå¡ç®¡ç |
| | | â ââéè®¯å½ |
| | | â ââå¤ç§æ·ç®¡ç |
| | | ââæ¶æ¯ä¸å¿ |
| | | â ââæ¶æ¯ç®¡ç |
| | | â ââæ¨¡æ¿ç®¡ç |
| | | ââ代ç çæå¨(ä½ä»£ç ) |
| | | â ââ代ç çæå¨åè½ï¼ä¸é®çæåå端代ç ï¼çæåæ éä¿®æ¹ç´æ¥ç¨ï¼ç»å¯¹æ¯å端å¼åç¦é³ï¼ |
| | | â ââ代ç çæå¨æ¨¡æ¿ï¼æä¾4奿¨¡æ¿ï¼å嫿¯æå表åä¸å¯¹å¤æ¨¡åï¼ä¸å飿 ¼éæ©ï¼ |
| | | â ââ代ç çæå¨æ¨¡æ¿ï¼çæä»£ç ï¼èªå¸¦excel导å
¥å¯¼åºï¼ |
| | | â ââæ¥è¯¢è¿æ»¤å¨ï¼æ¥è¯¢é»è¾æ éç¼ç ï¼ç³»ç»æ ¹æ®é¡µé¢é
ç½®èªå¨çæï¼ |
| | | â ââé«çº§æ¥è¯¢å¨ï¼å¼¹çªèªå¨ç»åæ¥è¯¢æ¡ä»¶ï¼ |
| | | â ââExcel导å
¥å¯¼åºå·¥å
·éæï¼æ¯æå表ï¼ä¸å¯¹å¤ 导å
¥å¯¼åºï¼ |
| | | â ââå¹³å°ç§»å¨èªéåºæ¯æ |
| | | ââç³»ç»çæ§ |
| | | â ââGatewayè·¯ç±ç½å
³ |
| | | â ââæ§è½æ«æçæ§ |
| | | â â ââçæ§ Redis |
| | | â â ââTomcat |
| | | â â ââjvm |
| | | â â ââæå¡å¨ä¿¡æ¯ |
| | | â â ââ请æ±è¿½è¸ª |
| | | â â ââç£ççæ§ |
| | | â ââ宿¶ä»»å¡ |
| | | â ââç³»ç»æ¥å¿ |
| | | â ââæ¶æ¯ä¸å¿ï¼æ¯æçä¿¡ãé®ä»¶ã微信æ¨éççï¼ |
| | | â ââæ°æ®æ¥å¿ï¼è®°å½æ°æ®å¿«ç
§ï¼å¯å¯¹æ¯å¿«ç
§ï¼æ¥çæ°æ®åæ´æ
åµï¼ |
| | | â ââç³»ç»éç¥ |
| | | â ââSQLçæ§ |
| | | â ââswagger-ui(å¨çº¿æ¥å£ææ¡£) |
| | | ââæ¥è¡¨ç¤ºä¾ |
| | | â ââæ²çº¿å¾ |
| | | â ââ饼ç¶å¾ |
| | | â ââæ±ç¶å¾ |
| | | â ââæçº¿å¾ |
| | | â ââé¢ç§¯å¾ |
| | | â ââé·è¾¾å¾ |
| | | â ââä»ªè¡¨å¾ |
| | | â ââè¿åº¦æ¡ |
| | | â ââæåå表 |
| | | â ââçç |
| | | ââ大屿¨¡æ¿ |
| | | â ââä½æææ¥ä¸å¿å¤§å± |
| | | â ââç©æµæå¡ä¸å¿å¤§å± |
| | | ââ常ç¨ç¤ºä¾ |
| | | â ââèªå®ä¹ç»ä»¶ |
| | | â ââ对象åå¨(对æ¥é¿éäº) |
| | | â ââJVXETable示ä¾ï¼åç§å¤æERPå¸å±ç¤ºä¾ï¼ |
| | | â ââå表模åä¾å |
| | | â ââä¸å¯¹å¤æ¨¡åä¾å |
| | | â ââæå°ä¾å |
| | | â ââä¸å¯¹å¤TABä¾å |
| | | â ââå
åµtableä¾å |
| | | â ââ常ç¨éæ©ç»ä»¶ |
| | | â ââ弿¥æ table |
| | | â ââæ¥å£æ¨¡ææµè¯ |
| | | â ââè¡¨æ ¼åè®¡ç¤ºä¾ |
| | | â ââ弿¥æ åè¡¨ç¤ºä¾ |
| | | â ââä¸å¯¹å¤JEditable |
| | | â ââJEditableç»ä»¶ç¤ºä¾ |
| | | â ââå¾çææ½æåº |
| | | â ââå¾ç翻页 |
| | | â ââå¾çé¢è§ |
| | | â ââPDFé¢è§ |
| | | â ââåå±åè½ |
| | | ââå°è£
éç¨ç»ä»¶ |
| | | â ââè¡ç¼è¾è¡¨æ ¼JEditableTable |
| | | â ââçç¥æ¾ç¤ºç»ä»¶ |
| | | â ââæ¶é´æ§ä»¶ |
| | | â ââé«çº§æ¥è¯¢ |
| | | â ââç¨æ·éæ©ç»ä»¶ |
| | | â ââæ¥è¡¨ç»ä»¶å°è£
|
| | | â ââåå
¸ç»ä»¶ |
| | | â ââ䏿å¤éç»ä»¶ |
| | | â ââé人ç»ä»¶ |
| | | â ââéé¨é¨ç»ä»¶ |
| | | â ââéè¿é¨é¨é人ç»ä»¶ |
| | | â ââå°è£
æ²çº¿ãæ±ç¶å¾ã饼ç¶å¾ãæçº¿å¾ççæ¥è¡¨çç»ä»¶ï¼ç»è¿å°è£
ï¼ä½¿ç¨ç®åï¼ |
| | | â ââå¨çº¿codeç¼è¾å¨ |
| | | â ââä¸ä¼ æä»¶ç»ä»¶ |
| | | â ââéªè¯ç ç»ä»¶ |
| | | â ââæ å表ç»ä»¶ |
| | | â ââ表åç¦ç¨ç»ä»¶ |
| | | â ââçç |
| | | ââæ´å¤é¡µé¢æ¨¡æ¿ |
| | | â ââåç§é«çº§è¡¨å |
| | | â ââåç§åè¡¨ææ |
| | | â ââç»æé¡µé¢ |
| | | â ââå¼å¸¸é¡µé¢ |
| | | â ââä¸ªäººé¡µé¢ |
| | | ââé«çº§åè½ |
| | | â ââç³»ç»ç¼ç è§å |
| | | â ââæä¾åç¹ç»å½CASéææ¹æ¡ |
| | | â ââæä¾APPå叿¹æ¡ |
| | | â ââéæWebsocketæ¶æ¯éç¥æºå¶ |
| | | ââOnlineå¨çº¿å¼å(ä½ä»£ç ) |
| | | â ââOnlineå¨çº¿è¡¨å - åè½å·²å¼æ¾ |
| | | â ââOnline代ç çæå¨ - åè½å·²å¼æ¾ |
| | | â ââOnlineå¨çº¿æ¥è¡¨ - åè½å·²å¼æ¾ |
| | | â ââOnlineå¨çº¿å¾è¡¨(æªå¼æº) |
| | | â ââOnlineå¾è¡¨æ¨¡æ¿é
ç½®(æªå¼æº) |
| | | â ââOnlineå¸å±è®¾è®¡(æªå¼æº) |
| | | â ââ夿°æ®æºç®¡ç - åè½å·²å¼æ¾ |
| | | ââç§¯æ¨æ¥è¡¨è®¾è®¡å¨(ä½ä»£ç ) |
| | | â ââæå°è®¾è®¡å¨ |
| | | â ââæ°æ®æ¥è¡¨è®¾è®¡ |
| | | â ââå¾å½¢æ¥è¡¨è®¾è®¡ï¼æ¯æechartï¼ |
| | | â ââ大å±è®¾è®¡å¨(æªå¼æº) |
| | | ââæµç¨æ¨¡ååè½ (æªå¼æº) |
| | | â ââæµç¨è®¾è®¡å¨ |
| | | â ââ表åè®¾è®¡å¨ |
| | | ââ大å±è®¾è®¡å¨ |
| | | ââ鍿·è®¾è®¡/仪表çè®¾è®¡å¨ |
| | | â ââæçä»»å¡ |
| | | â ââå岿µç¨ |
| | | â ââå岿µç¨ |
| | | â ââæµç¨å®ä¾ç®¡ç |
| | | â ââæµç¨çå¬ç®¡ç |
| | | â ââæµç¨è¡¨è¾¾å¼ |
| | | â ââæåèµ·çæµç¨ |
| | | â ââæçæé |
| | | â ââæµç¨å§æ´¾ãæéã跳转 |
| | | â ââããã |
| | | ââOAåå
¬ç»ä»¶ (æªå¼æº) |
| | | â ââæ´å¤åè½ |
| | | â ââããã |
| | | ââå
¶ä»æ¨¡å |
| | | ââæ´å¤åè½å¼åä¸ãã |
| | | |
| | | ``` |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | Effect of system |
| | | ---- |
| | | ##### Screen template |
| | |  |
| | | |
| | |  |
| | | |
| | | ##### PC |
| | |  |
| | |  |
| | |  |
| | |  |
| | |  |
| | | |
| | | |
| | | ##### Online interface documentation |
| | |  |
| | |  |
| | | |
| | | |
| | | ##### Report |
| | |  |
| | |  |
| | |  |
| | |  |
| | |  |
| | | |
| | | ##### Process |
| | |  |
| | |  |
| | |  |
| | |  |
| | | |
| | | |
| | | ##### App |
| | |  |
| | |  |
| | | |
| | | ##### PAD |
| | |  |
| | |  |
| | |  |
| | |  |
| | | |
| | | |
| | | ## donation |
| | | |
| | | If so, buy the author a cup of coffee ⺠|
| | | |
| | |  |
¶Ô±ÈÐÂÎļþ |
| | |
| | | FROM mysql:8.0.19 |
| | | |
| | | MAINTAINER bsw |
| | | |
| | | ENV TZ=Asia/Shanghai |
| | | |
| | | RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone |
| | | |
| | | COPY ./herb.sql /docker-entrypoint-initdb.d |
| | | |
| | | COPY ./nacos.sql /docker-entrypoint-initdb.d |
| | | |
| | | #COPY origin/jeecgboot-mysql-5.7.sql /docker-entrypoint-initdb.d |
| | | |
| | | #COPY origin/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 : local-mysql |
| | | Source Server Type : MySQL |
| | | Source Server Version : 80029 |
| | | Source Host : localhost:3306 |
| | | Source Schema : nacos2 |
| | | |
| | | Target Server Type : MySQL |
| | | Target Server Version : 80029 |
| | | File Encoding : 65001 |
| | | |
| | | Date: 13/03/2023 10:46:26 |
| | | */ |
| | | |
| | | 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 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` ASC, `group_id` ASC, `tenant_id` ASC) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 53 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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: 123456\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '18d9b011672febc0674351b137ec5904', '2021-03-03 13:01:11', '2023-03-07 03:09:43', '', '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 job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n startup-delay: 1s\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.springframework.scheduling.quartz.LocalDataSourceJobStore\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 12000\n clusterCheckinInterval: 15000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\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 async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', '2117a96ba08e8fd0f66825e87416af27', '2021-03-03 13:01:42', '2022-08-05 13:12:21', 'nacos', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); |
| | | INSERT INTO `config_info` VALUES (3, 'jeecg-gateway-router.json', 'DEFAULT_GROUP', '[{\n \"id\": \"jeecg-system\",\n \"order\": 0,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/sys/**\",\n \"_genkey_1\": \"/jmreport/**\",\n \"_genkey_3\": \"/online/**\",\n \"_genkey_4\": \"/generic/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb://jeecg-system\"\n}, {\n \"id\": \"jeecg-demo\",\n \"order\": 1,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/mock/**\",\n \"_genkey_1\": \"/test/**\",\n \"_genkey_2\": \"/bigscreen/template1/**\",\n \"_genkey_3\": \"/bigscreen/template2/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb://jeecg-demo\"\n}, {\n \"id\": \"jeecg-system-websocket\",\n \"order\": 2,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/websocket/**\",\n \"_genkey_1\": \"/newsWebsocket/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb:ws://jeecg-system\"\n}, {\n \"id\": \"jeecg-demo-websocket\",\n \"order\": 3,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/vxeSocket/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb:ws://jeecg-demo\"\n}]', 'be6548051d99309d7fa5ac4398404201', '2021-03-03 13:02:14', '2022-02-23 11:49:01', NULL, '0:0:0:0:0:0:0:1', '', '', '', '', '', 'json', ''); |
| | | INSERT INTO `config_info` VALUES (20, 'jeecg-gateway-dev.yaml', 'DEFAULT_GROUP', 'jeecg:\n route:\n config:\n #type:database nacos yml\n data-type: database\n group: DEFAULT_GROUP\n data-id: jeecg-gateway-router\nspring:\n redis:\n database: 0\n host: 192.168.21.70\n port: 6379\n password:', '946f5729cef5a306694e3cf6374f96ce', '2022-08-04 16:36:11', '2023-03-08 10:47:44', NULL, '127.0.0.1', '', '', '', '', '', 'yaml', ''); |
| | | INSERT INTO `config_info` VALUES (43, 'ichd-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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://127.0.0.1:3306/jeecg-boot2?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: 123456\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: 127.0.0.1\n password:\n port: 6379\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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,/sys/api/*,\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: 127.0.0.1:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : debug\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '4954b61dcbd7c16da82b50a3c757cf77', '2023-03-07 02:17:16', '2023-03-09 10:43:57', '', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); |
| | | INSERT INTO `config_info` VALUES (44, 'ichd.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 job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n startup-delay: 1s\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.springframework.scheduling.quartz.LocalDataSourceJobStore\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 12000\n clusterCheckinInterval: 15000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\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 async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', '2117a96ba08e8fd0f66825e87416af27', '2023-03-07 02:17:16', '2023-03-07 02:17:16', NULL, '0:0:0:0:0:0:0:1', '', '', '', NULL, NULL, 'yaml', NULL); |
| | | |
| | | -- ---------------------------- |
| | | -- 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 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` ASC, `group_id` ASC, `tenant_id` ASC, `datum_id` ASC) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'å¢å ç§æ·å段' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info_aggr |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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 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` ASC, `group_id` ASC, `tenant_id` ASC) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_beta' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info_beta |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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 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` ASC, `group_id` ASC, `tenant_id` ASC, `tag_id` ASC) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_tag' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info_tag |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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 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 NOT NULL AUTO_INCREMENT, |
| | | PRIMARY KEY (`nid`) USING BTREE, |
| | | UNIQUE INDEX `uk_configtagrelation_configidtag`(`id` ASC, `tag_name` ASC, `tag_type` ASC) USING BTREE, |
| | | INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_tag_relation' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_tags_relation |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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 INDEX `uk_group_id`(`group_id` ASC) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'é群ãåGroup容éä¿¡æ¯è¡¨' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of group_capacity |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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 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` ASC) USING BTREE, |
| | | INDEX `idx_gmt_modified`(`gmt_modified` ASC) USING BTREE, |
| | | INDEX `idx_did`(`data_id` ASC) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 101 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'å¤ç§æ·æ¹é ' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of his_config_info |
| | | -- ---------------------------- |
| | | INSERT INTO `his_config_info` VALUES (0, 91, 'ichd-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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', 'edb0e79d570edf341755caf3853f11e4', '2010-05-05 00:00:00', '2023-03-07 02:17:16', NULL, '0:0:0:0:0:0:0:1', 'I', ''); |
| | | INSERT INTO `his_config_info` VALUES (0, 92, 'ichd.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 job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n startup-delay: 1s\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.springframework.scheduling.quartz.LocalDataSourceJobStore\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 12000\n clusterCheckinInterval: 15000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\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 async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', '2117a96ba08e8fd0f66825e87416af27', '2010-05-05 00:00:00', '2023-03-07 02:17:16', NULL, '0:0:0:0:0:0:0:1', 'I', ''); |
| | | INSERT INTO `his_config_info` VALUES (43, 93, 'ichd-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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', 'edb0e79d570edf341755caf3853f11e4', '2010-05-05 00:00:00', '2023-03-07 02:18:46', '', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 94, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', 'edb0e79d570edf341755caf3853f11e4', '2010-05-05 00:00:00', '2023-03-07 02:54:24', '', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 95, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: 123456\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '18d9b011672febc0674351b137ec5904', '2010-05-05 00:00:00', '2023-03-07 03:04:16', '', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 96, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/lb-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: 123456\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '8aba7f32018276099ba03d946948ae1c', '2010-05-05 00:00:00', '2023-03-07 03:09:43', '', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (20, 97, 'jeecg-gateway-dev.yaml', 'DEFAULT_GROUP', '', 'jeecg:\n route:\n config:\n #type:database nacos yml\n data-type: database\n group: DEFAULT_GROUP\n data-id: jeecg-gateway-router\nspring:\n redis:\n database: 0\n host: jeecg-boot-redis\n port: 6379\n password:', '0fc619d2d5e304f18bc4ea8be99f68a4', '2010-05-05 00:00:00', '2023-03-08 10:47:24', NULL, '127.0.0.1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (20, 98, 'jeecg-gateway-dev.yaml', 'DEFAULT_GROUP', '', 'jeecg:\n route:\n config:\n #type:database nacos yml\n data-type: database\n group: DEFAULT_GROUP\n data-id: jeecg-gateway-router\nspring:\n redis:\n database: 0\n host: 192.168.21.49\n port: 6379\n password:', '5fb70bb748842460af7cac0c18cf3512', '2010-05-05 00:00:00', '2023-03-08 10:47:44', NULL, '127.0.0.1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (43, 99, 'ichd-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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://127.0.0.1:3306/jeecg-boot2?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: 123456\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: 127.0.0.1\n password:\n port: 6379\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: 127.0.0.1:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '97761bb293beef1af19e5723e7410826', '2010-05-05 00:00:00', '2023-03-08 11:04:11', NULL, '127.0.0.1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (43, 100, 'ichd-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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://127.0.0.1:3306/jeecg-boot2?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: 123456\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: 127.0.0.1\n password:\n port: 6379\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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,/sys/api/*,\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: 127.0.0.1:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '0fc50d530098cac769e562439d8af9b4', '2010-05-05 00:00:00', '2023-03-09 10:43:57', '', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | |
| | | -- ---------------------------- |
| | | -- 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` ASC, `resource` ASC, `action` ASC) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of permissions |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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` ASC, `role` ASC) 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 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 INDEX `uk_tenant_id`(`tenant_id` ASC) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'ç§æ·å®¹éä¿¡æ¯è¡¨' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of tenant_capacity |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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 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 NOT NULL COMMENT 'å建æ¶é´', |
| | | `gmt_modified` bigint NOT NULL COMMENT 'ä¿®æ¹æ¶é´', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp` ASC, `tenant_id` ASC) USING BTREE, |
| | | INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE |
| | | ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_info' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of tenant_info |
| | | -- ---------------------------- |
| | | INSERT INTO `tenant_info` VALUES (1, '1', 'ac14ab82-51f8-4f0c-aa5b-25fb8384bfb6', 'jeecg', 'jeecg æµè¯å½å空é´', 'nacos', 1653291038942, 1653291038942); |
| | | |
| | | -- ---------------------------- |
| | | -- 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; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -----BEGIN RSA PRIVATE KEY----- |
| | | MIIEpAIBAAKCAQEAsd7TtPzeC0RKlIt0CeBej7JauxxBWnKFSQNP0jVPp0bzANlE |
| | | OW8j22s8lJshGogSiyAQcS4+uecnz/uoyIsujXhgvgUO+Mp2Q4/WC2fMhIKCSYk5 |
| | | 7LbARM7870XIy+9GLAapvrMwUG4vipJnQbwH0x49RtxFjsaOE6ZfmGtfU0NY+1dZ |
| | | yS9Xe8AXveEQLGxB1JPwI/ocR9bxFTalp7AL1tD1UFpS5BOeShx2dKEtVnI/YMGT |
| | | DeAOjcd8HjXwP6H/rGTYaW+p0yM9McLh4B2Z0eHRFblvLfKoWh8E+EBGPmn0ntuR |
| | | ZKHV87i3FKO4cepuAE0Ie2ZEJPE0kmSGuG1ZYwIDAQABAoIBAA0d8pzZPQK1sY5M |
| | | zmzgB/ku3PQJfGRQJ7YfsWY+Gjaqy8bXPunBYXKP8PLAketj94IdBjligKuy+UOk |
| | | Omk3omI6a1/3/YepXplS5SUILZPkD/meThA/1eP9I7f9fHZVmeYrQ59VlY2I4qak |
| | | b0rws98Ezt4H5nVF/TpDva7+1BPOtuO6lUa04XBPsFajKJWjYvOFa4VfgsRt3w18 |
| | | AxiCfE4DRRKH+ybc2zUwtOH2C+w9E/qgpDhAWTfqvAnapz7IF9Qx+9H2jmCPe8ya |
| | | pDq5hdEMYrf0a1czRLN5DxtPTSbtw3l47PdeWkKvGlfB30ZO+j4lFoW9q2lnceTi |
| | | fR4Au+ECgYEA87ypudeyvFf+Ax0mlyQoLQUXeUXtN9mkaQbrSifLq7u3N/snQcKP |
| | | fORD6OiqXmaGTHsxiZZ4bmGPLrR6F4JT2mgAt2AT3vza+NGp7WARKBpm7hSyN5lP |
| | | /g3qw5RLXkAou+eExbg3iG1nfJBzIovc2O0gM8u4QNWJmNGidSFIUHECgYEAutHN |
| | | MbL5jXal62aKvF3rKvTc3bEGXqIt5crcdlPKe7q4HOZVCXVrOzD8uhyFTTNZ9Eoe |
| | | RG1B8JDdJRKCh1sVHlAbdFwhIy71xmj5E5LdpM09WVGxZDNnnB2anTguuV49R8zF |
| | | Noy5CN/sAMmRaVeNeUJ1hapR1qc8NftSW0wl8RMCgYEA8lPS02h21fcOHv5ujbpv |
| | | D0OOsQ4q6WpDogA1Eoc6YcXCRbA4uZK8okk4k2ovaKe6QnQBLnAh0GzCtIbPFGyI |
| | | /g6FF8w4NW1kMBoUPmNS63JEf9Sn08tj0oz3qffYbx6O4TMvuHyNCeDsENZ1AhXY |
| | | PvyTFawnxp4HrZ5PTPEIOqECgYBiIQGfMVtTqxbL5zjIaKy2C5hX+jxWSOnC4iOb |
| | | I7gf9Zvv0iyoozyIAts9Bu4d9vMxFh1/48PXEMCYUHivkHAvU/SX0iy1xlzisxDh |
| | | 7yrs/cFTwU1kTHwHzKUCIBiq1Y1qwWx1ksU+nB/i6f2vT4XIQ9hnNWd3ULCXykMg |
| | | IYdscQKBgQCb4TcSFmZ1FiJEcRhe4Hi1jj3Q7gpW8fx7QH6c0Re9+FTeMnFFkNvd |
| | | PWY1LL+NDphoPDBeifyxj15X6j0+wtn2mb7X2r5D8i/mEAKExKE6t9TZiqzrC3sp |
| | | FOAC3sSQlfDoq2pFr9njQ0Ib3EC3DNoNbfLRM0Nb93vBhoHtYfEmpg== |
| | | -----END RSA PRIVATE KEY----- |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -----BEGIN CERTIFICATE----- |
| | | MIIHkjCCBXqgAwIBAgIQBJQUPEv6WylvZlJzpb+N6DANBgkqhkiG9w0BAQsFADBc |
| | | MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xNDAyBgNVBAMT |
| | | K1JhcGlkU1NMIEdsb2JhbCBUTFMgUlNBNDA5NiBTSEEyNTYgMjAyMiBDQTEwHhcN |
| | | MjMwMjEwMDAwMDAwWhcNMjQwMjEyMjM1OTU5WjAYMRYwFAYDVQQDDA0qLnNobGFu |
| | | YmFvLmNuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsd7TtPzeC0RK |
| | | lIt0CeBej7JauxxBWnKFSQNP0jVPp0bzANlEOW8j22s8lJshGogSiyAQcS4+uecn |
| | | z/uoyIsujXhgvgUO+Mp2Q4/WC2fMhIKCSYk57LbARM7870XIy+9GLAapvrMwUG4v |
| | | ipJnQbwH0x49RtxFjsaOE6ZfmGtfU0NY+1dZyS9Xe8AXveEQLGxB1JPwI/ocR9bx |
| | | FTalp7AL1tD1UFpS5BOeShx2dKEtVnI/YMGTDeAOjcd8HjXwP6H/rGTYaW+p0yM9 |
| | | McLh4B2Z0eHRFblvLfKoWh8E+EBGPmn0ntuRZKHV87i3FKO4cepuAE0Ie2ZEJPE0 |
| | | kmSGuG1ZYwIDAQABo4IDkjCCA44wHwYDVR0jBBgwFoAU8JyF/aKffY/JaLvV1IlN |
| | | Hb7TkP8wHQYDVR0OBBYEFJzhNUzeA/nCFFHZ5w00mCEnr377MCUGA1UdEQQeMByC |
| | | DSouc2hsYW5iYW8uY26CC3NobGFuYmFvLmNuMA4GA1UdDwEB/wQEAwIFoDAdBgNV |
| | | HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwgZ8GA1UdHwSBlzCBlDBIoEagRIZC |
| | | aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL1JhcGlkU1NMR2xvYmFsVExTUlNBNDA5 |
| | | NlNIQTI1NjIwMjJDQTEuY3JsMEigRqBEhkJodHRwOi8vY3JsNC5kaWdpY2VydC5j |
| | | b20vUmFwaWRTU0xHbG9iYWxUTFNSU0E0MDk2U0hBMjU2MjAyMkNBMS5jcmwwPgYD |
| | | VR0gBDcwNTAzBgZngQwBAgEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdp |
| | | Y2VydC5jb20vQ1BTMIGHBggrBgEFBQcBAQR7MHkwJAYIKwYBBQUHMAGGGGh0dHA6 |
| | | Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBRBggrBgEFBQcwAoZFaHR0cDovL2NhY2VydHMu |
| | | ZGlnaWNlcnQuY29tL1JhcGlkU1NMR2xvYmFsVExTUlNBNDA5NlNIQTI1NjIwMjJD |
| | | QTEuY3J0MAkGA1UdEwQCMAAwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkBZwB1AHb/ |
| | | iD8KtvuVUcJhzPWHujS0pM27KdxoQgqf5mdMWjp0AAABhjkEJJgAAAQDAEYwRAIg |
| | | D6c8bJcNM1KcgxIWSxUiB8k/iymyBFiiFKmuiiYwYZUCIGQIVF39gA3sx5l6Xb+D |
| | | VdRaqfZ1weRkc2WW38DqB9oXAHYAc9meiRtMlnigIH1HneayxhzQUV5xGSqMa4AQ |
| | | esF3crUAAAGGOQQkwwAABAMARzBFAiAjebSFq6by4qwW89fwpE3+Z2j37jMQRAJd |
| | | fLBNqMZu/QIhAL0o9lF8nPS/Tv516LUt/yV8k3TjDiGG/SNqKIGJ5uQUAHYASLDj |
| | | a9qmRzQP5WoC+p0w6xxSActW3SyB2bu/qznYhHMAAAGGOQQkiAAABAMARzBFAiAO |
| | | zy7LipK499miZzKIqcU+QC8GdoUXTm3MlrWTbg+0hQIhANdOpLBwy/GfHD4i9u2O |
| | | hMikx80LPL0cg7qAdJiZFVQUMA0GCSqGSIb3DQEBCwUAA4ICAQCGlBraan8PbxhV |
| | | hZW0bOPxVBUx72M37mA4A3NAu0KEaboBgG1qrK835/Jp/vYZpptd4Z7maKzixCXT |
| | | OL7J9+D7raN02oct6MDXb+uc+BWgYwnmwj9YgmS01Xs6UQLEAMRKaDENmt30OUXp |
| | | n/ZghLRAliyGtEcyn4yJFODkUBJbi9m2VrRD+XdCZJYEStxmM2DuEVGpIAEDc+aC |
| | | DoSUe/wuLJf3iUOSVQKLfYC/zNuB7FzSVSv/FphVt1EwlWD2RqSEoDgdzCwbD/pH |
| | | p+8yjMDUHQZW6bSYDrwdYllq/NL/5PlDPdOiUUvmKNeOrJ1nY6vu0wkvHq55Agsl |
| | | juWfyj8m2oCzURN78ONIJaEs3CR+9URM1xh+3ZjFWnzkmrc7WjGXTLDxX6tWDbcU |
| | | qSBwLf4KDBwfWVcIGbXkoH/dvdF/boGJAx2ho9Sv/pMRQZ3xHjSI2MFAvGNocRBm |
| | | tRN+TZXxhpQ7LSJdDyNKHvr9iV5sNTjPLpkpm2AXs3e520wXmtQyT5Hn3FmFFmt9 |
| | | srERXJL9VsQj20cKQth92N0ZKwVyiPKJo0PKDDwmSzAEsFgxHHE4y4itPY/nFN7y |
| | | FYrtkhSCFwUHuwFZFyv9ZWAMF5Ikv2ivk2ujIykEGTGqlinup+rJTJwb078/Psjp |
| | | ndWKtX0hCd4Vscz+L5Nz68duMQXobg== |
| | | -----END CERTIFICATE----- |
| | | -----BEGIN CERTIFICATE----- |
| | | MIIFyzCCBLOgAwIBAgIQCgWbJfVLPYeUzGYxR3U4ozANBgkqhkiG9w0BAQsFADBh |
| | | MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 |
| | | d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD |
| | | QTAeFw0yMjA1MDQwMDAwMDBaFw0zMTExMDkyMzU5NTlaMFwxCzAJBgNVBAYTAlVT |
| | | MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE0MDIGA1UEAxMrUmFwaWRTU0wgR2xv |
| | | YmFsIFRMUyBSU0E0MDk2IFNIQTI1NiAyMDIyIENBMTCCAiIwDQYJKoZIhvcNAQEB |
| | | BQADggIPADCCAgoCggIBAKY5PJhwCX2UyBb1nelu9APen53D5+C40T+BOZfSFaB0 |
| | | v0WJM3BGMsuiHZX2IHtwnjUhLL25d8tgLASaUNHCBNKKUlUGRXGztuDIeXb48d64 |
| | | k7Gk7u7mMRSrj+yuLSWOKnK6OGKe9+s6oaVIjHXY+QX8p2I2S3uew0bW3BFpkeAr |
| | | LBCU25iqeaoLEOGIa09DVojd3qc/RKqr4P11173R+7Ub05YYhuIcSv8e0d7qN1sO |
| | | 1+lfoNMVfV9WcqPABmOasNJ+ol0hAC2PTgRLy/VZo1L0HRMr6j8cbR7q0nKwdbn4 |
| | | Ar+ZMgCgCcG9zCMFsuXYl/rqobiyV+8U37dDScAebZTIF/xPEvHcmGi3xxH6g+dT |
| | | CjetOjJx8sdXUHKXGXC9ka33q7EzQIYlZISF7EkbT5dZHsO2DOMVLBdP1N1oUp0/ |
| | | 1f6fc8uTDduELoKBRzTTZ6OOBVHeZyFZMMdi6tA5s/jxmb74lqH1+jQ6nTU2/Mma |
| | | hGNxUuJpyhUHezgBA6sto5lNeyqc+3Cr5ehFQzUuwNsJaWbDdQk1v7lqRaqOlYjn |
| | | iomOl36J5txTs0wL7etCeMRfyPsmc+8HmH77IYVMUOcPJb+0gNuSmAkvf5QXbgPI |
| | | Zursn/UYnP9obhNbHc/9LYdQkB7CXyX9mPexnDNO7pggNA2jpbEarLmZGi4grMmf |
| | | AgMBAAGjggGCMIIBfjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTwnIX9 |
| | | op99j8lou9XUiU0dvtOQ/zAfBgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3R |
| | | VTAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC |
| | | MHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl |
| | | cnQuY29tMEAGCCsGAQUFBzAChjRodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v |
| | | RGlnaUNlcnRHbG9iYWxSb290Q0EuY3J0MEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6 |
| | | Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwPQYD |
| | | VR0gBDYwNDALBglghkgBhv1sAgEwBwYFZ4EMAQEwCAYGZ4EMAQIBMAgGBmeBDAEC |
| | | AjAIBgZngQwBAgMwDQYJKoZIhvcNAQELBQADggEBAAfjh/s1f5dDdfm0sNm74/dW |
| | | MbbsxfYV1LoTpFt+3MSUWvSbiPQfUkoV57b5rutRJvnPP9mSlpFwcZ3e1nSUbi2o |
| | | ITGA7RCOj23I1F4zk0YJm42qAwJIqOVenR3XtyQ2VR82qhC6xslxtNf7f2Ndx2G7 |
| | | Mem4wpFhyPDT2P6UJ2MnrD+FC//ZKH5/ERo96ghz8VqNlmL5RXo8Ks9rMr/Ad9xw |
| | | Y4hyRvAz5920myUffwdUqc0SvPlFnahsZg15uT5HkK48tHR0TLuLH8aRpzh4KJ/Y |
| | | p0sARNb+9i1R4Fg5zPNvHs2BbIve0vkwxAy+R4727qYzl3027w9jEFC6HMXRaDc= |
| | | -----END CERTIFICATE----- |
¶Ô±ÈÐÂÎļþ |
| | |
| | | CREATE database if NOT EXISTS `nacos2` default character set utf8mb4 collate utf8mb4_general_ci; |
| | | use `nacos2`; |
| | | /* |
| | | Navicat Premium Data Transfer |
| | | |
| | | Source Server : mysql5.7 |
| | | Source Server Type : MySQL |
| | | Source Server Version : 50738 |
| | | Source Host : 127.0.0.1:3306 |
| | | Source Schema : nacos-os |
| | | |
| | | Target Server Type : MySQL |
| | | Target Server Version : 50738 |
| | | File Encoding : 65001 |
| | | |
| | | Date: 06/08/2022 15:12:35 |
| | | */ |
| | | |
| | | 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 = 43 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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', 'edb0e79d570edf341755caf3853f11e4', '2021-03-03 13:01:11', '2022-08-06 07:10:17', 'nacos', '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 job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n startup-delay: 1s\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.springframework.scheduling.quartz.LocalDataSourceJobStore\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 12000\n clusterCheckinInterval: 15000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\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 async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', '2117a96ba08e8fd0f66825e87416af27', '2021-03-03 13:01:42', '2022-08-05 13:12:21', 'nacos', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); |
| | | INSERT INTO `config_info` VALUES (3, 'jeecg-gateway-router.json', 'DEFAULT_GROUP', '[{\n \"id\": \"jeecg-system\",\n \"order\": 0,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/sys/**\",\n \"_genkey_1\": \"/jmreport/**\",\n \"_genkey_3\": \"/online/**\",\n \"_genkey_4\": \"/generic/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb://jeecg-system\"\n}, {\n \"id\": \"jeecg-demo\",\n \"order\": 1,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/mock/**\",\n \"_genkey_1\": \"/test/**\",\n \"_genkey_2\": \"/bigscreen/template1/**\",\n \"_genkey_3\": \"/bigscreen/template2/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb://jeecg-demo\"\n}, {\n \"id\": \"jeecg-system-websocket\",\n \"order\": 2,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/websocket/**\",\n \"_genkey_1\": \"/newsWebsocket/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb:ws://jeecg-system\"\n}, {\n \"id\": \"jeecg-demo-websocket\",\n \"order\": 3,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/vxeSocket/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb:ws://jeecg-demo\"\n}]', 'be6548051d99309d7fa5ac4398404201', '2021-03-03 13:02:14', '2022-02-23 11:49:01', NULL, '0:0:0:0:0:0:0:1', '', '', '', '', '', 'json', ''); |
| | | INSERT INTO `config_info` VALUES (20, 'jeecg-gateway-dev.yaml', 'DEFAULT_GROUP', 'jeecg:\n route:\n config:\n #type:database nacos yml\n data-type: database\n group: DEFAULT_GROUP\n data-id: jeecg-gateway-router\nspring:\n redis:\n database: 0\n host: jeecg-boot-redis\n port: 6379\n password:', '0fc619d2d5e304f18bc4ea8be99f68a4', '2022-08-04 16:36:11', '2022-08-06 07:11:34', 'nacos', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); |
| | | |
| | | -- ---------------------------- |
| | | -- 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; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info_aggr |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info_beta |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_info_tag |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of config_tags_relation |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of group_capacity |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- Table structure for his_config_info |
| | | -- ---------------------------- |
| | | DROP TABLE IF EXISTS `his_config_info`; |
| | | CREATE TABLE `his_config_info` ( |
| | | `id` bigint(20) 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 = 91 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'å¤ç§æ·æ¹é ' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of his_config_info |
| | | -- ---------------------------- |
| | | INSERT INTO `his_config_info` VALUES (20, 70, 'jeecg-gateway-dev.yaml', 'DEFAULT_GROUP', '', 'jeecg:\n route:\n config:\n #mode: databaseãnacosãyml\n data-type: database\n #nacos: jeecg-gateway-router.json\n group: DEFAULT_GROUP\n data-id: jeecg-gateway-router\nspring:\n redis:\n database: 0\n host: jeecg-boot-redis\n port: 6379\n password:', '26fff601e10bbc8bc5ff1fa2b192087b', '2010-05-05 00:00:00', '2022-08-05 10:45:21', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 71, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao :\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg :\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path :\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n # agent-app-secret: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '17b0553ae2ade6474301e3d4eca6f05e', '2010-05-05 00:00:00', '2022-08-05 10:54:54', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 72, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n desform:\n theme-color: \'#1890ff\'\n upload-type: system\n map:\n baidu: ??\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '70922f6374bf2e4ccf0de8c089445811', '2010-05-05 00:00:00', '2022-08-05 10:57:40', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 73, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n desform:\n theme-color: \'#1890ff\'\n upload-type: system\n map:\n baidu: ??\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '035fff10fc0e5a38abf3c357afff7c67', '2010-05-05 00:00:00', '2022-08-05 10:59:02', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 74, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '87ec968621f8ac532e2fc50f98dd4f57', '2010-05-05 00:00:00', '2022-08-05 11:00:08', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 75, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', 'edb0e79d570edf341755caf3853f11e4', '2010-05-05 00:00:00', '2022-08-05 11:01:10', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 76, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '53b1c1130dff673311ad863b4ce67c8e', '2010-05-05 00:00:00', '2022-08-05 11:02:49', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 77, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '32d655df70c77beb8e39c5d3d8c69c9c', '2010-05-05 00:00:00', '2022-08-05 11:03:31', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 78, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\nsignUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', 'd3b15d3bb35c4baed32f75eabb2bf864', '2010-05-05 00:00:00', '2022-08-05 11:04:54', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 79, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '53b1c1130dff673311ad863b4ce67c8e', '2010-05-05 00:00:00', '2022-08-05 13:02:54', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 80, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true', '92ced3a81dece861666606c44cd4f630', '2010-05-05 00:00:00', '2022-08-05 13:03:28', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 81, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp', '364814ff81fb2a38c869f7bb5aa92f45', '2010-05-05 00:00:00', '2022-08-05 13:03:55', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 82, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379', '064d0471e33d707a5b70e0807f8f0d93', '2010-05-05 00:00:00', '2022-08-05 13:04:39', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (2, 83, '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 job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n startup-delay: 1s\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.springframework.scheduling.quartz.LocalDataSourceJobStore\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 12000\n clusterCheckinInterval: 15000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\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 async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', '2117a96ba08e8fd0f66825e87416af27', '2010-05-05 00:00:00', '2022-08-05 13:05:34', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 84, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n dynamic:\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379', 'a12eaf6e6c090b303590f1e83c22ac3f', '2010-05-05 00:00:00', '2022-08-05 13:07:33', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 85, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n dynamic:\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379', '5e33b9dc9022eee8a1652e473dadbc42', '2010-05-05 00:00:00', '2022-08-05 13:09:30', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (2, 86, 'jeecg.yaml', 'DEFAULT_GROUP', '', 'server:\n tomcat:\n max-swallow-size: -1', '4525d8351d9498a8e5f43373ee6367a1', '2010-05-05 00:00:00', '2022-08-05 13:09:55', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (2, 87, '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 job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n startup-delay: 1s\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.springframework.scheduling.quartz.LocalDataSourceJobStore\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 12000\n clusterCheckinInterval: 15000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\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 async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', '2117a96ba08e8fd0f66825e87416af27', '2010-05-05 00:00:00', '2022-08-05 13:10:58', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (2, 88, '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 job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\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 async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', 'a1effef2c22a7d2846f84728aa29ecd4', '2010-05-05 00:00:00', '2022-08-05 13:12:21', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (1, 89, '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:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-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 redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\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 concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /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\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\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: ??\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\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '53b1c1130dff673311ad863b4ce67c8e', '2010-05-05 00:00:00', '2022-08-06 07:10:17', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | INSERT INTO `his_config_info` VALUES (20, 90, 'jeecg-gateway-dev.yaml', 'DEFAULT_GROUP', '', 'jeecg:\n route:\n config:\n #mode:database nacos yml\n data-type: database\n group: DEFAULT_GROUP\n data-id: jeecg-gateway-router\nspring:\n redis:\n database: 0\n host: jeecg-boot-redis\n port: 6379\n password:', 'b08a4c456f508fdd0fc347305da39a9e', '2010-05-05 00:00:00', '2022-08-06 07:11:34', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); |
| | | |
| | | -- ---------------------------- |
| | | -- 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; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of permissions |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of tenant_capacity |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 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 = 2 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_info' ROW_FORMAT = DYNAMIC; |
| | | |
| | | -- ---------------------------- |
| | | -- Records of tenant_info |
| | | -- ---------------------------- |
| | | INSERT INTO `tenant_info` VALUES (1, '1', 'ac14ab82-51f8-4f0c-aa5b-25fb8384bfb6', 'jeecg', 'jeecg æµè¯å½å空é´', 'nacos', 1653291038942, 1653291038942); |
| | | |
| | | -- ---------------------------- |
| | | -- 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; |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | oracle导åºç¼ç ï¼ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK |
| | | |
| | | 导åºç¨æ·ï¼ jeecgboot |
| | | |
| | | 导å
¥å½ä»¤ï¼ imp scott/tiger@orcl file=jeecgboot-oracle11g.dmp |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -- å级说æï¼ç³»ç»æææ¥å£å äºæéæ³¨è§£ï¼æ¤é¨åæ¯è¡¥è¯·æ±æ³¨è§£é
ç½® |
| | | |
| | | -- author: wangshuai---date:20221118 -for: [VUEN-2735] jeecgbootæææ¥å£æéå æ³¨è§£ vue3 |
| | | -- ç¨æ·ç®¡ç |
| | | UPDATE sys_permission SET perms = 'system:user:changepwd' WHERE id = '1588513553652436993'; |
| | | |
| | | UPDATE sys_permission SET name = 'ç¨æ·å¯¼å
¥', perms = 'system:user:import' WHERE id = 'f15543b0263cf6c5fac85afdd3eba3f2'; |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593185714482880514', '3f915b2769fc80648e92d04e84ca059d', 'ç¨æ·å¯¼åº', NULL, NULL, 0, NULL, NULL, 2, 'system:user:export', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 18:14:09', NULL, NULL, 0, 0, '1', 0); |
| | | -- æ°æ®åå
¸å项 |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593160905216663554', '1438782641187074050', 'åå
¸å项æ°å¢', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:35:34', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593160959633563650', '1438782641187074050', 'åå
¸å项ç¼è¾', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:35:47', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161025790320641', '1438782641187074050', 'åå
¸å项å é¤', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:36:03', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161089787011074', '1438782641187074050', 'åå
¸å项æ¹éå é¤', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:36:18', NULL, NULL, 0, 0, '1', 0); |
| | | |
| | | -- 宿¶ä»»å¡ |
| | | UPDATE sys_permission SET is_leaf = 0 WHERE id = '1439488251473993730'; |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161421350936578', '1439488251473993730', 'æ·»å 宿¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:37:37', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161483627962370', '1439488251473993730', 'æ´æ°å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:37:52', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161551202394114', '1439488251473993730', 'å é¤å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:08', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161608362369026', '1439488251473993730', 'æ¹éå é¤å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:22', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161657385394177', '1439488251473993730', '忢宿¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:pause', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:33', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161697348722689', '1439488251473993730', 'å¯å¨å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:resume', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:43', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161743607701505', '1439488251473993730', 'ç«å³æ§è¡å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:execute', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:54', NULL, NULL, 0, 0, '1', 0); |
| | | |
| | | -- oosä¸ä¼ |
| | | UPDATE sys_permission SET is_leaf = 0 WHERE id = '1442055284830769154'; |
| | | |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593173018886709250', '1442055284830769154', 'æä»¶oosä¸ä¼ ', NULL, NULL, 0, NULL, NULL, 2, 'system:ossFile:upload', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 17:23:42', NULL, NULL, 0, 0, '1', 0); |
| | | -- author: wangshuai---date:20221118 -for: [VUEN-2735] jeecgbootæææ¥å£æéå æ³¨è§£ vue3 |
| | | |
| | | -- author: wangshuai---date:20221118 -for: [VUEN-2735] jeecgbootæææ¥å£æéå æ³¨è§£ vue2 |
| | | -- ç¨æ·ç®¡ç |
| | | UPDATE sys_permission_v2 SET perms = 'system:user:changepwd' WHERE id = '1588513553652436993'; |
| | | UPDATE sys_permission_v2 SET name = 'ç¨æ·å¯¼å
¥', perms = 'system:user:import' WHERE id = 'f15543b0263cf6c5fac85afdd3eba3f2'; |
| | | UPDATE sys_permission_v2 SET perms = 'system:user:export' WHERE id = '1305812030117220354'; |
| | | |
| | | -- æ°æ®åå
¸å项 |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593160905216663554', 'f1cb187abf927c88b89470d08615f5ac', 'åå
¸å项æ°å¢', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:35:34', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593160959633563650', 'f1cb187abf927c88b89470d08615f5ac', 'åå
¸å项ç¼è¾', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:35:47', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161025790320641', 'f1cb187abf927c88b89470d08615f5ac', 'åå
¸å项å é¤', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:36:03', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161089787011074', 'f1cb187abf927c88b89470d08615f5ac', 'åå
¸å项æ¹éå é¤', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:36:18', NULL, NULL, 0, 0, '1', 0); |
| | | |
| | | -- 宿¶ä»»å¡ |
| | | UPDATE sys_permission_v2 SET is_leaf = 0 WHERE id = 'b1cb0a3fedf7ed0e4653cb5a229837ee'; |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161421350936578', 'b1cb0a3fedf7ed0e4653cb5a229837ee', 'æ·»å 宿¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:37:37', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161483627962370', 'b1cb0a3fedf7ed0e4653cb5a229837ee', 'æ´æ°å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:37:52', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161551202394114', 'b1cb0a3fedf7ed0e4653cb5a229837ee', 'å é¤å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:08', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161608362369026', 'b1cb0a3fedf7ed0e4653cb5a229837ee', 'æ¹éå é¤å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:22', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161657385394177', 'b1cb0a3fedf7ed0e4653cb5a229837ee', '忢宿¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:pause', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:33', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161697348722689', 'b1cb0a3fedf7ed0e4653cb5a229837ee', 'å¯å¨å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:resume', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:43', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161743607701505', 'b1cb0a3fedf7ed0e4653cb5a229837ee', 'ç«å³æ§è¡å®æ¶ä»»å¡', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:execute', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:54', NULL, NULL, 0, 0, '1', 0); |
| | | |
| | | -- oosä¸ä¼ |
| | | UPDATE sys_permission_v2 SET is_leaf = 0 WHERE id = '1166535831146504193'; |
| | | |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593173018886709250', '1166535831146504193', 'æä»¶oosä¸ä¼ ', NULL, NULL, 0, NULL, NULL, 2, 'system:ossFile:upload', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 17:23:42', NULL, NULL, 0, 0, '1', 0); |
| | | |
| | | -- author: wangshuai---date:20221118 -for: [VUEN-2735] jeecgbootæææ¥å£æéå æ³¨è§£ vue2 |
| | | |
| | | -- author: wangshuai---date:20221126 -for:é¦é¡µç¨æ·è®¾ç½®ç¨æ·ç¼è¾æææé |
| | | UPDATE sys_permission SET parent_id = 'd7d6e2e4e2934f2c9385a623fd98c6f3', name = 'ç¨æ·è®¾ç½®', url = '/system/usersetting', component = 'system/usersetting/UserSetting', is_route = 1, component_name = '', redirect = NULL, menu_type = 1, perms = NULL, perms_type = '0', sort_no = 12.00, always_show = 0, icon = 'ant-design:setting-twotone', is_leaf = 0, keep_alive = 0, hidden = 0, hide_tab = 0, description = NULL, create_by = 'admin', create_time = '2022-11-25 22:01:08', update_by = 'admin', update_time = '2022-11-26 10:50:07', del_flag = 0, rule_flag = 0, status = NULL, internal_or_external = 0 WHERE id = '1596141938193747970'; |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1596335805278990338', '1596141938193747970', 'è´¦æ·è®¾ç½®ç¨æ·ç¼è¾æé', NULL, NULL, 0, NULL, NULL, 2, 'system:user:setting:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-26 10:51:29', NULL, NULL, 0, 0, '1', 0); |
| | | -- author: wangshuai---date:20221126 -for:é¦é¡µç¨æ·è®¾ç½®ç¨æ·ç¼è¾æææé |
| | | |
| | | |
| | | |
| | | -- ç§æ·éè¯·ç¨æ·æé®æéèå |
| | | UPDATE sys_permission SET is_leaf = 0 WHERE id = '1280350452934307841'; |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1600105607009165314', '1280350452934307841', 'éè¯·ç¨æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:invitation:user', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-06 20:31:20', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1600108123037917186', '1280350452934307841', 'éè¿ç§æ·idè·åç¨æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:user:list', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-06 20:41:20', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1600129606082650113', '1280350452934307841', 'ç§æ·è¯·ç¦»', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:leave', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-06 22:06:42', NULL, NULL, 0, 0, '1', 0); |
| | | -- author: wangshuai---date:20221209--for:ç§æ·æ¹é æ°å¢å段ãèåæéãåå
¸----- |
| | | |
| | | |
| | | |
| | | -- -author:scott---date:2022-12-30---for:å¢å æ¥è¯¢å
¨é¨ç¨æ·æ¥å£ãåç¨æ·æ¥å£æ¹æç§æ·ä¸çç¨æ·æ¥å£ï¼æ¯æç§æ·é离--- |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) |
| | | VALUES ('1592135223910765570', '3f915b2769fc80648e92d04e84ca059d', 'æ¥è¯¢å
¨é¨ç¨æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:user:listAll', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); |
| | | |
| | | INSERT INTO `sys_permission` (`id`, `parent_id`, `name`, `url`, `component`, `is_route`, `component_name`, `redirect`, `menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_leaf`, `keep_alive`, `hidden`, `hide_tab`, `description`, `create_by`, `create_time`, `update_by`, `update_time`, `del_flag`, `rule_flag`, `status`, `internal_or_external`) |
| | | VALUES ('119213522910765570', 'd7d6e2e4e2934f2c9385a623fd98c6f3', 'ç§æ·ç¨æ·', '/system/user/tenantUserList', 'system/user/TenantUserList', 1, NULL, NULL, 1, NULL, NULL, 3.2, 0, 'ant-design:user', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2022-12-30 10:11:27', 0, 0, NULL, 0); |
| | | -- -author:scott---date:2022-12-30---for:å¢å æ¥è¯¢å
¨é¨ç¨æ·æ¥å£ãåç¨æ·æ¥å£æ¹æç§æ·ä¸çç¨æ·æ¥å£ï¼æ¯æç§æ·é离--- |
| | | |
| | | |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1609123240547344385', '1280350452934307841', '产åå
å页å表æ¥è¯¢', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:packList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-31 17:44:11', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1609123437247619074', '1280350452934307841', 'åå»ºç§æ·äº§åå
', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:add:pack', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-31 17:44:58', 'admin', '2022-12-31 20:27:56', 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1609164542165012482', '1280350452934307841', 'ç¼è¾ç§æ·äº§åå
', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:edit:pack', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-31 20:28:18', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1609164635442139138', '1280350452934307841', 'æ¹éå é¤ç§æ·äº§åå
', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:delete:pack', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-31 20:28:41', NULL, NULL, 0, 0, '1', 0); |
| | | -- -author:wangshuai---date:2023-01-04---for: 产åå
å级sql |
| | | |
| | | |
| | | -- æ°å¢æ¥å£æéèå:å页è·åç§æ·ç¨æ·æ°æ®/éè¿ç¨æ·idè·åç§æ·å表/æ´æ°ç¨æ·ç§æ·å
³ç³»ç¶æ/注éç§æ· |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620416187969538', '1280350452934307841', 'å页è·åç§æ·ç¨æ·æ°æ®', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:tenantPageList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:07:04', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620600003342337', '1280350452934307841', 'éè¿ç¨æ·idè·åç§æ·å表', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:getTenantListByUserId', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:07:48', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620654621569026', '1280350452934307841', 'æ´æ°ç¨æ·ç§æ·å
³ç³»ç¶æ', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:updateUserTenantStatus', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:08:01', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620772498288641', '1280350452934307841', '注éç§æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:cancelTenant', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:08:29', NULL, NULL, 0, 0, '1', 0); |
| | | -- author:wangshuai---date:2023-01-09---for: å
³ç³»è¡¨ç¶æä¿®æ¹/ç§æ·è¡¨å¢å é»è¾å é¤/æ°å¢æ¥å£æéèå |
| | | |
| | | -- author:scott---date:2023-01-09---for: ç§æ·ä¿®æ¹æ³¨è§£æé |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) |
| | | VALUES ('1612438989792034818', '1280350452934307841', 'ç¼è¾ç§æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:08:29', NULL, NULL, 0, 0, '1', 0); |
| | | -- author:scott---date:2023-01-09---for: ç§æ·ä¿®æ¹æ³¨è§£æé |
| | | |
| | | -- -author:scott---date:2023-01-11--forï¼ç§æ·å®å
¨å 强ï¼å 为idè§åæ´é²äºï¼å¾ä¸å®å
¨ |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620772498218641', '1280350452934307841', 'æ¥è¯¢ç§æ·å表', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:list', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1621620772498288641', '1280350452934307841', 'æ·»å ç§æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611650772498288641', '1280350452934307841', 'å é¤ç§æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1613620712498288641', '1280350452934307841', 'æ¹éå é¤ç§æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES |
| | | ('1697220712498288641', '1280350452934307841', 'æ ¹æ®idsæ¥è¯¢ç§æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:queryList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); |
| | | -- -author:scott---date:2023-01-11--forï¼ç§æ·å®å
¨å 强ï¼å 为idè§åæ´é²äºï¼å¾ä¸å®å
¨ |
| | | |
| | | |
| | | -- -author:scott---date:2023-01-11--forï¼å¢å ä¸ä¸ªæ¥è¯¢å
¨é¨è§è²ï¼ä¸åç§æ·éç¦»çæ¥å£ |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1592120224120850434', '190c2b43bec6a5f7a4194a85db67d96a', 'æ¥è¯¢å
¨é¨è§è²ä¸ç§æ·é离', NULL, NULL, 0, NULL, NULL, 2, 'system:role:queryallNoByTenant', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 19:41:18', NULL, NULL, 0, 0, '1', 0); |
| | | -- -author:scott---date:2023-01-11--forï¼å¢å ä¸ä¸ªæ¥è¯¢å
¨é¨è§è²ï¼ä¸åç§æ·éç¦»çæ¥å£ |
| | | |
| | | |
| | | |
| | | -- -author:scott---date:2023-01-31--forï¼ç¨æ·æææ¥å£ãéè¿idè·åç¨æ·ä¿¡æ¯ãéè¿idæ¥è¯¢ç¨æ·è§è²ãï¼å æé |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1d592115213910765570', '3f915b2769fc80648e92d04e84ca059d', 'éè¿IDæ¥è¯¢ç¨æ·æ¥æçè§è²', NULL, NULL, 0, NULL, NULL, 2, 'system:user:queryUserRole', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('15c92115213910765570', '3f915b2769fc80648e92d04e84ca059d', 'éè¿IDæ¥è¯¢ç¨æ·ä¿¡æ¯æ¥å£', NULL, NULL, 0, NULL, NULL, 2, 'system:user:queryById', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); |
| | | |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('159d2115213910765570', '3f915b2769fc80648e92d04e84ca059d', 'éè¿IDæ¥è¯¢ç¨æ·æ¥æçè§è²', NULL, NULL, 0, NULL, NULL, 2, 'system:user:queryUserRole', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('15s92115213910765570', '3f915b2769fc80648e92d04e84ca059d', 'éè¿IDæ¥è¯¢ç¨æ·ä¿¡æ¯æ¥å£', NULL, NULL, 0, NULL, NULL, 2, 'system:user:queryById', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); |
| | | -- -author:scott---date:2023-01-31--forï¼ç¨æ·æææ¥å£ãéè¿idè·åç¨æ·ä¿¡æ¯ãéè¿idæ¥è¯¢ç¨æ·è§è²ãï¼å æé |
| | | |
| | | |
| | | |
| | | -- -author:wangshuai---date:2023-02-02--forï¼[QQYUN-3959]æ°å¢åæ¶ç«æ¥å£æé |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620261087828418562', '1280350452934307841', 'è·åç§æ·å é¤çå表', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:recycleBinPageList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 11:22:01', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620305415648989186', '1280350452934307841', 'å½»åºå é¤ç§æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:deleteTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 14:18:10', 'admin', '2023-01-31 14:19:51', 0, 0, '1', 0); |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620327825894981634', '1280350452934307841', 'ç§æ·è¿å', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:revertTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 15:47:13', NULL, NULL, 0, 0, '1', 0); |
| | | -- -author:wangshuai---date:2023-02-02--forï¼[QQYUN-3959]æ°å¢åæ¶ç«æ¥å£æé |
| | | |
| | | |
| | | -- -author:wangshuai---date:2023-02-02--forï¼[QQYUN-3959]vue2èåæ°å¢ç§æ·åæ¶ç«æ¥å£æé |
| | | UPDATE sys_permission_v2 SET is_leaf = 0 WHERE id = '1280350452934307841'; |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620261087828418562', '1280350452934307841', 'è·åç§æ·å é¤çå表', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:recycleBinPageList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 11:22:01', NULL, NULL, 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620305415648989186', '1280350452934307841', 'å½»åºå é¤ç§æ·', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:deleteTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 14:18:10', 'admin', '2023-01-31 14:19:51', 0, 0, '1', 0); |
| | | INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620327825894981634', '1280350452934307841', 'ç§æ·è¿å', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:revertTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 15:47:13', NULL, NULL, 0, 0, '1', 0); |
| | | -- -author:wangshuai---date:2023-02-02--forï¼[QQYUN-3959]vue2èåæ°å¢ç§æ·åæ¶ç«æ¥å£æé |
| | | |
| | | |
| | | |
| | | |
| | | -- author:wangshuai ---date:2022-11-23 forï¼æ°å¢å¨çº¿ç¨æ·èå---- |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1594930803956920321', '1439398677984878593', 'å¨çº¿ç¨æ·', '/system/onlineuser', 'system/onlineuser/OnlineUserList', 1, '', NULL, 1, NULL, '0', 12.00, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-22 13:48:31', 'admin', '2022-11-23 19:35:10', 0, 0, NULL, 0); |
| | | -- author:wangshuai ---date:2022-11-23 forï¼æ°å¢å¨çº¿ç¨æ·èå---- |
| | | |
| | | -- author:wangshuai ---date:2022-11-25 forï¼æ°å¢ç¨æ·è®¾ç½®èå---- |
| | | INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1596141938193747970', 'd7d6e2e4e2934f2c9385a623fd98c6f3', 'ç¨æ·è®¾ç½®', '/system/usersetting', 'system/usersetting/UserSetting', 1, '', NULL, 1, NULL, '0', 12.00, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-25 22:01:08', 'admin', '2022-11-25 22:01:21', 0, 0, NULL, 0); |
| | | -- author:wangshuai ---date:2022-11-25 forï¼æ°å¢ç¨æ·è®¾ç½®èå---- |
| | | |
| | | -- author:scott ---date:2022-11-29 forï¼æ°å¢ç§æ·è§è²åè½---- |
| | | INSERT INTO `sys_permission` (`id`, `parent_id`, `name`, `url`, `component`, `is_route`, `component_name`, `redirect`, `menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_leaf`, `keep_alive`, `hidden`, `hide_tab`, `description`, `create_by`, `create_time`, `update_by`, `update_time`, `del_flag`, `rule_flag`, `status`, `internal_or_external`) VALUES ('1597419994965786625', 'd7d6e2e4e2934f2c9385a623fd98c6f3', 'ç§æ·è§è²', '/system/role/TenantRoleList', 'system/role/TenantRoleList', 1, '', NULL, 1, NULL, '0', 3.10, 0, 'ant-design:line-height-outlined', 1, 0, 0, 0, NULL, 'admin', '2022-11-29 10:39:40', 'admin', '2022-11-29 11:08:05', 0, 0, NULL, 0); |
| | | -- author:scott ---date:2022-11-29 forï¼æ°å¢ç§æ·è§è²åè½---- |
| | | |
| | | -- author:wangshuai ---date:2022-11-30 forï¼ç¨æ·è®¾ç½®èåè·¯ç±éè---- |
| | | UPDATE sys_permission SET hidden = 1 WHERE id = '1596141938193747970'; |
| | | -- author:wangshuai ---date:2022-11-30 forï¼ç¨æ·è®¾ç½®èåè·¯ç±éè---- |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -- author: scott---date:20221009 -for: ä¹è§éæµè¯ |
| | | ALTER TABLE `demo` |
| | | ADD COLUMN `update_count` int NULL COMMENT 'ä¹è§éæµè¯' AFTER `tenant_id`; |
| | | -- author: scott---date:20221009 -for: ä¹è§éæµè¯ |
| | | |
| | | -- author: scott---date:20221108 -for:VUEN-2064 æ¹é ç»å½éæ©é¨é¨åç§æ·é»è¾ |
| | | ALTER TABLE `sys_user` |
| | | ADD COLUMN `login_tenant_id` int NULL COMMENT '䏿¬¡ç»å½éæ©ç§æ·ID' AFTER `client_id`; |
| | | -- author: scott---date:20221108 -for:VUEN-2064 æ¹é ç»å½éæ©é¨é¨åç§æ·é»è¾ |
| | | |
| | | -- author: scott---date:20221129-for: ç³»ç»ç®¡çæ¨¡åæ¯æå¤ç§æ·æºå¶ï¼é»è®¤å åæ®µ[tenant_id]----- |
| | | ALTER TABLE `sys_depart` |
| | | ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT 'ç§æ·ID'; |
| | | |
| | | ALTER TABLE `sys_role` |
| | | ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT 'ç§æ·ID'; |
| | | |
| | | ALTER TABLE `sys_dict` |
| | | ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT 'ç§æ·ID'; |
| | | |
| | | ALTER TABLE `sys_position` |
| | | ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT 'ç§æ·ID'; |
| | | |
| | | ALTER TABLE `sys_category` |
| | | ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT 'ç§æ·ID'; |
| | | |
| | | ALTER TABLE `sys_data_source` |
| | | ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT 'ç§æ·ID'; |
| | | |
| | | ALTER TABLE `sys_announcement` |
| | | ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT 'ç§æ·ID'; |
| | | |
| | | ALTER TABLE `sys_user_role` |
| | | ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT 'ç§æ·ID'; |
| | | -- author: scott---date:20221129--for:ç³»ç»ç®¡çæ¨¡åæ¯æå¤ç§æ·æºå¶ï¼é»è®¤å åæ®µ[tenant_id]----- |
| | | |
| | | -- author: wangshuai---date:20221209--for:ç§æ·æ¹é æ°å¢å段ãèåæéãåå
¸----- |
| | | ALTER TABLE sys_tenant |
| | | ADD COLUMN trade varchar(10) NULL COMMENT 'æå±è¡ä¸' AFTER status, |
| | | ADD COLUMN company_size varchar(10) NULL COMMENT 'å
¬å¸è§æ¨¡' AFTER trade, |
| | | ADD COLUMN company_address varchar(100) NULL COMMENT 'å
¬å¸å°å' AFTER company_size, |
| | | ADD COLUMN company_logo varchar(200) NULL COMMENT 'å
¬å¸logo' AFTER company_address; |
| | | |
| | | -- æå±è¡ä¸åå
¸ |
| | | INSERT INTO sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type, tenant_id) VALUES ('1600042215909134338', 'æå±è¡ä¸', 'trade', 'è¡ä¸', 0, 'admin', '2022-12-06 16:19:26', 'admin', '2022-12-06 16:20:50', 0, 0); |
| | | 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 ('1600042651777011713', '1600042215909134338', 'ä¿¡æ¯ä¼ è¾ã软件åä¿¡æ¯ææ¯æå¡ä¸', '1', NULL, 1, 1, 'admin', '2022-12-06 16:21:10', 'admin', '2022-12-06 16:21: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 ('1600042736254488578', '1600042215909134338', 'å¶é ä¸', '2', NULL, 1, 1, 'admin', '2022-12-06 16:21:30', 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 ('1600042785646612481', '1600042215909134338', 'ç§èµåå塿å¡ä¸', '3', NULL, 1, 1, 'admin', '2022-12-06 16:21:42', 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 ('1600042835433000961', '1600042215909134338', 'æè²', '4', NULL, 1, 1, 'admin', '2022-12-06 16:21:54', 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 ('1600042892072882177', '1600042215909134338', 'éèä¸', '5', NULL, 1, 1, 'admin', '2022-12-06 16:22:07', 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 ('1600042975539531778', '1600042215909134338', '建çä¸', '6', NULL, 1, 1, 'admin', '2022-12-06 16:22:27', 'admin', '2022-12-06 16:22:32'); |
| | | 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 ('1600043052177854466', '1600042215909134338', 'ç§å¦ç ç©¶åææ¯æå¡ä¸', '7', NULL, 1, 1, 'admin', '2022-12-06 16:22:46', 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 ('1600043101976825857', '1600042215909134338', 'æ¹ååé¶å®ä¸', '8', NULL, 1, 1, 'admin', '2022-12-06 16:22:58', 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 ('1600043157069008898', '1600042215909134338', 'ä½å®¿åé¤é¥®ä¸', '9', NULL, 1, 1, 'admin', '2022-12-06 16:23:11', 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 ('1600043203105689601', '1600042215909134338', 'çµååå¡', '10', NULL, 1, 1, 'admin', '2022-12-06 16:23:22', 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 ('1600043277504253953', '1600042215909134338', '线ä¸é¶å®ä¸æå¡ä¸', '11', NULL, 1, 1, 'admin', '2022-12-06 16:23: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 ('1600043334618091521', '1600042215909134338', 'æåãä½è²å娱ä¹ä¸', '12', NULL, 1, 1, 'admin', '2022-12-06 16:23:53', 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 ('1600043401030701058', '1600042215909134338', 'æ¿å°äº§ä¸', '13', NULL, 1, 1, 'admin', '2022-12-06 16:24:09', 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 ('1600043476440092673', '1600042215909134338', '交éè¿è¾ãä»å¨å鮿¿ä¸', '14', NULL, 1, 1, 'admin', '2022-12-06 16:24:27', 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 ('1600043553837584386', '1600042215909134338', 'å«çå社ä¼å·¥ä½', '15', NULL, 1, 1, 'admin', '2022-12-06 16:24:45', 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 ('1600043628793991170', '1600042215909134338', 'å
Œ
±ç®¡çã社ä¼ä¿éå社ä¼ç»ç»', '16', NULL, 1, 1, 'admin', '2022-12-06 16:25:03', 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 ('1600043675329794050', '1600042215909134338', 'çµåãçåãçæ°åæ°´ç产åä¾åºä¸', '18', NULL, 1, 1, 'admin', '2022-12-06 16:25:14', 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 ('1600043734607892482', '1600042215909134338', 'æ°´å©ãç¯å¢åå
Œ
±è®¾æ½ç®¡çä¸', '19', NULL, 1, 1, 'admin', '2022-12-06 16:25:28', 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 ('1600043783068880897', '1600042215909134338', 'å±
æ°æå¡ãä¿®çåå
¶ä»æå¡ä¸', '20', NULL, 1, 1, 'admin', '2022-12-06 16:25:40', 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 ('1600043822679887874', '1600042215909134338', 'æ¿åºæºæ', '21', NULL, 1, 1, 'admin', '2022-12-06 16:25:49', 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 ('1600043859539431426', '1600042215909134338', 'åãæãç§ãæ¸ä¸', '22', NULL, 1, 1, 'admin', '2022-12-06 16:25:58', 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 ('1600043907551629313', '1600042215909134338', 'éç¿ä¸', '23', NULL, 1, 1, 'admin', '2022-12-06 16:26:10', 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 ('1600043955731599362', '1600042215909134338', 'å½é
ç»ç»', '24', NULL, 1, 1, 'admin', '2022-12-06 16:26:21', 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 ('1600043991685173249', '1600042215909134338', 'å
¶ä»', '25', NULL, 1, 1, 'admin', '2022-12-06 16:26:30', NULL, NULL); |
| | | |
| | | -- å
¬å¸è§æ¨¡åå
¸ |
| | | INSERT INTO sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type, tenant_id) VALUES ('1600044537800331266', 'å
¬å¸è§æ¨¡', 'company_size', 'å
¬å¸è§æ¨¡', 0, 'admin', '2022-12-06 16:28:40', 'admin', '2022-12-06 16:30:23', 0, 0); |
| | | |
| | | 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 ('1600044644096577538', '1600044537800331266', '20人以ä¸', '1', NULL, 1, 1, 'admin', '2022-12-06 16:29:05', 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 ('1600044698618335233', '1600044537800331266', '21-99人', '2', NULL, 1, 1, 'admin', '2022-12-06 16:29:18', 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 ('1600044744172670978', '1600044537800331266', '100-499人', '3', NULL, 1, 1, 'admin', '2022-12-06 16:29:29', 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 ('1600044792306503681', '1600044537800331266', '500-999人', '4', NULL, 1, 1, 'admin', '2022-12-06 16:29:41', 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 ('1600044861302804481', '1600044537800331266', '1000-9999人', '5', NULL, 1, 1, 'admin', '2022-12-06 16:29:57', 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 ('1600044924313833473', '1600044537800331266', '10000人以ä¸', '6', NULL, 1, 1, 'admin', '2022-12-06 16:30:12', NULL, NULL); |
| | | |
| | | |
| | | |
| | | -- author: scott---date:20221227--for:åå
¸å¢å åºç¨ID----- |
| | | ALTER TABLE `sys_dict` |
| | | ADD COLUMN `low_app_id` varchar(32) NULL COMMENT 'ä½ä»£ç åºç¨ID' AFTER `tenant_id`; |
| | | -- author: scott---date:20221227--for:åå
¸å¢å åºç¨ID----- |
| | | |
| | | -- author: scott---date:20221227--for:ç§æ·IDæ¹æ10使´æ°----- |
| | | ALTER TABLE `sys_tenant` |
| | | MODIFY COLUMN `id` int(10) NOT NULL COMMENT 'ç§æ·ç¼ç ' FIRST; |
| | | -- author: scott---date:20221227--for:ç§æ·IDæ¹æ10使´æ°----- |
| | | |
| | | -- author: wangshuai---date:20221229--for:[QQYUN-3608]ç§æ·é»è¾æ¹é ----- |
| | | -- æ°å¢ç§æ·ä¸é´è¡¨ |
| | | CREATE TABLE sys_user_tenant( |
| | | id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主é®id', |
| | | user_id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ç¨æ·id', |
| | | tenant_id int(10) NULL DEFAULT NULL COMMENT 'ç§æ·id', |
| | | status varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ç¶æ(0 å»ç» 1 æ£å¸¸)', |
| | | create_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'å建人ç»å½åç§°', |
| | | create_time datetime(0) NULL DEFAULT NULL COMMENT 'åå»ºæ¥æ', |
| | | update_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'æ´æ°äººç»å½åç§°', |
| | | update_time datetime(0) NULL DEFAULT NULL COMMENT 'æ´æ°æ¥æ', |
| | | PRIMARY KEY (id) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ç¨æ·ç§æ·å
³ç³»è¡¨' ROW_FORMAT = Dynamic; |
| | | |
| | | -- è级åå
¸ |
| | | INSERT INTO sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type, tenant_id) VALUES ('1606645341269299201', 'è级', 'company_rank', 'å
¬å¸è级', 0, 'admin', '2022-12-24 21:37:54', 'admin', '2022-12-24 21:38:25', 0, 0); |
| | | 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 ('1606645562573361153', '1606645341269299201', 'æ»è£/æ»ç»ç/CEO', '1', NULL, 1, 1, 'admin', '2022-12-24 21:38: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 ('1606645619930468354', '1606645341269299201', '坿»è£/坿»ç»ç/VP', '2', NULL, 2, 1, 'admin', '2022-12-24 21:39:00', 'admin', '2022-12-24 21:40:00'); |
| | | 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 ('1606645660241924097', '1606645341269299201', 'æ»ç/主管/ç»ç', '3', NULL, 3, 1, 'admin', '2022-12-24 21:39:10', 'admin', '2022-12-24 21:39:41'); |
| | | 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 ('1606645696715591682', '1606645341269299201', 'åå·¥/ä¸å/æ§è¡', '4', NULL, 4, 1, 'admin', '2022-12-24 21:39:19', 'admin', '2022-12-24 21:39:37'); |
| | | 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 ('1606645744023146497', '1606645341269299201', 'å
¶ä»', '5', NULL, 5, 1, 'admin', '2022-12-24 21:39:30', NULL, NULL); |
| | | -- é¨é¨åå
¸ |
| | | INSERT INTO sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type, tenant_id) VALUES ('1606646440684457986', 'å
¬å¸é¨é¨', 'company_department', 'å
¬å¸é¨é¨', 0, 'admin', '2022-12-24 21:42:16', NULL, NULL, 0, 0); |
| | | 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 ('1606647668965412866', '1606646440684457986', 'æ»ç»å', '1', NULL, 1, 1, 'admin', '2022-12-24 21:47:09', 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 ('1606647703098658817', '1606646440684457986', 'ææ¯/IT/ç å', '2', NULL, 2, 1, 'admin', '2022-12-24 21:47:17', 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 ('1606647737919770625', '1606646440684457986', '产å/设计', '3', NULL, 3, 1, 'admin', '2022-12-24 21:47: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 ('1606647789614567425', '1606646440684457986', 'éå®/å¸åº/è¿è¥', '4', '', 4, 1, 'admin', '2022-12-24 21:47: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 ('1606647827921145857', '1606646440684457986', '人äº/è´¢å¡/è¡æ¿', '5', NULL, 5, 1, 'admin', '2022-12-24 21:47: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 ('1606647860955484162', '1606646440684457986', 'èµæº/ä»å¨/éè´', '6', NULL, 6, 1, 'admin', '2022-12-24 21:47:55', 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 ('1606647915473047553', '1606646440684457986', 'å
¶ä»', '7', NULL, 7, 1, 'admin', '2022-12-24 21:48:08', NULL, NULL); |
| | | |
| | | -- ç§æ·æ°å¢å段 |
| | | ALTER TABLE sys_tenant |
| | | ADD COLUMN house_number varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'é¨çå·' AFTER company_logo, |
| | | ADD COLUMN work_place varchar(100) CHARACTER SET utf32 COLLATE utf32_general_ci NULL DEFAULT NULL COMMENT 'å·¥ä½å°ç¹' AFTER house_number, |
| | | ADD COLUMN secondary_domain varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'äºçº§åå' AFTER work_place, |
| | | ADD COLUMN login_bkgd_img varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ç»å½èæ¯å¾ç' AFTER secondary_domain, |
| | | ADD COLUMN position varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'è级' AFTER login_bkgd_img, |
| | | ADD COLUMN department varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'é¨é¨' AFTER position; |
| | | |
| | | -- ç§»é¤ç¨æ·å¤ç§æ·id |
| | | ALTER TABLE sys_user |
| | | DROP COLUMN rel_tenant_ids; |
| | | -- author: wangshuai---date:20221229--for:[QQYUN-3608]ç§æ·é»è¾æ¹é ----- |
| | | |
| | | -- author: wangshuai---date:20221229--for:ç§æ·è¡¨å建æ¥è¯¢ç´¢å¼,é¿å
æ°æ®é大æ¥è¯¢æ
¢----- |
| | | ALTER TABLE sys_user_tenant |
| | | ADD INDEX idx_sut_user_id(user_id) USING BTREE, |
| | | ADD INDEX idx_sut_tenant_id(tenant_id) USING BTREE; |
| | | -- author: wangshuai---date:20221229--for:ç§æ·è¡¨å建æ¥è¯¢ç´¢å¼,é¿å
æ°æ®é大æ¥è¯¢æ
¢----- |
| | | |
| | | |
| | | -- -author:wangshuai---date:2023-01-04---for: 产åå
å级sql |
| | | CREATE TABLE sys_pack_permission ( |
| | | id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主é®ç¼å·', |
| | | pack_id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ç§æ·äº§åå
åç§°', |
| | | permission_id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'èåid', |
| | | create_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'å建人', |
| | | create_time date NULL DEFAULT NULL COMMENT 'å建æ¶é´', |
| | | update_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'æ´æ°äºº', |
| | | update_time date NULL DEFAULT NULL COMMENT 'æ´æ°æ¶é´', |
| | | PRIMARY KEY (id) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ç§æ·äº§åå
åèåå
³ç³»è¡¨' ROW_FORMAT = Dynamic; |
| | | |
| | | CREATE TABLE sys_tenant_pack ( |
| | | id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主é®id', |
| | | tenant_id int(10) NULL DEFAULT NULL COMMENT 'ç§æ·id', |
| | | pack_name varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '产åå
å', |
| | | status varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'å¼å¯ç¶æ(0 æªå¼å¯ 1å¼å¯)', |
| | | remarks varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '夿³¨', |
| | | create_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'å建人', |
| | | create_time date NULL DEFAULT NULL COMMENT 'å建æ¶é´', |
| | | update_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'æ´æ°äºº', |
| | | update_time date NULL DEFAULT NULL COMMENT 'æ´æ°æ¶é´', |
| | | PRIMARY KEY (id) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ç§æ·äº§åå
' ROW_FORMAT = Dynamic; |
| | | |
| | | |
| | | |
| | | -- author:wangshuai---date:2023-01-09---for: å
³ç³»è¡¨ç¶æä¿®æ¹/ç§æ·è¡¨å¢å é»è¾å é¤/æ°å¢æ¥å£æéèå |
| | | -- å
³ç³»è¡¨ç¶æä¿®æ¹ |
| | | ALTER TABLE sys_user_tenant |
| | | MODIFY COLUMN status varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ç¶æ(1 æ£å¸¸ 2 å»ç» 3 å¾
å®¡æ ¸ 4 æç»)' AFTER tenant_id; |
| | | |
| | | -- ç§æ·è¡¨å¢å é»è¾å é¤ |
| | | ALTER TABLE sys_tenant |
| | | ADD COLUMN del_flag tinyint(1) NULL DEFAULT NULL COMMENT 'å é¤ç¶æ(0-æ£å¸¸,1-å·²å é¤)' AFTER department; |
| | | |
| | | ALTER TABLE `sys_tenant` |
| | | MODIFY COLUMN `del_flag` tinyint(1) NULL DEFAULT 0 COMMENT 'å é¤ç¶æ(0-æ£å¸¸,1-å·²å é¤)' AFTER `department`; |
| | | |
| | | -- éè¦å°ç§æ·å é¤ç¶ææ¹æ0æ£å¸¸,å¦åå¯è½å¯¼è´æ°æ®åºä¸æ¥ |
| | | update sys_tenant set del_flag = 0; |
| | | |
| | | |
| | | -- -author:wangshuai---date:2023-01-11--forï¼ãQQYUN-3938ãç§æ·è¡¨å ä¿®æ¹äººãä¿®æ¹æ¶é´ |
| | | ALTER TABLE sys_tenant |
| | | ADD COLUMN update_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'æ´æ°äºº' AFTER del_flag, |
| | | ADD COLUMN update_time datetime(0) NULL DEFAULT NULL COMMENT 'æ´æ°æ¶é´' AFTER update_by; |
| | | -- -author:wangshuai---date:2023-01-11--forï¼ãQQYUN-3938ãç§æ·è¡¨å ä¿®æ¹äººãä¿®æ¹æ¶é´ |
| | | |
| | | -- -author:wangshuai---date:2023-01-11--forï¼ç¨æ·ç§æ·ä¿®æ¹ç¦»èç¶æ |
| | | ALTER TABLE sys_user_tenant |
| | | MODIFY COLUMN status varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ç¶æ(1 æ£å¸¸ 2 离è 3 å¾
å®¡æ ¸ 4 å®¡æ ¸æªéè¿)' AFTER tenant_id; |
| | | -- -author:wangshuai---date:2023-01-11--forï¼ç¨æ·ç§æ·ä¿®æ¹ç¦»èç¶æ |
| | | |
| | | |
| | | |
| | | -- -author:wangshuai---date:2023-02-02--forï¼[QQYUN-3988]ç§æ·äº§åå
表æ¹å |
| | | ALTER TABLE sys_pack_permission RENAME sys_tenant_pack_perms; |
| | | -- -author:wangshuai---date:2023-02-02--forï¼[QQYUN-3988]ç§æ·äº§åå
表æ¹å |
| | | |
| | | -- -author:zyf---date:2023-02-02--forï¼æ·»å æµç¨ç¦»èå
¥èç¶æ |
| | | ALTER TABLE sys_user |
| | | ADD COLUMN bpm_status varchar(2) NULL DEFAULT NULL COMMENT 'æµç¨å
¥è离èç¶æ'; |
| | | -- -author:zyf---date:2023-02-02--forï¼æ·»å æµç¨ç¦»èå
¥èç¶æ |
| | | |
| | | -- -author:scott---date:2023-02-08--forï¼å°½éä¸è¦ç¨å¤§å段ï¼ä¼åºé®é¢ |
| | | ALTER TABLE `sys_user` |
| | | MODIFY COLUMN `depart_ids` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'è´è´£é¨é¨' AFTER `user_identity`; |
| | | -- -author:scott---date:2023-02-08--forï¼å°½éä¸è¦ç¨å¤§å段ï¼ä¼åºé®é¢ |
| | | |
| | | -- -author:wangshuai---date:2023-02-16--forï¼[QQYUN-4163]é¨é¨æ°å¢æ¯å¦å¶åç»ç¹ |
| | | ALTER TABLE sys_depart |
| | | ADD COLUMN iz_leaf tinyint(1) NULL DEFAULT 0 COMMENT 'æ¯å¦æå¶åèç¹: 1æ¯0å¦' AFTER tenant_id; |
| | | -- æ´æ°ç¶çº§é¨é¨ä¸ä¸ºå¶åç»ç¹ |
| | | update sys_depart set iz_leaf = 0 where id in ( select a.parent_id from (select parent_id from sys_depart where parent_id!='' and parent_id is not null) as a); |
| | | -- -author:wangshuai---date:2023-02-16--forï¼[QQYUN-4163]é¨é¨æ°å¢æ¯å¦å¶åç»ç¹ |
| | | |
| | | |
| | | -- -author: taoyan---date:2023-02-17--forï¼QQYUN-3851ãç§æ·ãç§æ·ç®¡çååè½ |
| | | ALTER TABLE `sys_tenant_pack` |
| | | ADD COLUMN `pack_code` varchar(50) NULL COMMENT 'ç¼ç ,é»è®¤æ·»å çä¸ä¸ªç®¡çåéè¦è®¾ç½®ç¼ç ' AFTER `update_time`; |
| | | |
| | | ALTER TABLE `sys_log` |
| | | ADD COLUMN `tenant_id` int(10) NULL COMMENT 'ç§æ·ID' AFTER `update_time`; |
| | | |
| | | |
| | | CREATE TABLE `sys_tenant_pack_user` ( |
| | | `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, |
| | | `pack_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ç§æ·äº§åå
ID', |
| | | `user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ç¨æ·ID', |
| | | `tenant_id` int(10) NULL DEFAULT NULL COMMENT 'ç§æ·ID', |
| | | `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'å建人', |
| | | `create_time` datetime(0) NULL DEFAULT NULL COMMENT 'å建æ¶é´', |
| | | `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'æ´æ°äºº', |
| | | `update_time` datetime(0) NULL DEFAULT NULL COMMENT 'æ´æ°æ¶é´', |
| | | PRIMARY KEY (`id`) USING BTREE |
| | | ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'ç§æ·å¥é¤äººå表' ROW_FORMAT = Dynamic; |
| | | |
| | | ALTER TABLE `sys_tenant_pack_user` |
| | | ADD COLUMN `status` int(3) NULL COMMENT 'ç¶æ æ£å¸¸ç¶æ1 ç³è¯·ç¶æ0' AFTER `update_time`; |
| | | |
| | | ALTER TABLE `sys_tenant` |
| | | ADD COLUMN `apply_status` int(3) NULL COMMENT 'å
许ç³è¯·ç®¡çå 1å
许 0ä¸å
许' AFTER `update_time`; |
| | | update sys_tenant set apply_status = 1; |
| | | |
| | | ALTER TABLE `sys_log` |
| | | MODIFY COLUMN `log_type` int(3) NULL DEFAULT NULL COMMENT 'æ¥å¿ç±»åï¼1ç»å½æ¥å¿ï¼2æä½æ¥å¿, 3.ç§æ·æä½æ¥å¿ï¼' AFTER `id`; |
| | | -- -author: taoyan---date:2023-02-17--forï¼QQYUN-3851ãç§æ·ãç§æ·ç®¡çååè½ |
| | | |
| | | |
| | | |
| | | |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | çæ¬åçº§æ¹æ³ï¼ |
| | | |
| | | JeecgBootå±äºå¹³å°çº§äº§åï¼æ¯æ¬¡å级æ¹å¨å
容è¾å¤ï¼ç®ååä¸å°å¹³æ»å级ã |
| | | |
| | | è¿éç»ç¨æ·çå级建议æ¯è¿æ ·çï¼ |
| | | 1.代ç å级 => æ¬å°çæ¬éè¿svnæè
gitå好主干ï¼å¨åæ¯ä¸åä¸å¡å¼åï¼jeecgæ¯æ¬¡çæ¬åå¸ï¼å¯ä»¥æå·¥è¦ç主干ç代ç ï¼å¯¹æ¯ä»£ç è¿è¡æäº¤ï¼ |
| | | 2.æ°æ®åºå级 => éå¯¹æ°æ®åºæä»¬æ¯æ¬¡åå¸ä¼æä¾å¢éå级SQLï¼å¯ä»¥éè¿å¢éSQLå®ç°æ°æ®åºçå级ã |
| | | 3.å
¼å®¹é®é¢ => æ¯æ¬¡çæ¬åå¸ä¼é对ä¸å
¼å®¹å°æ¹æ 注说æï¼éè¦æå·¥ä¿®æ¹ä¸å
¼å®¹ç代ç ã |
| | | |
| | | 注æï¼ å级sqlç®ååªæä¾mysqlçæ¬ï¼æ§è¡å®èæ¥åï¼æ°èåéè¦æå·¥è¿è¡è§è²ææï¼å·æ°é¦é¡µæä¼åºç°ã |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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-module-system/jeecg-system-start |
| | | 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 |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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>jeecg-boot-parent</artifactId> |
| | | <version>3.5.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> |
| | | <repository> |
| | | <id>jeecg-snapshots</id> |
| | | <name>jeecg-snapshots Repository</name> |
| | | <url>https://oss.sonatype.org/content/repositories/snapshots</url> |
| | | <releases> |
| | | <enabled>false</enabled> |
| | | </releases> |
| | | <snapshots> |
| | | <enabled>true</enabled> |
| | | </snapshots> |
| | | </repository> |
| | | </repositories> |
| | | |
| | | <dependencies> |
| | | <!--jeecg-tools--> |
| | | <dependency> |
| | | <groupId>org.jeecgframework.boot</groupId> |
| | | <artifactId>jeecg-boot-common</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> |
| | | <!--springboot2.6+è§£å³metrics端ç¹ä¸æ¾ç¤ºjvmä¿¡æ¯çé®é¢--> |
| | | <dependency> |
| | | <groupId>io.micrometer</groupId> |
| | | <artifactId>micrometer-registry-prometheus</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> |
| | | |
| | | <!-- æ°æ®åºé©±å¨ --> |
| | | <!--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> |
| | | <exclusion> |
| | | <artifactId>xercesImpl</artifactId> |
| | | <groupId>xerces</groupId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>xerces</groupId> |
| | | <artifactId>xercesImpl</artifactId> |
| | | <version>2.12.2</version> |
| | | <optional>true</optional> |
| | | </dependency> |
| | | |
| | | <!-- miniæä»¶åå¨æå¡ --> |
| | | <dependency> |
| | | <groupId>io.minio</groupId> |
| | | <artifactId>minio</artifactId> |
| | | </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> |
| | | <!-- è§£å³okhttpå¼ç¨äºkotlin,åºç¨å¯å¨æè¦åæ¥å¿é®é¢ --> |
| | | <dependency> |
| | | <groupId>com.fasterxml.jackson.module</groupId> |
| | | <artifactId>jackson-module-kotlin</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>commons-fileupload</groupId> |
| | | <artifactId>commons-fileupload</artifactId> |
| | | </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; |
| | | |
| | | /** |
| | | * éç¨api |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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æ¥è¯¢æ°æ®æé |
| | | * @param component ç»ä»¶ |
| | | * @param username ç¨æ·å |
| | | * @param requestPath åæ®µè¯·æ±å°å |
| | | * @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; |
| | | |
| | | /** |
| | | * @Author taoYan |
| | | * @Date 2022/7/26 14:44 |
| | | **/ |
| | | @Data |
| | | public class DataLogDTO { |
| | | |
| | | private String tableName; |
| | | |
| | | private String dataId; |
| | | |
| | | private String content; |
| | | |
| | | private String type; |
| | | |
| | | public DataLogDTO(){ |
| | | |
| | | } |
| | | |
| | | public DataLogDTO(String tableName, String dataId, String content, String type) { |
| | | this.tableName = tableName; |
| | | this.dataId = dataId; |
| | | this.content = content; |
| | | this.type = type; |
| | | } |
| | | |
| | | public DataLogDTO(String tableName, String dataId, String type) { |
| | | this.tableName = tableName; |
| | | this.dataId = dataId; |
| | | this.type = type; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.Serializable; |
| | | |
| | | /** |
| | | * æä»¶ä¸è½½ |
| | | * cloud api ç¨å°çæ¥å£ä¼ è¾å¯¹è±¡ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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 ç¨å°çæ¥å£ä¼ è¾å¯¹è±¡ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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 ç¨å°çæ¥å£ä¼ è¾å¯¹è±¡ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | |
| | | /** |
| | | * ç§æ·ID |
| | | */ |
| | | private Integer tenantId; |
| | | |
| | | 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 ç¨å°çæ¥å£ä¼ è¾å¯¹è±¡ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | |
| | | /** |
| | | * 带ä¸å¡åæ°çæ¶æ¯ |
| | | * |
| | | * @author: taoyan |
| | | * @date: 2022/8/17 |
| | | */ |
| | | @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; |
| | | |
| | | /** |
| | | * 带ä¸å¡åæ°çæ¨¡æ¿æ¶æ¯ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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 org.jeecg.common.constant.CommonConstant; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ®éæ¶æ¯ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | |
| | | //----------------------------------------------------------------------- |
| | | //update-begin---author:taoyan ---date:20220705 forï¼æ¯æèªå®ä¹æ¨éç±»åï¼é®ä»¶ãééãä¼ä¸å¾®ä¿¡ãç³»ç»æ¶æ¯----------- |
| | | |
| | | /** |
| | | * æ¨¡æ¿æ¶æ¯å¯¹åºç模æ¿ç¼ç |
| | | */ |
| | | protected String templateCode; |
| | | /** |
| | | * æ¶æ¯ç±»åï¼org.jeecg.common.constant.enums.MessageTypeEnum |
| | | * XT("system", "ç³»ç»æ¶æ¯") |
| | | * YJ("email", "é®ä»¶æ¶æ¯") |
| | | * DD("dingtalk", "ééæ¶æ¯") |
| | | * QYWX("wechat_enterprise", "ä¼ä¸å¾®ä¿¡") |
| | | */ |
| | | protected String type; |
| | | |
| | | /** |
| | | * æ¯å¦åéMarkdownæ ¼å¼çæ¶æ¯ |
| | | */ |
| | | protected boolean isMarkdown; |
| | | |
| | | /** |
| | | * è§£ææ¨¡æ¿å
容 对åºçæ°æ® |
| | | */ |
| | | protected Map<String, Object> data; |
| | | //update-end---author:taoyan ---date::20220705 forï¼æ¯æèªå®ä¹æ¨éç±»åï¼é®ä»¶ãééãä¼ä¸å¾®ä¿¡ãç³»ç»æ¶æ¯----------- |
| | | //----------------------------------------------------------------------- |
| | | |
| | | |
| | | /** |
| | | * æé人 |
| | | */ |
| | | private String copyToUser; |
| | | |
| | | 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; |
| | | } |
| | | |
| | | public boolean isMarkdown() { |
| | | return this.isMarkdown; |
| | | } |
| | | |
| | | public void setIsMarkdown(boolean isMarkdown) { |
| | | this.isMarkdown = isMarkdown; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.api.dto.message; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ¶æ¯æ¨¡æ¿dto |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | |
| | | /** |
| | | * æ¨¡æ¿æ¶æ¯ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | |
| | | /** |
| | | * æ¥å£è¿åæ°æ®æ ¼å¼ |
| | | * @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; |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | @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; |
| | | } |
| | | |
| | | 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); |
| | | //Result OK(String msg)æ¹æ³ä¼é æå
¼å®¹æ§é®é¢ issues/I4IP3D |
| | | r.setResult((T) msg); |
| | | r.setMessage(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() { |
| | | Result<T> r = new Result<T>(); |
| | | r.setSuccess(true); |
| | | r.setCode(CommonConstant.SC_OK_200); |
| | | return r; |
| | | } |
| | | |
| | | /** |
| | | * æ¤æ¹æ³æ¯ä¸ºäºå
¼å®¹å级æå建 |
| | | * |
| | | * @param msg |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | 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<T> Result<T> error(String msg) { |
| | | return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg); |
| | | } |
| | | |
| | | public static<T> Result<T> error(int code, String msg) { |
| | | Result<T> r = new Result<T>(); |
| | | 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<T> Result<T> 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.common.constant.enums.OperateTypeEnum; |
| | | 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 (CommonConstant.LOG_TYPE_2 == dto.getLogType()) { |
| | | 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; |
| | | } |
| | | //update-begin---author:wangshuai ---date:20220331 forï¼é¿éäºä»£ç æ«æè§è(ä¸å
许任ä½éæ³å¼åºç°å¨ä»£ç ä¸)------------ |
| | | return OperateTypeEnum.getTypeByMethodName(methodName); |
| | | //update-end---author:wangshuai ---date:20220331 forï¼é¿éäºä»£ç æ«æè§è(ä¸å
许任ä½éæ³å¼åºç°å¨ä»£ç ä¸)------------ |
| | | } |
| | | |
| | | /** |
| | | * @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 (CommonConstant.HTTP_POST.equals(httpMethod) || CommonConstant.HTTP_PUT.equals(httpMethod) || CommonConstant.HTTP_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) { |
| | | int length = 500; |
| | | if(value!=null && value.toString().length()>length){ |
| | | 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.alibaba.fastjson.parser.Feature; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | 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.context.annotation.Lazy; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.lang.reflect.Field; |
| | | 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 { |
| | | @Lazy |
| | | @Autowired |
| | | private CommonAPI commonApi; |
| | | @Autowired |
| | | public RedisTemplate redisTemplate; |
| | | |
| | | @Autowired |
| | | private ObjectMapper objectMapper; |
| | | |
| | | private static final String JAVA_UTIL_DATE = "java.util.Date"; |
| | | |
| | | /** |
| | | * å®ä¹åç¹Pointcut |
| | | */ |
| | | @Pointcut("execution(public * org.jeecg.modules..*.*Controller.*(..)) || @annotation(org.jeecg.common.aspect.annotation.AutoDict)") |
| | | 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(); |
| | | result=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 Object 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<>(5); |
| | | //ååºç»æé |
| | | List<Object> records=((IPage) ((Result) result).getResult()).getRecords(); |
| | | //update-begin--Author:zyf -- Date:20220606 ----forï¼ãVUEN-1230ã 夿æ¯å¦å«æåå
¸æ³¨è§£,æ²¡ææ³¨è§£è¿å----- |
| | | Boolean hasDict= checkHasDict(records); |
| | | if(!hasDict){ |
| | | return result; |
| | | } |
| | | |
| | | log.debug(" __ è¿å
¥åå
¸ç¿»è¯åé¢ DictAspect ââ " ); |
| | | //update-end--Author:zyf -- Date:20220606 ----forï¼ãVUEN-1230ã 夿æ¯å¦å«æåå
¸æ³¨è§£,æ²¡ææ³¨è§£è¿å----- |
| | | for (Object record : records) { |
| | | String json="{}"; |
| | | try { |
| | | //update-begin--Author:zyf -- Date:20220531 ----forï¼ãissues/#3629ã DictAspect Jacksonåºå忥é----- |
| | | //è§£å³@JsonFormat注解解æä¸äºçé®é¢è¯¦è§SysAnnouncementç±»ç@JsonFormat |
| | | json = objectMapper.writeValueAsString(record); |
| | | //update-end--Author:zyf -- Date:20220531 ----forï¼ãissues/#3629ã DictAspect Jacksonåºå忥é----- |
| | | } catch (JsonProcessingException e) { |
| | | log.error("jsonè§£æå¤±è´¥"+e.getMessage(),e); |
| | | } |
| | | //update-begin--Author:scott -- Date:20211223 ----forï¼ãissues/3303ãrestcontrollerè¿åjsonæ°æ®åkey顺åºéä¹± ----- |
| | | JSONObject item = JSONObject.parseObject(json, Feature.OrderedField); |
| | | //update-end--Author:scott -- Date:20211223 ----forï¼ãissues/3303ãrestcontrollerè¿åjsonæ°æ®åkey顺åºéä¹± ----- |
| | | |
| | | //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æ ¼å¼åæ¥æ |
| | | //update-begin--Author:zyf -- Date:20220531 ----forï¼ãissues/#3629ã DictAspect Jacksonåºå忥é----- |
| | | //if (JAVA_UTIL_DATE.equals(field.getType().getName())&&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())))); |
| | | //} |
| | | //update-end--Author:zyf -- Date:20220531 ----forï¼ãissues/#3629ã DictAspect Jacksonåºå忥é----- |
| | | } |
| | | 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); |
| | | } |
| | | |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 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<>(5); |
| | | // éè¦ç¿»è¯çæ°æ®ï¼æäºå¯ä»¥ä»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.debug("translateDictFromTableByKeys.dictCode:" + dictCode); |
| | | log.debug("translateDictFromTableByKeys.values:" + values); |
| | | List<DictModel> texts = commonApi.translateDictFromTableByKeys(table, text, code, values); |
| | | log.debug("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.debug("translateManyDict.dictCodes:" + dictCodes); |
| | | log.debug("translateManyDict.values:" + values); |
| | | Map<String, List<DictModel>> manyDict = commonApi.translateManyDict(dictCodes, values); |
| | | log.debug("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.debug("--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(); |
| | | } |
| | | |
| | | /** |
| | | * æ£æµè¿åç»æé䏿¯å¦å
å«Dict注解 |
| | | * @param records |
| | | * @return |
| | | */ |
| | | private Boolean checkHasDict(List<Object> records){ |
| | | if(oConvertUtils.isNotEmpty(records) && records.size()>0){ |
| | | for (Field field : oConvertUtils.getAllFields(records.get(0))) { |
| | | if (oConvertUtils.isNotEmpty(field.getAnnotation(Dict.class))) { |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.constant.CommonConstant; |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | import org.jeecg.common.system.query.QueryRuleEnum; |
| | | 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.context.annotation.Lazy; |
| | | 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 |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Aspect |
| | | @Component |
| | | @Slf4j |
| | | public class PermissionDataAspect { |
| | | @Lazy |
| | | @Autowired |
| | | private CommonAPI commonApi; |
| | | |
| | | private static final String SPOT_DO = ".do"; |
| | | |
| | | @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); |
| | | //update-begin-author:taoyan date:20211027 for:JTC-132ãonlineæ¥è¡¨æéãonlineæ¥è¡¨å¸¦åæ°çèåé
ç½®æ°æ®æéæ æ |
| | | //å
夿æ¯å¦onlineæ¥è¡¨è¯·æ± |
| | | // TODO åæ°é¡ºåºè°æ´æéæ£ |
| | | if(requestPath.indexOf(UrlMatchEnum.CGREPORT_DATA.getMatchUrl())>=0){ |
| | | // è·åå°åæ åæ° |
| | | String urlParamString = request.getParameter(CommonConstant.ONL_REP_URL_PARAM_STR); |
| | | if(oConvertUtils.isNotEmpty(urlParamString)){ |
| | | requestPath+="?"+urlParamString; |
| | | } |
| | | } |
| | | //update-end-author:taoyan date:20211027 for:JTC-132ãonlineæ¥è¡¨æéãonlineæ¥è¡¨å¸¦åæ°çèåé
ç½®æ°æ®æéæ æ |
| | | log.info("æ¦æªè¯·æ± >> {} ; 请æ±ç±»å >> {} . ", 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(SymbolConstant.DOUBLE_SLASH)>=0){ |
| | | url = filterUrl(url); |
| | | } |
| | | /*if(url.startsWith("/")){ |
| | | url=url.substring(1); |
| | | }*/ |
| | | } |
| | | return url; |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±å°å |
| | | * @param request |
| | | * @return |
| | | */ |
| | | @Deprecated |
| | | private String getJgAuthRequsetPath(HttpServletRequest request) { |
| | | String queryString = request.getQueryString(); |
| | | String requestPath = request.getRequestURI(); |
| | | if(oConvertUtils.isNotEmpty(queryString)){ |
| | | requestPath += "?" + queryString; |
| | | } |
| | | // 廿å
¶ä»åæ°(ä¿çä¸ä¸ªåæ°) ä¾å¦ï¼loginController.do?login |
| | | if (requestPath.indexOf(SymbolConstant.AND) > -1) { |
| | | requestPath = requestPath.substring(0, requestPath.indexOf("&")); |
| | | } |
| | | if(requestPath.indexOf(QueryRuleEnum.EQ.getValue())!=-1){ |
| | | if(requestPath.indexOf(SPOT_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); |
| | | } |
| | | |
| | | @Deprecated |
| | | 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 { |
| | | /**æ±URLä¸èåè·¯ç±URL转æ¢è§å /online/cgform/api/getData/ */ |
| | | CGFORM_DATA("/online/cgform/api/getData/", "/online/cgformList/"), |
| | | /**æ±URLä¸èåè·¯ç±URL转æ¢è§å /online/cgform/api/exportXls/ */ |
| | | CGFORM_EXCEL_DATA("/online/cgform/api/exportXls/", "/online/cgformList/"), |
| | | /**æ±URLä¸èåè·¯ç±URL转æ¢è§å /online/cgform/api/getTreeData/ */ |
| | | CGFORM_TREE_DATA("/online/cgform/api/getTreeData/", "/online/cgformList/"), |
| | | /**æ±URLä¸èåè·¯ç±URL转æ¢è§å /online/cgreport/api/getColumnsAndData/ */ |
| | | CGREPORT_DATA("/online/cgreport/api/getColumnsAndData/", "/online/cgreport/"), |
| | | /**æ±URLä¸èåè·¯ç±URL转æ¢è§å /online/cgreport/api/exportXls/ */ |
| | | CGREPORT_EXCEL_DATA("/online/cgreport/api/exportXls/", "/online/cgreport/"), |
| | | /**æ±URLä¸èåè·¯ç±URL转æ¢è§å /online/cgreport/api/exportManySheetXls/ */ |
| | | CGREPORT_EXCEL_DATA2("/online/cgreport/api/exportManySheetXls/", "/online/cgreport/"); |
| | | |
| | | UrlMatchEnum(String url, String matchUrl) { |
| | | this.url = url; |
| | | this.matchUrl = matchUrl; |
| | | } |
| | | |
| | | /** |
| | | * Request è¯·æ± URLåç¼ |
| | | */ |
| | | private String url; |
| | | /** |
| | | * èåè·¯ç± URLåç¼ (对åºèåè·¯å¾) |
| | | */ |
| | | private String matchUrl; |
| | | |
| | | /** |
| | | * æ ¹æ®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.matchUrl); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getMatchUrl() { |
| | | return matchUrl; |
| | | } |
| | | // 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 java.lang.annotation.*; |
| | | |
| | | /** |
| | | * éè¿æ¤æ³¨è§£å£°æçæ¥å£ï¼èªå¨å®ç°åå
¸ç¿»è¯ |
| | | * |
| | | * @Author scott |
| | | * @email jeecgos@163.com |
| | | * @Date 2022å¹´01æ05æ¥ |
| | | */ |
| | | @Target(ElementType.METHOD) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Documented |
| | | public @interface AutoDict { |
| | | |
| | | /** |
| | | * ææ¶æ ç¨ |
| | | * @return |
| | | */ |
| | | String value() default ""; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.*; |
| | | |
| | | import org.jeecg.common.constant.enums.LowAppAopEnum; |
| | | |
| | | /** |
| | | * èªå¨æ³¨å
¥low_app_id |
| | | * |
| | | * @Author scott |
| | | * @email jeecgos@163.com |
| | | * @Date 2022å¹´01æ05æ¥ |
| | | */ |
| | | @Target(ElementType.METHOD) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Documented |
| | | public @interface AutoLowApp { |
| | | |
| | | /** |
| | | * åé¢ç±»åï¼addãdeleteãdb_importçå
¶ä»æä½ï¼ |
| | | * |
| | | * @return |
| | | */ |
| | | LowAppAopEnum action(); |
| | | |
| | | /** |
| | | * ä¸å¡ç±»åï¼cgformçï¼ |
| | | * |
| | | * @return |
| | | */ |
| | | String bizType(); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * åå
¸æ³¨è§£ |
| | | * @author: dangzhenghui |
| | | * @date: 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.*; |
| | | |
| | | /** |
| | | * 卿table忢 |
| | | * |
| | | * @author :zyf |
| | | * @date:2020-04-25 |
| | | */ |
| | | @Target(ElementType.METHOD) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Documented |
| | | public @interface DynamicTable { |
| | | /** |
| | | * éè¦å¨æè§£æç表å |
| | | * @return |
| | | */ |
| | | String value(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.aspect.annotation; |
| | | |
| | | import java.lang.annotation.*; |
| | | |
| | | /** |
| | | * onlineè¯·æ±æ¦æªä¸ç¨æ³¨è§£ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | |
| | | /** |
| | | * @Description: éç¨å¸¸é |
| | | * @author: jeecg-boot |
| | | */ |
| | | public interface CommonConstant { |
| | | |
| | | /** |
| | | * æ£å¸¸ç¶æ |
| | | */ |
| | | Integer STATUS_NORMAL = 0; |
| | | |
| | | /** |
| | | * ç¦ç¨ç¶æ |
| | | */ |
| | | Integer STATUS_DISABLE = -1; |
| | | |
| | | /** |
| | | * å 餿 å¿ |
| | | */ |
| | | Integer DEL_FLAG_1 = 1; |
| | | |
| | | /** |
| | | * æªå é¤ |
| | | */ |
| | | Integer DEL_FLAG_0 = 0; |
| | | |
| | | /** |
| | | * ç³»ç»æ¥å¿ç±»åï¼ ç»å½ |
| | | */ |
| | | int LOG_TYPE_1 = 1; |
| | | |
| | | /** |
| | | * ç³»ç»æ¥å¿ç±»åï¼ æä½ |
| | | */ |
| | | int LOG_TYPE_2 = 2; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ æ¥è¯¢ |
| | | */ |
| | | int OPERATE_TYPE_1 = 1; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ æ·»å |
| | | */ |
| | | int OPERATE_TYPE_2 = 2; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ æ´æ° |
| | | */ |
| | | int OPERATE_TYPE_3 = 3; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ å é¤ |
| | | */ |
| | | int OPERATE_TYPE_4 = 4; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ åå
¥ |
| | | */ |
| | | int OPERATE_TYPE_5 = 5; |
| | | |
| | | /** |
| | | * æä½æ¥å¿ç±»åï¼ å¯¼åº |
| | | */ |
| | | int OPERATE_TYPE_6 = 6; |
| | | |
| | | |
| | | /** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */ |
| | | Integer SC_INTERNAL_SERVER_ERROR_500 = 500; |
| | | /** {@code 200 OK} (HTTP/1.0 - RFC 1945) */ |
| | | Integer SC_OK_200 = 200; |
| | | |
| | | /**è®¿é®æéè®¤è¯æªéè¿ 510*/ |
| | | 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åç¼ */ |
| | | String PREFIX_USER_TOKEN = "prefix_user_token_"; |
| | | // /** Tokenç¼åæ¶é´ï¼3600ç§å³ä¸å°æ¶ */ |
| | | // int TOKEN_EXPIRE_TIME = 3600; |
| | | |
| | | /** ç»å½äºç»´ç */ |
| | | String LOGIN_QRCODE_PRE = "QRCODELOGIN:"; |
| | | String LOGIN_QRCODE = "LQ:"; |
| | | /** ç»å½äºç»´ç token */ |
| | | String LOGIN_QRCODE_TOKEN = "LQT:"; |
| | | |
| | | |
| | | /** |
| | | * 0ï¼ä¸çº§èå |
| | | */ |
| | | Integer MENU_TYPE_0 = 0; |
| | | /** |
| | | * 1ï¼åèå |
| | | */ |
| | | Integer MENU_TYPE_1 = 1; |
| | | /** |
| | | * 2ï¼æé®æé |
| | | */ |
| | | Integer MENU_TYPE_2 = 2; |
| | | |
| | | /**éå对象类åï¼USER:æå®ç¨æ·ï¼ALL:å
¨ä½ç¨æ·ï¼*/ |
| | | String MSG_TYPE_UESR = "USER"; |
| | | String MSG_TYPE_ALL = "ALL"; |
| | | |
| | | /**åå¸ç¶æï¼0æªåå¸ï¼1å·²åå¸ï¼2å·²æ¤éï¼*/ |
| | | String NO_SEND = "0"; |
| | | String HAS_SEND = "1"; |
| | | String HAS_CANCLE = "2"; |
| | | |
| | | /**é
è¯»ç¶æï¼0æªè¯»ï¼1已读ï¼*/ |
| | | String HAS_READ_FLAG = "1"; |
| | | String NO_READ_FLAG = "0"; |
| | | |
| | | /**ä¼å
级ï¼Lä½ï¼Mä¸ï¼Hé«ï¼*/ |
| | | String PRIORITY_L = "L"; |
| | | String PRIORITY_M = "M"; |
| | | String PRIORITY_H = "H"; |
| | | |
| | | /** |
| | | * çä¿¡æ¨¡æ¿æ¹å¼ 0 .ç»å½æ¨¡æ¿ã1.æ³¨åæ¨¡æ¿ã2.å¿è®°å¯ç æ¨¡æ¿ |
| | | */ |
| | | String SMS_TPL_TYPE_0 = "0"; |
| | | String SMS_TPL_TYPE_1 = "1"; |
| | | String SMS_TPL_TYPE_2 = "2"; |
| | | |
| | | /** |
| | | * ç¶æ(0æ æ1ææ) |
| | | */ |
| | | String STATUS_0 = "0"; |
| | | String STATUS_1 = "1"; |
| | | |
| | | /** |
| | | * 忥工使µå¼æ1忥0ä¸åæ¥ |
| | | */ |
| | | Integer ACT_SYNC_1 = 1; |
| | | Integer ACT_SYNC_0 = 0; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å1:éç¥å
¬å2:ç³»ç»æ¶æ¯ |
| | | */ |
| | | String MSG_CATEGORY_1 = "1"; |
| | | String MSG_CATEGORY_2 = "2"; |
| | | |
| | | /** |
| | | * æ¯å¦é
ç½®èåçæ°æ®æé 1æ¯0å¦ |
| | | */ |
| | | Integer RULE_FLAG_0 = 0; |
| | | Integer RULE_FLAG_1 = 1; |
| | | |
| | | /** |
| | | * æ¯å¦ç¨æ·å·²è¢«å»ç» 1æ£å¸¸(è§£å») 2å»ç» 3离è |
| | | */ |
| | | Integer USER_UNFREEZE = 1; |
| | | Integer USER_FREEZE = 2; |
| | | Integer USER_QUIT = 3; |
| | | |
| | | /**åå
¸ç¿»è¯ææ¬åç¼*/ |
| | | String DICT_TEXT_SUFFIX = "_dictText"; |
| | | |
| | | /** |
| | | * 表å设计å¨ä¸»è¡¨ç±»å |
| | | */ |
| | | Integer DESIGN_FORM_TYPE_MAIN = 1; |
| | | |
| | | /** |
| | | * 表å设计å¨å表表类å |
| | | */ |
| | | Integer DESIGN_FORM_TYPE_SUB = 2; |
| | | |
| | | /** |
| | | * 表å设计å¨URLææéè¿ |
| | | */ |
| | | Integer DESIGN_FORM_URL_STATUS_PASSED = 1; |
| | | |
| | | /** |
| | | * 表å设计å¨URLæææªéè¿ |
| | | */ |
| | | Integer DESIGN_FORM_URL_STATUS_NOT_PASSED = 2; |
| | | |
| | | /** |
| | | * 表åè®¾è®¡å¨æ°å¢ Flag |
| | | */ |
| | | String DESIGN_FORM_URL_TYPE_ADD = "add"; |
| | | /** |
| | | * 表å设计å¨ä¿®æ¹ Flag |
| | | */ |
| | | String DESIGN_FORM_URL_TYPE_EDIT = "edit"; |
| | | /** |
| | | * 表å设计å¨è¯¦æ
Flag |
| | | */ |
| | | String DESIGN_FORM_URL_TYPE_DETAIL = "detail"; |
| | | /** |
| | | * 表å设计å¨å¤ç¨æ°æ® Flag |
| | | */ |
| | | String DESIGN_FORM_URL_TYPE_REUSE = "reuse"; |
| | | /** |
| | | * 表å设计å¨ç¼è¾ Flag ï¼å·²å¼ç¨ï¼ |
| | | */ |
| | | String DESIGN_FORM_URL_TYPE_VIEW = "view"; |
| | | |
| | | /** |
| | | * onlineåæ°å¼è®¾ç½®ï¼æ¯ï¼Y, å¦ï¼Nï¼ |
| | | */ |
| | | String ONLINE_PARAM_VAL_IS_TURE = "Y"; |
| | | String ONLINE_PARAM_VAL_IS_FALSE = "N"; |
| | | |
| | | /** |
| | | * æä»¶ä¸ä¼ ç±»åï¼æ¬å°ï¼localï¼Minioï¼minioï¼é¿éäºï¼aliossï¼ |
| | | */ |
| | | String UPLOAD_TYPE_LOCAL = "local"; |
| | | String UPLOAD_TYPE_MINIO = "minio"; |
| | | String UPLOAD_TYPE_OSS = "alioss"; |
| | | |
| | | /** |
| | | * ææ¡£ä¸ä¼ èªå®ä¹æ¡¶åç§° |
| | | */ |
| | | String UPLOAD_CUSTOM_BUCKET = "eoafile"; |
| | | /** |
| | | * ææ¡£ä¸ä¼ èªå®ä¹è·¯å¾ |
| | | */ |
| | | String UPLOAD_CUSTOM_PATH = "eoafile"; |
| | | /** |
| | | * æä»¶å¤é¾æ¥ææå¤©æ° |
| | | */ |
| | | Integer UPLOAD_EFFECTIVE_DAYS = 1; |
| | | |
| | | /** |
| | | * å工身份 ï¼1:æ®éåå·¥ 2:ä¸çº§ï¼ |
| | | */ |
| | | Integer USER_IDENTITY_1 = 1; |
| | | Integer USER_IDENTITY_2 = 2; |
| | | |
| | | /** sys_user 表 username å¯ä¸é®ç´¢å¼ */ |
| | | String SQL_INDEX_UNIQ_SYS_USER_USERNAME = "uniq_sys_user_username"; |
| | | /** sys_user 表 work_no å¯ä¸é®ç´¢å¼ */ |
| | | String SQL_INDEX_UNIQ_SYS_USER_WORK_NO = "uniq_sys_user_work_no"; |
| | | /** sys_user 表 phone å¯ä¸é®ç´¢å¼ */ |
| | | String SQL_INDEX_UNIQ_SYS_USER_PHONE = "uniq_sys_user_phone"; |
| | | /** è¾¾æ¢¦æ°æ®åºåæç¤ºãè¿å表[SYS_USER]å¯ä¸æ§çº¦æ */ |
| | | String SQL_INDEX_UNIQ_SYS_USER = "å¯ä¸æ§çº¦æ"; |
| | | |
| | | /** sys_user 表 email å¯ä¸é®ç´¢å¼ */ |
| | | String SQL_INDEX_UNIQ_SYS_USER_EMAIL = "uniq_sys_user_email"; |
| | | /** sys_quartz_job 表 job_class_name å¯ä¸é®ç´¢å¼ */ |
| | | String SQL_INDEX_UNIQ_JOB_CLASS_NAME = "uniq_job_class_name"; |
| | | /** sys_position 表 code å¯ä¸é®ç´¢å¼ */ |
| | | String SQL_INDEX_UNIQ_CODE = "uniq_code"; |
| | | /** sys_role 表 code å¯ä¸é®ç´¢å¼ */ |
| | | String SQL_INDEX_UNIQ_SYS_ROLE_CODE = "uniq_sys_role_role_code"; |
| | | /** sys_depart 表 code å¯ä¸é®ç´¢å¼ */ |
| | | String SQL_INDEX_UNIQ_DEPART_ORG_CODE = "uniq_depart_org_code"; |
| | | /** sys_category 表 code å¯ä¸é®ç´¢å¼ */ |
| | | String SQL_INDEX_UNIQ_CATEGORY_CODE = "idx_sc_code"; |
| | | /** |
| | | * å¨çº¿è天 æ¯å¦ä¸ºé»è®¤åç» |
| | | */ |
| | | String IM_DEFAULT_GROUP = "1"; |
| | | /** |
| | | * å¨çº¿è天 å¾çæä»¶ä¿åè·¯å¾ |
| | | */ |
| | | String IM_UPLOAD_CUSTOM_PATH = "biz/user_imgs"; |
| | | /** |
| | | * å¨çº¿è天 ç¨æ·ç¶æ |
| | | */ |
| | | String IM_STATUS_ONLINE = "online"; |
| | | |
| | | /** |
| | | * å¨çº¿è天 SOCKETæ¶æ¯ç±»å |
| | | */ |
| | | String IM_SOCKET_TYPE = "chatMessage"; |
| | | |
| | | /** |
| | | * å¨çº¿è天 æ¯å¦å¼å¯é»è®¤æ·»å 好å 1æ¯ 0å¦ |
| | | */ |
| | | String IM_DEFAULT_ADD_FRIEND = "1"; |
| | | |
| | | /** |
| | | * å¨çº¿è天 ç¨æ·å¥½åç¼ååç¼ |
| | | */ |
| | | String IM_PREFIX_USER_FRIEND_CACHE = "sys:cache:im:im_prefix_user_friend_"; |
| | | |
| | | /** |
| | | * èå¤è¡¥å¡ä¸å¡ç¶æ ï¼1ï¼åæ 2ï¼ä¸åæï¼ |
| | | */ |
| | | String SIGN_PATCH_BIZ_STATUS_1 = "1"; |
| | | String SIGN_PATCH_BIZ_STATUS_2 = "2"; |
| | | |
| | | /** |
| | | * å
¬æææ¡£ä¸ä¼ èªå®ä¹è·¯å¾ |
| | | */ |
| | | String UPLOAD_CUSTOM_PATH_OFFICIAL = "officialdoc"; |
| | | /** |
| | | * å
¬æææ¡£ä¸è½½èªå®ä¹è·¯å¾ |
| | | */ |
| | | String DOWNLOAD_CUSTOM_PATH_OFFICIAL = "officaldown"; |
| | | |
| | | /** |
| | | * WPSåå¨å¼ç±»å«(1 codeæå· 2 textï¼WPS模æ¿è¿æ¯å
¬æåææ¨¡æ¿ï¼) |
| | | */ |
| | | String WPS_TYPE_1="1"; |
| | | String WPS_TYPE_2="2"; |
| | | |
| | | |
| | | /**===============================================================================================*/ |
| | | /** |
| | | * ::é常éè¦:: |
| | | * 注æï¼è¿å个常éå¼å¦æä¿®æ¹ï¼éè¦ä¸ jeecg-boot-starter/jeecg-boot-common/org.jeecg.config.FeignConfig ç±»ä¸çå¼ä¿æä¸è´ã |
| | | */ |
| | | String X_ACCESS_TOKEN = "X-Access-Token"; |
| | | String X_SIGN = "X-Sign"; |
| | | String X_TIMESTAMP = "X-TIMESTAMP"; |
| | | /** ç§æ·è¯·æ±å¤´ æ´å为ï¼X-Tenant-Id */ |
| | | String TENANT_ID = "X-Tenant-Id"; |
| | | /**===============================================================================================*/ |
| | | |
| | | String TOKEN_IS_INVALID_MSG = "Token失æï¼è¯·éæ°ç»å½!"; |
| | | String X_FORWARDED_SCHEME = "X-Forwarded-Scheme"; |
| | | |
| | | |
| | | /** |
| | | * å¾®æå¡è¯»åé
ç½®æä»¶å±æ§ æå¡å°å |
| | | */ |
| | | String CLOUD_SERVER_KEY = "spring.cloud.nacos.discovery.server-addr"; |
| | | |
| | | /** |
| | | * ç¬¬ä¸æ¹ç»å½ éªè¯å¯ç /åå»ºç¨æ· é½éè¦è®¾ç½®ä¸ä¸ªæä½ç 鲿¢è¢«æ¶æè°ç¨ |
| | | */ |
| | | 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"; |
| | | |
| | | /**ONLINE æ¥è¡¨æéç¨ ä»requestä¸è·åå°åæ åçåæ°*/ |
| | | String ONL_REP_URL_PARAM_STR="onlRepUrlParamStr"; |
| | | |
| | | /**POST请æ±*/ |
| | | String HTTP_POST = "POST"; |
| | | |
| | | /**PUT请æ±*/ |
| | | String HTTP_PUT = "PUT"; |
| | | |
| | | /**PATCH请æ±*/ |
| | | String HTTP_PATCH = "PATCH"; |
| | | |
| | | /**æªç¥ç*/ |
| | | String UNKNOWN = "unknown"; |
| | | |
| | | /**å符串http*/ |
| | | String STR_HTTP = "http"; |
| | | |
| | | /**String ç±»åç空å¼*/ |
| | | String STRING_NULL = "null"; |
| | | |
| | | /**å端vue3çæ¬Headeråæ°å*/ |
| | | String VERSION="X-Version"; |
| | | |
| | | /**åå¨å¨çº¿ç¨åééçå¨æè¡¨å*/ |
| | | String DYNAMIC_TABLE_NAME="DYNAMIC_TABLE_NAME"; |
| | | /** |
| | | * http:// httpåè®® |
| | | */ |
| | | String HTTP_PROTOCOL = "http://"; |
| | | |
| | | /** |
| | | * https:// httpsåè®® |
| | | */ |
| | | String HTTPS_PROTOCOL = "https://"; |
| | | |
| | | /** é¨é¨è¡¨å¯ä¸keyï¼id */ |
| | | String DEPART_KEY_ID = "id"; |
| | | /** é¨é¨è¡¨å¯ä¸keyï¼orgCode */ |
| | | String DEPART_KEY_ORG_CODE = "orgCode"; |
| | | |
| | | /** |
| | | * åæ¶æ¯ ä¼ä¼ éä¸äºä¿¡æ¯å°map |
| | | */ |
| | | String NOTICE_MSG_SUMMARY = "NOTICE_MSG_SUMMARY"; |
| | | |
| | | /** |
| | | * åæ¶æ¯ ä¼ä¼ éä¸ä¸ªä¸å¡IDå°map |
| | | */ |
| | | String NOTICE_MSG_BUS_ID = "NOTICE_MSG_BUS_ID"; |
| | | |
| | | /** |
| | | * é®ç®±æ¶æ¯ä¸å°åç»å½æ¶å°ååæºå¸¦çtoken,éè¦æ¿æ¢æçå®çtokenå¼ |
| | | */ |
| | | String LOGIN_TOKEN = "{LOGIN_TOKEN}"; |
| | | |
| | | /** |
| | | * æ¨¡æ¿æ¶æ¯ä¸ 跳转å°åç对åºçkey |
| | | */ |
| | | String MSG_HREF_URL = "url"; |
| | | |
| | | /** |
| | | * sys_data_log表çç±»å ç¨äºåºå«è¯è®ºåºåçæ¥å¿æ°æ® |
| | | */ |
| | | String DATA_LOG_TYPE_COMMENT = "comment"; |
| | | |
| | | /** |
| | | * sys_data_log表çç±»å èçæ°æ®æ¯è¾ ç±»åé½è®¾ç½®ä¸ºjson |
| | | */ |
| | | String DATA_LOG_TYPE_JSON = "json"; |
| | | |
| | | /** æ¶æ¯æ¨¡æ¿ï¼markdown */ |
| | | String MSG_TEMPLATE_TYPE_MD = "5"; |
| | | |
| | | /** |
| | | * çä¿¡éªè¯ç redis-keyçåç¼ |
| | | */ |
| | | String PHONE_REDIS_KEY_PRE = "phone_msg"; |
| | | |
| | | /** |
| | | * æ¯æä»¶å¤¹ |
| | | */ |
| | | String IT_IS_FOLDER = "1"; |
| | | |
| | | /** |
| | | * æä»¶æ¥æè
|
| | | */ |
| | | String FILE_OWNER = "owner"; |
| | | |
| | | /** |
| | | * æä»¶ç®¡çå |
| | | */ |
| | | String FILE_ADMIN = "admin"; |
| | | |
| | | /** |
| | | * åªå
许ç¼è¾ |
| | | */ |
| | | String FILE_EDITABLE = "editable"; |
| | | |
| | | /** |
| | | * ç»å½å¤±è´¥ï¼ç¨äºè®°å½å¤±è´¥æ¬¡æ°çkey |
| | | */ |
| | | String LOGIN_FAIL = "LOGIN_FAIL_"; |
| | | |
| | | /** |
| | | * å
¥èäºä»¶ |
| | | */ |
| | | Integer BPM_USER_EVENT_ADD = 1; |
| | | |
| | | /** |
| | | * 离èäºä»¶ |
| | | */ |
| | | Integer BPM_USER_EVENT_LEVEL = 2; |
| | | |
| | | /** |
| | | * ç¨æ·ç§æ·ç¶æ(æ£å¸¸/å·²éè¿å®¡æ ¸ç) |
| | | */ |
| | | String USER_TENANT_NORMAL = "1"; |
| | | |
| | | /** |
| | | * ç¨æ·ç§æ·ç¶æ(离è) |
| | | */ |
| | | String USER_TENANT_QUIT = "2"; |
| | | |
| | | /** |
| | | * ç¨æ·ç§æ·ç¶æ(å®¡æ ¸ä¸) |
| | | */ |
| | | String USER_TENANT_UNDER_REVIEW = "3"; |
| | | |
| | | /** |
| | | * ç¨æ·ç§æ·ç¶æ(æç») |
| | | */ |
| | | String USER_TENANT_REFUSE = "4"; |
| | | |
| | | /** |
| | | * 䏿¯å¶åèç¹ |
| | | */ |
| | | Integer NOT_LEAF = 0; |
| | | |
| | | /** |
| | | * æ¯å¶åèç¹ |
| | | */ |
| | | Integer IS_LEAF = 1; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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"; |
| | | |
| | | |
| | | /**æµç¨å¬åââç³»ç»éç¥æ¶æ¯æ¨¡æ¿*/ |
| | | public static final String TZMB_BPM_CUIBAN = "bpm_cuiban"; |
| | | /**æµç¨å¬åââé®ä»¶éç¥æ¶æ¯æ¨¡æ¿*/ |
| | | public static final String TZMB_BPM_CUIBAN_EMAIL = "bpm_cuiban_email"; |
| | | /**æ 忍¡æ¿âç³»ç»æ¶æ¯éç¥*/ |
| | | 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; |
| | | /** |
| | | * æ°æ®åºä¸ä¸æå¸¸é |
| | | * @author: jeecg-boot |
| | | */ |
| | | public interface DataBaseConstant { |
| | | //*********æ°æ®åºç±»å**************************************** |
| | | |
| | | /**MYSQLæ°æ®åº*/ |
| | | public static final String DB_TYPE_MYSQL = "MYSQL"; |
| | | |
| | | /** ORACLE*/ |
| | | public static final String DB_TYPE_ORACLE = "ORACLE"; |
| | | |
| | | /**è¾¾æ¢¦æ°æ®åº*/ |
| | | public static final String DB_TYPE_DM = "DM"; |
| | | |
| | | /**postgreSQLè¾¾æ¢¦æ°æ®åº*/ |
| | | public static final String DB_TYPE_POSTGRESQL = "POSTGRESQL"; |
| | | |
| | | /**sqlserveræ°æ®åº*/ |
| | | public static final String DB_TYPE_SQLSERVER = "SQLSERVER"; |
| | | |
| | | /**mariadb æ°æ®åº*/ |
| | | public static final String DB_TYPE_MARIADB = "MARIADB"; |
| | | |
| | | /**DB2 æ°æ®åº*/ |
| | | public static final String DB_TYPE_DB2 = "DB2"; |
| | | |
| | | /**HSQL æ°æ®åº*/ |
| | | 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"; |
| | | //*********ç³»ç»å»ºè¡¨æ ååæ®µ**************************************** |
| | | |
| | | /** |
| | | * sqlè¯å¥ where |
| | | */ |
| | | String SQL_WHERE = "where"; |
| | | |
| | | /** |
| | | * sqlè¯å¥ asc |
| | | */ |
| | | String SQL_ASC = "asc"; |
| | | |
| | | /** |
| | | * sqlserveræ°æ®åº,ä¸é´æç©ºæ ¼ |
| | | */ |
| | | String DB_TYPE_SQL_SERVER_BLANK = "sql server"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * VXESocket 常é |
| | | * @author: jeecg-boot |
| | | */ |
| | | public class DrySocketConst { |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å |
| | | */ |
| | | 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"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»åï¼å®æ¶æ°æ®ä¸ä¼ |
| | | */ |
| | | public static final String TYPE_RDT = "real_time_data"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * å¨æåæ¢è¡¨é
置常é |
| | | * |
| | | * @author: scott |
| | | * @date: 2022å¹´04æ25æ¥ 22:30 |
| | | */ |
| | | public class DynamicTableConstant { |
| | | /** |
| | | * è§è²é¦é¡µé
置表 |
| | | * vue2表å: sys_role_index |
| | | * vue3表å: sys_role_index_vue3 |
| | | */ |
| | | public static final String SYS_ROLE_INDEX = "sys_role_index"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: çå¸åº |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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--){ |
| | | //update-begin-author:taoyan date:2022-5-24 for:VUEN-1088 online 导å
¥ çå¸åºå¯¼å
¥å 导å
¥æ°æ®éä¹± å京å¸/å¸è¾åº/西ååº-->山西ç/æåå¸/ååº |
| | | String areaText = areaList.get(i).getText(); |
| | | String cityText = areaList.get(i).getAheadText(); |
| | | if(text.indexOf(areaText)>=0 && (cityText!=null && text.indexOf(cityText)>=0)){ |
| | | return areaList.get(i).getId(); |
| | | } |
| | | //update-end-author:taoyan date:2022-5-24 for:VUEN-1088 online 导å
¥ çå¸åºå¯¼å
¥å 导å
¥æ°æ®éä¹± å京å¸/å¸è¾åº/西ååº-->山西ç/æåå¸/ååº |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | // update-begin-author:sunjianlei date:20220121 for:ãJTC-704ãæ°æ®å¯¼å
¥é误 çå¸åºç»ä»¶ï¼æä»¶ä¸ä¸ºå京å¸ï¼å¯¼å
¥åï¼å¯¼ä¸ºäºå±±è¥¿ç |
| | | /** |
| | | * è·åçå¸åºcodeï¼ç²¾åå¹é
|
| | | * @param texts ææ¬æ°ç»ï¼çï¼å¸ï¼åº |
| | | * @return è¿å çå¸åºçcode |
| | | */ |
| | | public String[] getCode(String[] texts) { |
| | | if (texts == null || texts.length == 0) { |
| | | return null; |
| | | } |
| | | this.initAreaList(); |
| | | if (areaList == null || areaList.size() == 0) { |
| | | return null; |
| | | } |
| | | String[] codes = new String[texts.length]; |
| | | String code = null; |
| | | for (int i = 0; i < texts.length; i++) { |
| | | String text = texts[i]; |
| | | Area area; |
| | | if (code == null) { |
| | | area = getAreaByText(text); |
| | | } else { |
| | | area = getAreaByPidAndText(code, text); |
| | | } |
| | | if (area != null) { |
| | | code = area.id; |
| | | codes[i] = code; |
| | | } else { |
| | | return null; |
| | | } |
| | | } |
| | | return codes; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®textè·åarea |
| | | * @param text |
| | | * @return |
| | | */ |
| | | public Area getAreaByText(String text) { |
| | | for (Area area : areaList) { |
| | | if (text.equals(area.getText())) { |
| | | return area; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * éè¿pidè·å area 对象 |
| | | * @param pCode ç¶çº§ç¼ç |
| | | * @param text |
| | | * @return |
| | | */ |
| | | public Area getAreaByPidAndText(String pCode, String text) { |
| | | this.initAreaList(); |
| | | if (this.areaList != null && this.areaList.size() > 0) { |
| | | for (Area area : this.areaList) { |
| | | if (area.getPid().equals(pCode) && area.getText().equals(text)) { |
| | | return area; |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | // update-end-author:sunjianlei date:20220121 for:ãJTC-704ãæ°æ®å¯¼å
¥é误 çå¸åºç»ä»¶ï¼æä»¶ä¸ä¸ºå京å¸ï¼å¯¼å
¥åï¼å¯¼ä¸ºäºå±±è¥¿ç |
| | | |
| | | 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); |
| | | //update-begin-author:taoyan date:2022-5-24 for:VUEN-1088 online 导å
¥ çå¸åºå¯¼å
¥å 导å
¥æ°æ®éä¹± å京å¸/å¸è¾åº/西ååº-->山西ç/æåå¸/ååº |
| | | area.setAheadText(cityJson.getString(cityKey)); |
| | | //update-end-author:taoyan date:2022-5-24 for:VUEN-1088 online 导å
¥ çå¸åºå¯¼å
¥å 导å
¥æ°æ®éä¹± å京å¸/å¸è¾åº/西ååº-->山西ç/æåå¸/ååº |
| | | 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; |
| | | // ç¨äºåå¨ä¸çº§ææ¬æ°æ®ï¼åºçä¸çº§ææ¬ æ¯å¸çæ°æ® |
| | | String aheadText; |
| | | |
| | | 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; |
| | | } |
| | | |
| | | public String getAheadText() { |
| | | return aheadText; |
| | | } |
| | | public void setAheadText(String aheadText) { |
| | | this.aheadText = aheadText; |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * |
| | | * * 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 { |
| | | |
| | | /** |
| | | * å¾®æå¡åï¼ç³»ç»ç®¡ç模å |
| | | */ |
| | | String SERVICE_SYSTEM = "ichd-system"; |
| | | /** |
| | | * å¾®æå¡åï¼ demo模å |
| | | */ |
| | | String SERVICE_DEMO = "jeecg-demo"; |
| | | /** |
| | | * å¾®æå¡åï¼onlineå¨çº¿æ¨¡å |
| | | */ |
| | | String SERVICE_ONLINE = "jeecg-online"; |
| | | /** |
| | | * å¾®æå¡åï¼OA模å |
| | | */ |
| | | String SERVICE_EOA = "jeecg-eoa"; |
| | | /** |
| | | * å¾®æå¡åï¼è¡¨å设计模å |
| | | */ |
| | | String SERVICE_FORM = "jeecg-desform"; |
| | | |
| | | /** |
| | | * gatewayéè¿headerä¼ éæ ¹è·¯å¾ basePath |
| | | */ |
| | | String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * @Description: 符å·åç¹æ®ç¬¦å·å¸¸ç¨ç±» |
| | | * @author: wangshuai |
| | | * @date: 2022å¹´03æ30æ¥ 17:44 |
| | | */ |
| | | public class SymbolConstant { |
| | | |
| | | /** |
| | | * 符å·ï¼ç¹ |
| | | */ |
| | | public static final String SPOT = "."; |
| | | |
| | | /** |
| | | * 符å·ï¼åææ |
| | | */ |
| | | public static final String DOUBLE_BACKSLASH = "\\"; |
| | | |
| | | /** |
| | | * 符å·ï¼åå· |
| | | */ |
| | | public static final String COLON = ":"; |
| | | |
| | | /** |
| | | * 符å·ï¼éå· |
| | | */ |
| | | public static final String COMMA = ","; |
| | | |
| | | /** |
| | | * 符å·ï¼å·¦è±æ¬å· } |
| | | */ |
| | | public static final String LEFT_CURLY_BRACKET = "{"; |
| | | |
| | | /** |
| | | * 符å·ï¼å³è±æ¬å· } |
| | | */ |
| | | public static final String RIGHT_CURLY_BRACKET = "}"; |
| | | |
| | | /** |
| | | * 符å·ï¼äºå· # |
| | | */ |
| | | public static final String WELL_NUMBER = "#"; |
| | | |
| | | /** |
| | | * 符å·ï¼åææ |
| | | */ |
| | | public static final String SINGLE_SLASH = "/"; |
| | | |
| | | /** |
| | | * 符å·ï¼åææ |
| | | */ |
| | | public static final String DOUBLE_SLASH = "//"; |
| | | |
| | | /** |
| | | * 符å·ï¼æå¹å· |
| | | */ |
| | | public static final String EXCLAMATORY_MARK = "!"; |
| | | |
| | | /** |
| | | * 符å·ï¼ä¸å线 |
| | | */ |
| | | public static final String UNDERLINE = "_"; |
| | | |
| | | /** |
| | | * 符å·ï¼åå¼å· |
| | | */ |
| | | public static final String SINGLE_QUOTATION_MARK = "'"; |
| | | |
| | | /** |
| | | * 符å·ï¼æå· |
| | | */ |
| | | public static final String ASTERISK = "*"; |
| | | |
| | | /** |
| | | * 符å·ï¼ç¾åå· |
| | | */ |
| | | public static final String PERCENT_SIGN = "%"; |
| | | |
| | | /** |
| | | * 符å·ï¼ç¾å
$ |
| | | */ |
| | | public static final String DOLLAR = "$"; |
| | | |
| | | /** |
| | | * 符å·ï¼å & |
| | | */ |
| | | public static final String AND = "&"; |
| | | |
| | | /** |
| | | * 符å·ï¼../ |
| | | */ |
| | | public static final String SPOT_SINGLE_SLASH = "../"; |
| | | |
| | | /** |
| | | * 符å·ï¼..\\ |
| | | */ |
| | | public static final String SPOT_DOUBLE_BACKSLASH = "..\\"; |
| | | |
| | | /** |
| | | * ç³»ç»åéåç¼ #{ |
| | | */ |
| | | public static final String SYS_VAR_PREFIX = "#{"; |
| | | |
| | | /** |
| | | * ç¬¦å· {{ |
| | | */ |
| | | public static final String DOUBLE_LEFT_CURLY_BRACKET = "{{"; |
| | | |
| | | /** |
| | | * 符å·ï¼[ |
| | | */ |
| | | public static final String SQUARE_BRACKETS_LEFT = "["; |
| | | /** |
| | | * 符å·ï¼] |
| | | */ |
| | | public static final String SQUARE_BRACKETS_RIGHT = "]"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * @Description: TenantConstant |
| | | * @author: scott |
| | | * @date: 2022å¹´08æ29æ¥ 15:29 |
| | | */ |
| | | public interface TenantConstant { |
| | | /*------ãä½ä»£ç åºç¨åæ°ã----------------------------------------------*/ |
| | | /** |
| | | * headerçlowAppIdæ è¯ |
| | | */ |
| | | String X_LOW_APP_ID = "X-Low-App-ID"; |
| | | /** |
| | | * åºç¨IDââå®ä½å段 |
| | | */ |
| | | String FIELD_LOW_APP_ID = "lowAppId"; |
| | | /** |
| | | * åºç¨IDââè¡¨åæ®µ |
| | | */ |
| | | String DB_FIELD_LOW_APP_ID = "low_app_id"; |
| | | /*------ãä½ä»£ç åºç¨åæ°ã---------------------------------------------*/ |
| | | |
| | | /*--------ãç§æ·åæ°ã-----------------------------------------------*/ |
| | | /** |
| | | * ç§æ·IDï¼å®ä½å段å å urlåæ°åï¼ |
| | | */ |
| | | String TENANT_ID = "tenantId"; |
| | | /** |
| | | * ç§æ·ID æ°æ®åºå段å |
| | | */ |
| | | String TENANT_ID_TABLE = "tenant_id"; |
| | | /*-------ãç§æ·åæ°ã-----------------------------------------------*/ |
| | | |
| | | /** |
| | | * è¶
级管çå |
| | | */ |
| | | String SUPER_ADMIN = "superAdmin"; |
| | | |
| | | /** |
| | | * ç»ç»è´¦æ·ç®¡çå |
| | | */ |
| | | String ACCOUNT_ADMIN = "accountAdmin"; |
| | | |
| | | /** |
| | | * ç»ç»åºç¨ç®¡çå |
| | | */ |
| | | String APP_ADMIN = "appAdmin"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant; |
| | | |
| | | /** |
| | | * VXESocket 常é |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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"; |
| | | |
| | | /** |
| | | * æ¶æ¯json key:chat |
| | | */ |
| | | public static final String MSG_CHAT = "chat"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å heartcheck |
| | | */ |
| | | public static final String CMD_CHECK = "heartcheck"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å user ç¨æ·æ¶æ¯ |
| | | */ |
| | | public static final String CMD_USER = "user"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å topic ç³»ç»éç¥ |
| | | */ |
| | | public static final String CMD_TOPIC = "topic"; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å 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表åæä¸¾ 代ç çæå¨ç¨å° |
| | | * @author: jeecg-boot |
| | | */ |
| | | public enum CgformEnum { |
| | | |
| | | /** |
| | | * å表 |
| | | */ |
| | | ONE(1, "one", "/jeecg/code-template-online", "default.one", "ç»å
¸é£æ ¼", new String[]{"vue3","vue","vue3Native"}), |
| | | |
| | | /** |
| | | * å¤è¡¨ |
| | | */ |
| | | MANY(2, "many", "/jeecg/code-template-online", "default.onetomany", "ç»å
¸é£æ ¼" ,new String[]{"vue"}), |
| | | /** |
| | | * å¤è¡¨ï¼jvxe飿 ¼ï¼ |
| | | * */ |
| | | JVXE_TABLE(2, "jvxe", "/jeecg/code-template-online", "jvxe.onetomany", "JVXE飿 ¼" ,new String[]{"vue3","vue","vue3Native"}), |
| | | |
| | | /** |
| | | * å¤è¡¨ (erp飿 ¼) |
| | | */ |
| | | ERP(2, "erp", "/jeecg/code-template-online", "erp.onetomany", "ERP飿 ¼" ,new String[]{"vue3","vue"}), |
| | | /** |
| | | * å¤è¡¨ï¼å
åµåè¡¨é£æ ¼ï¼ |
| | | */ |
| | | INNER_TABLE(2, "innerTable", "/jeecg/code-template-online", "inner-table.onetomany", "å
åµåè¡¨é£æ ¼" ,new String[]{"vue3","vue"}), |
| | | /** |
| | | * å¤è¡¨ï¼tab飿 ¼ï¼ |
| | | * */ |
| | | TAB(2, "tab", "/jeecg/code-template-online", "tab.onetomany", "Tab飿 ¼" ,new String[]{"vue3","vue"}), |
| | | /** |
| | | * æ å½¢å表 |
| | | */ |
| | | TREE(3, "tree", "/jeecg/code-template-online", "default.tree", "æ å½¢å表" ,new String[]{"vue3","vue","vue3Native"}); |
| | | |
| | | /** |
| | | * ç±»å 1/å表 2/ä¸å¯¹å¤ 3/æ |
| | | */ |
| | | int type; |
| | | /** |
| | | * ç¼ç æ è¯ |
| | | */ |
| | | String code; |
| | | /** |
| | | * 代ç çæå¨æ¨¡æ¿è·¯å¾ |
| | | */ |
| | | String templatePath; |
| | | /** |
| | | * 代ç çæå¨æ¨¡æ¿è·¯å¾ |
| | | */ |
| | | String stylePath; |
| | | /** |
| | | * 模æ¿é£æ ¼åç§° |
| | | */ |
| | | String note; |
| | | /** |
| | | * æ¯æä»£ç 飿 ¼ vue3:vue3å
è£
代ç vue3Native:vue3åç代ç vue:vue2代ç |
| | | */ |
| | | String[] vueStyle; |
| | | |
| | | /** |
| | | * æé å¨ |
| | | * |
| | | * @param type ç±»å 1/å表 2/ä¸å¯¹å¤ 3/æ |
| | | * @param code 模æ¿ç¼ç |
| | | * @param templatePath 模æ¿è·¯å¾ |
| | | * @param stylePath 模æ¿åè·¯å¾ |
| | | * @param note |
| | | * @param vueStyle æ¯æä»£ç 飿 ¼ |
| | | */ |
| | | CgformEnum(int type, String code, String templatePath, String stylePath, String note, String[] vueStyle) { |
| | | this.type = type; |
| | | this.code = code; |
| | | this.templatePath = templatePath; |
| | | this.stylePath = stylePath; |
| | | this.note = note; |
| | | this.vueStyle = vueStyle; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®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; |
| | | } |
| | | |
| | | public String[] getVueStyle() { |
| | | return vueStyle; |
| | | } |
| | | |
| | | public void setVueStyle(String[] vueStyle) { |
| | | this.vueStyle = vueStyle; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®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; |
| | | |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | |
| | | /** |
| | | * æä»¶ç±»å |
| | | */ |
| | | public enum FileTypeEnum { |
| | | // ææ¡£ç±»åï¼folder:æä»¶å¤¹ excel:excel doc:word pp:ppt image:å¾ç archive:å
¶ä»ææ¡£ video:è§é¢ï¼ |
| | | // FOLDER |
| | | xls(".xls","excel","excel"), |
| | | xlsx(".xlsx","excel","excel"), |
| | | doc(".doc","doc","word"), |
| | | docx(".docx","doc","word"), |
| | | ppt(".ppt","pp","ppt"), |
| | | pptx(".pptx","pp","ppt"), |
| | | gif(".gif","image","å¾ç"), |
| | | jpg(".jpg","image","å¾ç"), |
| | | jpeg(".jpeg","image","å¾ç"), |
| | | png(".png","image","å¾ç"), |
| | | txt(".txt","text","ææ¬"), |
| | | avi(".avi","video","è§é¢"), |
| | | mov(".mov","video","è§é¢"), |
| | | rmvb(".rmvb","video","è§é¢"), |
| | | rm(".rm","video","è§é¢"), |
| | | flv(".flv","video","è§é¢"), |
| | | mp4(".mp4","video","è§é¢"), |
| | | zip(".zip","zip","å缩å
"), |
| | | pdf(".pdf","pdf","pdf"); |
| | | |
| | | private String type; |
| | | private String value; |
| | | private String text; |
| | | private FileTypeEnum(String type,String value,String text){ |
| | | this.type = type; |
| | | this.value = value; |
| | | this.text = text; |
| | | } |
| | | public String getType() { |
| | | return type; |
| | | } |
| | | |
| | | public void setType(String type) { |
| | | this.type = type; |
| | | } |
| | | |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | public void setValue(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | public String getText() { |
| | | return text; |
| | | } |
| | | |
| | | public void setText(String text) { |
| | | this.text = text; |
| | | } |
| | | |
| | | public static FileTypeEnum getByType(String type){ |
| | | if (oConvertUtils.isEmpty(type)) { |
| | | return null; |
| | | } |
| | | for (FileTypeEnum val : values()) { |
| | | if (val.getType().equals(type)) { |
| | | return val; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant.enums; |
| | | |
| | | /** |
| | | * LowApp å颿³¨è§£æä¸¾ |
| | | * @date 2022-1-5 |
| | | * @author: jeecg-boot |
| | | */ |
| | | public enum LowAppAopEnum { |
| | | |
| | | /** |
| | | * æ°å¢æ¹æ³ |
| | | */ |
| | | ADD, |
| | | /** |
| | | * å 餿¹æ³ï¼å
å«åä¸ªåæ¹éå é¤ï¼ |
| | | */ |
| | | DELETE, |
| | | /** å¤å¶è¡¨åæä½ */ |
| | | COPY, |
| | | |
| | | /** |
| | | * Online表åä¸ç¨ï¼æ°æ®åºè¡¨è½¬Online表å |
| | | */ |
| | | CGFORM_DB_IMPORT, |
| | | |
| | | /** |
| | | * 表å设计å¨ä¸ç¨ï¼å表转工ä½è¡¨ |
| | | */ |
| | | DESFORM_SUB2WORK |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant.enums; |
| | | |
| | | import org.jeecg.common.system.annotation.EnumDict; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å |
| | | * @author: jeecg-boot |
| | | */ |
| | | @EnumDict("messageType") |
| | | public enum MessageTypeEnum { |
| | | |
| | | /** ç³»ç»æ¶æ¯ */ |
| | | XT("system", "ç³»ç»æ¶æ¯"), |
| | | /** é®ä»¶æ¶æ¯ */ |
| | | YJ("email", "é®ä»¶æ¶æ¯"), |
| | | /** ééæ¶æ¯ */ |
| | | DD("dingtalk", "ééæ¶æ¯"), |
| | | /** ä¼ä¸å¾®ä¿¡ */ |
| | | QYWX("wechat_enterprise", "ä¼ä¸å¾®ä¿¡"); |
| | | |
| | | MessageTypeEnum(String type, String note){ |
| | | this.type = type; |
| | | this.note = note; |
| | | } |
| | | |
| | | /** |
| | | * æ¶æ¯ç±»å |
| | | */ |
| | | String type; |
| | | |
| | | /** |
| | | * ç±»å说æ |
| | | */ |
| | | String note; |
| | | |
| | | public String getNote() { |
| | | return note; |
| | | } |
| | | |
| | | public void setNote(String note) { |
| | | this.note = note; |
| | | } |
| | | |
| | | public String getType() { |
| | | return type; |
| | | } |
| | | |
| | | public void setType(String type) { |
| | | this.type = type; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·ååå
¸æ°æ® |
| | | * @return |
| | | */ |
| | | public static List<DictModel> getDictList(){ |
| | | List<DictModel> list = new ArrayList<>(); |
| | | DictModel dictModel = null; |
| | | for(MessageTypeEnum e: MessageTypeEnum.values()){ |
| | | dictModel = new DictModel(); |
| | | dictModel.setValue(e.getType()); |
| | | dictModel.setText(e.getNote()); |
| | | list.add(dictModel); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®typeè·åæä¸¾ |
| | | * |
| | | * @param type |
| | | * @return |
| | | */ |
| | | public static MessageTypeEnum valueOfType(String type) { |
| | | for (MessageTypeEnum e : MessageTypeEnum.values()) { |
| | | if (e.getType().equals(type)) { |
| | | return e; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant.enums; |
| | | |
| | | /** |
| | | * æ¥å¿ææ¨¡ååç±» |
| | | * @author: jeecg-boot |
| | | */ |
| | | public enum ModuleType { |
| | | |
| | | /** |
| | | * æ®é |
| | | */ |
| | | COMMON, |
| | | |
| | | /** |
| | | * online |
| | | */ |
| | | ONLINE; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant.enums; |
| | | |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | |
| | | /** |
| | | * @Description: æä½ç±»å |
| | | * @author: jeecg-boot |
| | | * @date: 2022/3/31 10:05 |
| | | */ |
| | | public enum OperateTypeEnum { |
| | | |
| | | /** |
| | | * å表 |
| | | */ |
| | | LIST(CommonConstant.OPERATE_TYPE_1, "list"), |
| | | |
| | | /** |
| | | * æ°å¢ |
| | | */ |
| | | ADD(CommonConstant.OPERATE_TYPE_2, "add"), |
| | | |
| | | /** |
| | | * ç¼è¾ |
| | | */ |
| | | EDIT(CommonConstant.OPERATE_TYPE_3, "edit"), |
| | | |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | DELETE(CommonConstant.OPERATE_TYPE_4, "delete"), |
| | | |
| | | /** |
| | | * 导å
¥ |
| | | */ |
| | | IMPORT(CommonConstant.OPERATE_TYPE_5, "import"), |
| | | |
| | | /** |
| | | * å¯¼åº |
| | | */ |
| | | EXPORT(CommonConstant.OPERATE_TYPE_6, "export"); |
| | | |
| | | /** |
| | | * ç±»å 1å表,2æ°å¢,3ç¼è¾,4å é¤,5导å
¥,6å¯¼åº |
| | | */ |
| | | int type; |
| | | |
| | | /** |
| | | * ç¼ç (è¯·æ±æ¹å¼) |
| | | */ |
| | | String code; |
| | | |
| | | |
| | | public int getType() { |
| | | return type; |
| | | } |
| | | |
| | | public void setType(int type) { |
| | | this.type = type; |
| | | } |
| | | |
| | | public String getCode() { |
| | | return code; |
| | | } |
| | | |
| | | public void setCode(String code) { |
| | | this.code = code; |
| | | } |
| | | |
| | | /** |
| | | * æé å¨ |
| | | * |
| | | * @param type ç±»å |
| | | * @param code ç¼ç (è¯·æ±æ¹å¼) |
| | | */ |
| | | OperateTypeEnum(int type, String code) { |
| | | this.type = type; |
| | | this.code = code; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ ¹æ®è¯·æ±åç§°å¹é
|
| | | * |
| | | * @param methodName 请æ±åç§° |
| | | * @return Integer ç±»å |
| | | */ |
| | | public static Integer getTypeByMethodName(String methodName) { |
| | | for (OperateTypeEnum e : OperateTypeEnum.values()) { |
| | | if (methodName.startsWith(e.getCode())) { |
| | | return e.getType(); |
| | | } |
| | | } |
| | | return CommonConstant.OPERATE_TYPE_1; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.constant.enums; |
| | | |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * é¦é¡µèªå®ä¹ |
| | | * éè¿è§è²ç¼ç ä¸é¦é¡µç»ä»¶è·¯å¾é
ç½® |
| | | * æä¸¾çé¡ºåºææéé«ä½æéä½ç¨ï¼ä¹å°±æ¯é
ç½®å¤ä¸ªè§è²ï¼å¨åé¢çè§è²é¦é¡µï¼ä¼ä¼å
çæï¼ |
| | | * @author: jeecg-boot |
| | | */ |
| | | public enum RoleIndexConfigEnum { |
| | | |
| | | /**é¦é¡µèªå®ä¹ admin*/ |
| | | ADMIN("admin", "dashboard/Analysis"), |
| | | //TEST("test", "dashboard/IndexChart"), |
| | | /**é¦é¡µèªå®ä¹ hr*/ |
| | | HR("hr", "dashboard/IndexBdc"); |
| | | //DM("dm", "dashboard/IndexTask"), |
| | | |
| | | /** |
| | | * è§è²ç¼ç |
| | | */ |
| | | String roleCode; |
| | | /** |
| | | * è·¯ç±index |
| | | */ |
| | | String componentUrl; |
| | | |
| | | /** |
| | | * æé å¨ |
| | | * |
| | | * @param roleCode è§è²ç¼ç |
| | | * @param componentUrl é¦é¡µç»ä»¶è·¯å¾ï¼è§åè·èåé
ç½®ä¸æ ·ï¼ |
| | | */ |
| | | RoleIndexConfigEnum(String roleCode, String componentUrl) { |
| | | this.roleCode = roleCode; |
| | | this.componentUrl = componentUrl; |
| | | } |
| | | /** |
| | | * æ ¹æ®codeæ¾æä¸¾ |
| | | * @param roleCode è§è²ç¼ç |
| | | * @return |
| | | */ |
| | | private static RoleIndexConfigEnum getEnumByCode(String roleCode) { |
| | | for (RoleIndexConfigEnum e : RoleIndexConfigEnum.values()) { |
| | | if (e.roleCode.equals(roleCode)) { |
| | | return e; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | /** |
| | | * æ ¹æ®codeæ¾index |
| | | * @param roleCode è§è²ç¼ç |
| | | * @return |
| | | */ |
| | | private 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) { |
| | | String[] rolesArray = roles.toArray(new String[roles.size()]); |
| | | for (RoleIndexConfigEnum e : RoleIndexConfigEnum.values()) { |
| | | if (oConvertUtils.isIn(e.roleCode,rolesArray)){ |
| | | 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.desensitization.annotation; |
| | | |
| | | import java.lang.annotation.*; |
| | | |
| | | /** |
| | | * è§£å¯æ³¨è§£ |
| | | * |
| | | * 卿¹æ³ä¸å®ä¹ å°æ¹æ³è¿å对象ä¸çææå段 è§£å¯ï¼éè¦æ³¨æçæ¯ï¼å¦ææ²¡æå å¯è¿ï¼è§£å¯ä¼åºé®é¢ï¼è¿ååå符串 |
| | | */ |
| | | @Documented |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Target({ElementType.METHOD}) |
| | | public @interface SensitiveDecode { |
| | | |
| | | /** |
| | | * ææéè¦è±æçå®ä½ç±»class |
| | | * @return |
| | | */ |
| | | Class entity() default Object.class; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.desensitization.annotation; |
| | | |
| | | import java.lang.annotation.*; |
| | | |
| | | /** |
| | | * å 坿³¨è§£ |
| | | * |
| | | * 卿¹æ³ä¸å£°æ å°æ¹æ³è¿å对象ä¸çææå段 å å¯/æ ¼å¼å |
| | | */ |
| | | @Documented |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Target({ElementType.METHOD}) |
| | | public @interface SensitiveEncode { |
| | | |
| | | /** |
| | | * ææéè¦è±æçå®ä½ç±»class |
| | | * @return |
| | | */ |
| | | Class entity() default Object.class; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.desensitization.annotation; |
| | | |
| | | |
| | | import org.jeecg.common.desensitization.enums.SensitiveEnum; |
| | | |
| | | import java.lang.annotation.*; |
| | | |
| | | /** |
| | | * å¨å段ä¸å®ä¹ æ è¯å段åå¨çä¿¡æ¯æ¯ææç |
| | | */ |
| | | @Documented |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Target(ElementType.FIELD) |
| | | public @interface SensitiveField { |
| | | |
| | | /** |
| | | * ä¸åç±»åå¤çä¸å |
| | | * @return |
| | | */ |
| | | SensitiveEnum type() default SensitiveEnum.ENCODE; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.desensitization.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.desensitization.annotation.SensitiveDecode; |
| | | import org.jeecg.common.desensitization.annotation.SensitiveEncode; |
| | | import org.jeecg.common.desensitization.util.SensitiveInfoUtil; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.reflect.Method; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æææ°æ®åé¢å¤çç±» |
| | | * @Author taoYan |
| | | * @Date 2022/4/20 17:45 |
| | | **/ |
| | | @Slf4j |
| | | @Aspect |
| | | @Component |
| | | public class SensitiveDataAspect { |
| | | |
| | | /** |
| | | * å®ä¹åç¹Pointcut |
| | | */ |
| | | @Pointcut("@annotation(org.jeecg.common.desensitization.annotation.SensitiveEncode) || @annotation(org.jeecg.common.desensitization.annotation.SensitiveDecode)") |
| | | public void sensitivePointCut() { |
| | | } |
| | | |
| | | @Around("sensitivePointCut()") |
| | | public Object around(ProceedingJoinPoint point) throws Throwable { |
| | | // å¤çç»æ |
| | | Object result = point.proceed(); |
| | | if(result == null){ |
| | | return result; |
| | | } |
| | | Class resultClass = result.getClass(); |
| | | log.debug(" resultClass = {}" , resultClass); |
| | | |
| | | if(resultClass.isPrimitive()){ |
| | | //æ¯åºæ¬ç±»å ç´æ¥è¿å ä¸éè¦å¤ç |
| | | return result; |
| | | } |
| | | // è·åæ¹æ³æ³¨è§£ä¿¡æ¯ï¼æ¯åªä¸ªå®ä½ãæ¯å å¯è¿æ¯è§£å¯ |
| | | boolean isEncode = true; |
| | | Class entity = null; |
| | | MethodSignature methodSignature = (MethodSignature) point.getSignature(); |
| | | Method method = methodSignature.getMethod(); |
| | | SensitiveEncode encode = method.getAnnotation(SensitiveEncode.class); |
| | | if(encode==null){ |
| | | SensitiveDecode decode = method.getAnnotation(SensitiveDecode.class); |
| | | if(decode!=null){ |
| | | entity = decode.entity(); |
| | | isEncode = false; |
| | | } |
| | | }else{ |
| | | entity = encode.entity(); |
| | | } |
| | | |
| | | long startTime=System.currentTimeMillis(); |
| | | if(resultClass.equals(entity) || entity.equals(Object.class)){ |
| | | // æ¹æ³è¿åå®ä½å注解çentity䏿 ·ï¼å¦ææ³¨è§£æ²¡æç³æentity屿§å认为æ¯(æ¹æ³è¿åå®ä½å注解çentity䏿 ·) |
| | | SensitiveInfoUtil.handlerObject(result, isEncode); |
| | | } else if(result instanceof List){ |
| | | // æ¹æ³è¿åList<å®ä½> |
| | | SensitiveInfoUtil.handleList(result, entity, isEncode); |
| | | }else{ |
| | | // æ¹æ³è¿åä¸ä¸ªå¯¹è±¡ |
| | | SensitiveInfoUtil.handleNestedObject(result, entity, isEncode); |
| | | } |
| | | long endTime=System.currentTimeMillis(); |
| | | log.info((isEncode ? "å 坿ä½ï¼" : "è§£å¯æä½ï¼") + "Aspectç¨åºèæ¶ï¼" + (endTime - startTime) + "ms"); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.desensitization.enums; |
| | | |
| | | /** |
| | | * ææå段信æ¯ç±»å |
| | | */ |
| | | public enum SensitiveEnum { |
| | | |
| | | |
| | | /** |
| | | * å å¯ |
| | | */ |
| | | ENCODE, |
| | | |
| | | /** |
| | | * 䏿å |
| | | */ |
| | | CHINESE_NAME, |
| | | |
| | | /** |
| | | * 身份è¯å· |
| | | */ |
| | | ID_CARD, |
| | | |
| | | /** |
| | | * 座æºå· |
| | | */ |
| | | FIXED_PHONE, |
| | | |
| | | /** |
| | | * ææºå· |
| | | */ |
| | | MOBILE_PHONE, |
| | | |
| | | /** |
| | | * å°å |
| | | */ |
| | | ADDRESS, |
| | | |
| | | /** |
| | | * çµåé®ä»¶ |
| | | */ |
| | | EMAIL, |
| | | |
| | | /** |
| | | * é¶è¡å¡ |
| | | */ |
| | | BANK_CARD, |
| | | |
| | | /** |
| | | * å
¬å¸å¼æ·é¶è¡èå· |
| | | */ |
| | | CNAPS_CODE; |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.desensitization.util; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.desensitization.annotation.SensitiveField; |
| | | import org.jeecg.common.desensitization.enums.SensitiveEnum; |
| | | import org.jeecg.common.util.encryption.AesEncryptUtil; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.lang.reflect.ParameterizedType; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * ææä¿¡æ¯å¤çå·¥å
·ç±» |
| | | * @author taoYan |
| | | * @date 2022/4/20 18:01 |
| | | **/ |
| | | @Slf4j |
| | | public class SensitiveInfoUtil { |
| | | |
| | | /** |
| | | * å¤çåµå¥å¯¹è±¡ |
| | | * @param obj æ¹æ³è¿åå¼ |
| | | * @param entity å®ä½class |
| | | * @param isEncode æ¯å¦å å¯ï¼true: å å¯æä½ / false:è§£å¯æä½ï¼ |
| | | * @throws IllegalAccessException |
| | | */ |
| | | public static void handleNestedObject(Object obj, Class entity, boolean isEncode) throws IllegalAccessException { |
| | | Field[] fields = obj.getClass().getDeclaredFields(); |
| | | for (Field field : fields) { |
| | | if(field.getType().isPrimitive()){ |
| | | continue; |
| | | } |
| | | if(field.getType().equals(entity)){ |
| | | // 对象é颿¯å®ä½ |
| | | field.setAccessible(true); |
| | | Object nestedObject = field.get(obj); |
| | | handlerObject(nestedObject, isEncode); |
| | | break; |
| | | }else{ |
| | | // 对象é颿¯List<å®ä½> |
| | | if(field.getGenericType() instanceof ParameterizedType){ |
| | | ParameterizedType pt = (ParameterizedType)field.getGenericType(); |
| | | if(pt.getRawType().equals(List.class)){ |
| | | if(pt.getActualTypeArguments()[0].equals(entity)){ |
| | | field.setAccessible(true); |
| | | Object nestedObject = field.get(obj); |
| | | handleList(nestedObject, entity, isEncode); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¤çObject |
| | | * @param obj æ¹æ³è¿åå¼ |
| | | * @param isEncode æ¯å¦å å¯ï¼true: å å¯æä½ / false:è§£å¯æä½ï¼ |
| | | * @return |
| | | * @throws IllegalAccessException |
| | | */ |
| | | public static Object handlerObject(Object obj, boolean isEncode) throws IllegalAccessException { |
| | | if (oConvertUtils.isEmpty(obj)) { |
| | | return obj; |
| | | } |
| | | long startTime=System.currentTimeMillis(); |
| | | log.debug(" obj --> "+ obj.toString()); |
| | | |
| | | // 夿æ¯ä¸æ¯ä¸ä¸ªå¯¹è±¡ |
| | | Field[] fields = obj.getClass().getDeclaredFields(); |
| | | for (Field field : fields) { |
| | | boolean isSensitiveField = field.isAnnotationPresent(SensitiveField.class); |
| | | if(isSensitiveField){ |
| | | // å¿
é¡»æSensitiveField注解 æä½å¤ç |
| | | if(field.getType().isAssignableFrom(String.class)){ |
| | | //å¿
é¡»æ¯åç¬¦ä¸²ç±»å æä½å¤ç |
| | | field.setAccessible(true); |
| | | String realValue = (String) field.get(obj); |
| | | if(realValue==null || "".equals(realValue)){ |
| | | continue; |
| | | } |
| | | SensitiveField sf = field.getAnnotation(SensitiveField.class); |
| | | if(isEncode==true){ |
| | | //å å¯ |
| | | String value = SensitiveInfoUtil.getEncodeData(realValue, sf.type()); |
| | | field.set(obj, value); |
| | | }else{ |
| | | //è§£å¯åªå¤ç encodeç±»åç |
| | | if(sf.type().equals(SensitiveEnum.ENCODE)){ |
| | | String value = SensitiveInfoUtil.getDecodeData(realValue); |
| | | field.set(obj, value); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //long endTime=System.currentTimeMillis(); |
| | | //log.info((isEncode ? "å 坿ä½ï¼" : "è§£å¯æä½ï¼") + "å½åç¨åºèæ¶ï¼" + (endTime - startTime) + "ms"); |
| | | return obj; |
| | | } |
| | | |
| | | /** |
| | | * å¤ç List<å®ä½> |
| | | * @param obj |
| | | * @param entity |
| | | * @param isEncodeï¼true: å å¯æä½ / false:è§£å¯æä½ï¼ |
| | | */ |
| | | public static void handleList(Object obj, Class entity, boolean isEncode){ |
| | | List list = (List)obj; |
| | | if(list.size()>0){ |
| | | Object first = list.get(0); |
| | | if(first.getClass().equals(entity)){ |
| | | for(int i=0; i<list.size(); i++){ |
| | | Object temp = list.get(i); |
| | | try { |
| | | handlerObject(temp, isEncode); |
| | | } catch (IllegalAccessException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å¤çæ°æ® è·åè§£å¯åçæ°æ® |
| | | * @param data |
| | | * @return |
| | | */ |
| | | public static String getDecodeData(String data){ |
| | | String result = null; |
| | | try { |
| | | result = AesEncryptUtil.desEncrypt(data); |
| | | } catch (Exception exception) { |
| | | log.debug("æ°æ®è§£å¯é误ï¼åæ°æ®:"+data); |
| | | } |
| | | //è§£å³debug模å¼ä¸ï¼å è§£å¯å¤±æå¯¼è´ä¸æè¢«è§£å¯åæç©ºçé®é¢ |
| | | if(oConvertUtils.isEmpty(result) && oConvertUtils.isNotEmpty(data)){ |
| | | result = data; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * å¤çæ°æ® è·åå å¯åçæ°æ® ææ¯æ ¼å¼ååçæ°æ® |
| | | * @param data å符串 |
| | | * @param sensitiveEnum ç±»å |
| | | * @return å¤çåçå符串 |
| | | */ |
| | | public static String getEncodeData(String data, SensitiveEnum sensitiveEnum){ |
| | | String result; |
| | | switch (sensitiveEnum){ |
| | | case ENCODE: |
| | | try { |
| | | result = AesEncryptUtil.encrypt(data); |
| | | } catch (Exception exception) { |
| | | log.error("æ°æ®å å¯é误", exception.getMessage()); |
| | | result = data; |
| | | } |
| | | break; |
| | | case CHINESE_NAME: |
| | | result = chineseName(data); |
| | | break; |
| | | case ID_CARD: |
| | | result = idCardNum(data); |
| | | break; |
| | | case FIXED_PHONE: |
| | | result = fixedPhone(data); |
| | | break; |
| | | case MOBILE_PHONE: |
| | | result = mobilePhone(data); |
| | | break; |
| | | case ADDRESS: |
| | | result = address(data, 3); |
| | | break; |
| | | case EMAIL: |
| | | result = email(data); |
| | | break; |
| | | case BANK_CARD: |
| | | result = bankCard(data); |
| | | break; |
| | | case CNAPS_CODE: |
| | | result = cnapsCode(data); |
| | | break; |
| | | default: |
| | | result = data; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * [䏿å§å] åªæ¾ç¤ºç¬¬ä¸ä¸ªæ±åï¼å
¶ä»éè为2个æå· |
| | | * @param fullName å
¨å |
| | | * @return <ä¾åï¼æ**> |
| | | */ |
| | | private static String chineseName(String fullName) { |
| | | if (oConvertUtils.isEmpty(fullName)) { |
| | | return ""; |
| | | } |
| | | return formatRight(fullName, 1); |
| | | } |
| | | |
| | | /** |
| | | * [䏿å§å] åªæ¾ç¤ºç¬¬ä¸ä¸ªæ±åï¼å
¶ä»éè为2个æå· |
| | | * @param familyName å§ |
| | | * @param firstName å |
| | | * @return <ä¾åï¼æ**> |
| | | */ |
| | | private static String chineseName(String familyName, String firstName) { |
| | | if (oConvertUtils.isEmpty(familyName) || oConvertUtils.isEmpty(firstName)) { |
| | | return ""; |
| | | } |
| | | return chineseName(familyName + firstName); |
| | | } |
| | | |
| | | /** |
| | | * [身份è¯å·] æ¾ç¤ºæååä½ï¼å
¶ä»éèãå
±è®¡18使è
15ä½ã |
| | | * @param id 身份è¯å· |
| | | * @return <ä¾åï¼*************5762> |
| | | */ |
| | | private static String idCardNum(String id) { |
| | | if (oConvertUtils.isEmpty(id)) { |
| | | return ""; |
| | | } |
| | | return formatLeft(id, 4); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * [åºå®çµè¯] ååä½ï¼å
¶ä»éè |
| | | * @param num åºå®çµè¯ |
| | | * @return <ä¾åï¼****1234> |
| | | */ |
| | | private static String fixedPhone(String num) { |
| | | if (oConvertUtils.isEmpty(num)) { |
| | | return ""; |
| | | } |
| | | return formatLeft(num, 4); |
| | | } |
| | | |
| | | /** |
| | | * [ææºå·ç ] åä¸ä½ï¼ååä½ï¼å
¶ä»éè |
| | | * @param num ææºå·ç |
| | | * @return <ä¾å:138******1234> |
| | | */ |
| | | private static String mobilePhone(String num) { |
| | | if (oConvertUtils.isEmpty(num)) { |
| | | return ""; |
| | | } |
| | | int len = num.length(); |
| | | if(len<11){ |
| | | return num; |
| | | } |
| | | return formatBetween(num, 3, 4); |
| | | } |
| | | |
| | | /** |
| | | * [å°å] åªæ¾ç¤ºå°å°åºï¼ä¸æ¾ç¤ºè¯¦ç»å°åï¼æä»¬è¦å¯¹ä¸ªäººä¿¡æ¯å¢å¼ºä¿æ¤ |
| | | * @param address å°å |
| | | * @param sensitiveSize ææä¿¡æ¯é¿åº¦ |
| | | * @return <ä¾åï¼åäº¬å¸æµ·æ·åº****> |
| | | */ |
| | | private static String address(String address, int sensitiveSize) { |
| | | if (oConvertUtils.isEmpty(address)) { |
| | | return ""; |
| | | } |
| | | int len = address.length(); |
| | | if(len<sensitiveSize){ |
| | | return address; |
| | | } |
| | | return formatRight(address, sensitiveSize); |
| | | } |
| | | |
| | | /** |
| | | * [çµåé®ç®±] é®ç®±åç¼ä»
æ¾ç¤ºç¬¬ä¸ä¸ªåæ¯ï¼åç¼å
¶ä»éèï¼ç¨æå·ä»£æ¿ï¼@ååé¢çå°åæ¾ç¤º |
| | | * @param email çµåé®ç®± |
| | | * @return <ä¾å:g**@163.com> |
| | | */ |
| | | private static String email(String email) { |
| | | if (oConvertUtils.isEmpty(email)) { |
| | | return ""; |
| | | } |
| | | int index = email.indexOf("@"); |
| | | if (index <= 1){ |
| | | return email; |
| | | } |
| | | String begin = email.substring(0, 1); |
| | | String end = email.substring(index); |
| | | String stars = "**"; |
| | | return begin + stars + end; |
| | | } |
| | | |
| | | /** |
| | | * [é¶è¡å¡å·] åå
ä½ï¼ååä½ï¼å
¶ä»ç¨æå·éèæ¯ä½1个æå· |
| | | * @param cardNum é¶è¡å¡å· |
| | | * @return <ä¾å:6222600**********1234> |
| | | */ |
| | | private static String bankCard(String cardNum) { |
| | | if (oConvertUtils.isEmpty(cardNum)) { |
| | | return ""; |
| | | } |
| | | return formatBetween(cardNum, 6, 4); |
| | | } |
| | | |
| | | /** |
| | | * [å
¬å¸å¼æ·é¶è¡èå·] å
¬å¸å¼æ·é¶è¡èè¡å·,æ¾ç¤ºå两ä½ï¼å
¶ä»ç¨æå·éèï¼æ¯ä½1个æå· |
| | | * @param code å
¬å¸å¼æ·é¶è¡èå· |
| | | * @return <ä¾å:12********> |
| | | */ |
| | | private static String cnapsCode(String code) { |
| | | if (oConvertUtils.isEmpty(code)) { |
| | | return ""; |
| | | } |
| | | return formatRight(code, 2); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°å³è¾¹çæ ¼å¼åæ* |
| | | * @param str å符串 |
| | | * @param reservedLength ä¿çé¿åº¦ |
| | | * @return æ ¼å¼ååçå符串 |
| | | */ |
| | | private static String formatRight(String str, int reservedLength){ |
| | | String name = str.substring(0, reservedLength); |
| | | String stars = String.join("", Collections.nCopies(str.length()-reservedLength, "*")); |
| | | return name + stars; |
| | | } |
| | | |
| | | /** |
| | | * å°å·¦è¾¹çæ ¼å¼åæ* |
| | | * @param str å符串 |
| | | * @param reservedLength ä¿çé¿åº¦ |
| | | * @return æ ¼å¼ååçå符串 |
| | | */ |
| | | private static String formatLeft(String str, int reservedLength){ |
| | | int len = str.length(); |
| | | String show = str.substring(len-reservedLength); |
| | | String stars = String.join("", Collections.nCopies(len-reservedLength, "*")); |
| | | return stars + show; |
| | | } |
| | | |
| | | /** |
| | | * å°ä¸é´çæ ¼å¼åæ* |
| | | * @param str å符串 |
| | | * @param beginLen å¼å§ä¿çé¿åº¦ |
| | | * @param endLen ç»å°¾ä¿çé¿åº¦ |
| | | * @return æ ¼å¼ååçå符串 |
| | | */ |
| | | private static String formatBetween(String str, int beginLen, int endLen){ |
| | | int len = str.length(); |
| | | String begin = str.substring(0, beginLen); |
| | | String end = str.substring(len-endLen); |
| | | String stars = String.join("", Collections.nCopies(len-beginLen-endLen, "*")); |
| | | return begin + stars + end; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /**es7*/ |
| | | public static final String IE_SEVEN = "7"; |
| | | |
| | | /**url not found 404*/ |
| | | public static final String URL_NOT_FOUND = "404 Not Found"; |
| | | |
| | | 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 |
| | | */ |
| | | private <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(IE_SEVEN)) { |
| | | 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(URL_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<>(5); |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: jeecg-bootèªå®ä¹401å¼å¸¸ |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: jeecg-bootèªå®ä¹å¼å¸¸ |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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 cn.hutool.core.util.ObjectUtil; |
| | | import org.apache.shiro.authz.AuthorizationException; |
| | | import org.apache.shiro.authz.UnauthorizedException; |
| | | import org.jeecg.common.api.vo.Result; |
| | | import org.jeecg.common.enums.SentinelErrorInfoEnum; |
| | | 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(JeecgCloudException.class) |
| | | public Result<?> handleJeecgCloudException(JeecgCloudException 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); |
| | | //update-begin---author:zyf ---date:20220411 forï¼å¤çSentineléæµèªå®ä¹å¼å¸¸ |
| | | Throwable throwable = e.getCause(); |
| | | SentinelErrorInfoEnum errorInfoEnum = SentinelErrorInfoEnum.getErrorByException(throwable); |
| | | if (ObjectUtil.isNotEmpty(errorInfoEnum)) { |
| | | return Result.error(errorInfoEnum.getError()); |
| | | } |
| | | //update-end---author:zyf ---date:20220411 forï¼å¤çSentineléæµèªå®ä¹å¼å¸¸ |
| | | 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); |
| | | //ãissues/3624ãæ°æ®åºæ§è¡å¼å¸¸handleDataIntegrityViolationExceptionæç¤ºæè¯¯ #3624 |
| | | 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.annotation; |
| | | |
| | | import java.lang.annotation.*; |
| | | |
| | | /** |
| | | * å°æä¸¾ç±»è½¬åæåå
¸æ°æ® |
| | | * @Author taoYan |
| | | * @Date 2022/7/8 10:34 |
| | | **/ |
| | | @Target(ElementType.TYPE) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Documented |
| | | public @interface EnumDict { |
| | | |
| | | /** |
| | | * ä½ä¸ºåå
¸æ°æ®çå¯ä¸ç¼ç |
| | | */ |
| | | String value() default ""; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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(); |
| | | |
| | | // è¿æ»¤é䏿°æ® |
| | | String selections = request.getParameter("selections"); |
| | | if (oConvertUtils.isNotEmpty(selections)) { |
| | | List<String> selectionList = Arrays.asList(selections.split(",")); |
| | | queryWrapper.in("id",selectionList); |
| | | } |
| | | // Step.2 è·åå¯¼åºæ°æ® |
| | | List<T> exportList = service.list(queryWrapper); |
| | | |
| | | // Step.3 AutoPoi 导åºExcel |
| | | ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); |
| | | //æ¤å¤è®¾ç½®çfilenameæ æ ,å端ä¼éæ´æ°è®¾ç½®ä¸ä¸ |
| | | mv.addObject(NormalExcelConstants.FILE_NAME, title); |
| | | 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); |
| | | //update-begin-author:liusq---date:20220629--for: å¤sheetå¯¼åºæ ¹æ®éæ©å¯¼åºåæ³è°æ´ --- |
| | | // Step.3 è¿æ»¤é䏿°æ® |
| | | String selections = request.getParameter("selections"); |
| | | if (oConvertUtils.isNotEmpty(selections)) { |
| | | List<String> selectionList = Arrays.asList(selections.split(",")); |
| | | queryWrapper.in("id",selectionList); |
| | | } |
| | | //update-end-author:liusq---date:20220629--for: å¤sheetå¯¼åºæ ¹æ®éæ©å¯¼åºåæ³è°æ´ --- |
| | | // Step.4 å¤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> exportList = pageList.getRecords(); |
| | | Map<String, Object> map = new HashMap<>(5); |
| | | ExportParams exportParams=new ExportParams(title + "æ¥è¡¨", "导åºäºº:" + sysUser.getRealname(), title+i,upLoadPath); |
| | | exportParams.setType(ExcelType.XSSF); |
| | | //map.put("title",exportParams); |
| | | //è¡¨æ ¼Title |
| | | map.put(NormalExcelConstants.PARAMS,exportParams); |
| | | //è¡¨æ ¼å¯¹åºå®ä½ |
| | | map.put(NormalExcelConstants.CLASS,clazz); |
| | | //æ°æ®éå |
| | | map.put(NormalExcelConstants.DATA_LIST, exportList); |
| | | listMap.add(map); |
| | | } |
| | | // Step.4 AutoPoi 导åºExcel |
| | | ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); |
| | | //æ¤å¤è®¾ç½®çfilenameæ æ ,å端ä¼éæ´æ°è®¾ç½®ä¸ä¸ |
| | | mv.addObject(NormalExcelConstants.FILE_NAME, title); |
| | | 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) { |
| | | //update-begin-author:taoyan date:20211124 for: 导å
¥æ°æ®éå¤å¢å æç¤º |
| | | String msg = e.getMessage(); |
| | | log.error(msg, e); |
| | | if(msg!=null && msg.indexOf("Duplicate entry")>=0){ |
| | | return Result.error("æä»¶å¯¼å
¥å¤±è´¥:æé夿°æ®ï¼"); |
| | | }else{ |
| | | return Result.error("æä»¶å¯¼å
¥å¤±è´¥:" + e.getMessage()); |
| | | } |
| | | //update-end-author:taoyan date:20211124 for: 导å
¥æ°æ®éå¤å¢å æç¤º |
| | | } 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("AND"), |
| | | /**æ¥è¯¢é¾æ¥è§å OR*/ |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: QueryCondition |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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.constant.SymbolConstant; |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | 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.TableField; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * @Description: æ¥è¯¢çæå¨ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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 = "_,%"; |
| | | |
| | | /**æ¥ææ ¼å¼åyyyy-MM-dd*/ |
| | | public static final String YYYY_MM_DD = "yyyy-MM-dd"; |
| | | |
| | | /**to_date*/ |
| | | public static final String TO_DATE = "to_date"; |
| | | |
| | | /**æ¶é´æ ¼å¼å */ |
| | | 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<>(5); |
| | | 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 è¿ç§åå带éå·çæ¯æåå²åæ¨¡ç³æ¥è¯¢(å¤éåæ®µæ¥è¯¢çæ) 示ä¾ï¼,1,3, |
| | | 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 -> { |
| | | log.info("---æ¥è¯¢è¿æ»¤å¨ï¼Queryè§å---field:{}, rule:{}, value:{}", field, "like", vals[0]); |
| | | j = j.like(field,vals[0]); |
| | | for (int k=1;k<vals.length;k++) { |
| | | j = j.or().like(field,vals[k]); |
| | | log.info("---æ¥è¯¢è¿æ»¤å¨ï¼Queryè§å .or()---field:{}, rule:{}, value:{}", field, "like", vals[k]); |
| | | } |
| | | //return j; |
| | | }); |
| | | }else { |
| | | log.info("---æ¥è¯¢è¿æ»¤å¨ï¼Queryè§å---field:{}, rule:{}, value:{}", field, "like", vals[0]); |
| | | 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, fieldColumnMap); |
| | | |
| | | //é«çº§æ¥è¯¢ |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | private static void doMultiFieldsOrder(QueryWrapper<?> queryWrapper,Map<String, String[]> parameterMap, Map<String,String> fieldColumnMap) { |
| | | Set<String> allFields = fieldColumnMap.keySet(); |
| | | 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.debug("æåºè§å>>å:" + column + ",æåºæ¹å¼:" + order); |
| | | |
| | | //update-begin-author:scott date:2022-11-07 for:é¿å
ç¨æ·èªå®ä¹è¡¨æ é»è®¤å段{å建æ¶é´}ï¼å¯¼è´æåºæ¥é |
| | | //TODO é¿å
ç¨æ·èªå®ä¹è¡¨æ é»è®¤å段å建æ¶é´ï¼å¯¼è´æåºæ¥é |
| | | if(DataBaseConstant.CREATE_TIME.equals(column) && !fieldColumnMap.containsKey(DataBaseConstant.CREATE_TIME)){ |
| | | column = "id"; |
| | | log.warn("æ£æµå°å®ä½é没æå段createTimeï¼æ¹æéç¨IDæåºï¼"); |
| | | } |
| | | //update-end-author:scott date:2022-11-07 for:é¿å
ç¨æ·èªå®ä¹è¡¨æ é»è®¤å段{å建æ¶é´}ï¼å¯¼è´æåºæ¥é |
| | | |
| | | if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { |
| | | //åå
¸å段ï¼å»æåå
¸ç¿»è¯ææ¬åç¼ |
| | | if(column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { |
| | | column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX)); |
| | | } |
| | | |
| | | //update-begin-author:taoyan date:2022-5-16 for: issues/3676 è·åç³»ç»ç¨æ·å表æ¶ï¼ä½¿ç¨SQL注å
¥çæ |
| | | //夿columnæ¯ä¸æ¯å½åå®ä½ç |
| | | log.debug("å½ååæ®µæï¼"+ allFields); |
| | | if (!allColumnExist(column, allFields)) { |
| | | throw new JeecgBootException("请注æï¼å°è¦æåºçååæ®µä¸åå¨ï¼" + column); |
| | | } |
| | | //update-end-author:taoyan date:2022-5-16 for: issues/3676 è·åç³»ç»ç¨æ·å表æ¶ï¼ä½¿ç¨SQL注å
¥çæ |
| | | |
| | | //update-begin-author:scott date:2022-10-10 for:ãjeecg-boot/issues/I5FJU6ãdoMultiFieldsOrder() å¤å段æåºæ¹æ³åå¨é®é¢ |
| | | //å¤å段æåºæ¹æ³æ²¡æè¯»å MybatisPlus 注解 @TableField é value çå¼ |
| | | if (column.contains(",")) { |
| | | List<String> columnList = Arrays.asList(column.split(",")); |
| | | String columnStrNew = columnList.stream().map(c -> fieldColumnMap.get(c)).collect(Collectors.joining(",")); |
| | | if (oConvertUtils.isNotEmpty(columnStrNew)) { |
| | | column = columnStrNew; |
| | | } |
| | | }else{ |
| | | column = fieldColumnMap.get(column); |
| | | } |
| | | //update-end-author:scott date:2022-10-10 for:ãjeecg-boot/issues/I5FJU6ãdoMultiFieldsOrder() å¤å段æåºæ¹æ³åå¨é®é¢ |
| | | |
| | | //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 夿¡ä»¶æåºæ æé®é¢ä¿®æ£------- |
| | | } |
| | | } |
| | | |
| | | //update-begin-author:taoyan date:2022-5-23 for: issues/3676 è·åç³»ç»ç¨æ·å表æ¶ï¼ä½¿ç¨SQL注å
¥çæ |
| | | /** |
| | | * å¤å段æåº 夿æä¼ åæ®µæ¯å¦åå¨ |
| | | * @return |
| | | */ |
| | | private static boolean allColumnExist(String columnStr, Set<String> allFields){ |
| | | boolean exist = true; |
| | | if(columnStr.indexOf(COMMA)>=0){ |
| | | String[] arr = columnStr.split(COMMA); |
| | | for(String column: arr){ |
| | | if(!allFields.contains(column)){ |
| | | exist = false; |
| | | break; |
| | | } |
| | | } |
| | | }else{ |
| | | exist = allFields.contains(columnStr); |
| | | } |
| | | return exist; |
| | | } |
| | | //update-end-author:taoyan date:2022-5-23 for: issues/3676 è·åç³»ç»ç¨æ·å表æ¶ï¼ä½¿ç¨SQL注å
¥çæ |
| | | |
| | | /** |
| | | * é«çº§æ¥è¯¢ |
| | | * @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; |
| | | } |
| | | // update-begin-author:sunjianlei date:20220119 for: ãJTC-573ã è¿æ»¤ç©ºæ¡ä»¶æ¥è¯¢ï¼é²æ¢ sql æ¼æ¥å¤ä½ç and |
| | | List<QueryCondition> filterConditions = conditions.stream().filter( |
| | | rule -> oConvertUtils.isNotEmpty(rule.getField()) |
| | | && oConvertUtils.isNotEmpty(rule.getRule()) |
| | | && oConvertUtils.isNotEmpty(rule.getVal()) |
| | | ).collect(Collectors.toList()); |
| | | if (filterConditions.size() == 0) { |
| | | return; |
| | | } |
| | | // update-end-author:sunjianlei date:20220119 for: ãJTC-573ã è¿æ»¤ç©ºæ¡ä»¶æ¥è¯¢ï¼é²æ¢ sql æ¼æ¥å¤ä½ç and |
| | | log.info("---é«çº§æ¥è¯¢åæ°-->" + filterConditions); |
| | | |
| | | queryWrapper.and(andWrapper -> { |
| | | for (int i = 0; i < filterConditions.size(); i++) { |
| | | QueryCondition rule = filterConditions.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; |
| | | default: |
| | | } |
| | | } 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 < (filterConditions.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 .>= =< |
| | | int length2 = 2; |
| | | int length3 = 3; |
| | | if (rule == null && val.length() >= length3) { |
| | | if(QUERY_SEPARATE_KEYWORD.equals(val.substring(length2, length3))){ |
| | | rule = QueryRuleEnum.getByValue(val.substring(0, 2)); |
| | | } |
| | | } |
| | | // step 1 .> < |
| | | if (rule == null && val.length() >= length2) { |
| | | if(QUERY_SEPARATE_KEYWORD.equals(val.substring(1, length2))){ |
| | | rule = QueryRuleEnum.getByValue(val.substring(0, 1)); |
| | | } |
| | | } |
| | | //update-end--Author:scott Date:20190724 forï¼initQueryWrapperç»è£
sqlæ¥è¯¢æ¡ä»¶é误 #284--------------------- |
| | | |
| | | // step 3 like |
| | | //update-begin-author:taoyan for: /issues/3382 é»è®¤å¸¦*就走模ç³ï¼ä½æ¯å¦æåªæä¸ä¸ª*ï¼é£ä¹èµ°çäºæ¥è¯¢ |
| | | if(rule == null && val.equals(STAR)){ |
| | | rule = QueryRuleEnum.EQ; |
| | | } |
| | | //update-end-author:taoyan for: /issues/3382 é»è®¤å¸¦*就走模ç³ï¼ä½æ¯å¦æåªæä¸ä¸ª*ï¼é£ä¹èµ°çäºæ¥è¯¢ |
| | | 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(); |
| | | //update-begin-author:taoyan date:20220302 for: æ¥è¯¢æ¡ä»¶çå¼ä¸ºçå·ï¼=ï¼bug #3443 |
| | | if(QueryRuleEnum.EQ.getValue().equals(val)){ |
| | | return val; |
| | | } |
| | | //update-end-author:taoyan date:20220302 for: æ¥è¯¢æ¡ä»¶çå¼ä¸ºçå·ï¼=ï¼bug #3443 |
| | | 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)) { |
| | | //update-begin--Author:sunjianlei Date:20220104 forï¼ãJTC-409ãä¿®å¤éå·å岿
åµä¸æ²¡æè½¬æ¢ç±»åï¼å¯¼è´ç±»åä¸¥æ ¼çæ°æ®åºæ¥è¯¢æ¥é ------------------- |
| | | // é对æ°åç±»ååæ®µï¼å¤å¼æ¥è¯¢ |
| | | if(value.contains(COMMA)){ |
| | | Object[] temp = Arrays.stream(value.split(COMMA)).map(v -> { |
| | | try { |
| | | return QueryGenerator.parseByType(v, type, rule); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | return v; |
| | | } |
| | | }).toArray(); |
| | | addEasyQuery(queryWrapper, name, rule, temp); |
| | | return; |
| | | } |
| | | Object temp = QueryGenerator.parseByType(value, type, rule); |
| | | addEasyQuery(queryWrapper, name, rule, temp); |
| | | //update-end--Author:sunjianlei Date:20220104 forï¼ãJTC-409ãä¿®å¤éå·å岿
åµä¸æ²¡æè½¬æ¢ç±»åï¼å¯¼è´ç±»åä¸¥æ ¼çæ°æ®åºæ¥è¯¢æ¥é ------------------- |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®ç±»å转æ¢ç»å®çå¼ |
| | | * @param value |
| | | * @param type |
| | | * @param rule |
| | | * @return |
| | | * @throws ParseException |
| | | */ |
| | | private static Object parseByType(String value, String type, QueryRuleEnum rule) throws ParseException { |
| | | Object temp; |
| | | 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; |
| | | } |
| | | return temp; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¥æç±»åçå¼ |
| | | * @param value |
| | | * @param rule |
| | | * @return |
| | | * @throws ParseException |
| | | */ |
| | | private static Date getDateQueryByRule(String value,QueryRuleEnum rule) throws ParseException { |
| | | Date date = null; |
| | | int length = 10; |
| | | if(value.length()==length) { |
| | | 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 æ¥è¯¢æ¡ä»¶å¼ |
| | | */ |
| | | public 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("---æ¥è¯¢è¿æ»¤å¨ï¼Queryè§å---field:{}, rule:{}, value:{}",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(COMMA)); |
| | | }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<>(5); |
| | | 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()); |
| | | int length = 10; |
| | | if(dateStr.length()==length){ |
| | | 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, QueryRuleEnum.LIKE); |
| | | break; |
| | | case LEFT_LIKE: |
| | | res = field + " like "+getLikeConditionValue(value, QueryRuleEnum.LEFT_LIKE); |
| | | break; |
| | | case RIGHT_LIKE: |
| | | res = field + " like "+getLikeConditionValue(value, QueryRuleEnum.RIGHT_LIKE); |
| | | 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(SymbolConstant.EXCLAMATORY_MARK)) { |
| | | str = str.substring(1); |
| | | }else if(str.startsWith(QueryRuleEnum.GE.getValue())) { |
| | | str = str.substring(2); |
| | | }else if(str.startsWith(QueryRuleEnum.LE.getValue())) { |
| | | str = str.substring(2); |
| | | }else if(str.startsWith(QueryRuleEnum.GT.getValue())) { |
| | | str = str.substring(1); |
| | | }else if(str.startsWith(QueryRuleEnum.LT.getValue())) { |
| | | 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(SymbolConstant.SINGLE_QUOTATION_MARK) && str.startsWith(SymbolConstant.SINGLE_QUOTATION_MARK)){ |
| | | 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æ¥é |
| | | } |
| | | |
| | | /** |
| | | * å
æ ¹æ®å¼å¤æ 走左模ç³è¿æ¯å³æ¨¡ç³ |
| | | * æå妿å¼ä¸å¸¦ä»»ä½æ è¯(*æè
%)ï¼ååæ ¹æ®ruleEnum夿 |
| | | * @param value |
| | | * @param ruleEnum |
| | | * @return |
| | | */ |
| | | private static String getLikeConditionValue(Object value, QueryRuleEnum ruleEnum) { |
| | | String str = value.toString().trim(); |
| | | if(str.startsWith(SymbolConstant.ASTERISK) && str.endsWith(SymbolConstant.ASTERISK)) { |
| | | 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(SymbolConstant.ASTERISK)) { |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ |
| | | return "N'%"+str.substring(1)+"'"; |
| | | }else{ |
| | | return "'%"+str.substring(1)+"'"; |
| | | } |
| | | }else if(str.endsWith(SymbolConstant.ASTERISK)) { |
| | | 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(SymbolConstant.PERCENT_SIGN)>=0) { |
| | | if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ |
| | | if(str.startsWith(SymbolConstant.SINGLE_QUOTATION_MARK) && str.endsWith(SymbolConstant.SINGLE_QUOTATION_MARK)){ |
| | | return "N"+str; |
| | | }else{ |
| | | return "N"+"'"+str+"'"; |
| | | } |
| | | }else{ |
| | | if(str.startsWith(SymbolConstant.SINGLE_QUOTATION_MARK) && str.endsWith(SymbolConstant.SINGLE_QUOTATION_MARK)){ |
| | | return str; |
| | | }else{ |
| | | return "'"+str+"'"; |
| | | } |
| | | } |
| | | }else { |
| | | |
| | | //update-begin-author:taoyan date:2022-6-30 for: issues/3810 æ°æ®æéè§åé®é¢ |
| | | // èµ°å°è¿é说æ valueä¸å¸¦æä»»ä½æ¨¡ç³æ¥è¯¢çæ è¯(*æè
%) |
| | | if (ruleEnum == QueryRuleEnum.LEFT_LIKE) { |
| | | if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())) { |
| | | return "N'%" + str + "'"; |
| | | } else { |
| | | return "'%" + str + "'"; |
| | | } |
| | | } else if (ruleEnum == QueryRuleEnum.RIGHT_LIKE) { |
| | | if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())) { |
| | | return "N'" + str + "%'"; |
| | | } else { |
| | | return "'" + str + "%'"; |
| | | } |
| | | } else { |
| | | if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())) { |
| | | return "N'%" + str + "%'"; |
| | | } else { |
| | | return "'%" + str + "%'"; |
| | | } |
| | | } |
| | | //update-end-author:taoyan date:2022-6-30 for: issues/3810 æ°æ®æéè§åé®é¢ |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æéç¸å
³é
ç½®çæç¸å
³ç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 sqlAnd = " and "; |
| | | for (String c : ruleMap.keySet()) { |
| | | if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ |
| | | sb.append(sqlAnd+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(sqlAnd+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 sqlAnd = " 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(sqlAnd+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(sqlAnd+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[] specialStr = QueryGenerator.LIKE_MYSQL_SPECIAL_STRS.split(","); |
| | | for (String str : specialStr) { |
| | | 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","带å å·çäº"), |
| | | // ------- å½å表å设计å¨å
ä¸ç¨ ------- |
| | | /** å¼ä¸ºç©º */ |
| | | EMPTY("EMPTY","empty","å¼ä¸ºç©º"), |
| | | /** å¼ä¸ä¸ºç©º */ |
| | | NOT_EMPTY("NOT_EMPTY","not_empty","å¼ä¸ä¸ºç©º"), |
| | | /**æ¥è¯¢è§å ä¸å
å«*/ |
| | | NOT_IN("NOT_IN","not_in","ä¸å
å«"), |
| | | // ------- å½å表å设计å¨å
ä¸ç¨ ------- |
| | | /**æ¥è¯¢è§å å¤è¯æ¨¡ç³å¹é
*/ |
| | | LIKE_WITH_AND("LIKEWITHAND","like_with_and","å¤è¯æ¨¡ç³å¹é
ââââææ¶æªç¨ä¸"), |
| | | /**æ¥è¯¢è§å èªå®ä¹SQLçæ®µ*/ |
| | | SQL_RULES("USE_SQL_RULES","ext","èªå®ä¹SQLçæ®µ"), |
| | | /**æ¥è¯¢è§å å¤è¯å¹é
*/ |
| | | ELE_MATCH("ELE_MATCH","elemMatch","å¤è¯å¹é
"), |
| | | /**æ¥è¯¢è§å èå´æ¥è¯¢*/ |
| | | RANGE("RANGE","range","èå´æ¥è¯¢"); |
| | | |
| | | 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") |
| | | // 1.å
ä»requestè·åMENU_DATA_AUTHOR_RULESï¼å¦æååè·åå°LIST |
| | | List<SysPermissionDataRuleModel> list = (List<SysPermissionDataRuleModel>)loadDataSearchConditon(); |
| | | if (list==null) { |
| | | // 2.妿ä¸åå¨ï¼ånewä¸ä¸ªlist |
| | | list = new ArrayList<SysPermissionDataRuleModel>(); |
| | | } |
| | | for (SysPermissionDataRuleModel tsDataRule : dataRules) { |
| | | list.add(tsDataRule); |
| | | } |
| | | // 3.å¾listéé¢å¢éåæ |
| | | request.setAttribute(MENU_DATA_AUTHOR_RULES, 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.constant.SymbolConstant; |
| | | import org.jeecg.common.constant.TenantConstant; |
| | | 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æææä¸º1å°æ¶ï¼Tokenå¨reidsä¸ç¼åæ¶é´ä¸ºä¸¤åï¼*/ |
| | | public static final long EXPIRE_TIME = 1000 * 24 * 60 * 60 * 1000; |
| | | static final String WELL_NUMBER = SymbolConstant.WELL_NUMBER + SymbolConstant.LEFT_CURLY_BRACKET; |
| | | |
| | | /** |
| | | * |
| | | * @param response |
| | | * @param code |
| | | * @param errorMsg |
| | | */ |
| | | public static void responseError(ServletResponse response, Integer code, String errorMsg) { |
| | | HttpServletResponse httpServletResponse = (HttpServletResponse) response; |
| | | // issues/I4YH95æµè§å¨æ¾ç¤ºä¹±ç é®é¢ |
| | | httpServletResponse.setHeader("Content-type", "text/html;charset=UTF-8"); |
| | | Result jsonResult = new Result(code, errorMsg); |
| | | jsonResult.setSuccess(false); |
| | | OutputStream os = null; |
| | | try { |
| | | os = httpServletResponse.getOutputStream(); |
| | | httpServletResponse.setCharacterEncoding("UTF-8"); |
| | | httpServletResponse.setStatus(code); |
| | | 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 = ""; |
| | | String wellNumber = WELL_NUMBER; |
| | | |
| | | if(key.indexOf(SymbolConstant.RIGHT_CURLY_BRACKET)!=-1){ |
| | | moshi = key.substring(key.indexOf("}")+1); |
| | | } |
| | | String returnValue = null; |
| | | if (key.contains(wellNumber)) { |
| | | 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 |
| | | */ |
| | | 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 = ""; |
| | | String wellNumber = WELL_NUMBER; |
| | | if(key.indexOf(SymbolConstant.RIGHT_CURLY_BRACKET)!=-1){ |
| | | moshi = key.substring(key.indexOf("}")+1); |
| | | } |
| | | String returnValue = null; |
| | | //éå¯¹ç¹æ®æ 示å¤ç#{sysOrgCode}ï¼å¤ææ¿æ¢ |
| | | if (key.contains(wellNumber)) { |
| | | 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(TenantConstant.TENANT_ID) || key.toLowerCase().equals(TenantConstant.TENANT_ID_TABLE)){ |
| | | 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.util; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.system.annotation.EnumDict; |
| | | import org.jeecg.common.system.vo.DictModel; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.core.io.Resource; |
| | | import org.springframework.core.io.support.PathMatchingResourcePatternResolver; |
| | | import org.springframework.core.io.support.ResourcePatternResolver; |
| | | import org.springframework.core.type.classreading.CachingMetadataReaderFactory; |
| | | import org.springframework.core.type.classreading.MetadataReader; |
| | | import org.springframework.core.type.classreading.MetadataReaderFactory; |
| | | import org.springframework.util.ClassUtils; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * èµæºå 载工å
·ç±» |
| | | * @Author taoYan |
| | | * @Date 2022/7/8 10:40 |
| | | **/ |
| | | @Slf4j |
| | | public class ResourceUtil { |
| | | |
| | | |
| | | /** |
| | | * æä¸¾åå
¸æ°æ® |
| | | */ |
| | | private final static Map<String, List<DictModel>> enumDictData = new HashMap<>(5); |
| | | |
| | | /** |
| | | * ææjavaç±» |
| | | */ |
| | | private final static String CLASS_PATTERN="/**/*.class"; |
| | | |
| | | /** |
| | | * æææä¸¾javaç±» |
| | | */ |
| | | |
| | | private final static String CLASS_ENMU_PATTERN="/**/*Enum.class"; |
| | | |
| | | /** |
| | | * å
è·¯å¾ org.jeecg |
| | | */ |
| | | private final static String BASE_PACKAGE = "org.jeecg"; |
| | | |
| | | /** |
| | | * æä¸¾ç±»ä¸è·ååå
¸æ°æ®çæ¹æ³å |
| | | */ |
| | | private final static String METHOD_NAME = "getDictList"; |
| | | |
| | | /** |
| | | * è·åæä¸¾ç±»å¯¹åºçåå
¸æ°æ® SysDictServiceImpl#queryAllDictItems() |
| | | * @return |
| | | */ |
| | | public static Map<String, List<DictModel>> getEnumDictData(){ |
| | | if(enumDictData.keySet().size()>0){ |
| | | return enumDictData; |
| | | } |
| | | ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); |
| | | String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + CLASS_ENMU_PATTERN; |
| | | try { |
| | | Resource[] resources = resourcePatternResolver.getResources(pattern); |
| | | MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resourcePatternResolver); |
| | | for (Resource resource : resources) { |
| | | MetadataReader reader = readerFactory.getMetadataReader(resource); |
| | | String classname = reader.getClassMetadata().getClassName(); |
| | | Class<?> clazz = Class.forName(classname); |
| | | EnumDict enumDict = clazz.getAnnotation(EnumDict.class); |
| | | if (enumDict != null) { |
| | | EnumDict annotation = clazz.getAnnotation(EnumDict.class); |
| | | String key = annotation.value(); |
| | | if(oConvertUtils.isNotEmpty(key)){ |
| | | List<DictModel> list = (List<DictModel>) clazz.getDeclaredMethod(METHOD_NAME).invoke(null); |
| | | enumDictData.put(key, list); |
| | | } |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("è·åæä¸¾ç±»åå
¸æ°æ®å¼å¸¸", e.getMessage()); |
| | | // e.printStackTrace(); |
| | | } |
| | | return enumDictData; |
| | | } |
| | | |
| | | /** |
| | | * ç¨äºå端åå
¸ç¿»è¯ SysDictServiceImpl#queryManyDictByKeys(java.util.List, java.util.List) |
| | | * @param dictCodeList |
| | | * @param keys |
| | | * @return |
| | | */ |
| | | public static Map<String, List<DictModel>> queryManyDictByKeys(List<String> dictCodeList, List<String> keys){ |
| | | if(enumDictData.keySet().size()==0){ |
| | | getEnumDictData(); |
| | | } |
| | | Map<String, List<DictModel>> map = new HashMap<>(); |
| | | for (String code : enumDictData.keySet()) { |
| | | if(dictCodeList.indexOf(code)>=0){ |
| | | List<DictModel> dictItemList = enumDictData.get(code); |
| | | for(DictModel dm: dictItemList){ |
| | | String value = dm.getValue(); |
| | | if(keys.indexOf(value)>=0){ |
| | | List<DictModel> list = new ArrayList<>(); |
| | | list.add(new DictModel(value, dm.getText())); |
| | | map.put(code,list); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: ææ¡£ç®¡ç |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | |
| | | /** |
| | | * @Description: åå
¸ç±» |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | } |
| | | /** |
| | | * ç¹æ®ç¨éï¼ vue3 Selectç»ä»¶ |
| | | */ |
| | | public String getLabel() { |
| | | return this.text; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | /** |
| | | * æ¥è¯¢å¤ä¸ªåå
¸æ¶ç¨å° |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class DictModelMany extends DictModel { |
| | | |
| | | /** |
| | | * åå
¸codeï¼æ ¹æ®å¤ä¸ªå段codeæ¥è¯¢æ¶æç¨å°ï¼ç¨äºåºåä¸åçåå
¸é项 |
| | | */ |
| | | private String dictCode; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * åå
¸æ¥è¯¢åæ°å®ä½ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | |
| | | /** |
| | | * @Description: æ°æ®æº |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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.jeecg.common.desensitization.annotation.SensitiveField; |
| | | 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 |
| | | */ |
| | | @SensitiveField |
| | | private String id; |
| | | |
| | | /** |
| | | * ç»å½äººè´¦å· |
| | | */ |
| | | @SensitiveField |
| | | private String username; |
| | | |
| | | /** |
| | | * ç»å½äººåå |
| | | */ |
| | | @SensitiveField |
| | | private String realname; |
| | | |
| | | /** |
| | | * ç»å½äººå¯ç |
| | | */ |
| | | @SensitiveField |
| | | private String password; |
| | | |
| | | /** |
| | | * å½åç»å½é¨é¨code |
| | | */ |
| | | private String orgCode; |
| | | /** |
| | | * 头å |
| | | */ |
| | | @SensitiveField |
| | | private String avatar; |
| | | |
| | | /** |
| | | * çæ¥ |
| | | */ |
| | | @SensitiveField |
| | | @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd") |
| | | private Date birthday; |
| | | |
| | | /** |
| | | * æ§å«ï¼1ï¼ç· 2ï¼å¥³ï¼ |
| | | */ |
| | | private Integer sex; |
| | | |
| | | /** |
| | | * çµåé®ä»¶ |
| | | */ |
| | | @SensitiveField |
| | | private String email; |
| | | |
| | | /** |
| | | * çµè¯ |
| | | */ |
| | | @SensitiveField |
| | | 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; |
| | | |
| | | /** |
| | | * èå¡ï¼å
³èèå¡è¡¨ |
| | | */ |
| | | @SensitiveField |
| | | private String post; |
| | | |
| | | /** |
| | | * 座æºå· |
| | | */ |
| | | @SensitiveField |
| | | private String telephone; |
| | | |
| | | /** å¤ç§æ·ids临æ¶ç¨ï¼ä¸æä¹
åæ°æ®åº(æ°æ®åºå段ä¸åå¨) */ |
| | | private String relTenantIds; |
| | | |
| | | /**设å¤id uniappæ¨éç¨*/ |
| | | private String clientId; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.system.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 䏿æ model |
| | | * |
| | | * @author jeecg-boot |
| | | */ |
| | | @Data |
| | | public class SelectTreeModel implements Serializable { |
| | | |
| | | private String key; |
| | | private String title; |
| | | private String value; |
| | | /** |
| | | * ç¶Id |
| | | */ |
| | | private String parentId; |
| | | /** |
| | | * æ¯å¦æ¯å¶èç¹ |
| | | */ |
| | | private boolean isLeaf; |
| | | /** |
| | | * åèç¹ |
| | | */ |
| | | private List<SelectTreeModel> children; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * é¨é¨æºæmodel |
| | | * @author: lvdandan |
| | | */ |
| | | 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; |
| | | |
| | | |
| | | /** |
| | | * @Description: ç³»ç»æä»¶å®ä½ç±» |
| | | * @author: wangshuai |
| | | * @date: 2022å¹´08æ11æ¥ 9:48 |
| | | */ |
| | | public class SysFilesModel { |
| | | /**主é®id*/ |
| | | private String id; |
| | | /**æä»¶åç§°*/ |
| | | private String fileName; |
| | | /**æä»¶å°å*/ |
| | | private String url; |
| | | /**ææ¡£ç±»åï¼folder:æä»¶å¤¹ excel:excel doc:word pp:ppt image:å¾ç archive:å
¶ä»ææ¡£ video:è§é¢ï¼*/ |
| | | private String fileType; |
| | | /**æä»¶ä¸ä¼ ç±»å(temp/æ¬å°ä¸ä¼ (ä¸´æ¶æä»¶) manage/ç¥è¯åº)*/ |
| | | private String storeType; |
| | | /**æä»¶å¤§å°ï¼kbï¼*/ |
| | | private Double fileSize; |
| | | |
| | | public String getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(String id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public String getFileName() { |
| | | return fileName; |
| | | } |
| | | |
| | | public void setFileName(String fileName) { |
| | | this.fileName = fileName; |
| | | } |
| | | |
| | | public String getUrl() { |
| | | return url; |
| | | } |
| | | |
| | | public void setUrl(String url) { |
| | | this.url = url; |
| | | } |
| | | |
| | | public String getFileType() { |
| | | return fileType; |
| | | } |
| | | |
| | | public void setFileType(String fileType) { |
| | | this.fileType = fileType; |
| | | } |
| | | |
| | | public String getStoreType() { |
| | | return storeType; |
| | | } |
| | | |
| | | public void setStoreType(String storeType) { |
| | | this.storeType = storeType; |
| | | } |
| | | |
| | | public Double getFileSize() { |
| | | return fileSize; |
| | | } |
| | | |
| | | public void setFileSize(Double fileSize) { |
| | | this.fileSize = fileSize; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: ç¨æ·ç¼åä¿¡æ¯ |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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.util; |
| | | |
| | | /** |
| | | * |
| | | * @Author å¼ ä»£æµ© |
| | | * |
| | | */ |
| | | public enum BrowserType { |
| | | /** |
| | | * æµè§ç±»å IE11,IE10,IE9,IE8,IE7,IE6,Firefox,Safari,Chrome,Opera,Camino,Gecko |
| | | */ |
| | | 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 |
| | | * @param request |
| | | * @return |
| | | */ |
| | | 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 = "å
¶å®"; |
| | | private final static String CAMINO = "Camino"; |
| | | |
| | | 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(); |
| | | String type = "(phone|pad|pod|iphone|ipod|ios|ipad|android|mobile|blackberry|iemobile|mqqbrowser|juc|fennec|wosbrowser|browserng|webos|symbian|windows phone)"; |
| | | Pattern pattern = Pattern.compile(type); |
| | | return pattern.matcher(ua).find(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | 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.constant.ServiceNameConstants; |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | 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.servlet.http.HttpServletRequest; |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: éç¨å·¥å
· |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Slf4j |
| | | public class CommonUtils { |
| | | |
| | | /** |
| | | * 䏿æ£å |
| | | */ |
| | | private static Pattern ZHONGWEN_PATTERN = Pattern.compile("[\u4e00-\u9fa5]"); |
| | | |
| | | /** |
| | | * æä»¶å æ£åå符串 |
| | | * æä»¶åæ¯æçå符串ï¼åæ¯æ°å䏿.-_()ï¼ï¼ 餿¤ä¹å¤çå符å°è¢«å é¤ |
| | | */ |
| | | private static String FILE_NAME_REGEX = "[^A-Za-z\\.\\(\\)\\-ï¼ï¼\\_0-9\\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",""); |
| | | //update-beign-author:taoyan date:20220302 for: /issues/3381 online å¨çº¿è¡¨å ä½¿ç¨æä»¶ç»ä»¶æ¶ï¼ä¸ä¼ æä»¶åä¸å«%ï¼ä¸è½½å¼å¸¸ |
| | | fileName = fileName.replaceAll(FILE_NAME_REGEX, ""); |
| | | //update-end-author:taoyan date:20220302 for: /issues/3381 online å¨çº¿è¡¨å ä½¿ç¨æä»¶ç»ä»¶æ¶ï¼ä¸ä¼ æä»¶åä¸å«%ï¼ä¸è½½å¼å¸¸ |
| | | return fileName; |
| | | } |
| | | |
| | | /** |
| | | * java 夿åç¬¦ä¸²éæ¯å¦å
å«ä¸æå符 |
| | | * @param str |
| | | * @return |
| | | */ |
| | | 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 = ""; |
| | | try { |
| | | if (CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)) { |
| | | url = MinioUtil.upload(file, bizPath); |
| | | } else { |
| | | url = OssBootUtil.upload(file, bizPath); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(), e); |
| | | } |
| | | 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(SymbolConstant.SPOT)!=-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(SymbolConstant.DOUBLE_BACKSLASH)) { |
| | | 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 = ""; |
| | | try { |
| | | if (CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)) { |
| | | url = MinioUtil.upload(file, bizPath, customBucket); |
| | | } else { |
| | | url = OssBootUtil.upload(file, bizPath, customBucket); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(),e); |
| | | } |
| | | 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().toUpperCase(); |
| | | String sqlserver= "SQL SERVER"; |
| | | if(dbType.indexOf(DataBaseConstant.DB_TYPE_MYSQL)>=0) { |
| | | DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; |
| | | }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_ORACLE)>=0 ||dbType.indexOf(DataBaseConstant.DB_TYPE_DM)>=0) { |
| | | DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; |
| | | }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_SQLSERVER)>=0||dbType.indexOf(sqlserver)>=0) { |
| | | DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; |
| | | }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_POSTGRESQL)>=0) { |
| | | DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL; |
| | | }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_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; |
| | | |
| | | } |
| | | /** |
| | | * è·åæå¡å¨å°å |
| | | * |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static String getBaseUrl(HttpServletRequest request) { |
| | | //1.ãå
¼å®¹ãå
¼å®¹å¾®æå¡ä¸ç base path------- |
| | | String xGatewayBasePath = request.getHeader(ServiceNameConstants.X_GATEWAY_BASE_PATH); |
| | | if(oConvertUtils.isNotEmpty(xGatewayBasePath)){ |
| | | log.info("x_gateway_base_path = "+ xGatewayBasePath); |
| | | return xGatewayBasePath; |
| | | } |
| | | //2.ãå
¼å®¹ãSSL认è¯ä¹åï¼request.getScheme()è·åä¸å°httpsçé®é¢ |
| | | // https://blog.csdn.net/weixin_34376986/article/details/89767950 |
| | | String scheme = request.getHeader(CommonConstant.X_FORWARDED_SCHEME); |
| | | if(oConvertUtils.isEmpty(scheme)){ |
| | | scheme = request.getScheme(); |
| | | } |
| | | |
| | | //3.å¸¸è§æä½ |
| | | String serverName = request.getServerName(); |
| | | int serverPort = request.getServerPort(); |
| | | String contextPath = request.getContextPath(); |
| | | |
| | | //è¿å host domain |
| | | String baseDomainPath = null; |
| | | int length = 80; |
| | | if(length == serverPort){ |
| | | baseDomainPath = scheme + "://" + serverName + contextPath ; |
| | | }else{ |
| | | baseDomainPath = scheme + "://" + serverName + ":" + serverPort + contextPath ; |
| | | } |
| | | log.debug("-----Common getBaseUrl----- : " + baseDomainPath); |
| | | return baseDomainPath; |
| | | } |
| | | |
| | | /** |
| | | * éå½åå¹¶ fastJSON 对象 |
| | | * |
| | | * @param target ç®æ 对象 |
| | | * @param sources æ¥æºå¯¹è±¡ï¼å
许å¤ä¸ªï¼ä¼å
级ä»å·¦å°å³ï¼æå³ä¾§çä¼å
级æé« |
| | | */ |
| | | public static JSONObject mergeJSON(JSONObject target, JSONObject... sources) { |
| | | for (JSONObject source : sources) { |
| | | CommonUtils.mergeJSON(target, source); |
| | | } |
| | | return target; |
| | | } |
| | | |
| | | /** |
| | | * éå½åå¹¶ fastJSON 对象 |
| | | * |
| | | * @param target ç®æ 对象 |
| | | * @param source æ¥æºå¯¹è±¡ |
| | | */ |
| | | public static JSONObject mergeJSON(JSONObject target, JSONObject source) { |
| | | for (String key : source.keySet()) { |
| | | Object sourceItem = source.get(key); |
| | | // æ¯å¦æ¯ JSONObject |
| | | if (sourceItem instanceof Map) { |
| | | // targetä¸å卿¤key |
| | | if (target.containsKey(key)) { |
| | | // ä¸¤ä¸ªé½æ¯ JSONObjectï¼ç»§ç»åå¹¶ |
| | | if (target.get(key) instanceof Map) { |
| | | CommonUtils.mergeJSON(target.getJSONObject(key), source.getJSONObject(key)); |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | // targetä¸å卿¤keyï¼æä¸æ¯ JSONObjectï¼åè¦ç |
| | | target.put(key, sourceItem); |
| | | } |
| | | return target; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.beans.PropertyEditorSupport; |
| | | import java.sql.Timestamp; |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.GregorianCalendar; |
| | | |
| | | /** |
| | | * ç±»æè¿°ï¼æ¶é´æä½å®ä¹ç±» |
| | | * |
| | | * @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> 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"); |
| | | } |
| | | }; |
| | | |
| | | /** |
| | | * 以毫ç§è¡¨ç¤ºçæ¶é´ |
| | | */ |
| | | 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; |
| | | |
| | | /** |
| | | * æå®æ¨¡å¼çæ¶é´æ ¼å¼ |
| | | * @param pattern |
| | | * @return |
| | | */ |
| | | 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 dateSdf æ¥ææ ¼å¼ |
| | | * @return å符串 |
| | | */ |
| | | public static String date2Str(SimpleDateFormat dateSdf) { |
| | | synchronized (dateSdf) { |
| | | Date date = getDate(); |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | return dateSdf.format(date); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¼å¼åæ¶é´ |
| | | * |
| | | * @param date |
| | | * @param format |
| | | * @return |
| | | */ |
| | | public static String dateformat(String date, String format) { |
| | | SimpleDateFormat sformat = new SimpleDateFormat(format); |
| | | Date nowDate = null; |
| | | try { |
| | | nowDate = sformat.parse(date); |
| | | } catch (ParseException e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | } |
| | | return sformat.format(nowDate); |
| | | } |
| | | |
| | | /** |
| | | * æ¥æè½¬æ¢ä¸ºå符串 |
| | | * |
| | | * @param date æ¥æ |
| | | * @param dateSdf æ¥ææ ¼å¼ |
| | | * @return å符串 |
| | | */ |
| | | public static String date2Str(Date date, SimpleDateFormat dateSdf) { |
| | | synchronized (dateSdf) { |
| | | if (null == date) { |
| | | return null; |
| | | } |
| | | return dateSdf.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) { |
| | | synchronized (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); |
| | | char year = 'y'; |
| | | char day = 'd'; |
| | | char hour = 'h'; |
| | | char minute = 'm'; |
| | | char second = 's'; |
| | | |
| | | if (flag == year) { |
| | | return (calSrc.get(Calendar.YEAR) - calDes.get(Calendar.YEAR)); |
| | | } |
| | | |
| | | if (flag == day) { |
| | | return (int) (millisDiff / DAY_IN_MILLIS); |
| | | } |
| | | |
| | | if (flag == hour) { |
| | | return (int) (millisDiff / HOUR_IN_MILLIS); |
| | | } |
| | | |
| | | if (flag == minute) { |
| | | return (int) (millisDiff / MINUTE_IN_MILLIS); |
| | | } |
| | | |
| | | if (flag == second) { |
| | | 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 { |
| | | int length10 = 10; |
| | | int length19 = 19; |
| | | if (text.indexOf(SymbolConstant.COLON) == -1 && text.length() == length10) { |
| | | setValue(DateUtils.date_sdf.get().parse(text)); |
| | | } else if (text.indexOf(SymbolConstant.COLON) > 0 && text.length() == length19) { |
| | | 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() { |
| | | GregorianCalendar calendar = new GregorianCalendar(); |
| | | calendar.setTime(getDate()); |
| | | return calendar.get(Calendar.YEAR); |
| | | } |
| | | |
| | | /** |
| | | * å°åç¬¦ä¸²è½¬ææ¶é´ |
| | | * @param str |
| | | * @return |
| | | */ |
| | | public static Date parseDatetime(String str){ |
| | | try { |
| | | return datetimeFormat.get().parse(str); |
| | | }catch (Exception e){ |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * å¤æä¸¤ä¸ªæ¶é´æ¯å¦æ¯åä¸å¤© |
| | | * |
| | | * @param date1 |
| | | * @param date2 |
| | | * @return |
| | | */ |
| | | public static boolean isSameDay(Date date1, Date date2) { |
| | | if (date1 == null || date2 == null) { |
| | | return false; |
| | | } |
| | | Calendar calendar1 = Calendar.getInstance(); |
| | | calendar1.setTime(date1); |
| | | Calendar calendar2 = Calendar.getInstance(); |
| | | calendar2.setTime(date2); |
| | | boolean isSameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR); |
| | | boolean isSameMonth = isSameYear && calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH); |
| | | return isSameMonth && calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH); |
| | | } |
| | | |
| | | /** |
| | | * å¤æä¸¤ä¸ªæ¶é´æ¯å¦æ¯åä¸å¨ |
| | | * |
| | | * @param date1 |
| | | * @param date2 |
| | | * @return |
| | | */ |
| | | public static boolean isSameWeek(Date date1, Date date2) { |
| | | if (date1 == null || date2 == null) { |
| | | return false; |
| | | } |
| | | Calendar calendar1 = Calendar.getInstance(); |
| | | calendar1.setTime(date1); |
| | | Calendar calendar2 = Calendar.getInstance(); |
| | | calendar2.setTime(date2); |
| | | boolean isSameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR); |
| | | return isSameYear && calendar1.get(Calendar.WEEK_OF_YEAR) == calendar2.get(Calendar.WEEK_OF_YEAR); |
| | | } |
| | | |
| | | /** |
| | | * å¤æä¸¤ä¸ªæ¶é´æ¯å¦æ¯å䏿 |
| | | * |
| | | * @param date1 |
| | | * @param date2 |
| | | * @return |
| | | */ |
| | | public static boolean isSameMonth(Date date1, Date date2) { |
| | | if (date1 == null || date2 == null) { |
| | | return false; |
| | | } |
| | | Calendar calendar1 = Calendar.getInstance(); |
| | | calendar1.setTime(date1); |
| | | Calendar calendar2 = Calendar.getInstance(); |
| | | calendar2.setTime(date2); |
| | | boolean isSameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR); |
| | | return isSameYear && calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH); |
| | | } |
| | | |
| | | /** |
| | | * å¤æä¸¤ä¸ªæ¶é´æ¯å¦æ¯åä¸å¹´ |
| | | * |
| | | * @param date1 |
| | | * @param date2 |
| | | * @return |
| | | */ |
| | | public static boolean isSameYear(Date date1, Date date2) { |
| | | if (date1 == null || date2 == null) { |
| | | return false; |
| | | } |
| | | Calendar calendar1 = Calendar.getInstance(); |
| | | calendar1.setTime(date1); |
| | | Calendar calendar2 = Calendar.getInstance(); |
| | | calendar2.setTime(date2); |
| | | return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * @Description: çä¿¡æä¸¾ç±» |
| | | * @author: jeecg-boot |
| | | */ |
| | | public enum DySmsEnum { |
| | | |
| | | /**ç»å½ç信模æ¿ç¼ç */ |
| | | LOGIN_TEMPLATE_CODE("SMS_175435174","æ²æ²äº","code"), |
| | | /**å¿è®°å¯ç ç信模æ¿ç¼ç */ |
| | | FORGET_PASSWORD_TEMPLATE_CODE("SMS_175435174","æ²æ²äº","code"), |
| | | /**注åè´¦å·ç信模æ¿ç¼ç */ |
| | | REGISTER_TEMPLATE_CODE("SMS_175430166","æ²æ²äº","code"), |
| | | /**ä¼è®®éç¥*/ |
| | | MEET_NOTICE_TEMPLATE_CODE("SMS_201480469","JEECG","username,title,minute,time"), |
| | | /**æç计åéç¥*/ |
| | | PLAN_NOTICE_TEMPLATE_CODE("SMS_201470515","JEECG","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 |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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()+"}"); |
| | | String ok = "OK"; |
| | | 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.pegdown.PegDownProcessor; |
| | | import org.springframework.web.util.HtmlUtils; |
| | | |
| | | /** |
| | | * HTML å·¥å
·ç±» |
| | | * @author: jeecg-boot |
| | | * @date: 2022/3/30 14:43 |
| | | */ |
| | | @SuppressWarnings("AlibabaClassNamingShouldBeCamel") |
| | | 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 ""; |
| | | } |
| | | |
| | | /** |
| | | * å°Markdownè§£ææHtml |
| | | * @param markdownContent |
| | | * @return |
| | | */ |
| | | public static String parseMarkdown(String markdownContent) { |
| | | PegDownProcessor pdp = new PegDownProcessor(); |
| | | return pdp.markdownToHtml(markdownContent); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 导åºè¿åä¿¡æ¯ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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 javax.servlet.http.HttpServletRequest; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | 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) || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("Proxy-Client-IP"); |
| | | } |
| | | if (StringUtils.isEmpty(ip) || ip.length() == 0 ||CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("WL-Proxy-Client-IP"); |
| | | } |
| | | if (StringUtils.isEmpty(ip) || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("HTTP_CLIENT_IP"); |
| | | } |
| | | if (StringUtils.isEmpty(ip) || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("HTTP_X_FORWARDED_FOR"); |
| | | } |
| | | if (StringUtils.isEmpty(ip) || CommonConstant.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 java.security.MessageDigest; |
| | | |
| | | /** |
| | | * @Description: å å¯å·¥å
· |
| | | * @author: jeecg-boot |
| | | */ |
| | | public class Md5Util { |
| | | |
| | | private static final String[] HEXDIGITS = { "0", "1", "2", "3", "4", "5", |
| | | "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; |
| | | |
| | | 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; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | import io.minio.*; |
| | | import io.minio.http.Method; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | 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æä»¶ä¸ä¼ å·¥å
·ç±» |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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) throws Exception { |
| | | String fileUrl = ""; |
| | | //update-begin-author:wangshuai date:20201012 for: è¿æ»¤ä¸ä¼ æä»¶å¤¹åç¹æ®å符ï¼é²æ¢æ»å» |
| | | bizPath = StrAttackFilter.filter(bizPath); |
| | | //update-end-author:wangshuai date:20201012 for: è¿æ»¤ä¸ä¼ æä»¶å¤¹åç¹æ®å符ï¼é²æ¢æ»å» |
| | | |
| | | //update-begin-author:liusq date:20210809 for: è¿æ»¤ä¸ä¼ æä»¶ç±»å |
| | | FileTypeFilter.fileTypeFilter(file); |
| | | //update-end-author:liusq date:20210809 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."); |
| | | } |
| | | 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(SymbolConstant.SINGLE_SLASH)){ |
| | | 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(); |
| | | fileUrl = minioUrl+newBucket+"/"+objectName; |
| | | }catch (Exception e){ |
| | | log.error(e.getMessage(), e); |
| | | } |
| | | return fileUrl; |
| | | } |
| | | |
| | | /** |
| | | * æä»¶ä¸ä¼ |
| | | * @param file |
| | | * @param bizPath |
| | | * @return |
| | | */ |
| | | public static String upload(MultipartFile file, String bizPath) throws Exception { |
| | | 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{ |
| | | //update-begin---author:liusq Date:20220121 forï¼è·åæä»¶å¤é¾æ¥éæç¤ºmethodä¸è½ä¸ºç©ºï¼å¯¼è´æä»¶ä¸è½½åé¢è§å¤±è´¥---- |
| | | GetPresignedObjectUrlArgs objectArgs = GetPresignedObjectUrlArgs.builder().object(objectName) |
| | | .bucket(bucketName) |
| | | .expiry(expires).method(Method.GET).build(); |
| | | //update-begin---author:liusq Date:20220121 forï¼è·åæä»¶å¤é¾æ¥éæç¤ºmethodä¸è½ä¸ºç©ºï¼å¯¼è´æä»¶ä¸è½½åé¢è§å¤±è´¥---- |
| | | 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; |
| | | |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | |
| | | /** |
| | | * @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; |
| | | } |
| | | |
| | | /** |
| | | * è·å¾ç±»çå
¨åï¼å
æ¬å
å |
| | | * @param object |
| | | * @return |
| | | */ |
| | | 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(); |
| | | String javaSpot="java."; |
| | | String javaxSpot="javax."; |
| | | // æ¤å¤ç®åå¤å®æ¯å¦æ¯Javaåºç¡ç±»åºï¼é²æ¢ç¨æ·ä¼ å
¥JDKå
ç½®çç±»åº |
| | | if (packName.startsWith(javaSpot) || packName.startsWith(javaxSpot)) { |
| | | throw new java.lang.IllegalArgumentException("ä¸è¦ä¼ éç³»ç»ç±»ï¼"); |
| | | } |
| | | // å¨ç±»çåç§°ä¸ï¼å»æå
åçé¨åï¼è·å¾ç±»çæä»¶å |
| | | clsName = clsName.substring(packName.length() + 1); |
| | | // å¤å®å
忝妿¯ç®åå
åï¼å¦ææ¯ï¼åç´æ¥å°å
å转æ¢ä¸ºè·¯å¾ï¼ |
| | | if (packName.indexOf(SymbolConstant.SPOT) < 0) { |
| | | path = packName + "/"; |
| | | } else { |
| | | // å¦åæç
§å
åçç»æé¨åï¼å°å
å转æ¢ä¸ºè·¯å¾ |
| | | int start = 0, end = 0; |
| | | end = packName.indexOf("."); |
| | | StringBuilder pathBuilder = new StringBuilder(); |
| | | while (end != -1) { |
| | | pathBuilder.append(packName, start, end).append("/"); |
| | | start = end + 1; |
| | | end = packName.indexOf(".", start); |
| | | } |
| | | if(oConvertUtils.isNotEmpty(pathBuilder.toString())){ |
| | | path = pathBuilder.toString(); |
| | | } |
| | | 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(SymbolConstant.EXCLAMATORY_MARK)) { |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: å¯ç å·¥å
·ç±» |
| | | * @author: jeecg-boot |
| | | */ |
| | | public class PasswordUtil { |
| | | |
| | | /** |
| | | * JAVA6æ¯æä»¥ä¸ä»»æä¸ç§ç®æ³ PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES |
| | | * PBEWITHSHAANDDESEDE PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1 |
| | | * */ |
| | | |
| | | /** |
| | | * å®ä¹ä½¿ç¨çç®æ³ä¸º:PBEWITHMD5andDESç®æ³ |
| | | * å å¯ç®æ³ |
| | | */ |
| | | public static final String ALGORITHM = "PBEWithMD5AndDES"; |
| | | |
| | | /** |
| | | * å®ä¹ä½¿ç¨çç®æ³ä¸º: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 || "".equals(hexString)) { |
| | | 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 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; |
| | | |
| | | /** |
| | | * @Description: PmsUtil |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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<>(5); |
| | | 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; |
| | | private static String path = null; |
| | | |
| | | private static String getDomain() { |
| | | if (domain == null) { |
| | | domain = SpringContextUtils.getDomain(); |
| | | // issues/2959 |
| | | // å¾®æå¡çéæä¼ä¸å¾®ä¿¡åç¹ç»å½ |
| | | // å 为微æå¡ç没æç«¯å£å·ï¼å¯¼è´ SpringContextUtils.getDomain() æ¹æ³è·åçååç端å£å·åæäº:-1æä»¥åºé®é¢äºï¼åªéè¦æè¿ä¸ª-1ç»å»æå°±å¯ä»¥äºã |
| | | String port=":-1"; |
| | | if (domain.endsWith(port)) { |
| | | domain = domain.substring(0, domain.length() - 3); |
| | | } |
| | | } |
| | | return domain; |
| | | } |
| | | |
| | | private 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 && !variables.isEmpty()) { |
| | | 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.CommonConstant; |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: springä¸ä¸æå·¥å
·ç±» |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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(); |
| | | //1.å¾®æå¡æ
åµä¸ï¼è·ågatewayçbasePath |
| | | String basePath = request.getHeader(ServiceNameConstants.X_GATEWAY_BASE_PATH); |
| | | if(oConvertUtils.isNotEmpty(basePath)){ |
| | | return basePath; |
| | | }else{ |
| | | String domain = url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); |
| | | //2.ãå
¼å®¹ãSSL认è¯ä¹åï¼request.getScheme()è·åä¸å°httpsçé®é¢ |
| | | // https://blog.csdn.net/weixin_34376986/article/details/89767950 |
| | | String scheme = request.getHeader(CommonConstant.X_FORWARDED_SCHEME); |
| | | if(scheme!=null && !request.getScheme().equals(scheme)){ |
| | | domain = domain.replace(request.getScheme(),scheme); |
| | | } |
| | | return domain; |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | import java.lang.reflect.Field; |
| | | import java.util.Set; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * sql注å
¥å¤çå·¥å
·ç±» |
| | | * |
| | | * @author zhoujf |
| | | */ |
| | | @Slf4j |
| | | public class SqlInjectionUtil { |
| | | /** |
| | | * sign ç¨äºè¡¨åå
¸å ç¾ççå¼ãSQLæ¼æ´ã |
| | | * ï¼ä¸çº¿ä¿®æ¹å¼ 20200501ï¼åæ¥ä¿®æ¹å端ççå¼ï¼ |
| | | */ |
| | | private final static String TABLE_DICT_SIGN_SALT = "20200501"; |
| | | private final static String XSS_STR = "and |extractvalue|updatexml|geohash|gtid_subset|gtid_subtract|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+|user()"; |
| | | |
| | | /** |
| | | * æ£å user() å¹é
æ´ä¸¥è°¨ |
| | | */ |
| | | private final static String REGULAR_EXPRE_USER = "user[\\s]*\\([\\s]*\\)"; |
| | | /**æ£å show tables*/ |
| | | private final static String SHOW_TABLES = "show\\s+tables"; |
| | | |
| | | /** |
| | | * sql注éçæ£å |
| | | */ |
| | | private final static Pattern SQL_ANNOTATION = Pattern.compile("/\\*[\\s\\S]*\\*/"); |
| | | |
| | | /** |
| | | * é对表åå
¸è¿è¡é¢å¤ç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 |
| | | */ |
| | | public static void filterContent(String value) { |
| | | filterContent(value, null); |
| | | } |
| | | |
| | | /** |
| | | * sql注å
¥è¿æ»¤å¤çï¼éå°æ³¨å
¥å
³é®åæå¼å¸¸ |
| | | * |
| | | * @param value |
| | | * @return |
| | | */ |
| | | public static void filterContent(String value, String customXssString) { |
| | | if (value == null || "".equals(value)) { |
| | | return; |
| | | } |
| | | // æ ¡éªsql注é ä¸å
许æsql注é |
| | | checkSqlAnnotation(value); |
| | | // ç»ä¸è½¬ä¸ºå°å |
| | | value = value.toLowerCase(); |
| | | //SQL注å
¥æ£æµåå¨ç»è¿é£é© https://gitee.com/jeecg/jeecg-boot/issues/I4NZGE |
| | | //value = value.replaceAll("/\\*.*\\*/",""); |
| | | |
| | | String[] xssArr = XSS_STR.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); |
| | | } |
| | | } |
| | | //update-begin-author:taoyan date:2022-7-13 for: é¤äºXSS_STRè¿äºæå设置好çï¼è¿éè¦é¢å¤çæ ¡éªæ¯å¦ åå¼å· |
| | | if (customXssString != null) { |
| | | String[] xssArr2 = customXssString.split("\\|"); |
| | | for (int i = 0; i < xssArr2.length; i++) { |
| | | if (value.indexOf(xssArr2[i]) > -1) { |
| | | log.error("请注æï¼åå¨SQL注å
¥å
³é®è¯---> {}", xssArr2[i]); |
| | | log.error("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!---> {}", value); |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | } |
| | | } |
| | | //update-end-author:taoyan date:2022-7-13 for: é¤äºXSS_STRè¿äºæå设置好çï¼è¿éè¦é¢å¤çæ ¡éªæ¯å¦ åå¼å· |
| | | if(Pattern.matches(SHOW_TABLES, value) || Pattern.matches(REGULAR_EXPRE_USER, value)){ |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | /** |
| | | * sql注å
¥è¿æ»¤å¤çï¼éå°æ³¨å
¥å
³é®åæå¼å¸¸ |
| | | * @param values |
| | | */ |
| | | public static void filterContent(String[] values) { |
| | | filterContent(values, null); |
| | | } |
| | | |
| | | /** |
| | | * sql注å
¥è¿æ»¤å¤çï¼éå°æ³¨å
¥å
³é®åæå¼å¸¸ |
| | | * |
| | | * @param values |
| | | * @return |
| | | */ |
| | | public static void filterContent(String[] values, String customXssString) { |
| | | String[] xssArr = XSS_STR.split("\\|"); |
| | | for (String value : values) { |
| | | if (value == null || "".equals(value)) { |
| | | return; |
| | | } |
| | | // æ ¡éªsql注é ä¸å
许æsql注é |
| | | checkSqlAnnotation(value); |
| | | // ç»ä¸è½¬ä¸ºå°å |
| | | value = value.toLowerCase(); |
| | | //SQL注å
¥æ£æµåå¨ç»è¿é£é© https://gitee.com/jeecg/jeecg-boot/issues/I4NZGE |
| | | //value = value.replaceAll("/\\*.*\\*/",""); |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | //update-begin-author:taoyan date:2022-7-13 for: é¤äºXSS_STRè¿äºæå设置好çï¼è¿éè¦é¢å¤çæ ¡éªæ¯å¦ åå¼å· |
| | | if (customXssString != null) { |
| | | String[] xssArr2 = customXssString.split("\\|"); |
| | | for (int i = 0; i < xssArr2.length; i++) { |
| | | if (value.indexOf(xssArr2[i]) > -1) { |
| | | log.error("请注æï¼åå¨SQL注å
¥å
³é®è¯---> {}", xssArr2[i]); |
| | | log.error("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!---> {}", value); |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | } |
| | | } |
| | | //update-end-author:taoyan date:2022-7-13 for: é¤äºXSS_STRè¿äºæå设置好çï¼è¿éè¦é¢å¤çæ ¡éªæ¯å¦ åå¼å· |
| | | if(Pattern.matches(SHOW_TABLES, value) || Pattern.matches(REGULAR_EXPRE_USER, value)){ |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | |
| | | /** |
| | | * ãæéï¼ä¸éç¨ã |
| | | * ä»
ç¨äºåå
¸æ¡ä»¶SQLåæ°ï¼æ³¨å
¥è¿æ»¤ |
| | | * |
| | | * @param value |
| | | * @return |
| | | */ |
| | | //@Deprecated |
| | | public static void specialFilterContentForDictSql(String value) { |
| | | String specialXssStr = " exec |extractvalue|updatexml|geohash|gtid_subset|gtid_subtract| insert | select | delete | update | drop | count | chr | mid | master | truncate | char | declare |;|+|user()"; |
| | | String[] xssArr = specialXssStr.split("\\|"); |
| | | if (value == null || "".equals(value)) { |
| | | return; |
| | | } |
| | | // æ ¡éªsql注é ä¸å
许æsql注é |
| | | checkSqlAnnotation(value); |
| | | // ç»ä¸è½¬ä¸ºå°å |
| | | value = value.toLowerCase(); |
| | | //SQL注å
¥æ£æµåå¨ç»è¿é£é© https://gitee.com/jeecg/jeecg-boot/issues/I4NZGE |
| | | //value = value.replaceAll("/\\*.*\\*/",""); |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | if(Pattern.matches(SHOW_TABLES, value) || Pattern.matches(REGULAR_EXPRE_USER, value)){ |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * ãæéï¼ä¸éç¨ã |
| | | * ä»
ç¨äºOnlineæ¥è¡¨SQLè§£æï¼æ³¨å
¥è¿æ»¤ |
| | | * @param value |
| | | * @return |
| | | */ |
| | | //@Deprecated |
| | | public static void specialFilterContentForOnlineReport(String value) { |
| | | String specialXssStr = " exec |extractvalue|updatexml|geohash|gtid_subset|gtid_subtract| insert | delete | update | drop | chr | mid | master | truncate | char | declare |user()"; |
| | | String[] xssArr = specialXssStr.split("\\|"); |
| | | if (value == null || "".equals(value)) { |
| | | return; |
| | | } |
| | | // æ ¡éªsql注é ä¸å
许æsql注é |
| | | checkSqlAnnotation(value); |
| | | // ç»ä¸è½¬ä¸ºå°å |
| | | value = value.toLowerCase(); |
| | | //SQL注å
¥æ£æµåå¨ç»è¿é£é© https://gitee.com/jeecg/jeecg-boot/issues/I4NZGE |
| | | //value = value.replaceAll("/\\*.*\\*/"," "); |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | if(Pattern.matches(SHOW_TABLES, value) || Pattern.matches(REGULAR_EXPRE_USER, value)){ |
| | | throw new RuntimeException("请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©!--->" + value); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 夿ç»å®çåæ®µæ¯ä¸æ¯ç±»ä¸ç屿§ |
| | | * @param field åæ®µå |
| | | * @param clazz 类对象 |
| | | * @return |
| | | */ |
| | | public static boolean isClassField(String field, Class clazz){ |
| | | Field[] fields = clazz.getDeclaredFields(); |
| | | for(int i=0;i<fields.length;i++){ |
| | | String fieldName = fields[i].getName(); |
| | | String tableColumnName = oConvertUtils.camelToUnderline(fieldName); |
| | | if(fieldName.equalsIgnoreCase(field) || tableColumnName.equalsIgnoreCase(field)){ |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 夿ç»å®çå¤ä¸ªå段æ¯ä¸æ¯ç±»ä¸ç屿§ |
| | | * @param fieldSet åæ®µåset |
| | | * @param clazz 类对象 |
| | | * @return |
| | | */ |
| | | public static boolean isClassField(Set<String> fieldSet, Class clazz){ |
| | | Field[] fields = clazz.getDeclaredFields(); |
| | | for(String field: fieldSet){ |
| | | boolean exist = false; |
| | | for(int i=0;i<fields.length;i++){ |
| | | String fieldName = fields[i].getName(); |
| | | String tableColumnName = oConvertUtils.camelToUnderline(fieldName); |
| | | if(fieldName.equalsIgnoreCase(field) || tableColumnName.equalsIgnoreCase(field)){ |
| | | exist = true; |
| | | break; |
| | | } |
| | | } |
| | | if(!exist){ |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªæ¯å¦æsql注é |
| | | * @return |
| | | */ |
| | | public static void checkSqlAnnotation(String str){ |
| | | Matcher matcher = SQL_ANNOTATION.matcher(str); |
| | | if(matcher.find()){ |
| | | String error = "请注æï¼å¼å¯è½åå¨SQL注å
¥é£é©---> \\*.*\\"; |
| | | log.error(error); |
| | | throw new RuntimeException(error); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util; |
| | | |
| | | /** |
| | | * ç³»ç»å
¬åèªå®ä¹è·³è½¬æ¹å¼ |
| | | * @author: jeecg-boot |
| | | */ |
| | | public enum SysAnnmentTypeEnum { |
| | | /** |
| | | * é®ä»¶è·³è½¬ç»ä»¶ |
| | | */ |
| | | EMAIL("email", "component", "modules/eoa/email/modals/EoaEmailInForm"), |
| | | /** |
| | | * æµç¨è·³è½¬å°æçä»»å¡ |
| | | */ |
| | | BPM("bpm", "url", "/bpm/task/MyTaskList"); |
| | | |
| | | /** |
| | | * ä¸å¡ç±»å(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.CacheConstant; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.TenantConstant; |
| | | import org.jeecg.common.desensitization.util.SensitiveInfoUtil; |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | | * è·å request éä¼ éç tenantId (ç§æ·ID) |
| | | * |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static String getTenantIdByRequest(HttpServletRequest request) { |
| | | String tenantId = request.getParameter(TenantConstant.TENANT_ID); |
| | | if (tenantId == null) { |
| | | tenantId = oConvertUtils.getString(request.getHeader(CommonConstant.TENANT_ID)); |
| | | } |
| | | return tenantId; |
| | | } |
| | | |
| | | /** |
| | | * è·å request éä¼ éç lowAppId (ä½ä»£ç åºç¨ID) |
| | | * |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static String getLowAppIdByRequest(HttpServletRequest request) { |
| | | String lowAppId = request.getParameter(TenantConstant.FIELD_LOW_APP_ID); |
| | | if (lowAppId == null) { |
| | | lowAppId = oConvertUtils.getString(request.getHeader(TenantConstant.X_LOW_APP_ID)); |
| | | } |
| | | return lowAppId; |
| | | } |
| | | |
| | | /** |
| | | * éªè¯Token |
| | | */ |
| | | public static boolean verifyToken(HttpServletRequest request, CommonAPI commonApi, RedisUtil redisUtil) { |
| | | log.debug(" -- url --" + request.getRequestURL()); |
| | | String token = getTokenByRequest(request); |
| | | return TokenUtils.verifyToken(token, commonApi, redisUtil); |
| | | } |
| | | |
| | | /** |
| | | * éªè¯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 = TokenUtils.getLoginUser(username, commonApi, redisUtil); |
| | | //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 = oConvertUtils.getString(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); |
| | | } |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * è·åç»å½ç¨æ· |
| | | * |
| | | * @param commonApi |
| | | * @param username |
| | | * @return |
| | | */ |
| | | public static LoginUser getLoginUser(String username, CommonAPI commonApi, RedisUtil redisUtil) { |
| | | LoginUser loginUser = null; |
| | | String loginUserKey = CacheConstant.SYS_USERS_CACHE + "::" + username; |
| | | //ãéè¦ãæ¤å¤éè¿redisåçè·åç¼åç¨æ·ï¼æ¯ä¸ºäºè§£å³å¾®æå¡ä¸systemæå¡æäºï¼å
¶ä»æå¡äºè°ä¸éé®é¢--- |
| | | if (redisUtil.hasKey(loginUserKey)) { |
| | | try { |
| | | loginUser = (LoginUser) redisUtil.get(loginUserKey); |
| | | //è§£å¯ç¨æ· |
| | | SensitiveInfoUtil.handlerObject(loginUser, false); |
| | | } catch (IllegalAccessException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } else { |
| | | // æ¥è¯¢ç¨æ·ä¿¡æ¯ |
| | | loginUser = commonApi.getUserByName(username); |
| | | } |
| | | return loginUser; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | int length = 4; |
| | | for (int i = 0; i < length; 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 NUM_LENGTH = 2; |
| | | |
| | | public static final int ZHANWEI_LENGTH = 1+ NUM_LENGTH; |
| | | |
| | | public static final char LETTER= 'Z'; |
| | | |
| | | /** |
| | | * æ ¹æ®åä¸ä¸ª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 beforeCode = code.substring(0, code.length() - 1- NUM_LENGTH); |
| | | String afterCode = code.substring(code.length() - 1 - NUM_LENGTH,code.length()); |
| | | char afterCodeZimu = afterCode.substring(0, 1).charAt(0); |
| | | Integer afterCodeNum = Integer.parseInt(afterCode.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 (afterCodeNum == getMaxNumByLength(NUM_LENGTH)) { |
| | | nextNum = getNextStrNum(0); |
| | | } else { |
| | | nextNum = getNextStrNum(afterCodeNum); |
| | | } |
| | | // å
夿æ°åçäº999*ï¼å忝ä»Aéæ°å¼å§,éå¢ |
| | | if(afterCodeNum == getMaxNumByLength(NUM_LENGTH)) { |
| | | nextZimu = getNextZiMu(afterCodeZimu); |
| | | }else{ |
| | | nextZimu = afterCodeZimu; |
| | | } |
| | | |
| | | // ä¾å¦Z99ï¼ä¸ä¸ä¸ªcodeå°±æ¯Z99A01 |
| | | if (LETTER == afterCodeZimu && getMaxNumByLength(NUM_LENGTH) == afterCodeNum) { |
| | | newcode = code + (nextZimu + nextNum); |
| | | } else { |
| | | newcode = beforeCode + (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" + NUM_LENGTH + "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 == LETTER) { |
| | | return 'A'; |
| | | } |
| | | zimu++; |
| | | return zimu; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ°å使°è·åæå¤§å¼ |
| | | * @param length |
| | | * @return |
| | | */ |
| | | private static int getMaxNumByLength(int length){ |
| | | if(length==0){ |
| | | return 0; |
| | | } |
| | | StringBuilder maxNum = new StringBuilder(); |
| | | for (int i=0;i<length;i++){ |
| | | maxNum.append("9"); |
| | | } |
| | | return Integer.parseInt(maxNum.toString()); |
| | | } |
| | | 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()/(NUM_LENGTH +1); |
| | | String[] cutcode = new String[c]; |
| | | for(int i =0 ; i <c;i++){ |
| | | cutcode[i] = code.substring(0,(i+1)*(NUM_LENGTH +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.SpringContextUtils; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | |
| | | /** |
| | | * æ°æ®æºç¼åæ± |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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; |
| | | |
| | | /** |
| | | * æ°æ®åºç±»å夿 |
| | | * ãæäºæ°æ®åºå¼ææ¯ä¸æ ·çï¼ä»¥è¾¾å°å¤ç¨ç®çã |
| | | * @author: jeecg-boot |
| | | */ |
| | | public class DbTypeUtils { |
| | | |
| | | public static Map<String, String> dialectMap = new HashMap<String, String>(); |
| | | static{ |
| | | dialectMap.put("mysql", "org.hibernate.dialect.MySQL5InnoDBDialect"); |
| | | // mariadbæ°æ®åº 1 -- |
| | | dialectMap.put("mariadb", "org.hibernate.dialect.MariaDBDialect"); |
| | | //oracleæ°æ®åº 1 |
| | | dialectMap.put("oracle", "org.hibernate.dialect.OracleDialect"); |
| | | // TODO 没æ¾å°ä¸ç¡®å® |
| | | dialectMap.put("oracle12c", "org.hibernate.dialect.OracleDialect"); |
| | | // db2æ°æ®åº 1xx |
| | | dialectMap.put("db2", "org.hibernate.dialect.DB2390Dialect"); |
| | | // H2æ°æ®åº |
| | | dialectMap.put("h2", "org.hibernate.dialect.HSQLDialect"); |
| | | // HSQLæ°æ®åº 1 |
| | | dialectMap.put("hsql", "org.hibernate.dialect.HSQLDialect"); |
| | | //SQLiteæ°æ®åº åºç¨å¹³å°mobile |
| | | dialectMap.put("sqlite", "org.jeecg.modules.online.config.dialect.SQLiteDialect"); |
| | | //PostgreSQLæ°æ®åº1 -- |
| | | dialectMap.put("postgresql", "org.hibernate.dialect.PostgreSQLDialect"); |
| | | dialectMap.put("sqlserver2005", "org.hibernate.dialect.SQLServer2005Dialect"); |
| | | //sqlserveræ°æ®åº1 |
| | | dialectMap.put("sqlserver", "org.hibernate.dialect.SQLServerDialect"); |
| | | //è¾¾æ¢¦æ°æ®åº [å½äº§] 1-- |
| | | dialectMap.put("dm", "org.hibernate.dialect.DmDialect"); |
| | | //èè°·æ°æ®åº |
| | | dialectMap.put("xugu", "org.hibernate.dialect.HSQLDialect"); |
| | | //人大éä» [å½äº§] 1 |
| | | dialectMap.put("kingbasees", "org.hibernate.dialect.PostgreSQLDialect"); |
| | | // Phoenix HBaseæ°æ®åº |
| | | dialectMap.put("phoenix", "org.hibernate.dialect.HSQLDialect"); |
| | | // Gauss æ°æ®åº |
| | | dialectMap.put("zenith", "org.hibernate.dialect.PostgreSQLDialect"); |
| | | //é¿éäºPolarDB |
| | | dialectMap.put("clickhouse", "org.hibernate.dialect.MySQLDialect"); |
| | | // å大éç¨æ°æ®åº TODO 没æ¾å°ä¸ç¡®å® |
| | | dialectMap.put("gbase", "org.hibernate.dialect.PostgreSQLDialect"); |
| | | //ç¥éæ°æ®åº [å½äº§] TODO 没æ¾å°ä¸ç¡®å® |
| | | dialectMap.put("oscar", "org.hibernate.dialect.PostgreSQLDialect"); |
| | | //Sybase ASE æ°æ®åº |
| | | dialectMap.put("sybase", "org.hibernate.dialect.SybaseDialect"); |
| | | dialectMap.put("oceanbase", "org.hibernate.dialect.PostgreSQLDialect"); |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | | * æ¤æ¹æ³åªè½è¿åååï¼ä¸è½è¿åå®ä½ç±» |
| | | * @param dbKey æ°æ®æºçkey |
| | | * @param sql sal |
| | | * @param clazz ç±» |
| | | * @param param åæ° |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | 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.core.TemplateClassResolver; |
| | | import freemarker.template.Configuration; |
| | | import freemarker.template.Template; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jeecg.common.constant.DataBaseConstant; |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | 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 TPL_CONFIG = new Configuration(); |
| | | /** |
| | | * SQL ç¼å |
| | | */ |
| | | private static final Configuration SQL_CONFIG = new Configuration(); |
| | | |
| | | private static StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); |
| | | |
| | | /**使ç¨å
åµç(?ms)æå¼åè¡åå¤è¡æ¨¡å¼*/ |
| | | private final static Pattern NOTES_PATTERN = Pattern |
| | | .compile("(?ms)/\\*.*?\\*/|^\\s*//.*?$"); |
| | | |
| | | static { |
| | | TPL_CONFIG.setClassForTemplateLoading( |
| | | new FreemarkerParseFactory().getClass(), "/"); |
| | | TPL_CONFIG.setNumberFormat("0.#####################"); |
| | | SQL_CONFIG.setTemplateLoader(stringTemplateLoader); |
| | | SQL_CONFIG.setNumberFormat("0.#####################"); |
| | | //classic_compatible设置ï¼è§£å³æ¥ç©ºæéé误 |
| | | SQL_CONFIG.setClassicCompatible(true); |
| | | |
| | | //update-begin-author:taoyan date:2022-8-10 for: freemarkeræ¨¡æ¿æ³¨å
¥é®é¢ ç¦æ¢è§£æObjectConstructorï¼Executeåfreemarker.template.utility.JythonRuntimeã |
| | | //https://ackcent.com/in-depth-freemarker-template-injection/ |
| | | SQL_CONFIG.setNewBuiltinClassResolver(TemplateClassResolver.SAFER_RESOLVER); |
| | | //update-end-author:taoyan date:2022-8-10 for: freemarkeræ¨¡æ¿æ³¨å
¥é®é¢ ç¦æ¢è§£æObjectConstructorï¼Executeåfreemarker.template.utility.JythonRuntimeã |
| | | } |
| | | |
| | | /** |
| | | * å¤ææ¨¡æ¿æ¯å¦åå¨ |
| | | * |
| | | * @throws Exception |
| | | */ |
| | | public static boolean isExistTemplate(String tplName) throws Exception { |
| | | try { |
| | | Template mytpl = TPL_CONFIG.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 = TPL_CONFIG.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) { |
| | | return parseTemplateContent(tplContent, paras, false); |
| | | } |
| | | public static String parseTemplateContent(String tplContent, Map<String, Object> paras, boolean keepSpace) { |
| | | try { |
| | | String sqlUnderline="sql_"; |
| | | StringWriter swriter = new StringWriter(); |
| | | if (stringTemplateLoader.findTemplateSource(sqlUnderline + tplContent.hashCode()) == null) { |
| | | stringTemplateLoader.putTemplate(sqlUnderline + tplContent.hashCode(), tplContent); |
| | | } |
| | | Template mytpl = SQL_CONFIG.getTemplate(sqlUnderline + 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(), keepSpace); |
| | | 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) { |
| | | return getSqlText(sql, false); |
| | | } |
| | | |
| | | private static String getSqlText(String sql, boolean keepSpace) { |
| | | // å°æ³¨éæ¿æ¢æ"" |
| | | sql = NOTES_PATTERN.matcher(sql).replaceAll(""); |
| | | if (!keepSpace) { |
| | | sql = sql.replaceAll("\\n", " ").replaceAll("\\t", " ") |
| | | .replaceAll("\\s{1,}", " ").trim(); |
| | | } |
| | | // 廿 æåæ¯ whereè¿æ ·çé®é¢ |
| | | //whereç©ºæ ¼ "where " |
| | | String whereSpace = DataBaseConstant.SQL_WHERE+" "; |
| | | //"where and" |
| | | String whereAnd = DataBaseConstant.SQL_WHERE+" and"; |
| | | //", where" |
| | | String commaWhere = SymbolConstant.COMMA+" "+DataBaseConstant.SQL_WHERE; |
| | | //", " |
| | | String commaSpace = SymbolConstant.COMMA + " "; |
| | | if (sql.endsWith(DataBaseConstant.SQL_WHERE) || sql.endsWith(whereSpace)) { |
| | | sql = sql.substring(0, sql.lastIndexOf("where")); |
| | | } |
| | | // 廿where and è¿æ ·çé®é¢ |
| | | int index = 0; |
| | | while ((index = StringUtils.indexOfIgnoreCase(sql, whereAnd, index)) != -1) { |
| | | sql = sql.substring(0, index + 5) |
| | | + sql.substring(index + 9, sql.length()); |
| | | } |
| | | // 廿 , where è¿æ ·çé®é¢ |
| | | index = 0; |
| | | while ((index = StringUtils.indexOfIgnoreCase(sql, commaWhere, index)) != -1) { |
| | | sql = sql.substring(0, index) |
| | | + sql.substring(index + 1, sql.length()); |
| | | } |
| | | // 廿 æåæ¯ ,è¿æ ·çé®é¢ |
| | | if (sql.endsWith(SymbolConstant.COMMA) || sql.endsWith(commaSpace)) { |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: AES å å¯ |
| | | * @author: jeecg-boot |
| | | * @date: 2022/3/30 11:48 |
| | | */ |
| | | public class AesEncryptUtil { |
| | | |
| | | /** |
| | | * 使ç¨AES-128-CBCå 坿¨¡å¼ 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 { |
| | | |
| | | //"ç®æ³/模å¼/è¡¥ç æ¹å¼"NoPadding PkcsPadding |
| | | Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); |
| | | 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 { |
| | | //update-begin-author:taoyan date:2022-5-23 for:VUEN-1084 ãvue3ãonlineè¡¨åæµè¯åç°çæ°é®é¢ 6ãè§£å¯æ¥é ---è§£ç 失败åºè¯¥æå¼å¸¸æåºå»ï¼å¨å¤é¢å¤ç |
| | | 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); |
| | | //å å¯è§£ç åçå符串ä¼åºç°\u0000 |
| | | return originalString.replaceAll("\\u0000", ""); |
| | | //update-end-author:taoyan date:2022-5-23 for:VUEN-1084 ãvue3ãonlineè¡¨åæµè¯åç°çæ°é®é¢ 6ãè§£å¯æ¥é ---è§£ç 失败åºè¯¥æå¼å¸¸æåºå»ï¼å¨å¤é¢å¤ç |
| | | } |
| | | |
| | | /** |
| | | * 使ç¨é»è®¤ç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; |
| | | |
| | | /** |
| | | * @Description: EncryptedString |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Data |
| | | public class EncryptedString { |
| | | |
| | | /** |
| | | * é¿åº¦ä¸º16个å符 |
| | | */ |
| | | public static String key = "1234567890adbcde"; |
| | | |
| | | /** |
| | | * é¿åº¦ä¸º16个å符 |
| | | */ |
| | | public static String iv = "1234567890hjlkew"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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: æ ¡éªä¸ä¼ æä»¶ææåç¼ |
| | | * @author: lsq |
| | | * @date: 2021å¹´08æ09æ¥ 15:29 |
| | | */ |
| | | public class FileTypeFilter { |
| | | |
| | | /**æä»¶åç¼*/ |
| | | private static String[] forbidType = {"jsp","php"}; |
| | | |
| | | /**åå§åæä»¶å¤´ç±»åï¼ä¸å¤çèªè¡è¡¥å
*/ |
| | | final static HashMap<String, String> FILE_TYPE_MAP = new HashMap<>(); |
| | | |
| | | static { |
| | | FILE_TYPE_MAP.put("3c25402070616765206c", "jsp"); |
| | | FILE_TYPE_MAP.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 = FILE_TYPE_MAP.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 = FILE_TYPE_MAP.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; |
| | | |
| | | /** |
| | | * æä»¶ä¸ä¼ åç¬¦ä¸²è¿æ»¤ç¹æ®å符 |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | 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 (CommonConstant.STRING_NULL.equals(object)) { |
| | | return (true); |
| | | } |
| | | return (false); |
| | | } |
| | | |
| | | public static boolean isNotEmpty(Object object) { |
| | | if (object != null && !"".equals(object) && !object.equals(CommonConstant.STRING_NULL)) { |
| | | return (true); |
| | | } |
| | | return (false); |
| | | } |
| | | |
| | | public static String decode(String strIn, String sourceCode, String targetCode) { |
| | | String temp = code2code(strIn, sourceCode, targetCode); |
| | | return temp; |
| | | } |
| | | |
| | | @SuppressWarnings("AlibabaLowerCamelCaseVariableNaming") |
| | | 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 || "".equals(strIn.trim())) { |
| | | 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) { |
| | | if (s == null) { |
| | | return null; |
| | | } |
| | | Integer[] integer = new Integer[s.length]; |
| | | 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 || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("Proxy-Client-IP"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("WL-Proxy-Client-IP"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { |
| | | ip = request.getRemoteAddr(); |
| | | } |
| | | return ip; |
| | | } |
| | | |
| | | /** |
| | | * @return æ¬æºIP |
| | | * @throws SocketException |
| | | */ |
| | | public static String getRealIp() throws SocketException { |
| | | // æ¬å°IPï¼å¦ææ²¡æé
ç½®å¤ç½IPåè¿åå® |
| | | String localip = null; |
| | | // å¤ç½IP |
| | | String netip = null; |
| | | |
| | | Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); |
| | | InetAddress ip = null; |
| | | // æ¯å¦æ¾å°å¤ç½IP |
| | | boolean finded = false; |
| | | while (netInterfaces.hasMoreElements() && !finded) { |
| | | NetworkInterface ni = netInterfaces.nextElement(); |
| | | Enumeration<InetAddress> address = ni.getInetAddresses(); |
| | | while (address.hasMoreElements()) { |
| | | ip = address.nextElement(); |
| | | // å¤ç½IP |
| | | if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) { |
| | | 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) { |
| | | String reg = "\\s*|\t|\r|\n"; |
| | | Pattern p = Pattern.compile(reg); |
| | | 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<>(5); |
| | | } |
| | | |
| | | /** |
| | | * 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"); |
| | | String localIp = "127.0.0.1"; |
| | | isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd) || localIp.equals(ipAddress); |
| | | 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(SymbolConstant.UNDERLINE)) { |
| | | // ä¸å«ä¸å线ï¼ä»
å°é¦åæ¯å°å |
| | | //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||"".equals(names)){ |
| | | 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(SymbolConstant.UNDERLINE)) { |
| | | // ä¸å«ä¸å线ï¼ä»
å°é¦åæ¯å°å |
| | | 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){ |
| | | int length = 3; |
| | | if(para.length()<length){ |
| | | 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<>(5); |
| | | 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.commons.fileupload.FileItemStream; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | 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 |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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) throws Exception { |
| | | //update-begin-author:liusq date:20210809 for: è¿æ»¤ä¸ä¼ æä»¶ç±»å |
| | | FileTypeFilter.fileTypeFilter(file); |
| | | //update-end-author:liusq date:20210809 for: è¿æ»¤ä¸ä¼ æä»¶ç±»å |
| | | |
| | | String filePath = 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(); |
| | | } |
| | | 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(SymbolConstant.SINGLE_SLASH)) { |
| | | fileDir = fileDir.concat(SymbolConstant.SINGLE_SLASH); |
| | | } |
| | | //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(CommonConstant.STR_HTTP)) { |
| | | filePath = staticDomain + SymbolConstant.SINGLE_SLASH + fileUrl; |
| | | } else { |
| | | filePath = "https://" + newBucket + "." + endPoint + SymbolConstant.SINGLE_SLASH + 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) { |
| | | log.error(e.getMessage(),e); |
| | | return null; |
| | | }catch (Exception e) { |
| | | log.error(e.getMessage(),e); |
| | | return null; |
| | | } |
| | | return filePath; |
| | | } |
| | | |
| | | /** |
| | | * è·ååå§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) throws Exception { |
| | | return upload(file, fileDir,null); |
| | | } |
| | | |
| | | /** |
| | | * ä¸ä¼ æä»¶è³é¿éäº OSS |
| | | * æä»¶ä¸ä¼ æå,è¿åæä»¶å®æ´è®¿é®è·¯å¾ |
| | | * æä»¶ä¸ä¼ 失败,è¿å null |
| | | * |
| | | * @param file å¾
ä¸ä¼ æä»¶ |
| | | * @param fileDir æä»¶ä¿åç®å½ |
| | | * @return oss ä¸çç¸å¯¹æä»¶è·¯å¾ |
| | | */ |
| | | public static String upload(FileItemStream file, String fileDir) { |
| | | String filePath = 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(SymbolConstant.SINGLE_SLASH)) { |
| | | fileDir = fileDir.concat(SymbolConstant.SINGLE_SLASH); |
| | | } |
| | | fileDir = StrAttackFilter.filter(fileDir); |
| | | fileUrl = fileUrl.append(fileDir + fileName); |
| | | if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith(CommonConstant.STR_HTTP)) { |
| | | filePath = staticDomain + SymbolConstant.SINGLE_SLASH + fileUrl; |
| | | } else { |
| | | filePath = "https://" + bucketName + "." + endPoint + SymbolConstant.SINGLE_SLASH + 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 filePath; |
| | | } |
| | | |
| | | /** |
| | | * å 餿件 |
| | | * @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(CommonConstant.STR_HTTP)) { |
| | | bucketUrl = staticDomain + SymbolConstant.SINGLE_SLASH ; |
| | | } else { |
| | | bucketUrl = "https://" + newBucket + "." + endPoint + SymbolConstant.SINGLE_SLASH; |
| | | } |
| | | //TODO ææ¶ä¸å
许å é¤äºåå¨çæä»¶ |
| | | //initOss(endPoint, accessKeyId, accessKeySecret); |
| | | 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); |
| | | //update-begin---author:liusq Date:20220120 forï¼æ¿æ¢objectNameåç¼ï¼é²æ¢keyä¸ä¸è´å¯¼è´è·åä¸å°æä»¶---- |
| | | objectName = OssBootUtil.replacePrefix(objectName,bucket); |
| | | //update-end---author:liusq Date:20220120 forï¼æ¿æ¢objectNameåç¼ï¼é²æ¢keyä¸ä¸è´å¯¼è´è·åä¸å°æä»¶---- |
| | | 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{ |
| | | //update-begin---author:liusq Date:20220120 forï¼æ¿æ¢objectNameåç¼ï¼é²æ¢keyä¸ä¸è´å¯¼è´è·åä¸å°æä»¶---- |
| | | objectName = OssBootUtil.replacePrefix(objectName,bucketName); |
| | | //update-end---author:liusq Date:20220120 forï¼æ¿æ¢objectNameåç¼ï¼é²æ¢keyä¸ä¸è´å¯¼è´è·åä¸å°æä»¶---- |
| | | if(ossClient.doesObjectExist(bucketName,objectName)){ |
| | | URL url = ossClient.generatePresignedUrl(bucketName,objectName,expires); |
| | | //log.info("åå§url : {}", url.toString()); |
| | | //log.info("decode url : {}", URLDecoder.decode(url.toString(), "UTF-8")); |
| | | //ãissues/4023ãé®é¢ osså¤é¾ç»è¿è½¬ç¼ç åï¼é¨åæ æï¼å¤§æ¦å¨ä¸åä¸ï¼æ é转ç¼ç ç´æ¥è¿åå³å¯ #4023 |
| | | return url.toString(); |
| | | } |
| | | }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 filePath = null; |
| | | String fileUrl = relativePath; |
| | | initOss(endPoint, accessKeyId, accessKeySecret); |
| | | if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith(CommonConstant.STR_HTTP)) { |
| | | filePath = staticDomain + SymbolConstant.SINGLE_SLASH + relativePath; |
| | | } else { |
| | | filePath = "https://" + bucketName + "." + endPoint + SymbolConstant.SINGLE_SLASH + fileUrl; |
| | | } |
| | | PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(),stream); |
| | | // 设置æé(å
¬å¼è¯») |
| | | ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); |
| | | if (result != null) { |
| | | log.info("------OSSæä»¶ä¸ä¼ æå------" + fileUrl); |
| | | } |
| | | return filePath; |
| | | } |
| | | |
| | | /** |
| | | * æ¿æ¢åç¼ï¼é²æ¢keyä¸ä¸è´å¯¼è´è·åä¸å°æä»¶ |
| | | * @param objectName æä»¶ä¸ä¼ è·¯å¾ key |
| | | * @param customBucket èªå®ä¹æ¡¶ |
| | | * @date 2022-01-20 |
| | | * @author lsq |
| | | * @return |
| | | */ |
| | | private static String replacePrefix(String objectName,String customBucket){ |
| | | log.info("------replacePrefix---æ¿æ¢å---objectName:{}",objectName); |
| | | if(oConvertUtils.isNotEmpty(staticDomain)){ |
| | | objectName= objectName.replace(staticDomain+SymbolConstant.SINGLE_SLASH,""); |
| | | }else{ |
| | | String newBucket = bucketName; |
| | | if(oConvertUtils.isNotEmpty(customBucket)){ |
| | | newBucket = customBucket; |
| | | } |
| | | String path ="https://" + newBucket + "." + endPoint + SymbolConstant.SINGLE_SLASH; |
| | | objectName = objectName.replace(path,""); |
| | | } |
| | | log.info("------replacePrefix---æ¿æ¢å---objectName:{}",objectName); |
| | | return objectName; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * æ¥è¯¢è¡¨/åæ®µ é»ååå¤ç |
| | | * @Author taoYan |
| | | * @Date 2022/3/17 11:21 |
| | | **/ |
| | | @Slf4j |
| | | public abstract class AbstractQueryBlackListHandler { |
| | | |
| | | /** |
| | | * key-表å |
| | | * value-åæ®µåï¼å¤ä¸ªéå·éå¼ |
| | | * 两ç§é
ç½®æ¹å¼-- å
¨é¨é
ç½®æå°å |
| | | * ruleMap.put("sys_user", "*")sys_userææçåæ®µä¸æ¯ææ¥è¯¢ |
| | | * ruleMap.put("sys_user", "username,password")sys_userä¸çusernameåpassword䏿¯ææ¥è¯¢ |
| | | */ |
| | | public static Map<String, String> ruleMap = new HashMap<>(); |
| | | |
| | | static { |
| | | ruleMap.put("sys_user", "password,salt"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ ¹æ® sqlè¯å¥ è·å表ååæ®µä¿¡æ¯ï¼éè¦å°å
·ä½çå®ç°ç±»éåæ¤æ¹æ³- |
| | | * ä¸åçåºæ¯ å¤çå¯è½ä¸å¤ªä¸æ · éè¦èªå®ä¹ï¼ä½æ¯è¿åå¼ç¡®å® |
| | | * @param sql |
| | | * @return |
| | | */ |
| | | protected abstract List<QueryTable> getQueryTableInfo(String sql); |
| | | |
| | | |
| | | /** |
| | | * æ ¡éªsqlè¯å¥ æåè¿åtrue |
| | | * @param sql |
| | | * @return |
| | | */ |
| | | public boolean isPass(String sql) { |
| | | List<QueryTable> list = null; |
| | | //ãjeecg-boot/issues/4040ãå¨çº¿æ¥è¡¨ä¸æ¯æåæ¥è¯¢ï¼è§£ææ¥é #4040 |
| | | try { |
| | | list = this.getQueryTableInfo(sql.toLowerCase()); |
| | | } catch (Exception e) { |
| | | log.warn("æ ¡éªsqlè¯å¥ï¼è§£ææ¥éï¼{}",e.getMessage()); |
| | | } |
| | | |
| | | if(list==null){ |
| | | return true; |
| | | } |
| | | log.info("--è·åsqlä¿¡æ¯--", list.toString()); |
| | | boolean flag = true; |
| | | for (QueryTable table : list) { |
| | | String name = table.getName(); |
| | | String fieldString = ruleMap.get(name); |
| | | // ææ²¡æé
ç½®è¿å¼ 表 |
| | | if (fieldString != null) { |
| | | if ("*".equals(fieldString) || table.isAll()) { |
| | | flag = false; |
| | | log.warn("sqlé»ååæ ¡éªï¼è¡¨ã"+name+"ãç¦æ¢æ¥è¯¢"); |
| | | break; |
| | | } else if (table.existSameField(fieldString)) { |
| | | flag = false; |
| | | break; |
| | | } |
| | | |
| | | } |
| | | } |
| | | return flag; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢ç表çä¿¡æ¯ |
| | | */ |
| | | protected class QueryTable { |
| | | //表å |
| | | private String name; |
| | | //表çå«å |
| | | private String alias; |
| | | // åæ®µåéå |
| | | private Set<String> fields; |
| | | // æ¯å¦æ¥è¯¢ææå段 |
| | | private boolean all; |
| | | |
| | | public QueryTable() { |
| | | } |
| | | |
| | | public QueryTable(String name, String alias) { |
| | | this.name = name; |
| | | this.alias = alias; |
| | | this.all = false; |
| | | this.fields = new HashSet<>(); |
| | | } |
| | | |
| | | public void addField(String field) { |
| | | this.fields.add(field); |
| | | } |
| | | |
| | | public String getName() { |
| | | return name; |
| | | } |
| | | |
| | | public Set<String> getFields() { |
| | | return new HashSet<>(fields); |
| | | } |
| | | |
| | | public void setName(String name) { |
| | | this.name = name; |
| | | } |
| | | |
| | | public void setFields(Set<String> fields) { |
| | | this.fields = fields; |
| | | } |
| | | |
| | | public String getAlias() { |
| | | return alias; |
| | | } |
| | | |
| | | public void setAlias(String alias) { |
| | | this.alias = alias; |
| | | } |
| | | |
| | | public boolean isAll() { |
| | | return all; |
| | | } |
| | | |
| | | public void setAll(boolean all) { |
| | | this.all = all; |
| | | } |
| | | |
| | | /** |
| | | * 夿æ¯å¦æç¸ååæ®µ |
| | | * |
| | | * @param fieldString |
| | | * @return |
| | | */ |
| | | public boolean existSameField(String fieldString) { |
| | | String[] arr = fieldString.split(","); |
| | | for (String exp : fields) { |
| | | for (String config : arr) { |
| | | if (exp.equals(config)) { |
| | | // é常æç¡®çåç´æ¥æ¯è¾ |
| | | log.warn("sqlé»ååæ ¡éªï¼è¡¨ã"+name+"ãä¸å段ã"+config+"ãç¦æ¢æ¥è¯¢"); |
| | | return true; |
| | | } else { |
| | | // 使ç¨è¡¨è¾¾å¼çå åªè½å¤è¯»å符串å
å«äº |
| | | String aliasColumn = config; |
| | | if (alias != null && alias.length() > 0) { |
| | | aliasColumn = alias + "." + config; |
| | | } |
| | | if (exp.indexOf(aliasColumn) > 0) { |
| | | log.warn("sqlé»ååæ ¡éªï¼è¡¨ã"+name+"ãä¸å段ã"+config+"ãç¦æ¢æ¥è¯¢"); |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "QueryTable{" + |
| | | "name='" + name + '\'' + |
| | | ", alias='" + alias + '\'' + |
| | | ", fields=" + fields + |
| | | ", all=" + all + |
| | | '}'; |
| | | } |
| | | } |
| | | |
| | | public String getError(){ |
| | | // TODO |
| | | return "ç³»ç»è®¾ç½®äºå®å
¨è§åï¼ææè¡¨åææåæ®µç¦æ¢æ¥è¯¢ï¼è系管çåææ!"; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security; |
| | | |
| | | import org.jeecg.common.exception.JeecgBootException; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | |
| | | /** |
| | | * jdbcè¿æ¥æ ¡éª |
| | | * @Author taoYan |
| | | * @Date 2022/8/10 18:15 |
| | | **/ |
| | | public class JdbcSecurityUtil { |
| | | |
| | | /** |
| | | * è¿æ¥é©±å¨æ¼æ´ ææ°çæ¬ä¿®å¤åï¼å¯å é¤ç¸åºçkey |
| | | * postgreï¼authenticationPluginClassName, sslhostnameverifier, socketFactory, sslfactory, sslpasswordcallback |
| | | * https://github.com/pgjdbc/pgjdbc/security/advisories/GHSA-v7wg-cpwc-24m4 |
| | | * |
| | | */ |
| | | public static final String[] notAllowedProps = new String[]{"authenticationPluginClassName", "sslhostnameverifier", "socketFactory", "sslfactory", "sslpasswordcallback"}; |
| | | |
| | | /** |
| | | * æ ¡éªsqlæ¯å¦æç¹å®çkey |
| | | * @param jdbcUrl |
| | | * @return |
| | | */ |
| | | public static void validate(String jdbcUrl){ |
| | | if(oConvertUtils.isEmpty(jdbcUrl)){ |
| | | return; |
| | | } |
| | | String urlConcatChar = "?"; |
| | | if(jdbcUrl.indexOf(urlConcatChar)<0){ |
| | | return; |
| | | } |
| | | String argString = jdbcUrl.substring(jdbcUrl.indexOf(urlConcatChar)+1); |
| | | String[] keyAndValues = argString.split("&"); |
| | | for(String temp: keyAndValues){ |
| | | String key = temp.split("=")[0]; |
| | | for(String prop: notAllowedProps){ |
| | | if(prop.equalsIgnoreCase(key)){ |
| | | throw new JeecgBootException("è¿æ¥å°åæå®å
¨é£é©ï¼ã"+key+"ã"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: SecurityTools |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: MyKeyPair |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Data |
| | | public class MyKeyPair { |
| | | private String priKey; |
| | | private String pubKey; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @Description: SecurityReq |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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; |
| | | |
| | | /** |
| | | * @Description: SecurityResp |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Data |
| | | public class SecurityResp { |
| | | private Boolean success; |
| | | private JSONObject data; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @Description: SecuritySignReq |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Data |
| | | public class SecuritySignReq { |
| | | private String data; |
| | | private String prikey; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.common.util.security.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @Description: SecuritySignResp |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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çæ®µ*/ |
| | | // 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; |
| | | // |
| | | ///** |
| | | // * @Description: QueryRuleVo |
| | | // * @author: jeecg-boot |
| | | // */ |
| | | //@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 java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | 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 lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * æè¿°ï¼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 { |
| | | final static String EXCEL_SPLIT_TAG = "_"; |
| | | final static String TEMP_EXCEL_SPLIT_TAG = "---"; |
| | | |
| | | @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){ |
| | | //update-begin---author:scott Date:20211220 forï¼[issues/I4MBB3]@Excel dicTextåæ®µç弿ä¸å线æ¶ï¼å¯¼å
¥åè½ä¸è½æ£ç¡®è§£æ--- |
| | | if(t.getValue().contains(EXCEL_SPLIT_TAG)){ |
| | | String val = t.getValue().replace(EXCEL_SPLIT_TAG,TEMP_EXCEL_SPLIT_TAG); |
| | | dictReplaces.add(t.getText() + EXCEL_SPLIT_TAG + val); |
| | | }else{ |
| | | dictReplaces.add(t.getText() + EXCEL_SPLIT_TAG + t.getValue()); |
| | | } |
| | | //update-end---author:20211220 Date:20211220 forï¼[issues/I4MBB3]@Excel dicTextåæ®µç弿ä¸å线æ¶ï¼å¯¼å
¥åè½ä¸è½æ£ç¡®è§£æ--- |
| | | } |
| | | } |
| | | 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; |
| | | |
| | | /** |
| | | * è·¨åé
ç½®å è½½æ¡ä»¶ |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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; |
| | | |
| | | /** |
| | | * @Description: DruidConfigé
置类 |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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.jeecg.config.vo.DomainUrl; |
| | | import org.jeecg.config.vo.Path; |
| | | import org.jeecg.config.vo.Shiro; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | |
| | | /** |
| | | * å 载项ç®é
ç½® |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Component("jeecgBaseConfig") |
| | | @ConfigurationProperties(prefix = "jeecg") |
| | | public class JeecgBaseConfig { |
| | | /** |
| | | * ç¾åå¯é¥ä¸²(åå
¸çæææ¥å£) |
| | | * @TODO éä½ä½¿ç¨ææ¬å çé»è®¤å¼,å®é
以 ymlé
ç½® 为å |
| | | */ |
| | | private String signatureSecret = "dd05f1c54d63749eda95f9fa6d49v442a"; |
| | | /** |
| | | * éè¦å å¼ºæ ¡éªçæ¥å£æ¸
å |
| | | */ |
| | | private String signUrls; |
| | | /** |
| | | * ä¸ä¼ æ¨¡å¼ |
| | | * æ¬å°ï¼local\Minioï¼minio\é¿éäºï¼alioss |
| | | */ |
| | | private String uploadType; |
| | | /** |
| | | * æ¯å¦å¯ç¨å®å
¨æ¨¡å¼ |
| | | */ |
| | | private Boolean safeMode = false; |
| | | /** |
| | | * shiroæ¦æªæé¤ |
| | | */ |
| | | private Shiro shiro; |
| | | /** |
| | | * ä¸ä¼ æä»¶é
ç½® |
| | | */ |
| | | private Path path; |
| | | |
| | | /** |
| | | * å端页é¢è®¿é®å°å |
| | | * pc: http://localhost:3100 |
| | | * app: http://localhost:8051 |
| | | */ |
| | | private DomainUrl domainUrl; |
| | | |
| | | /** |
| | | * æä»¶é¢è§ |
| | | */ |
| | | private String fileViewDomain; |
| | | |
| | | public Boolean getSafeMode() { |
| | | return safeMode; |
| | | } |
| | | |
| | | public void setSafeMode(Boolean safeMode) { |
| | | this.safeMode = safeMode; |
| | | } |
| | | |
| | | public String getSignatureSecret() { |
| | | return signatureSecret; |
| | | } |
| | | |
| | | public void setSignatureSecret(String signatureSecret) { |
| | | this.signatureSecret = signatureSecret; |
| | | } |
| | | |
| | | public Shiro getShiro() { |
| | | return shiro; |
| | | } |
| | | |
| | | public void setShiro(Shiro shiro) { |
| | | this.shiro = shiro; |
| | | } |
| | | |
| | | public Path getPath() { |
| | | return path; |
| | | } |
| | | |
| | | public void setPath(Path path) { |
| | | this.path = path; |
| | | } |
| | | |
| | | public DomainUrl getDomainUrl() { |
| | | return domainUrl; |
| | | } |
| | | |
| | | public void setDomainUrl(DomainUrl domainUrl) { |
| | | this.domainUrl = domainUrl; |
| | | } |
| | | public String getSignUrls() { |
| | | return signUrls; |
| | | } |
| | | |
| | | public void setSignUrls(String signUrls) { |
| | | this.signUrls = signUrls; |
| | | } |
| | | |
| | | |
| | | public String getFileViewDomain() { |
| | | return fileViewDomain; |
| | | } |
| | | |
| | | public void setFileViewDomain(String fileViewDomain) { |
| | | this.fileViewDomain = fileViewDomain; |
| | | } |
| | | |
| | | public String getUploadType() { |
| | | return uploadType; |
| | | } |
| | | |
| | | public void setUploadType(String uploadType) { |
| | | this.uploadType = uploadType; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * å¾®æå¡ç¯å¢å è½½æ¡ä»¶ |
| | | * @author: jeecg-boot |
| | | */ |
| | | 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 |
| | | * @author: jeecg-boot |
| | | * @Return: |
| | | */ |
| | | @Configuration |
| | | public class RestTemplateConfig { |
| | | |
| | | @Bean |
| | | public RestTemplate restTemplate(ClientHttpRequestFactory factory) { |
| | | return new RestTemplate(factory); |
| | | } |
| | | |
| | | @Bean |
| | | public ClientHttpRequestFactory simpleClientHttpRequestFactory() { |
| | | SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); |
| | | //msæ¯«ç§ |
| | | factory.setReadTimeout(5000); |
| | | //msæ¯«ç§ |
| | | factory.setConnectTimeout(15000); |
| | | return factory; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * 设置éæåæ°åå§å |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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 org.jeecg.common.constant.CommonConstant; |
| | | import org.springframework.beans.BeansException; |
| | | import org.springframework.beans.factory.config.BeanPostProcessor; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.context.annotation.Import; |
| | | import org.springframework.util.ReflectionUtils; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; |
| | | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
| | | import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; |
| | | 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.oas.annotations.EnableOpenApi; |
| | | 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.spring.web.plugins.WebFluxRequestHandlerProvider; |
| | | import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; |
| | | import springfox.documentation.swagger2.annotations.EnableSwagger2; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @Author scott |
| | | */ |
| | | @Configuration |
| | | @EnableSwagger2 //å¼å¯ Swagger2 |
| | | @EnableKnife4j //å¼å¯ knife4jï¼å¯ä»¥ä¸å |
| | | @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("JeecgBoot åå°æå¡APIæ¥å£ææ¡£") |
| | | // çæ¬å· |
| | | .version("1.0") |
| | | // .termsOfServiceUrl("NO terms of service") |
| | | // æè¿° |
| | | .description("åå°APIæ¥å£") |
| | | // ä½è
|
| | | .contact(new Contact("åäº¬æ²æ²äºç§ææéå
¬å¸","www.jeccg.com","jeecgos@163.com")) |
| | | .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))); |
| | | } |
| | | |
| | | /** |
| | | * è§£å³springboot2.6 åspringfoxä¸å
¼å®¹é®é¢ |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { |
| | | return new BeanPostProcessor() { |
| | | |
| | | @Override |
| | | public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { |
| | | if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { |
| | | customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); |
| | | } |
| | | return bean; |
| | | } |
| | | |
| | | private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) { |
| | | List<T> copy = mappings.stream() |
| | | .filter(mapping -> mapping.getPatternParser() == null) |
| | | .collect(Collectors.toList()); |
| | | mappings.clear(); |
| | | mappings.addAll(copy); |
| | | } |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) { |
| | | try { |
| | | Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); |
| | | field.setAccessible(true); |
| | | return (List<RequestMappingInfoHandlerMapping>) field.get(bean); |
| | | } catch (IllegalArgumentException | IllegalAccessException e) { |
| | | throw new IllegalStateException(e); |
| | | } |
| | | } |
| | | }; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import com.fasterxml.jackson.core.JsonGenerator; |
| | | import com.fasterxml.jackson.databind.DeserializationFeature; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; |
| | | import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; |
| | | import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; |
| | | import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; |
| | | import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; |
| | | import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; |
| | | import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; |
| | | import io.micrometer.prometheus.PrometheusMeterRegistry; |
| | | import org.springframework.beans.factory.InitializingBean; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.beans.factory.config.BeanPostProcessor; |
| | | 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.context.annotation.Primary; |
| | | 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 javax.annotation.Resource; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * Spring Boot 2.0 è§£å³è·¨åé®é¢ |
| | | * |
| | | * @Author qinfeng |
| | | * |
| | | */ |
| | | @Configuration |
| | | public class WebMvcConfiguration implements WebMvcConfigurer { |
| | | |
| | | @Resource |
| | | JeecgBaseConfig jeecgBaseConfig; |
| | | @Value("${spring.resource.static-locations:}") |
| | | private String staticLocations; |
| | | |
| | | @Autowired(required = false) |
| | | private PrometheusMeterRegistry prometheusMeterRegistry; |
| | | |
| | | /** |
| | | * éæèµæºçé
ç½® - 使å¾å¯ä»¥ä»ç£çä¸è¯»å Htmlãå¾çãè§é¢ãé³é¢ç |
| | | */ |
| | | @Override |
| | | public void addResourceHandlers(ResourceHandlerRegistry registry) { |
| | | registry.addResourceHandler("/**") |
| | | //update-begin-author:taoyan date:20211116 for: jeecg.path.webappé
ç½®æ æ #3126 |
| | | .addResourceLocations("file:" + jeecgBaseConfig.getPath().getUpload() + "//") |
| | | .addResourceLocations("file:" + jeecgBaseConfig.getPath().getWebapp() + "//") |
| | | //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.addAllowedOriginPattern("*"); |
| | | // å
许æå¡ç«¯è®¿é®ç客æ·ç«¯è¯·æ±å¤´ |
| | | corsConfiguration.addAllowedHeader("*"); |
| | | // å
许访é®çæ¹æ³å,GET POSTç |
| | | corsConfiguration.addAllowedMethod("*"); |
| | | urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); |
| | | return new CorsFilter(urlBasedCorsConfigurationSource); |
| | | } |
| | | @Override |
| | | public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { |
| | | MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(objectMapper()); |
| | | converters.add(jackson2HttpMessageConverter); |
| | | } |
| | | |
| | | /** |
| | | * èªå®ä¹ObjectMapper |
| | | */ |
| | | @Bean |
| | | @Primary |
| | | public ObjectMapper objectMapper() { |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | //å¤çbigDecimal |
| | | objectMapper.enable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN); |
| | | objectMapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS); |
| | | //å¤ç失败 |
| | | objectMapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false); |
| | | objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); |
| | | objectMapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false); |
| | | objectMapper.configure(DeserializationFeature.FAIL_ON_NULL_CREATOR_PROPERTIES, false); |
| | | //é»è®¤çå¤çæ¥ææ¶é´æ ¼å¼ |
| | | objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); |
| | | JavaTimeModule javaTimeModule = new JavaTimeModule(); |
| | | javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| | | javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); |
| | | javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| | | javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); |
| | | javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); |
| | | objectMapper.registerModule(javaTimeModule); |
| | | return objectMapper; |
| | | } |
| | | |
| | | /** |
| | | * SpringBootAdminçHttptraceä¸è§äº |
| | | * https://blog.csdn.net/u013810234/article/details/110097201 |
| | | */ |
| | | @Bean |
| | | public InMemoryHttpTraceRepository getInMemoryHttpTrace(){ |
| | | return new InMemoryHttpTraceRepository(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è§£å³metrics端ç¹ä¸æ¾ç¤ºjvmä¿¡æ¯çé®é¢(zyf) |
| | | */ |
| | | @Bean |
| | | InitializingBean forcePrometheusPostProcessor(BeanPostProcessor meterRegistryPostProcessor) { |
| | | return () -> meterRegistryPostProcessor.postProcessAfterInitialization(prometheusMeterRegistry, ""); |
| | | } |
| | | |
| | | // /** |
| | | // * æ³¨åæ¦æªå¨ãæ¦æªå¨æ¦æªåæ°ï¼èªå¨åæ¢æ°æ®æºââåæå®ç°å¤ç§æ·åæ¢æ°æ®æºåè½ã |
| | | // * @param registry |
| | | // */ |
| | | // @Override |
| | | // public void addInterceptors(InterceptorRegistry registry) { |
| | | // registry.addInterceptor(new DynamicDatasourceInterceptor()).addPathPatterns("/test/dynamic/**"); |
| | | // } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config; |
| | | |
| | | import org.jeecg.config.filter.WebsocketFilter; |
| | | import org.springframework.boot.web.servlet.FilterRegistrationBean; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.web.socket.server.standard.ServerEndpointExporter; |
| | | |
| | | /** |
| | | * @Description: WebSocketConfig |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Configuration |
| | | public class WebSocketConfig { |
| | | |
| | | /** |
| | | * 注å
¥ServerEndpointExporterï¼ |
| | | * è¿ä¸ªbeanä¼èªå¨æ³¨å使ç¨äº@ServerEndpoint注解声æçWebsocket endpoint |
| | | */ |
| | | @Bean |
| | | public ServerEndpointExporter serverEndpointExporter() { |
| | | return new ServerEndpointExporter(); |
| | | } |
| | | |
| | | @Bean |
| | | public WebsocketFilter websocketFilter(){ |
| | | return new WebsocketFilter(); |
| | | } |
| | | |
| | | @Bean |
| | | public FilterRegistrationBean getFilterRegistrationBean(){ |
| | | FilterRegistrationBean bean = new FilterRegistrationBean(); |
| | | bean.setFilter(websocketFilter()); |
| | | //TODO ä¸´æ¶æ³¨éæï¼æµè¯ä¸çº¿ä¸socketæ»æçé®é¢ |
| | | bean.addUrlPatterns("/websocket/*","/eoaSocket/*","/eoaNewChatSocket/*", "/newsWebsocket/*", "/vxeSocket/*","/drySocket/*"); |
| | | return bean; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.filter; |
| | | |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.config.sign.util.BodyReaderHttpServletRequestWrapper; |
| | | |
| | | import javax.servlet.*; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.io.IOException; |
| | | |
| | | /** |
| | | * é对post请æ±ï¼å°HttpServletRequestå
ä¸å± ä¿çbodyéçåæ° |
| | | * @Author taoYan |
| | | * @Date 2022/4/25 19:19 |
| | | **/ |
| | | public class RequestBodyReserveFilter implements Filter { |
| | | |
| | | @Override |
| | | public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { |
| | | ServletRequest requestWrapper = null; |
| | | |
| | | if(servletRequest instanceof HttpServletRequest) { |
| | | HttpServletRequest req = (HttpServletRequest) servletRequest; |
| | | // POST请æ±ç±»åï¼æè·åPOST请æ±ä½ |
| | | if(CommonConstant.HTTP_POST.equals(req.getMethod())){ |
| | | requestWrapper = new BodyReaderHttpServletRequestWrapper(req); |
| | | } |
| | | } |
| | | |
| | | if(requestWrapper == null) { |
| | | filterChain.doFilter(servletRequest, servletResponse); |
| | | } else { |
| | | filterChain.doFilter(requestWrapper, servletResponse); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.filter; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.util.RedisUtil; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.common.util.TokenUtils; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | |
| | | import javax.servlet.*; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | |
| | | /** |
| | | * websocket å端å°tokenæ¾å°ååè®®éä¼ å
¥ ä¸å端建ç«è¿æ¥æ¶éè¦ç¨å°httpåè®®ï¼æ¤å¤ç¨äºæ ¡éªtokençæææ§ |
| | | * @Author taoYan |
| | | * @Date 2022/4/21 17:01 |
| | | **/ |
| | | @Slf4j |
| | | public class WebsocketFilter implements Filter { |
| | | |
| | | private static final String TOKEN_KEY = "Sec-WebSocket-Protocol"; |
| | | |
| | | private static CommonAPI commonApi; |
| | | |
| | | private static RedisUtil redisUtil; |
| | | |
| | | @Override |
| | | public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { |
| | | if (commonApi == null) { |
| | | commonApi = SpringContextUtils.getBean(CommonAPI.class); |
| | | } |
| | | if (redisUtil == null) { |
| | | redisUtil = SpringContextUtils.getBean(RedisUtil.class); |
| | | } |
| | | HttpServletRequest request = (HttpServletRequest)servletRequest; |
| | | String token = request.getHeader(TOKEN_KEY); |
| | | |
| | | log.debug("Websocketè¿æ¥ Tokenå®å
¨æ ¡éªï¼Path = {}ï¼token:{}", request.getRequestURI(), token); |
| | | |
| | | try { |
| | | TokenUtils.verifyToken(token, commonApi, redisUtil); |
| | | } catch (Exception exception) { |
| | | //log.error("Websocketè¿æ¥ Tokenå®å
¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); |
| | | log.debug("Websocketè¿æ¥ Tokenå®å
¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); |
| | | return; |
| | | } |
| | | HttpServletResponse response = (HttpServletResponse)servletResponse; |
| | | response.setHeader(TOKEN_KEY, token); |
| | | filterChain.doFilter(servletRequest, servletResponse); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | //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.config.TenantContext; |
| | | import org.jeecg.common.constant.TenantConstant; |
| | | 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 localCreateBy = field.get(parameter); |
| | | field.setAccessible(false); |
| | | if (localCreateBy == null || "".equals(localCreateBy)) { |
| | | if (sysUser != null) { |
| | | // ç»å½äººè´¦å· |
| | | field.setAccessible(true); |
| | | field.set(parameter, sysUser.getUsername()); |
| | | field.setAccessible(false); |
| | | } |
| | | } |
| | | } |
| | | // 注å
¥å建æ¶é´ |
| | | if ("createTime".equals(field.getName())) { |
| | | field.setAccessible(true); |
| | | Object localCreateDate = field.get(parameter); |
| | | field.setAccessible(false); |
| | | if (localCreateDate == null || "".equals(localCreateDate)) { |
| | | field.setAccessible(true); |
| | | field.set(parameter, new Date()); |
| | | field.setAccessible(false); |
| | | } |
| | | } |
| | | //注å
¥é¨é¨ç¼ç |
| | | if ("sysOrgCode".equals(field.getName())) { |
| | | field.setAccessible(true); |
| | | Object localSysOrgCode = field.get(parameter); |
| | | field.setAccessible(false); |
| | | if (localSysOrgCode == null || "".equals(localSysOrgCode)) { |
| | | // è·åç»å½ç¨æ·ä¿¡æ¯ |
| | | if (sysUser != null) { |
| | | field.setAccessible(true); |
| | | field.set(parameter, sysUser.getOrgCode()); |
| | | field.setAccessible(false); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //------------------------------------------------------------------------------------------------ |
| | | //注å
¥ç§æ·IDï¼æ¯å¦å¼å¯ç³»ç»ç®¡ç模åçå¤ç§æ·æ°æ®é离ãSAASå¤ç§æ·æ¨¡å¼ãï¼ |
| | | if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { |
| | | if (TenantConstant.TENANT_ID.equals(field.getName())) { |
| | | field.setAccessible(true); |
| | | Object localTenantId = field.get(parameter); |
| | | field.setAccessible(false); |
| | | if (localTenantId == null) { |
| | | field.setAccessible(true); |
| | | field.set(parameter, oConvertUtils.getInt(TenantContext.getTenant(),0)); |
| | | 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-- |
| | | String et = "et"; |
| | | 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 |
| | | /** |
| | | * è·åç»å½ç¨æ· |
| | | * @return |
| | | */ |
| | | 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 cn.hutool.core.util.ObjectUtil; |
| | | import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor; |
| | | import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; |
| | | import org.jeecg.common.config.TenantContext; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.TenantConstant; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.common.util.TokenUtils; |
| | | 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 { |
| | | |
| | | /** |
| | | * æ¯å¦å¼å¯ç³»ç»æ¨¡åçç§æ·é离 |
| | | * æ§å¶èå´ï¼ç¨æ·ãè§è²ãé¨é¨ãæçé¨é¨ãåå
¸ãåç±»åå
¸ã夿°æ®æºãèå¡ãéç¥å
Œ |
| | | * |
| | | * å®ç°åè½ |
| | | * 1.ç¨æ·è¡¨éè¿ç¡¬ç¼ç å®ç°ç§æ·IDé离 |
| | | * 2.è§è²ãé¨é¨ãæçé¨é¨ãåå
¸ãåç±»åå
¸ã夿°æ®æºãèå¡ãéç¥å
¬åé¤äºç¡¬ç¼ç è¿å å
¥ç TENANT_TABLE é
ç½®ä¸ï¼å®ç°ç§æ·é离æ´å®å
¨ |
| | | * 3.èå表ãç§æ·è¡¨ä¸åç§æ·é离 |
| | | * 4.éè¿æ¦æªå¨MybatisInterceptorå®ç°ï¼å¢å æ¹æ¥æ°æ® èªå¨æ³¨å
¥ç§æ·ID |
| | | */ |
| | | public static final Boolean OPEN_SYSTEM_TENANT_CONTROL = true; |
| | | |
| | | /** |
| | | * åªäºè¡¨éè¦åå¤ç§æ· 表éè¦æ·»å ä¸ä¸ªå段 tenant_id |
| | | */ |
| | | public static final List<String> TENANT_TABLE = new ArrayList<String>(); |
| | | |
| | | static { |
| | | //1.éè¦ç§æ·é离çè¡¨è¯·å¨æ¤é
ç½® |
| | | if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { |
| | | //a.ç³»ç»ç®¡ç表 |
| | | TENANT_TABLE.add("sys_role"); |
| | | TENANT_TABLE.add("sys_user_role"); |
| | | TENANT_TABLE.add("sys_depart"); |
| | | TENANT_TABLE.add("sys_category"); |
| | | TENANT_TABLE.add("sys_data_source"); |
| | | TENANT_TABLE.add("sys_position"); |
| | | TENANT_TABLE.add("sys_announcement"); |
| | | } |
| | | |
| | | //2.ç¤ºä¾æµè¯ |
| | | //TENANT_TABLE.add("demo"); |
| | | //3.onlineç§æ·é离æµè¯ |
| | | //TENANT_TABLE.add("ceapp_issue"); |
| | | |
| | | TENANT_TABLE.add("dry_eqp_type"); |
| | | TENANT_TABLE.add("dry_equipment"); |
| | | TENANT_TABLE.add("dry_eqp_type"); |
| | | TENANT_TABLE.add("dry_herb"); |
| | | TENANT_TABLE.add("dry_herb_type"); |
| | | TENANT_TABLE.add("dry_order"); |
| | | TENANT_TABLE.add("dry_shop"); |
| | | } |
| | | |
| | | |
| | | @Bean |
| | | public MybatisPlusInterceptor mybatisPlusInterceptor() { |
| | | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
| | | // å
add TenantLineInnerInterceptor å add PaginationInnerInterceptor |
| | | interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() { |
| | | @Override |
| | | public Expression getTenantId() { |
| | | String tenantId = TenantContext.getTenant(); |
| | | //妿éè¿çº¿ç¨è·åç§æ·ID为空ï¼åéè¿å½å请æ±çrequestè·åç§æ·ï¼shiroæé¤æ¦æªå¨ç请æ±ä¼è·åä¸å°ç§æ·IDï¼ |
| | | if(oConvertUtils.isEmpty(tenantId)){ |
| | | try { |
| | | tenantId = TokenUtils.getTenantIdByRequest(SpringContextUtils.getHttpServletRequest()); |
| | | } catch (Exception e) { |
| | | //e.printStackTrace(); |
| | | } |
| | | } |
| | | if(oConvertUtils.isEmpty(tenantId)){ |
| | | tenantId = "0"; |
| | | } |
| | | return new LongValue(tenantId); |
| | | } |
| | | |
| | | @Override |
| | | public String getTenantIdColumn(){ |
| | | return TenantConstant.TENANT_ID_TABLE; |
| | | } |
| | | |
| | | // è¿å true 表示ä¸èµ°ç§æ·é»è¾ |
| | | @Override |
| | | public boolean ignoreTable(String tableName) { |
| | | for(String temp: TENANT_TABLE){ |
| | | if(temp.equalsIgnoreCase(tableName)){ |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | })); |
| | | //update-begin-author:zyf date:20220425 for:ãVUEN-606ãæ³¨å
¥å¨æè¡¨åéé
æ¦æªå¨è§£å³å¤è¡¨åé®é¢ |
| | | interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor()); |
| | | //update-end-author:zyf date:20220425 for:ãVUEN-606ãæ³¨å
¥å¨æè¡¨åéé
æ¦æªå¨è§£å³å¤è¡¨åé®é¢ |
| | | interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); |
| | | //ãjeecg-boot/issues/3847ãå¢å @Versionä¹è§éæ¯æ |
| | | interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); |
| | | return interceptor; |
| | | } |
| | | |
| | | /** |
| | | * å¨æè¡¨ååæ¢æ¦æªå¨,ç¨äºéé
vue2åvue3åä¸ä¸ªè¡¨æå¤ä¸ªçæ
åµ,å¦sys_role_indexå¨vue3æ
åµä¸è¡¨å为sys_role_index_v3 |
| | | * @return |
| | | */ |
| | | private DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor() { |
| | | DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor(); |
| | | dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> { |
| | | //è·åéè¦å¨æè§£æç表å |
| | | String dynamicTableName = ThreadLocalDataHelper.get(CommonConstant.DYNAMIC_TABLE_NAME); |
| | | //å½dynamicTableNameä¸ä¸ºç©ºæ¶æèµ°å¨æè¡¨åå¤çé»è¾,å¦åè¿ååå§è¡¨å |
| | | if (ObjectUtil.isNotEmpty(dynamicTableName) && dynamicTableName.equals(tableName)) { |
| | | // è·ååç«¯ä¼ éççæ¬å·æ è¯ |
| | | Object version = ThreadLocalDataHelper.get(CommonConstant.VERSION); |
| | | if (ObjectUtil.isNotEmpty(version)) { |
| | | //æ¼æ¥è¡¨åè§å(åå§è¡¨å+ä¸å线+åç«¯ä¼ éççæ¬å·) |
| | | return tableName + "_" + version; |
| | | } |
| | | } |
| | | return tableName; |
| | | }); |
| | | return dynamicTableNameInnerInterceptor; |
| | | } |
| | | |
| | | // /** |
| | | // * ä¸ä¸ªçæ¬ä¼å é¤ï¼ç°å¨ä¸ºäºé¿å
ç¼ååºç°é®é¢ä¸å¾ä¸é
ç½® |
| | | // * @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åå¨å¨ |
| | | // * @author: jeecg-boot |
| | | // */ |
| | | //@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.mybatis; |
| | | |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | |
| | | |
| | | /** |
| | | * @Description: æ¬å°çº¿ç¨åéåå¨å·¥å
·ç±» |
| | | * @author: lsq |
| | | * @date: 2022å¹´03æ25æ¥ 11:42 |
| | | */ |
| | | public class ThreadLocalDataHelper { |
| | | /** |
| | | * 线ç¨çæ¬å°åé |
| | | */ |
| | | private static final ThreadLocal<ConcurrentHashMap> REQUEST_DATA = new ThreadLocal<>(); |
| | | |
| | | /** |
| | | * å卿¬å°åæ° |
| | | */ |
| | | private static final ConcurrentHashMap DATA_MAP = new ConcurrentHashMap<>(); |
| | | |
| | | /** |
| | | * 设置请æ±åæ° |
| | | * |
| | | * @param key åæ°key |
| | | * @param value åæ°å¼ |
| | | */ |
| | | public static void put(String key, Object value) { |
| | | if(ObjectUtil.isNotEmpty(value)) { |
| | | DATA_MAP.put(key, value); |
| | | REQUEST_DATA.set(DATA_MAP); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±åæ°å¼ |
| | | * |
| | | * @param key 请æ±åæ° |
| | | * @return |
| | | */ |
| | | public static <T> T get(String key) { |
| | | ConcurrentHashMap dataMap = REQUEST_DATA.get(); |
| | | if (CollectionUtils.isNotEmpty(dataMap)) { |
| | | return (T) dataMap.get(key); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±åæ° |
| | | * |
| | | * @return 请æ±åæ° MAP 对象 |
| | | */ |
| | | public static void clear() { |
| | | DATA_MAP.clear(); |
| | | REQUEST_DATA.remove(); |
| | | } |
| | | |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.mybatis.aspect; |
| | | |
| | | 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.aspect.annotation.DynamicTable; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.config.mybatis.ThreadLocalDataHelper; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.lang.reflect.Method; |
| | | |
| | | /** |
| | | * 卿table忢 åé¢å¤ç |
| | | * |
| | | * @author :zyf |
| | | * @date:2020-04-25 |
| | | */ |
| | | @Aspect |
| | | @Component |
| | | public class DynamicTableAspect { |
| | | |
| | | |
| | | /** |
| | | * å®ä¹å颿¦æªåå
¥ç¹ |
| | | */ |
| | | @Pointcut("@annotation(org.jeecg.common.aspect.annotation.DynamicTable)") |
| | | public void dynamicTable() { |
| | | } |
| | | |
| | | |
| | | @Around("dynamicTable()") |
| | | public Object around(ProceedingJoinPoint point) throws Throwable { |
| | | MethodSignature signature = (MethodSignature) point.getSignature(); |
| | | Method method = signature.getMethod(); |
| | | DynamicTable dynamicTable = method.getAnnotation(DynamicTable.class); |
| | | HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); |
| | | //è·ååç«¯ä¼ éççæ¬æ è®° |
| | | String version = request.getHeader(CommonConstant.VERSION); |
| | | //åå¨çæ¬å·å°æ¬å°çº¿ç¨åé |
| | | ThreadLocalDataHelper.put(CommonConstant.VERSION, version); |
| | | //åå¨è¡¨åå°æ¬å°çº¿ç¨åé |
| | | ThreadLocalDataHelper.put(CommonConstant.DYNAMIC_TABLE_NAME, dynamicTable.value()); |
| | | //æ§è¡æ¹æ³ |
| | | Object result = point.proceed(); |
| | | //æ¸
空æ¬å°åé |
| | | ThreadLocalDataHelper.clear(); |
| | | return result; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.mybatis.interceptor; |
| | | |
| | | import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.web.servlet.HandlerInterceptor; |
| | | import org.springframework.web.servlet.ModelAndView; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | | * å¨ææ°æ®æºåæ¢æ¦æªå¨ |
| | | * |
| | | * æµè¯ï¼æ¦æªåæ°ï¼èªå¨åæ¢æ°æ®æº |
| | | * æªæ¥è§åï¼åé¢éè¿æ¤æºå¶ï¼å®ç°å¤ç§æ·åæ¢æ°æ®æºåè½ |
| | | * @author zyf |
| | | */ |
| | | @Slf4j |
| | | public class DynamicDatasourceInterceptor implements HandlerInterceptor { |
| | | |
| | | /** |
| | | * å¨è¯·æ±å¤çä¹åè¿è¡è°ç¨ï¼Controlleræ¹æ³è°ç¨ä¹åï¼ |
| | | */ |
| | | @Override |
| | | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { |
| | | String requestURI = request.getRequestURI(); |
| | | log.info("ç»è¿å¤æ°æ®æºInterceptor,å½åè·¯å¾æ¯{}", requestURI); |
| | | //è·åå¨ææ°æ®æºåç§° |
| | | String dsName = request.getParameter("dsName"); |
| | | String dsKey = "master"; |
| | | if (StringUtils.isNotEmpty(dsName)) { |
| | | dsKey = dsName; |
| | | } |
| | | DynamicDataSourceContextHolder.push(dsKey); |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 请æ±å¤çä¹åè¿è¡è°ç¨ï¼ä½æ¯å¨è§å¾è¢«æ¸²æä¹åï¼Controlleræ¹æ³è°ç¨ä¹åï¼ |
| | | */ |
| | | @Override |
| | | public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 卿´ä¸ªè¯·æ±ç»æä¹å被è°ç¨ï¼ä¹å°±æ¯å¨DispatcherServlet 渲æäºå¯¹åºçè§å¾ä¹åæ§è¡ï¼ä¸»è¦æ¯ç¨äºè¿è¡èµæºæ¸
çå·¥ä½ï¼ |
| | | */ |
| | | @Override |
| | | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { |
| | | DynamicDataSourceContextHolder.clear(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.jeecg.config.oss; |
| | | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.constant.SymbolConstant; |
| | | 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æä»¶ä¸ä¼ é
ç½®æä»¶ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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(CommonConstant.STR_HTTP)){ |
| | | minioUrl = "http://" + minioUrl; |
| | | } |
| | | if(!minioUrl.endsWith(SymbolConstant.SINGLE_SLASH)){ |
| | | minioUrl = minioUrl.concat(SymbolConstant.SINGLE_SLASH); |
| | | } |
| | | 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; |
| | | |
| | | /** |
| | | * äºåå¨ é
ç½® |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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.JeecgBaseConfig; |
| | | 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 { |
| | | |
| | | @Resource |
| | | private LettuceConnectionFactory lettuceConnectionFactory; |
| | | @Autowired |
| | | private Environment env; |
| | | @Resource |
| | | private JeecgBaseConfig jeecgBaseConfig; |
| | | |
| | | /** |
| | | * Filter Chainå®ä¹è¯´æ |
| | | * |
| | | * 1ãä¸ä¸ªURLå¯ä»¥é
ç½®å¤ä¸ªFilterï¼ä½¿ç¨éå·åé |
| | | * 2ãå½è®¾ç½®å¤ä¸ªè¿æ»¤å¨æ¶ï¼å
¨é¨éªè¯éè¿ï¼æè§ä¸ºéè¿ |
| | | * 3ãé¨åè¿æ»¤å¨å¯æå®åæ°ï¼å¦permsï¼roles |
| | | */ |
| | | @Bean("shiroFilterFactoryBean") |
| | | public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { |
| | | CustomShiroFilterFactoryBean shiroFilterFactoryBean = new CustomShiroFilterFactoryBean(); |
| | | shiroFilterFactoryBean.setSecurityManager(securityManager); |
| | | // æ¦æªå¨ |
| | | Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>(); |
| | | |
| | | //æ¯æymlæ¹å¼ï¼é
ç½®æ¦æªæé¤ |
| | | if(jeecgBaseConfig!=null && jeecgBaseConfig.getShiro()!=null){ |
| | | String shiroExcludeUrls = jeecgBaseConfig.getShiro().getExcludeUrls(); |
| | | if(oConvertUtils.isNotEmpty(shiroExcludeUrls)){ |
| | | String[] permissionUrl = shiroExcludeUrls.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("/sys/thirdLogin/**", "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("/auth/2step-code", "anon");//ç»å½éªè¯ç |
| | | filterChainDefinitionMap.put("/sys/common/static/**", "anon");//å¾çé¢è§ &ä¸è½½æä»¶ä¸éå¶token |
| | | filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdfé¢è§ |
| | | filterChainDefinitionMap.put("/generic/**", "anon");//pdfé¢è§éè¦æä»¶ |
| | | |
| | | filterChainDefinitionMap.put("/sys/getLoginQrcode/**", "anon"); //ç»å½äºç»´ç |
| | | filterChainDefinitionMap.put("/sys/getQrcodeToken/**", "anon"); //ç嬿«ç |
| | | filterChainDefinitionMap.put("/sys/checkAuth", "anon"); //æææ¥å£æé¤ |
| | | |
| | | |
| | | 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("/**/*.gif", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.ico", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.ttf", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.woff", "anon"); |
| | | filterChainDefinitionMap.put("/**/*.woff2", "anon"); |
| | | |
| | | 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("/bigscreen/template1/**", "anon"); |
| | | filterChainDefinitionMap.put("/bigscreen/template1/**", "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æ çå·æ°ç¤ºä¾ |
| | | filterChainDefinitionMap.put("/drySocket/**", "anon");//å¹²ç¥æºéä¿¡ |
| | | |
| | | //æ§è½çæ§ââå®å
¨éæ£æ³é²TOEKNï¼duridè¿æ¥æ± ä¹æï¼ |
| | | //filterChainDefinitionMap.put("/actuator/**", "anon"); |
| | | //æµè¯æ¨¡åæé¤ |
| | | filterChainDefinitionMap.put("/test/seata/**", "anon"); |
| | | |
| | | // å¹²ç¥è®¾å¤å®æ¶æ°æ®ä¸ä¼ |
| | | //filterChainDefinitionMap.put("/dry/dryOrder/**", "anon"); |
| | | |
| | | // å¹²ç¥æµè¯ |
| | | filterChainDefinitionMap.put("/dry/dryResult/**", "anon"); |
| | | filterChainDefinitionMap.put("/dry/real/**", "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.config.TenantContext; |
| | | 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.TokenUtils; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | 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.debug("===============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) { |
| | | HttpServletRequest req = SpringContextUtils.getHttpServletRequest(); |
| | | log.info("ââââââââ身份认è¯å¤±è´¥ââââââââââIPå°å: "+ oConvertUtils.getIpAddrByRequest(req) +"ï¼URL:"+req.getRequestURI()); |
| | | 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 = TokenUtils.getLoginUser(username, commonApi, redisUtil); |
| | | //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(); |
| | | log.debug("ç»å½ç§æ·ï¼" + contextTenantId); |
| | | log.debug("ç¨æ·æ¥æé£äºç§æ·ï¼" + userTenantIds); |
| | | //ç»å½ç¨æ·æ ç§æ·ï¼å端headerä¸ç§æ·IDå¼ä¸º 0 |
| | | String str ="0"; |
| | | if(oConvertUtils.isNotEmpty(contextTenantId) && !str.equals(contextTenantId)){ |
| | | //update-begin-author:taoyan date:20211227 for: /issues/I4O14W ç¨æ·ç§æ·ä¿¡æ¯åæ´å¤ææ¼æ´ |
| | | String[] arr = userTenantIds.split(","); |
| | | if(!oConvertUtils.isIn(contextTenantId, arr)){ |
| | | log.info("ç§æ·å¼å¸¸ââç»å½ç§æ·ï¼" + contextTenantId); |
| | | log.info("ç§æ·å¼å¸¸ââç¨æ·æ¥æç§æ·ç»ï¼" + userTenantIds); |
| | | throw new AuthenticationException("ç»å½ç§æ·ææåæ´ï¼è¯·éæ°ç»é!"); |
| | | } |
| | | //update-end-author:taoyan date:20211227 for: /issues/I4O14W ç¨æ·ç§æ·ä¿¡æ¯åæ´å¤ææ¼æ´ |
| | | } |
| | | } |
| | | //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; |
| | | } |
| | | |
| | | //redisä¸ä¸å卿¤TOEKNï¼è¯´ætokenéæ³è¿åfalse |
| | | 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è§£å³èµæºä¸æè·¯å¾é®é¢ |
| | | * @author: jeecg-boot |
| | | */ |
| | | @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.commons.lang.StringUtils; |
| | | import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter; |
| | | import org.jeecg.common.config.TenantContext; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.system.util.JwtUtil; |
| | | import org.jeecg.common.util.oConvertUtils; |
| | | import org.jeecg.config.shiro.JwtToken; |
| | | import org.springframework.http.HttpHeaders; |
| | | 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(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, httpServletRequest.getHeader(HttpHeaders.ORIGIN)); |
| | | // å
许客æ·ç«¯è¯·æ±æ¹æ³ |
| | | httpServletResponse.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET,POST,OPTIONS,PUT,DELETE"); |
| | | // å
许客æ·ç«¯æäº¤çHeader |
| | | String requestHeaders = httpServletRequest.getHeader(HttpHeaders.ACCESS_CONTROL_REQUEST_HEADERS); |
| | | if (StringUtils.isNotEmpty(requestHeaders)) { |
| | | httpServletResponse.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders); |
| | | } |
| | | // å
许客æ·ç«¯æºå¸¦åè¯ä¿¡æ¯(æ¯å¦å
许åéCookie) |
| | | httpServletResponse.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); |
| | | } |
| | | // è·¨åæ¶ä¼é¦å
åéä¸ä¸ªoption请æ±ï¼è¿éæä»¬ç»option请æ±ç´æ¥è¿åæ£å¸¸ç¶æ |
| | | if (RequestMethod.OPTIONS.name().equalsIgnoreCase(httpServletRequest.getMethod())) { |
| | | httpServletResponse.setStatus(HttpStatus.OK.value()); |
| | | return false; |
| | | } |
| | | //update-begin-author:taoyan date:20200708 for:å¤ç§æ·ç¨å° |
| | | String tenantId = httpServletRequest.getHeader(CommonConstant.TENANT_ID); |
| | | TenantContext.setTenant(tenantId); |
| | | //update-end-author:taoyan date:20200708 for:å¤ç§æ·ç¨å° |
| | | |
| | | return super.preHandle(request, response); |
| | | } |
| | | |
| | | /** |
| | | * JwtFilterä¸ThreadLocaléè¦åæ¶æ¸
é¤ #3634 |
| | | * |
| | | * @param request |
| | | * @param response |
| | | * @param exception |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public void afterCompletion(ServletRequest request, ServletResponse response, Exception exception) throws Exception { |
| | | //log.info("------æ¸
空线ç¨ä¸å¤ç§æ·çID={}------",TenantContext.getTenant()); |
| | | TenantContext.clear(); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.apache.commons.lang3.StringUtils; |
| | | import org.jeecg.common.util.PathMatcherUtil; |
| | | import org.jeecg.config.JeecgBaseConfig; |
| | | import org.jeecg.config.filter.RequestBodyReserveFilter; |
| | | import org.springframework.boot.web.servlet.FilterRegistrationBean; |
| | | 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; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | /** |
| | | * ç¾å æ¦æªå¨é
ç½® |
| | | * @author: jeecg-boot |
| | | */ |
| | | @Configuration |
| | | public class SignAuthConfiguration implements WebMvcConfigurer { |
| | | @Resource |
| | | JeecgBaseConfig jeecgBaseConfig; |
| | | |
| | | @Bean |
| | | public SignAuthInterceptor signAuthInterceptor() { |
| | | return new SignAuthInterceptor(); |
| | | } |
| | | |
| | | @Override |
| | | public void addInterceptors(InterceptorRegistry registry) { |
| | | //------------------------------------------------------------ |
| | | //æ¥è¯¢éè¦è¿è¡ç¾åæ¦æªçæ¥å£ signUrls |
| | | String signUrls = jeecgBaseConfig.getSignUrls(); |
| | | String[] signUrlsArray = null; |
| | | if (StringUtils.isNotBlank(signUrls)) { |
| | | signUrlsArray = signUrls.split(","); |
| | | } else { |
| | | signUrlsArray = PathMatcherUtil.SIGN_URL_LIST; |
| | | } |
| | | //------------------------------------------------------------ |
| | | registry.addInterceptor(signAuthInterceptor()).addPathPatterns(signUrlsArray); |
| | | } |
| | | |
| | | //update-begin-author:taoyan date:20220427 for: issues/I53J5E post请æ±X_SIGNç¾åæ¦æªæ ¡éªåæ¥é, request body 为空 |
| | | @Bean |
| | | public RequestBodyReserveFilter requestBodyReserveFilter(){ |
| | | return new RequestBodyReserveFilter(); |
| | | } |
| | | |
| | | @Bean |
| | | public FilterRegistrationBean reqBodyFilterRegistrationBean(){ |
| | | FilterRegistrationBean registration = new FilterRegistrationBean(); |
| | | registration.setFilter(requestBodyReserveFilter()); |
| | | registration.setName("requestBodyReserveFilter"); |
| | | //------------------------------------------------------------ |
| | | //æ¥è¯¢éè¦è¿è¡ç¾åæ¦æªçæ¥å£ signUrls |
| | | String signUrls = jeecgBaseConfig.getSignUrls(); |
| | | String[] signUrlsArray = null; |
| | | if (StringUtils.isNotBlank(signUrls)) { |
| | | signUrlsArray = signUrls.split(","); |
| | | } else { |
| | | signUrlsArray = PathMatcherUtil.SIGN_URL_LIST; |
| | | } |
| | | //------------------------------------------------------------ |
| | | // 建议æ¤å¤åªæ·»å post请æ±å°åè䏿¯ææçé½éè¦èµ°è¿æ»¤å¨ |
| | | registration.addUrlPatterns(signUrlsArray); |
| | | return registration; |
| | | } |
| | | //update-end-author:taoyan date:20220427 for: issues/I53J5E post请æ±X_SIGNç¾åæ¦æªæ ¡éªåæ¥é, request body 为空 |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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.common.util.oConvertUtils; |
| | | 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("Sign Interceptor 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 xTimestamp = request.getHeader(CommonConstant.X_TIMESTAMP); |
| | | |
| | | if(oConvertUtils.isEmpty(xTimestamp)){ |
| | | Result<?> result = Result.error("Signç¾åæ ¡éªå¤±è´¥ï¼"); |
| | | log.error("Sign ç¾åæ ¡éªå¤±è´¥ï¼Header xTimestamp 为空"); |
| | | //æ ¡éªå¤±è´¥è¿åå端 |
| | | response.setCharacterEncoding("UTF-8"); |
| | | response.setContentType("application/json; charset=utf-8"); |
| | | PrintWriter out = response.getWriter(); |
| | | out.print(JSON.toJSON(result)); |
| | | return false; |
| | | } |
| | | |
| | | //客æ·ç«¯æ¶é´ |
| | | Long clientTimestamp = Long.parseLong(xTimestamp); |
| | | |
| | | int length = 14; |
| | | int length1000 = 1000; |
| | | //1.æ ¡éªç¾åæ¶é´ï¼å
¼å®¹X_TIMESTAMPçæ°èæ ¼å¼ï¼ |
| | | if (xTimestamp.length() == length) { |
| | | //a. X_TIMESTAMPæ ¼å¼æ¯ yyyyMMddHHmmss (ä¾åï¼20220308152143) |
| | | if ((DateUtils.getCurrentTimestamp() - clientTimestamp) > MAX_EXPIRE) { |
| | | log.error("ç¾åéªè¯å¤±è´¥:X-TIMESTAMPå·²è¿æï¼æ³¨æç³»ç»æ¶é´åæå¡å¨æ¶é´æ¯å¦æè¯¯å·®ï¼"); |
| | | throw new IllegalArgumentException("ç¾åéªè¯å¤±è´¥:X-TIMESTAMPå·²è¿æ"); |
| | | } |
| | | } else { |
| | | //b. X_TIMESTAMPæ ¼å¼æ¯ æ¶é´æ³ (ä¾åï¼1646552406000) |
| | | if ((System.currentTimeMillis() - clientTimestamp) > (MAX_EXPIRE * length1000)) { |
| | | log.error("ç¾åéªè¯å¤±è´¥:X-TIMESTAMPå·²è¿æï¼æ³¨æç³»ç»æ¶é´åæå¡å¨æ¶é´æ¯å¦æè¯¯å·®ï¼"); |
| | | 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.constant.SymbolConstant; |
| | | 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(SymbolConstant.COMMA)) { |
| | | log.info(" pathVariable: {}",pathVariable); |
| | | String deString = URLDecoder.decode(pathVariable, "UTF-8"); |
| | | log.info(" pathVariable decode: {}",deString); |
| | | result.put(SignUtil.X_PATH_VARIABLE, 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(SymbolConstant.COMMA)) { |
| | | log.info(" pathVariable: {}",pathVariable); |
| | | String deString = URLDecoder.decode(pathVariable, "UTF-8"); |
| | | log.info(" pathVariable decode: {}",deString); |
| | | result.put(SignUtil.X_PATH_VARIABLE, 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; |
| | | } |
| | | } |
jeecg-boot-base-core/src/main/java/org/jeecg/config/sign/util/SignUtil.java
jeecg-boot-base-core/src/main/java/org/jeecg/config/thirdapp/ThirdAppConfig.java
jeecg-boot-base-core/src/main/java/org/jeecg/config/thirdapp/ThirdAppTypeConfig.java
jeecg-boot-base-core/src/main/java/org/jeecg/config/thirdapp/ThirdAppTypeItemVo.java
jeecg-boot-base-core/src/main/java/org/jeecg/config/vo/DomainUrl.java
jeecg-boot-base-core/src/main/java/org/jeecg/config/vo/Path.java
jeecg-boot-base-core/src/main/java/org/jeecg/config/vo/Shiro.java
jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/BaseCommonMapper.java
jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/xml/BaseCommonMapper.xml
jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/service/BaseCommonService.java
jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/service/impl/BaseCommonServiceImpl.java
jeecg-boot-base-core/src/main/resources/static/pca.json
jeecg-module-demo/pom.xml
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/cloud/controller/JcloudDemoFeignController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/cloud/controller/JcloudDemoProviderController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/cloud/service/JcloudDemoService.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/cloud/service/impl/JcloudDemoServiceImpl.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/cloud/xxljob/TestJobHandler.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/MockController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/area.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/area_mini.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/area_options.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_0.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_1.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_2.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_3.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/asyn_tree_list_31.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/getCntrNoCountInfo.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/getTubiao.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/graphreport_chart.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/permission.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/permission_no_page.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/role.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/service.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/sysdatalog.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/task_process.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/user.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/user_info.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/userinfo.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/workplace_activity.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/workplace_projects.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/workplace_radar.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/json/workplace_teams.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/controller/VxeMockController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/entity/MockEntity.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/json/ddjh.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/json/ddjh_s8.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/json/dlglong.json
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/mock/vxe/websocket/VxeSocket.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/online/OnlCgformDemoController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/BigScreenTemplatController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDemoController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDynamicDataController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderErpMainController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderMainController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JoaDemoController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JeecgDemo.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JeecgOrderCustomer.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JeecgOrderMain.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JeecgOrderTicket.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/entity/JoaDemo.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgDemoMapper.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgOrderCustomerMapper.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgOrderMainMapper.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JeecgOrderTicketMapper.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/JoaDemoMapper.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgDemoMapper.xml
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderCustomerMapper.xml
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderMainMapper.xml
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JeecgOrderTicketMapper.xml
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/mapper/xml/JoaDemoMapper.xml
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJeecgDemoService.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJeecgDynamicDataService.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderCustomerService.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderMainService.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJeecgOrderTicketService.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/IJoaDemoService.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgDemoServiceImpl.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgDynamicDataServiceImpl.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderCustomerServiceImpl.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderMainServiceImpl.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JeecgOrderTicketServiceImpl.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/service/impl/JoaDemoServiceImpl.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/vo/JeecgOrderMainPage.java
jeecg-module-demo/src/main/java/org/jeecg/modules/demo/xxljob/TestJobHandler.java
jeecg-module-demo/src/main/java/org/jeecg/modules/dlglong/controller/DlMockController.java
jeecg-module-demo/src/main/java/org/jeecg/modules/dlglong/entity/MockEntity.java
jeecg-module-demo/src/main/java/org/jeecg/modules/dlglong/json/ddjh.json
jeecg-module-demo/src/main/java/org/jeecg/modules/dlglong/json/ddjh_s8.json
jeecg-module-demo/src/main/java/org/jeecg/modules/dlglong/json/dlglong.json
jeecg-module-demo/src/main/resources/static/bigscreen/template1/css/easyui.css
jeecg-module-demo/src/main/resources/static/bigscreen/template1/css/jquery-ui.css
jeecg-module-demo/src/main/resources/static/bigscreen/template1/css/main_design1.css
jeecg-module-demo/src/main/resources/static/bigscreen/template1/css/room.css
jeecg-module-demo/src/main/resources/static/bigscreen/template1/images/content_comm.png
jeecg-module-demo/src/main/resources/static/bigscreen/template1/images/content_comm1.png
jeecg-module-demo/src/main/resources/static/bigscreen/template1/images/content_down.png
jeecg-module-demo/src/main/resources/static/bigscreen/template1/images/content_down1.png
jeecg-module-demo/src/main/resources/static/bigscreen/template1/images/index.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template1/images/index1.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template1/images/screenbg_design1.jpg
jeecg-module-demo/src/main/resources/static/bigscreen/template1/images/war_room_main.jpg
jeecg-module-demo/src/main/resources/static/bigscreen/template1/js/big_design1.js
jeecg-module-demo/src/main/resources/static/bigscreen/template1/js/china.js
jeecg-module-demo/src/main/resources/static/bigscreen/template1/js/echarts-wordcloud.js
jeecg-module-demo/src/main/resources/static/bigscreen/template1/js/echarts.min.js
jeecg-module-demo/src/main/resources/static/bigscreen/template1/js/geoCoord.js
jeecg-module-demo/src/main/resources/static/bigscreen/template1/js/jquery.easyui.min.js
jeecg-module-demo/src/main/resources/static/bigscreen/template1/js/jquery.min.js
jeecg-module-demo/src/main/resources/static/bigscreen/template1/js/resize.js
jeecg-module-demo/src/main/resources/static/bigscreen/template1/js/room.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/css/style.css
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/arrow.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/bg_img03.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/bg_img04.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/border_bg01.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/box_title.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/chart_icon.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/chart_icon_on.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/close.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/close_icon.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/data_icon.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/data_icon_on.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/fangda.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/index_bg.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/jian.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/line-blue.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/line_bg.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/line_img.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/menu_btn.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/menu_on.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/next.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/people_iocn.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/plus.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/popUP_bg.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/prev.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/select_icon.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/select_icon_on.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/selsct_time.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/settings_icon.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/settings_icon_on.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/teacher_icon.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/title_bg01.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/title_border.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/title_line.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/weather_img01.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/中雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/中雨转大雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/中雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/中雪转大雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/冻雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/多云.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大暴雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大暴雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大雨转暴雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/大雪转暴雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/小雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/小雨转中雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/小雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/小雪转中雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/强沙尘暴.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/扬沙.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/晴.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/暴雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/暴雨转大暴雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/暴雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/沙尘暴.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/浮尘.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/特大暴雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/阴.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/阵雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/阵雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/雨加雪.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/雷阵雨.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/雷阵雨加冰雹.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/雾.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/images/weather/霾.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/base.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/china.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/data/city.json
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/data/guangdong.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/echarts.min.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/jquery-3.3.1.min.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/extend/layer.ext.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/laydate.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/need/laydate.css
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/skins/danlan/icon.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/skins/danlan/laydate.css
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/skins/default/icon.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/laydate/skins/default/laydate.css
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layer.min.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/data/chatlog.json
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/data/friend.json
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/data/group.json
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/data/groups.json
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/layim.css
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/layim.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/layim/loading.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/icon-ext.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/icon.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/icon_ext.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/loading-0.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/loading-1.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/loading-2.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/textbg.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_ico0.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_loading0.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_loading1.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_loading2.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_loading3.gif
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/default/xubox_title0.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/layer.css
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/layer.ext.css
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/moon/default.png
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/layer/skin/moon/style.css
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/pop_base.js
jeecg-module-demo/src/main/resources/static/bigscreen/template2/js/rem.js
jeecg-module-demo/src/main/resources/templates/bigscreen/template1/index.ftl
jeecg-module-demo/src/main/resources/templates/bigscreen/template2/index.ftl
jeecg-module-dry/jeecg-module-dry-api/pom.xml
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/api/DryHelloApi.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/api/fallback/DryHelloFallback.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CacheConstants.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/CommonDict.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEqpType.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHelloEntity.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerb.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbFormula.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbInfo.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryHerbType.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryOpcDevice.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryOrder.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryOrderTrend.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryProdRecord.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryResult.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryShop.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/util/DryUtil.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/util/HerbUtil.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/CommandMessageVo.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryFault.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryHelloPage.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryHerbInfoVo.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOpcMsgVo.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderTrendVo.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/DryOrderVo.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/RealTimeDataVo.java
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/vo/SocketMsgVo.java
jeecg-module-dry/jeecg-module-dry-biz/pom.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryEqpTypeController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryEquipmentController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryHelloController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryHerbController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryHerbFormulaController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryHerbInfoController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryHerbTypeController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryOpcDeviceController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryOrderController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryOrderTrendController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryProdRecordController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryResultController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryShopController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/OpcController.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/listener/InitListener.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryEqpTypeMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryEquipmentMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryHelloMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryHerbFormulaMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryHerbInfoMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryHerbMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryHerbTypeMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryOpcDeviceMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryOrderMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryOrderTrendMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryProdRecordMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryResultMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryShopMapper.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryEqpTypeMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryEquipmentMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryHerbFormulaMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryHerbInfoMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryHerbMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryHerbTypeMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryOpcDeviceMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryOrderMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryOrderTrendMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryProdRecordMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryResultMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryShopMapper.xml
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/runner/OpcCustomRunner.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEqpTypeService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryEquipmentService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryHelloService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryHerbFormulaService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryHerbInfoService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryHerbService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryHerbTypeService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryOpcDeviceService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryOrderService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryOrderTrendService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryProdRecordService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRealTimeDataService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryResultService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryShopService.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEqpTypeServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryEquipmentServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryHelloServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryHerbFormulaServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryHerbInfoServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryHerbServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryHerbTypeServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryOpcDeviceServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryOrderServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryOrderTrendServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryProdRecordServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRealTimeDataServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryResultServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryShopServiceImpl.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/MinaConfig.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerHandler.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/ServerReceiveThread.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/socket/SocketServerConfig.java
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket.java
jeecg-module-dry/jeecg-module-dry-start/Dockerfile
jeecg-module-dry/jeecg-module-dry-start/pom.xml
jeecg-module-dry/jeecg-module-dry-start/src/main/java/org/jeecg/JeecgDryCloudApplication.java
jeecg-module-dry/jeecg-module-dry-start/src/main/resources/application.yml
jeecg-module-dry/jeecg-module-dry-start/src/main/resources/class.txt
jeecg-module-dry/jeecg-module-dry-start/src/main/resources/fault.json
jeecg-module-dry/jeecg-module-dry-start/src/main/resources/logback-spring.xml
jeecg-module-dry/jeecg-module-dry-start/src/main/resources/model.pt
jeecg-module-dry/jeecg-module-dry-start/src/main/resources/model1.pt
jeecg-module-dry/jeecg-module-dry-start/src/main/resources/model34.pt
jeecg-module-dry/jeecg-module-dry-start/src/main/test/java/com/lanbao/AiTest.java
jeecg-module-dry/jeecg-module-dry-start/src/main/test/java/com/lanbao/SocketTest.java
jeecg-module-dry/pom.xml
jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/pom.xml
jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java
jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/factory/SysBaseAPIFallbackFactory.java
jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/common/system/api/fallback/SysBaseAPIFallback.java
jeecg-module-system/jeecg-system-api/jeecg-system-cloud-api/src/main/java/org/jeecg/config/FeignConfig.java
jeecg-module-system/jeecg-system-api/jeecg-system-local-api/pom.xml
jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java
jeecg-module-system/jeecg-system-api/pom.xml
jeecg-module-system/jeecg-system-biz/.gitattributes
jeecg-module-system/jeecg-system-biz/pom.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/CodeTemplateInitListener.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/SystemInitListener.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/init/TomcatFactoryConfig.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/aop/TenantLog.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/aop/TenantPackUserLogAspect.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/cas/util/CasServiceUtil.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageTemplateController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/controller/TestSocketController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/entity/MsgParams.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessage.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessageTemplate.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/enums/RangeDateEnum.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/enums/Vue3MessageHrefEnum.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/DdSendMsgHandle.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/QywxSendMsgHandle.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/WxSendMsgHandle.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/job/SendMsgJob.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/xml/SysMessageMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/mapper/xml/SysMessageTemplateMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageTemplateServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/service/RedisService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/MailHealthIndicator.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ngalain/aop/LogRecordAspect.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ngalain/controller/NgAlainController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/oss/controller/OssFileController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/oss/entity/OssFile.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/oss/mapper/OssFileMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/oss/service/IOssFileService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/oss/service/impl/OssFileServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/AsyncJob.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/mapper/xml/QuartzJobMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/CommonController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCheckRuleController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCommentController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysFilesController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysFillRuleController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysFormFileController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysGatewayRouteController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysLogController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleIndexController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncementSend.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCheckRule.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysComment.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataSource.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepart.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartPermission.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRole.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRolePermission.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRoleUser.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDict.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFiles.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFillRule.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFormFile.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysGatewayRoute.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysLog.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPackPermission.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermission.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermissionDataRule.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPosition.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRole.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRoleIndex.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenant.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPack.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPackUser.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysThirdAccount.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserAgent.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserTenant.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCheckRuleMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCommentMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDataSourceMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartPermissionMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRolePermissionMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleUserMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysFilesMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysFillRuleMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysFormFileMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysGatewayRouteMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPackPermissionMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionDataRuleMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPositionMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleIndexMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackUserMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysThirdAccountMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserAgentMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserTenantMapper.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysAnnouncementSendMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysCategoryMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysCheckRuleMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysCommentMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataLogMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataSourceMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartPermissionMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartRoleMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartRolePermissionMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartRoleUserMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictItemMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysFillRuleMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysGatewayRouteMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysLogMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysPackPermissionMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionDataRuleMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysPermissionMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysPositionMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysRoleIndexMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysTenantMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysTenantPackMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysTenantPackUserMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysThirdAccountMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserAgentMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserDepartMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserTenantMapper.xml
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/AnnouncementSendModel.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/DuplicateCheckVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/SysDictTree.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/SysUserSysDepartModel.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/TreeModel.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/rule/OrderNumberRule.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/security/DictQueryBlackListHandler.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCheckRuleService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCommentService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataSourceService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRolePermissionService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysFilesService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysFillRuleService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysFormFileService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysGatewayRouteService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysLogService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPackPermissionService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRoleIndexService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantPackService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserAgentService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserTenantService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementSendServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCheckRuleServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCommentServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataSourceServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartPermissionServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysFilesServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysFillRuleServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysFormFileServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysLogServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPackPermissionServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPositionServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRoleIndexServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantPackServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAccountServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserAgentServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserRoleServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserTenantServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/util/FindsDepartsChildrenUtil.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/util/PermissionDataUtil.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/util/SecurityUtil.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/util/XssUtils.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysCommentFileVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysCommentVO.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDictPage.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysFileLogVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysFilesVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserDepVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserOnlineVO.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserRoleCountVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserTenantVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/UserAvatar.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/DepartAndUserInfo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/DepartInfo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/SysDictVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/UpdateDepartInfo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantDepartAuthInfo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackAuth.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackModel.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUser.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUserCount.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserDepart.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserPosition.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JdtDepartmentTreeVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwDepartmentTreeVo.java
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/SyncInfoVo.java
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/blob.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/form/native/vue3NativeComponents.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/form/native/vue3NativeForm.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/form/native/vue3NativeImport.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/form/native/vue3NativeSearch.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/form/vue3Jvxepopup.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/form/vue3popup.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/init/initValue.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/init/initValueSub.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/sql/menu_insert.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/utils.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/validatorRulesTemplate/core.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/validatorRulesTemplate/main.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/validatorRulesTemplate/native/vue3CoreNative.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/validatorRulesTemplate/native/vue3MainNative.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/validatorRulesTemplate/sub-vue3.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/common/validatorRulesTemplate/sub.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue/[1-n]List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/[1-n]List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/[1-n]Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/subTables/[1-n]SubTable.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/[1-n]Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/subTables/[1-n]SubTable.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/[1-n]Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3Native/components/[1-n]Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}_menu_insert.sql
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/components/[1-n]Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue-app/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue-app/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue3/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/controller/${entityPackage}/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/entity/${entityPackage}/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/mapper/${entityPackage}/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/mapper/${entityPackage}/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/service/${entityPackage}/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/service/${entityPackage}/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue/${entityPackage}/modules/${entityName}Modal__Style#Drawer.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue3/${entityPackage}/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue3/${entityPackage}/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue3/${entityPackage}/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/vue3/${entityPackage}/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue3/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/[1-n]List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__api.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/[1-n]List.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/modules/${entityName}Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/modules/[1-n]Modal.vuei
jeecg-module-system/jeecg-system-biz/src/main/resources/static/demo1.html
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/LICENSE
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/build/pdf.js
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/build/pdf.worker.js
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/78-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/78-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/78-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/78-RKSJ-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/78-RKSJ-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/78-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/83pv-RKSJ-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Add-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Add-RKSJ-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Add-RKSJ-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Add-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-0.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-1.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-2.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-3.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-4.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-5.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-6.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-UCS2.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-GB1-0.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-GB1-1.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-GB1-2.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-GB1-3.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-GB1-4.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-GB1-5.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-GB1-UCS2.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-0.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-1.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-2.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-3.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-4.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-5.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-6.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-UCS2.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-0.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-1.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-2.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-UCS2.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/B5pc-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/B5pc-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/CNS-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/CNS-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/CNS1-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/CNS1-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/CNS2-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/CNS2-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/ETHK-B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/ETHK-B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/ETen-B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/ETen-B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/ETenms-B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/ETenms-B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Ext-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Ext-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GB-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GB-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GB-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GB-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBK-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBK-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBK2K-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBK2K-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBKp-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBKp-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBT-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBT-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBT-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBT-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBpc-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/GBpc-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKdla-B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKdla-B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKdlb-B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKdlb-B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKgccs-B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKgccs-B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKm314-B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKm314-B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKm471-B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKm471-B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKscs-B5-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/HKscs-B5-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Hankaku.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Hiragana.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSC-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSC-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSC-Johab-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSC-Johab-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSCms-UHC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSCms-UHC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Katakana.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/LICENSE
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/NWP-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/NWP-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/RKSJ-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/RKSJ-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/Roman.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-HW-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJISPro-UTF8-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-H.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/V.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/cmaps/WP-Symbol.bcmap
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/compatibility.js
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/compressed.tracemonkey-pldi-09.pdf
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/debugger.js
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/annotation-check.svg
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/annotation-comment.svg
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/annotation-help.svg
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/annotation-insert.svg
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/annotation-key.svg
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/annotation-newparagraph.svg
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/annotation-noicon.svg
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/annotation-note.svg
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/annotation-paragraph.svg
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/findbarButton-next-rtl.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/findbarButton-next-rtl@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/findbarButton-next.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/findbarButton-next@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/findbarButton-previous-rtl.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/findbarButton-previous-rtl@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/findbarButton-previous.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/findbarButton-previous@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/grab.cur
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/grabbing.cur
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/loading-icon.gif
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/loading-small.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/loading-small@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/shadow.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/texture.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-bookmark.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-bookmark@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-download.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-download@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-menuArrows.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-menuArrows@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-openFile.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-openFile@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-pageDown.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-pageDown@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-pageUp.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-pageUp@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-presentationMode.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-presentationMode@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-print.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-print@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-search.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-search@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-viewOutline.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-viewOutline@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-zoomIn.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-zoomIn@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-zoomOut.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/images/toolbarButton-zoomOut@2x.png
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/l10n.js
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/locale/locale.properties
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/locale/zh-CN/viewer.properties
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/viewer.css
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/viewer.html
jeecg-module-system/jeecg-system-biz/src/main/resources/static/generic/web/viewer.js
jeecg-module-system/jeecg-system-biz/src/main/resources/static/view/userlist.html
jeecg-module-system/jeecg-system-biz/src/main/resources/templates/announcement/showContent.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/templates/demo3.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/templates/pdfPreviewIframe.ftl
jeecg-module-system/jeecg-system-biz/src/main/resources/templates/thirdLogin.ftl
jeecg-module-system/jeecg-system-start/Dockerfile
jeecg-module-system/jeecg-system-start/README.md
jeecg-module-system/jeecg-system-start/pom.xml
jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java
jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/codegenerate/JeecgOneGUI.java
jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/codegenerate/JeecgOneToMainUtil.java
jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml
jeecg-module-system/jeecg-system-start/src/main/resources/application.yml
jeecg-module-system/jeecg-system-start/src/main/resources/banner.txt
jeecg-module-system/jeecg-system-start/src/main/resources/jeecg/jeecg_config.properties
jeecg-module-system/jeecg-system-start/src/main/resources/jeecg/jeecg_database.properties
jeecg-module-system/jeecg-system-start/src/main/resources/logback-spring.xml
jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/SampleTest.java
jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/TestMain.java
jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/system/test/SysUserTest.java
jeecg-module-system/pom.xml
jeecg-server-cloud/docker-compose-base.yml
jeecg-server-cloud/docker-compose.yml
jeecg-server-cloud/jeecg-cloud-gateway/Dockerfile
jeecg-server-cloud/jeecg-cloud-gateway/README.md
jeecg-server-cloud/jeecg-cloud-gateway/pom.xml
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/JeecgGatewayApplication.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/config/GatewayRoutersConfig.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/config/RateLimiterConfiguration.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/config/RouterDataType.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/fallback/FallbackController.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/fallback/HystrixFallbackHandler.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/fallback/sentinel/GatewaySentinelExceptionConfig.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/fallback/sentinel/SentinelBlockRequestHandler.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/filter/GlobalAccessTokenFilter.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/filter/SentinelFilterContextConfig.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/LoderRouderHandler.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/swagger/MySwaggerResourceProvider.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/handler/swagger/SwaggerResourceController.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/DynamicRouteLoader.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/repository/DynamicRouteService.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/repository/MyInMemoryRouteDefinitionRepository.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/vo/GatewayRouteVo.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/java/org/jeecg/loader/vo/MyRouteDefinition.java
jeecg-server-cloud/jeecg-cloud-gateway/src/main/resources/application.yml
jeecg-server-cloud/jeecg-cloud-gateway/src/main/resources/logback-spring.xml
jeecg-server-cloud/jeecg-cloud-nacos/Dockerfile
jeecg-server-cloud/jeecg-cloud-nacos/README.md
jeecg-server-cloud/jeecg-cloud-nacos/docs/config/jeecg-dev.yaml
jeecg-server-cloud/jeecg-cloud-nacos/docs/config/jeecg-gateway-dev.yaml
jeecg-server-cloud/jeecg-cloud-nacos/docs/config/jeecg-gateway-router.json
jeecg-server-cloud/jeecg-cloud-nacos/docs/config/jeecg.yaml
jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding-multi.yaml
jeecg-server-cloud/jeecg-cloud-nacos/docs/config/分库分表/jeecg-sharding.yaml
jeecg-server-cloud/jeecg-cloud-nacos/pom.xml
jeecg-server-cloud/jeecg-cloud-nacos/src/main/java/com/alibaba/nacos/JeecgNacosApplication.java
jeecg-server-cloud/jeecg-cloud-nacos/src/main/resources/application.yml
jeecg-server-cloud/jeecg-demo-cloud-start/Dockerfile
jeecg-server-cloud/jeecg-demo-cloud-start/README.md
jeecg-server-cloud/jeecg-demo-cloud-start/pom.xml
jeecg-server-cloud/jeecg-demo-cloud-start/src/main/java/org/jeecg/JeecgDemoCloudApplication.java
jeecg-server-cloud/jeecg-demo-cloud-start/src/main/resources/application.yml
jeecg-server-cloud/jeecg-demo-cloud-start/src/main/resources/logback-spring.xml
jeecg-server-cloud/jeecg-system-cloud-start/Dockerfile
jeecg-server-cloud/jeecg-system-cloud-start/README.md
jeecg-server-cloud/jeecg-system-cloud-start/pom.xml
jeecg-server-cloud/jeecg-system-cloud-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java
jeecg-server-cloud/jeecg-system-cloud-start/src/main/resources/application.yml
jeecg-server-cloud/jeecg-system-cloud-start/src/main/resources/jeecg/jeecg_config.properties
jeecg-server-cloud/jeecg-system-cloud-start/src/main/resources/jeecg/jeecg_database.properties
jeecg-server-cloud/jeecg-system-cloud-start/src/main/resources/logback-spring.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-monitor/README.md
jeecg-server-cloud/jeecg-visual/jeecg-cloud-monitor/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-monitor/src/main/java/org/jeecg/monitor/JeecgMonitorApplication.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-monitor/src/main/java/org/jeecg/monitor/config/SecuritySecureConfig.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-monitor/src/main/resources/application.yml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/Dockerfile
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/README.md
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/JeecgSentinelApplication.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/constants/SentinelConStants.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/AuthorityRuleController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/DegradeController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/ParamFlowRuleController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/SystemController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/base/BaseRuleController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayApiController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/gateway/GatewayFlowRuleController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/controller/v2/FlowControllerV2.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/NacosConfigProperties.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/SentinelConfig.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/authority/AuthorityRuleNacosProvider.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/authority/AuthorityRuleNacosPublisher.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/degrade/DegradeRuleNacosProvider.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/degrade/DegradeRuleNacosPublisher.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/entity/AuthorityRuleCorrectEntity.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/entity/ParamFlowRuleCorrectEntity.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/flow/FlowRuleNacosProvider.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/flow/FlowRuleNacosPublisher.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/gateway/GateWayApiNacosProvider.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/gateway/GateWayApiNacosPublisher.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/gateway/GateWayFlowRulesNacosProvider.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/gateway/GateWayFlowRulesNacosPublisher.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/paramflow/ParamFlowRuleNacosProvider.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/paramflow/ParamFlowRuleNacosPublisher.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/system/SystemRuleNacosProvider.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/system/SystemRuleNacosPublisher.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/resources/application.yml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/constant/CloudConstant.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClient.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/client/JeecgTestClientDyn.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/controller/JeecgTestFeignController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/factory/JeecgTestClientFactory.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/feign/fallback/JeecgTestFallback.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/lock/DemoLockTest.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/DemoJobHandler.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-more/src/main/java/org/jeecg/modules/test/xxljob/XxclJobTest.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/constant/CloudConstant.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/controller/JeecgMqTestController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/event/DemoBusEvent.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver1.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver2.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloReceiver3.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/src/main/java/org/jeecg/modules/test/rabbitmq/listener/HelloTimeReceiver.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/db/seata.sql
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/SeataAccountApplication.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/controller/SeataAccountController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/entity/SeataAccount.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/mapper/SeataAccountMapper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/service/SeataAccountService.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/java/org/jeecg/modules/test/seata/account/service/impl/SeataAccountServiceImpl.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/resources/application.yml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-account/src/main/resources/sql/schema-account.sql
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/SeataOrderApplication.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/controller/SeataOrderController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/dto/PlaceOrderRequest.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/dto/ReduceBalanceRequest.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/dto/ReduceStockRequest.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/entity/SeataOrder.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/enums/OrderStatus.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/feign/AccountClient.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/feign/ProductClient.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/mapper/SeataOrderMapper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/service/SeataOrderService.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/java/org/jeecg/modules/test/seata/order/service/impl/SeataOrderServiceImpl.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/resources/application.yml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-order/src/main/resources/sql/schema-order.sql
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/SeataProductApplication.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/modules/test/seata/product/controller/SeataProductController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/modules/test/seata/product/entity/SeataProduct.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/modules/test/seata/product/mapper/SeataProductMapper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/modules/test/seata/product/service/SeataProductService.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/java/org/jeecg/modules/test/seata/product/service/impl/SeataProductServiceImpl.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/resources/application.yml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/jeecg-cloud-test-seata-product/src/main/resources/sql/schema-product.sql
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-seata/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/doc/db.sql
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/algorithm/StandardModTableShardAlgorithm.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/controller/JeecgShardingDemoController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/entity/ShardingSysLog.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/mapper/ShardingSysLogMapper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/mapper/xml/ShardingSysLogMapper.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/service/IShardingSysLogService.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/java/org/jeecg/modules/test/sharding/service/impl/ShardingSysLogServiceImpl.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding-multi.yml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-shardingsphere/src/main/resources/application-sharding.yml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/Dockerfile
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/README.md
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/doc/db/tables_xxl_job.sql
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/pom.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/IndexController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobApiController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobCodeController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/JobLogController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/UserController.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/alarm/JobAlarm.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/alarm/JobAlarmer.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/cron/CronExpression.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobLosedMonitorHelper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/service/LoginService.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/service/XxlJobService.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/application.yml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/i18n/message_en.properties
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/i18n/message_zh_CN.properties
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/i18n/message_zh_TC.properties
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/logback.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css.map
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/bower_components/moment/moment.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/dist/js/adminlte.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/favicon.ico
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/js/common.1.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/js/index.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/js/jobcode.index.1.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/js/jobgroup.index.1.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/js/jobinfo.index.1.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/js/joblog.detail.1.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/js/joblog.index.1.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/js/login.1.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/js/user.index.1.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/lib/codemirror.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/lib/codemirror.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/clike/clike.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/php/php.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/python/python.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/codemirror/mode/shell/shell.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/cronGen/cronGen.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/cronGen/cronGen_en.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/echarts/echarts.common.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/jquery/jquery.cookie.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/jquery/jquery.validate.min.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/layer.js
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/icon-ext.png
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/icon.png
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/layer.css
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-0.gif
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-1.gif
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/static/plugins/layer/theme/default/loading-2.gif
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/common/common.exception.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/common/common.macro.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/help.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/index.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/jobcode/jobcode.index.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/jobgroup/jobgroup.index.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/jobinfo/jobinfo.index.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/joblog/joblog.detail.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/joblog/joblog.index.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/login.ftl
jeecg-server-cloud/jeecg-visual/jeecg-cloud-xxljob/src/main/resources/templates/user/user.index.ftl
jeecg-server-cloud/jeecg-visual/pom.xml
jeecg-server-cloud/pom.xml
pom.xml |