This commit is contained in:
JEECG 2026-04-15 23:05:38 +08:00
commit 65c466a132
16 changed files with 536 additions and 46 deletions

View File

@ -1,4 +1,4 @@
[中文](./README.md) | English
[中文](./README.md) | English | [日本語](./README.ja-JP.md)
![JEECG](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/logov3.png "JeecgBoot低代码开发平台")
@ -456,4 +456,4 @@ AI Chat Assistant
If so, buy the author a cup of coffee ☺
![](https://static.oschina.net/uploads/img/201903/08155608_0EFX.png)
![](https://static.oschina.net/uploads/img/201903/08155608_0EFX.png)

459
README.ja-JP.md Normal file
View File

@ -0,0 +1,459 @@
[中文](./README.md) | [English](./README.en-US.md) | 日本語
![JEECG](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/logov3.png "JeecgBoot ローコード開発プラットフォーム")
JEECG BOOT AI ローコードプラットフォーム
===============
現在のバージョン3.9.1リリース日2026-01-28
[![AUR](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE)
[![](https://img.shields.io/badge/Author-guojusoft-orange.svg)](http://www.jeecg.com)
[![](https://img.shields.io/badge/version-3.9.1-brightgreen.svg)](https://github.com/zhangdaiscott/jeecg-boot)
[![GitHub stars](https://img.shields.io/github/stars/zhangdaiscott/jeecg-boot.svg?style=social&label=Stars)](https://github.com/zhangdaiscott/jeecg-boot)
[![GitHub forks](https://img.shields.io/github/forks/zhangdaiscott/jeecg-boot.svg?style=social&label=Fork)](https://github.com/zhangdaiscott/jeecg-boot)
プロジェクト紹介
-----------------------------------
<h3 align="center">Java AI ローコードプラットフォーム</h3>
JeecgBootは、コード`ジェネレーター`を基盤とした`AIローコードプラットフォーム`ですフロントエンドとバックエンドの分離アーキテクチャとして、SpringBoot2.x、SpringCloud、Ant Design & Vue、Mybatis Plus、Shiro、JWTを採用し、マイクロサービスに対応しています。強力なコードジェネレーターにより、フロントエンドとバックエンドのコードを自動生成し、ローコード開発を実現しますJeecgBootは新しいローコード開発パラダイムOnlineCoding → コードジェネレーター → 手動マージを提唱し、Javaプロジェクトにおける70%の重複作業を解消することで、開発をよりビジネスに集中させます。開発効率を迅速に向上させ、研究開発コストを削減するだけでなく、柔軟性も損ないません!
JeecgBootは、オンライン開発を真のゼロコードにするための一連のローコードモジュールを提供しますオンラインフォーム開発、オンラインレポート、レポート設定機能、オンラインチャート設計、大画面設計、モバイル設定機能、フォームデザイナー、オンラインフロー設計、プロセス自動化設定、プラグイン機能プラグ可能など
JEECGの目的はシンプルな機能はOnlineCodingの設定で実装し、ゼロコード開発を実現すること。複雑な機能はコードジェネレーターで生成し、手動マージすることでローコード開発を実現し、インテリジェンスと柔軟性の両方を確保します。ローコード開発を実現しつつ、柔軟なコーディングもサポートし、現在のローコード製品に共通する柔軟性の欠如という欠点を解消しています
JEECGのビジネスプロセスワークフローを使用してタスクインターフェースを実装・拡張し、ビジネスロジックを開発・記述します。フォームは複数のソリューションを提供フォームデザイナー、オンライン設定フォーム、コーディングフォーム。同時に、プロセスとフォームの分離設計疎結合を実現し、タスクードの柔軟な設定をサポートすることで、企業のプロセスの機密性を確保しつつ、開発者の作業負荷を軽減します。
AIによるローコードの強化現在、JeecgBootはChatGPTやDeepSeekなどのAI大規模言語モデルに対応しています。最新バージョンではデフォルトでDeepSeekを使用しており、より高速かつ高品質です。AIチャットアシスタント、AIテーブル作成、AIレポート生成などの機能を提供しています。
技術サポート
-----------------------------------
使用中の問題やバグは[Issues](https://github.com/jeecgboot/JeecgBoot/issues/new?template=bug_report.md)で報告できます。
##### プロジェクト説明
| プロジェクト | 説明 |
|--------------------|------------------------|
| `jeecg-boot` | SpringBootバックエンドソースコードマイクロサービス対応 |
| `jeecgboot-vue3` | Vue3+TS 新フロントエンドソースコード|
| `jeecg-uniapp` | [APP開発フレームワーク、一つのコードで複数端末に対応、APP・ミニプログラム・H5をサポート](https://github.com/jeecgboot/jeecg-uniapp) |
### 動画紹介
[![](https://upload.jeecg.com/jeecg/qiaoqiaoyunsite/jeecgvideo02.png)](https://www.bilibili.com/video/BV1Nk4y1o7Qc)
その他のソースコードダウンロード
-----------------------------------
- APPソースコードhttps://github.com/jeecgboot/jeecg-uniapp
プロジェクトの適用範囲
-----------------------------------
JeecgBoot AIローコードプラットフォームは、あらゆるJ2EEプロジェクトの開発に適用でき、特にSAASプロジェクト、企業情報管理システムMIS、社内オフィスシステムOA、企業資源計画システムERP、顧客関係管理システムCRMなどに適しています。その半インテリジェントな手動マージ開発方式により、開発効率を70%以上大幅に向上させ、開発コストを大幅に削減できます。
プロジェクトの起動
-----------------------------------
> デフォルトのアカウント/パスワードadmin/123456
- [開発環境のセットアップ](https://help.jeecg.com/java/setup/tools)
- [IDEAクイックスタートシングルモデル](https://help.jeecg.com/java/setup/idea/startup)
- [Dockerクイックスタートシングルモデル](https://help.jeecg.com/java/docker/quick)
- [IDEAクイックスタートマイクロサービスモデル](https://help.jeecg.com/java/springcloud/switchcloud/monomer)
- [Dockerクイックスタートマイクロサービスモデル](https://help.jeecg.com/java/docker/quickcloud)
技術ドキュメント
-----------------------------------
- 公式サイト:[http://www.jeecg.com](http://www.jeecg.com)
- デモ:[オンラインデモ](http://boot3.jeecg.com) | [APP](http://jeecg.com/appIndex)
- ドキュメント:[ドキュメントセンター](http://help.jeecg.com) | [AI設定](https://help.jeecg.com/java/ai/aichat)
- 初心者ガイド:[クイックスタート](http://www.jeecg.com/doc/quickstart) | [Q&A](http://www.jeecg.com/doc/qa) | [1分間体験](https://my.oschina.net/jeecg/blog/3083313)
- QQグループ964611995、⑩716488839(満)、⑨808791225(満)
スター推移
-----------------------------------
[![Star History Chart](https://api.star-history.com/svg?repos=jeecgboot/jeecg-boot&type=Date)](https://star-history.com/#jeecgboot/jeecg-boot)
バックエンドディレクトリ構成
-----------------------------------
```
プロジェクト構成
├─jeecg-boot-parent
│ ├─jeecg-boot-base-core
│ ├─jeecg-module-demo
│ ├─jeecg-module-system
│ │ ├─jeecg-system-biz
│ │ ├─jeecg-system-start システム8080
│ │ ├─jeecg-system-api
│ │ │ ├─jeecg-system-cloud-api
│ │ │ ├─jeecg-system-local-api
│ ├─jeecg-server-cloud
│ ├─jeecg-cloud-gateway 9999
│ ├─jeecg-cloud-nacos --Nacos8848
│ ├─jeecg-system-cloud-start --システム7001
│ ├─jeecg-demo-cloud-start --デモ7002
│ ├─jeecg-visual
│ ├─jeecg-cloud-monitor -- 9111
│ ├─jeecg-cloud-xxljob -- 9080
│ ├─jeecg-cloud-sentinel --sentinel9000
│ ├─jeecg-cloud-test
│ ├─jeecg-cloud-test-more
│ ├─jeecg-cloud-test-rabbitmq
│ ├─jeecg-cloud-test-seata
│ ├─jeecg-cloud-test-shardingsphere
```
なぜJeecgBootなのか
-----------------------------------
* 最新の主流フロントエンド・バックエンド分離フレームワークSpringboot+Mybatis+antdを採用し、使いやすい。コードジェネレーターは低依存で、柔軟な拡張性を持ち、迅速な二次開発が可能。
* マイクロサービス SpringCloud AlibabaNacos, Gateway, Sentinel, Skywalkingをサポートし、切替メカニズムを提供。シングルサービスとマイクロサービスの自由な切替に対応。
* 高い開発効率、コードジェネレーターを使用して、単一テーブル、ツリーリスト、一対多、一対一などのデータモデルの追加・削除・変更・検索機能をワンクリックで生成、メニュー設定でそのまま使用可能。
* コードジェネレーターは強力なテンプレートメカニズムを提供し、カスタムテンプレートをサポート。現在4セットのスタイルテンプレートを提供単一テーブル2セット、ツリーモデル1セット、一対多3セット
* コードジェネレーターは非常にインテリジェントで、オンラインビジネスモデリング、オンライン設定、WYSIWYG見たまま編集で23種類のコントロールをサポート。ワンクリックでフロントエンドとバックエンドのコードを生成し、開発効率を大幅に向上。繰り返し作業の心配はもう不要。
* ローコード機能:オンラインフォーム(コーディング不要、オンライン設定でフォームの追加・削除・変更・検索を実現。単一テーブル、ツリー、一対多、一対一モデルをサポートし、誰でもコーディング可能に)
* ローコード機能:オンラインレポート(コーディング不要、オンライン設定でデータレポートを実現。迅速なデータ抽出で開発負担を軽減し、誰でもコーディング可能に)
* ローコード機能:オンラインチャート(コーディング不要、オンライン設定でグラフ、棒グラフ、データレポートなどを実現。カスタムレイアウトをサポートし、誰でもコーディング可能に)
* ユーザー、ロール、メニュー、組織、データ辞書、オンラインスケジュールタスクなどの基本機能を完全にカプセル化。アクセス権限、ボタン権限、データ権限などの機能をサポート。
* よく使われる共通パッケージ、各種ツールスケジュールタスク、SMS連携、メール送信、Excelインポート・エクスポートなどを搭載し、プロジェクト要件の80%をほぼカバー。
* 簡単なExcelインポート・エクスポート、単一テーブルエクスポートと一対多テーブルモードのエクスポートをサポート。生成されたコードにはインポート・エクスポート機能が付属。
* シンプルなレポートツールを統合、画像レポートやデータエクスポートが非常に便利。グラフィカルレポート、PDF、Excel、Wordなどのレポートを極めて簡単に生成可能。
* フロントエンド・バックエンド分離技術により、ページのUIスタイルは精巧。よく使われるコンポーネントをカプセル化時間、行テーブルコントロール、切り取り表示コントロール、レポートコンポーネント、エディタなど。
* クエリフィルタークエリ機能を自動生成、バックエンドで動的にSQLをスプライスして追加クエリ条件を生成。複数のマッチングモード完全一致、あいまい検索、包含検索、不一致検索をサポート。
* データ権限(きめ細かいデータ権限制御、行レベル・リストレベル・フォームフィールドレベルまで制御可能。異なる人が異なるデータを表示し、同じページでも異なる人が異なるフィールドを操作可能)
* ページバリデーションを自動生成(必須入力、数値検証、金額検証、日時検証など)。
* SAASサービスモデルをサポートし、SaaSマルチテナントアーキテクチャソリューションを提供。
* 分散ファイルサービス、Minio、Alibaba OSSなどの優れたサードパーティを統合し、便利なファイルアップロードと管理を提供。ローカルストレージもサポート。
* 主流データベース互換性、一つのコードでMySQL、PostgreSQL、Oracle、SQL Server、MariaDB、DM達夢などの主流データベースに完全対応。
* ワークフローFlowableを統合し、ページ上でのフロー方向の設定のみで実現。BPMワークフローの開発を大幅に簡素化。BPMのプロセスデザイナーでフロー方向を描画すれば、少量のJavaコードでワークフローがほぼ完成。
* ローコード機能オンラインプロセス設計、オープンソースのActivitiプロセスエンジンを使用し、オンラインでプロセスを描画、カスタムフォーム、フォーム添付ファイル、ビジネスフローを実現。
* マルチデータソース:シンプルな使用方法、オンラインでデータソースを設定し、他のデータから簡単にデータを取得可能。
* シングルサインオンCAS統合ソリューションを提供し、プロジェクト内に完全な連携コードを提供済み。
* ローコード機能フォームデザイナー、ユーザー定義のフォームレイアウトをサポート。単一テーブル、一対多フォームをサポートし、select、radio、checkbox、textarea、date、ポップアップ、リスト、マクロなどのコントロールに対応。
* プロフェッショナルなインターフェース連携メカニズム、統一的にRESTfulインターフェースを使用、swagger-uiオンラインインターフェースドキュメントを統合、JWTトークンによるセキュリティ検証で、クライアントの連携が容易。
* インターフェースセキュリティメカニズム、きめ細かいインターフェース認可制御が可能。異なるクライアントが自分のデータのみ参照可能な制御を非常に簡単に実現。
* 高度な組み合わせクエリ機能、オンライン設定でメインテーブルとサブテーブルの関連クエリをサポート、クエリ履歴の保存が可能。
* 各種システム監視を提供、システム稼働状況のリアルタイム追跡Redis、Tomcat、JVM、サーバー情報、リクエストトラッキング、SQL監視の監視
* メッセージセンターSMS、メール、WeChat プッシュなどをサポート)
* WebSocketメッセージ通知メカニズムを統合
* 優れたモバイル対応エフェクト、APPリリーススキームを提供
* 多言語対応、国際化ソリューションを提供
* データ変更記録ログ、各データの変更内容を記録可能。バージョン比較機能により過去の変更履歴を確認可能
* プラットフォームUIは強力で、モバイル対応を実装
* プラットフォームホーム画面スタイル、複数の組み合わせモードを提供、カスタムスタイルをサポート
* 使いやすい印刷プラグインを提供、Google Chrome、Firefox、IE11+などのブラウザをサポート
* 豊富なサンプルコード、多数の学習用事例を参照として提供
* Mavenモジュール開発方式を採用
* 動的メニュールーティングをサポート
* RBACロールベースアクセス制御による権限制御を採用
* 新しい行編集テーブル JVXETable を提供、様々な複雑なERPレイアウトに容易に対応。より高いパフォーマンス、より柔軟な拡張性、より強力な機能
技術アーキテクチャ:
-----------------------------------
#### 開発環境
- 言語Java デフォルト JDK17JDK8、JDK21もサポート
- IDEJavaIDEAlombokプラグインのインストールが必須
- IDEフロントエンドVSCode、WebStorm、IDEA
- 依存関係管理Maven
- キャッシュRedis
- データベースMySQL5.7+ [その他のデータベース](https://my.oschina.net/jeecg/blog/4905722)
#### バックエンド
- 基盤フレームワークSpring Boot 2.7.18
- マイクロサービスフレームワークSpring Cloud Alibaba 2021.0.6.2
- 永続化レイヤーフレームワークMybatisPlus 3.5.3.2
- レポートツールJimuReport 1.9.5
- セキュリティフレームワークApache Shiro 1.13.0、Jwt 4.5.0
- マイクロサービス技術スタックSpring Cloud Alibaba、Nacos、Gateway、Sentinel、Skywalking
- データベース接続プールAlibaba Druid 1.1.24
- ログ出力logback
- その他autopoi、fastjson、poi、Swagger-ui、quartz、lombokコード簡素化など
#### フロントエンド
- 技術スタック:`Vue3.0+TypeScript+Vite+AntDesignVue+pinia+echarts`
#### フロントエンド環境要件
* `Node.js、npm、pnpm`
* pnpm `v9+` が必要です。
* Node.js 推奨バージョン:`v20.15.0`
` Vite6以降、Node.js 18/20以上が必要です`
#### 対応データベース
| データベース | 対応状況 |
| --- | --- |
| MySQL | √ |
| Oracle11g | √ |
| SQL Server 2017 | √ |
| PostgreSQL | √ |
| MariaDB | √ |
| 達夢DM | √ |
| 人大金倉KingbaseES | √ |
| TiDB | √ |
#### AI対応
| AIモデル | 対応状況 |
| --- | --- |
| DeepSeek | √ |
| ChatGPT | √ |
| Qwq | √ |
| 智庫 | √ |
| Ollamaローカル大規模モデル | √ |
| その他 | √ |
AI設定https://help.jeecg.com/java/ai/aichat
AIアプリhttps://help.jeecg.com/aigc
## マイクロサービスソリューション
- 1. サービス登録と検出 Nacos √
- 2. 設定センター Nacos √
- 3. ルートゲートウェイ Gateway3つのロードモード
- 4. 分散HTTP Feign √
- 5. サーキットブレーカー・デグレード・レート制限 Sentinel √
- 6. 分散ファイル Minio および Alibaba OSS √
- 7. 統一権限制御
- 8. サービス監視 SpringBootAdmin √
- 9. リンクトレーシング Skywalking [参考ドキュメント](https://help.jeecg.com/java/springcloud/super/skywarking)
- 10. メッセージングミドルウェア RabbitMQ √
- 11. 分散タスク xxl-job √
- 12. 分散トランザクション Seata
- 13. 分散ログ Loki+Grafana
- 14. docker-compose、k8s、jenkinsに対応
- 15. CAS SSO √
- 16. ルートレート制限 √
#### マイクロサービスアーキテクチャ図
![マイクロサービスアーキテクチャ図](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/jeecgboot_springcloud2022.png "マイクロサービスアーキテクチャ図")
### JeecgBoot 製品機能ブループリント
![機能ブループリント](https://jeecgos.oss-cn-beijing.aliyuncs.com/upload/test/Jeecg-Boot-lantu202005_1590912449914.jpg "機能ブループリント")
### クイックスタート
- マイクロサービス開発:[モノリスからマイクロサービスへのアップグレード](https://help.jeecg.com/java/springcloud/switchcloud/monomer)
- [Dockerでマイクロサービスバックエンドを起動](https://help.jeecg.com/java/docker/springcloud)
### システム画面
##### ChatGPT AIダイアログ
> JeecgBootのバックエンドホームページに移動し、ホームページ右側中央の「AIアシスタント」をクリックすると、AIアシスタントのダイアログ画面が表示されます。
![](https://oscimg.oschina.net/oscnet/up-7c6405641a40f56638999d52da0cb5b4343.png)
##### PC
##### AIモデルとアプリケーション管理
![](https://oscimg.oschina.net/oscnet/up-0b1779e923566ccebb2d5a9cc9220c78b4a.png)
![](https://oscimg.oschina.net/oscnet/up-c8956df1d37d66b2d40136afaeca677628b.png)
![](https://oscimg.oschina.net/oscnet/up-8c348eeafd89673ca8cd1a2705014e3ac04.png)
AIワークフローオーケストレーション
![](https://oscimg.oschina.net/oscnet/up-2343657de2c7ac8010bc471470d084075ae.png)
MCPとツール管理
![](https://oscimg.oschina.net/oscnet/up-8119d5dbc72e534236a3d042e11534c52ad.png)
AIナレッジベース各種ドキュメント形式に対応、優れたMarkdown互換性
![](https://oscimg.oschina.net/oscnet/up-e2e9c118982ea366ed7f2b9827d4bb46c5d.png)
AIツールボックス
![](https://oscimg.oschina.net/oscnet/up-bf2a808d22a11fd83e577ad74741d97884b.png)
AIチャットアシスタント
![](https://oscimg.oschina.net/oscnet/up-2a51accc2ff0b647e0ee058a58d291fe811.png)
![](https://oscimg.oschina.net/oscnet/up-ea1069c2a92a3ab2963d88763016cb037c2.png)
![](https://oscimg.oschina.net/oscnet//65298d5710b4e6039a5f802b5f8505c5.png)
![](https://oscimg.oschina.net/oscnet/up-000530d95df337b43089ac77e562494f454.png)
![](https://static.oschina.net/uploads/img/201904/14155402_AmlV.png)
![](https://oscimg.oschina.net/oscnet/up-9d6f36f251e71a0b515a01323474b03004c.png)
![](https://static.oschina.net/uploads/img/201904/14160813_KmXS.png)
![](https://static.oschina.net/uploads/img/201904/14160935_Nibs.png)
![](https://static.oschina.net/uploads/img/201904/14161004_bxQ4.png)
##### インタラクティブ
![](https://oscimg.oschina.net/oscnet/up-78b151fc888d4319377bf1cc311fe826871.png)
![](https://oscimg.oschina.net/oscnet/up-16c07e000278329b69b228ae3189814b8e9.png)
##### プロセスデザイナー
![](https://oscimg.oschina.net/oscnet/up-981ce174e4fbb48c8a2ce4ccfd7372e2994.png)
![](https://static.oschina.net/uploads/img/201907/05165142_yyQ7.png)
![](https://static.oschina.net/uploads/img/201904/14160917_9Ftz.png)
![](https://static.oschina.net/uploads/img/201904/14160633_u59G.png)
##### ミニプロセス
![](https://oscimg.oschina.net/oscnet/up-1dc0d052149ec675f3e4fad632b82b48add.png)
![](https://oscimg.oschina.net/oscnet/up-de31bc2f9d9b8332c554b0954cc73d79593.png)
![](https://oscimg.oschina.net/oscnet/up-7f83b25159663686d67ed080eb16068c3b4.png)
##### ダッシュボードデザイナー
![](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/darg20240726105556.png)
![](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/drag20240724135626.png)
![](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/drag20240724135619.png)
![](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/drag20240724135630.png)
![](https://jeecgos.oss-cn-beijing.aliyuncs.com/files/drag20240726105547.png)
![](https://oscimg.oschina.net/oscnet/up-fad98d42b2cf92f92a903c9cff7579f18ec.png)
##### レポートデザイナー
![](https://oscimg.oschina.net/oscnet/up-64648de000851f15f6c7b9573d107ebb5f8.png)
![](https://oscimg.oschina.net/oscnet/up-fa52b44445db281c51d3f267dce7450d21b.gif)
![](https://oscimg.oschina.net/oscnet/up-68a19149d640f1646c8ed89ed4375e3326c.png)
![](https://oscimg.oschina.net/oscnet/up-f7e9cb2e3740f2d19ff63b40ec2dd554f96.png)
##### フォームデザイナー
![](https://oscimg.oschina.net/oscnet/up-5f8cb657615714b02190b355e59f60c5937.png)
![](https://oscimg.oschina.net/oscnet/up-d9659b2f324e33218476ec98c9b400e6508.png)
![](https://oscimg.oschina.net/oscnet/up-4868615395272d3206dbb960ade02dbc291.png)
##### 大画面デザイナー
![](https://oscimg.oschina.net/oscnet/up-402a6034124474bfef8dfc5b4b2bac1ce5c.png)
![](https://oscimg.oschina.net/oscnet/up-6f7ba2e2ebbeea0d203db8d69fd87644c9f.png)
![](https://oscimg.oschina.net/oscnet/up-ee8d34f318da466b8a6070a6e3111d12ce7.png)
![](https://oscimg.oschina.net/oscnet/up-6b81781b43086819049c4421206810667c5.png)
##### UniApp
![](https://oscimg.oschina.net/oscnet/up-aac943fbd26561879c57a41f7a406edf274.png)
![](https://oscimg.oschina.net/oscnet/up-9a44ba2e82b09c750629d12fafd7f60f553.png)
##### ローコードアプリ
![](https://oscimg.oschina.net/oscnet/up-4be29ae761b2615c8c54b3f668cd8432d9b.png)
![](https://oscimg.oschina.net/oscnet/up-787e76bc24b38ecc7ed19f338808d128255.png)
![](https://oscimg.oschina.net/oscnet/up-99d24a236c483362868523ad0d90f611487.png)
![](https://oscimg.oschina.net/oscnet/up-339a0f29d10449abc7724e3bcda802761c1.png)
![](https://oscimg.oschina.net/oscnet/up-b356670cdc14c609958c7619a537397c4b9.png)
##### アプリ
![](https://oscimg.oschina.net/oscnet/da543c5d0d57baab0cecaa4670c8b68c521.jpg)
![](https://oscimg.oschina.net/oscnet/fda4bd82cab9d682de1c1fbf2060bf14fa6.jpg)
##### PAD
![](https://oscimg.oschina.net/oscnet/e90fef970a8c33790ab03ffd6c4c7cec225.jpg)
![](https://oscimg.oschina.net/oscnet/d78218803a9e856a0aa82b45efc49849a0c.jpg)
![](https://oscimg.oschina.net/oscnet/59c23b230f52384e588ee16309b44fa20de.jpg)
##### チャート
![](https://oscimg.oschina.net/oscnet/up-218bc6a1669496b241ebb23506440c0083e.png)
![](https://static.oschina.net/uploads/img/201904/14160834_Lo23.png)
![](https://static.oschina.net/uploads/img/201904/14160842_QK7B.png)
![](https://static.oschina.net/uploads/img/201904/14160849_GBm5.png)
![](https://static.oschina.net/uploads/img/201904/14160858_6RAM.png)
##### Swagger
![](https://static.oschina.net/uploads/img/201908/27095258_M2Xq.png)
![](https://static.oschina.net/uploads/img/201904/14160957_hN3X.png)
## 寄付
よろしければ、作者にコーヒーを一杯おごってください ☺
![](https://static.oschina.net/uploads/img/201903/08155608_0EFX.png)

View File

@ -1,4 +1,4 @@
中文 | [English](./README.en-US.md)
中文 | [English](./README.en-US.md) | [日本語](./README.ja-JP.md)
JeecgBoot AI低代码平台
===============
@ -594,4 +594,4 @@ AI写文章
如果觉得还不错,请作者喝杯咖啡吧 ☺
![](https://static.oschina.net/uploads/img/201903/08155608_0EFX.png)
![](https://static.oschina.net/uploads/img/201903/08155608_0EFX.png)

View File

@ -73,24 +73,25 @@ public class TikaDocumentParser {
AssertUtils.assertNotEmpty("请选择文件", file);
try {
// 用于解析(使用FileInputStream避免file.toPath()在Linux非UTF-8环境下中文文件名报错)
InputStream isForParsing = new FileInputStream(file);
// 使用 Tika 自动检测 MIME 类型
String fileName = file.getName().toLowerCase();
//后缀
String ext = FilenameUtils.getExtension(fileName);
if (fileName.endsWith(".txt")
|| fileName.endsWith(".md")
|| fileName.endsWith(".pdf")) {
return extractByTika(isForParsing);
//update-begin---author:wangshuai---date:2026-01-09---for:QQYUN-14261AIAI助手支持多模态能力- 文档---
} else if (FILE_SUFFIX.contains(ext.toLowerCase())) {
return parseDocExcelPdfUsingApachePoi(file);
//update-end---author:wangshuai---date:2026-01-09---for:QQYUN-14261AIAI助手支持多模态能力- 文档---
} else {
throw new IllegalArgumentException("不支持的文件格式: " + FilenameUtils.getExtension(fileName));
try (InputStream isForParsing = new FileInputStream(file)) {
// 使用 Tika 自动检测 MIME 类型
String fileName = file.getName().toLowerCase();
//后缀
String ext = FilenameUtils.getExtension(fileName);
if (fileName.endsWith(".txt")
|| fileName.endsWith(".md")
|| fileName.endsWith(".pdf")) {
return extractByTika(isForParsing);
//update-begin---author:wangshuai---date:2026-01-09---for:QQYUN-14261AIAI助手支持多模态能力- 文档---
} else if (FILE_SUFFIX.contains(ext.toLowerCase())) {
return parseDocExcelPdfUsingApachePoi(file);
//update-end---author:wangshuai---date:2026-01-09---for:QQYUN-14261AIAI助手支持多模态能力- 文档---
} else {
throw new IllegalArgumentException("不支持的文件格式: " + FilenameUtils.getExtension(fileName));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}

View File

@ -1,6 +1,7 @@
package org.jeecg.modules.test.seata.account.controller;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.test.seata.account.service.SeataAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@ -20,7 +21,7 @@ public class SeataAccountController {
private SeataAccountService accountService;
@PostMapping("/reduceBalance")
public void reduceBalance(Long userId, BigDecimal amount) {
accountService.reduceBalance(userId, amount);
public Result<?> reduceBalance(Long userId, BigDecimal amount) {
return accountService.reduceBalance(userId, amount);
}
}

View File

@ -1,5 +1,7 @@
package org.jeecg.modules.test.seata.account.service;
import org.jeecg.common.api.vo.Result;
import java.math.BigDecimal;
/**
@ -14,5 +16,5 @@ public interface SeataAccountService {
* @param userId 用户 ID
* @param amount 扣减金额
*/
void reduceBalance(Long userId, BigDecimal amount);
Result<?> reduceBalance(Long userId, BigDecimal amount);
}

View File

@ -5,6 +5,7 @@ import com.baomidou.dynamic.datasource.annotation.DS;
import io.seata.core.context.RootContext;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.test.seata.account.entity.SeataAccount;
import org.jeecg.modules.test.seata.account.mapper.SeataAccountMapper;
import org.jeecg.modules.test.seata.account.service.SeataAccountService;
@ -34,7 +35,7 @@ public class SeataAccountServiceImpl implements SeataAccountService {
@DS("account")
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class)
public void reduceBalance(Long userId, BigDecimal amount) {
public Result<?> reduceBalance(Long userId, BigDecimal amount) {
log.info("xid:"+ RootContext.getXID());
log.info("=============ACCOUNT START=================");
SeataAccount account = accountMapper.selectById(userId);
@ -44,7 +45,7 @@ public class SeataAccountServiceImpl implements SeataAccountService {
if (balance.compareTo(amount)==-1) {
log.warn("用户 {} 余额不足,当前余额:{}", userId, balance);
throw new RuntimeException("余额不足");
return Result.error("余额不足");
}
log.info("开始扣减用户 {} 余额", userId);
BigDecimal currentBalance = account.getBalance().subtract(amount);
@ -52,5 +53,6 @@ public class SeataAccountServiceImpl implements SeataAccountService {
accountMapper.updateById(account);
log.info("扣减用户 {} 余额成功,扣减后用户账户余额为{}", userId, currentBalance);
log.info("=============ACCOUNT END=================");
return Result.OK();
}
}

View File

@ -4,7 +4,7 @@ spring:
data:
redis:
##redis 单机环境配置
host: localhost
host: jeecg-boot-redis
port: 6379
database: 0
password:
@ -22,7 +22,7 @@ spring:
autoconfigure:
exclude: com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration
datasource:
url: jdbc:mysql://127.0.0.1:3306/jeecg_account?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true
url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg_account?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
@ -30,7 +30,7 @@ spring:
init:
schema-locations: classpath:sql/schema-account.sql
seata:
enable-auto-data-source-proxy: false
enable-auto-data-source-proxy: true
service:
grouplist:
default: 127.0.0.1:8091

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.test.seata.order.feign;
import org.jeecg.common.api.vo.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@ -19,5 +20,5 @@ public interface AccountClient {
* @return
*/
@PostMapping("/test/seata/account/reduceBalance")
String reduceBalance(@RequestParam("userId") Long userId, @RequestParam("amount") BigDecimal amount);
Result<?> reduceBalance(@RequestParam("userId") Long userId, @RequestParam("amount") BigDecimal amount);
}

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.test.seata.order.feign;
import org.jeecg.common.api.vo.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@ -21,5 +22,5 @@ public interface ProductClient {
* @return
*/
@PostMapping("/test/seata/product/reduceStock")
BigDecimal reduceStock(@RequestParam("productId") Long productId, @RequestParam("count") Integer count);
Result<BigDecimal> reduceStock(@RequestParam("productId") Long productId, @RequestParam("count") Integer count);
}

View File

@ -5,6 +5,9 @@ import com.baomidou.dynamic.datasource.annotation.DS;
import io.seata.core.context.RootContext;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.exception.JeecgBootBizTipException;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.test.seata.order.dto.PlaceOrderRequest;
import org.jeecg.modules.test.seata.order.entity.SeataOrder;
import org.jeecg.modules.test.seata.order.enums.OrderStatus;
@ -59,13 +62,20 @@ public class SeataOrderServiceImpl implements SeataOrderService {
orderMapper.insert(order);
log.info("订单一阶段生成,等待扣库存付款中");
// 扣减库存并计算总价
BigDecimal amount = productClient.reduceStock(productId, count);
Result<BigDecimal> productRes = productClient.reduceStock(productId, count);
if (!productRes.isSuccess()) {
String message = productRes.getMessage();
message = oConvertUtils.isEmpty(message) ? "操作失败" : message;
throw new JeecgBootBizTipException(message);
}
BigDecimal amount = productRes.getResult();
// 扣减余额
String str = accountClient.reduceBalance(userId, amount);
Result<?> accountRes = accountClient.reduceBalance(userId, amount);
// feign响应被二次封装判断使主事务回滚
JSONObject jsonObject = JSONObject.parseObject(str);
if (jsonObject.getInteger("code") != 200) {
throw new RuntimeException();
if (!accountRes.isSuccess()) {
String message = accountRes.getMessage();
message = oConvertUtils.isEmpty(message) ? "操作失败" : message;
throw new JeecgBootBizTipException(message);
}
order.setStatus(OrderStatus.SUCCESS);

View File

@ -4,7 +4,7 @@ spring:
data:
redis:
##redis 单机环境配置
host: localhost
host: jeecg-boot-redis
port: 6379
database: 0
password:
@ -23,14 +23,14 @@ spring:
exclude: com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jeecg_order?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false
url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg_order?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: root
sql:
init:
schema-locations: classpath:sql/schema-order.sql
seata:
enable-auto-data-source-proxy: false
enable-auto-data-source-proxy: true
service:
grouplist:
default: 127.0.0.1:8091

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.test.seata.product.controller;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.test.seata.product.service.SeataProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@ -20,7 +21,7 @@ public class SeataProductController {
private SeataProductService seataProductService;
@PostMapping("/reduceStock")
public BigDecimal reduceStock(Long productId, Integer count, HttpServletRequest request) {
public Result<BigDecimal> reduceStock(Long productId, Integer count, HttpServletRequest request) {
return seataProductService.reduceStock(productId, count);
}
}

View File

@ -1,5 +1,7 @@
package org.jeecg.modules.test.seata.product.service;
import org.jeecg.common.api.vo.Result;
import java.math.BigDecimal;
/**
@ -16,5 +18,5 @@ public interface SeataProductService {
* @param count 扣减数量
* @return 商品总价
*/
BigDecimal reduceStock(Long productId, Integer count);
Result<BigDecimal> reduceStock(Long productId, Integer count);
}

View File

@ -5,6 +5,7 @@ import io.seata.core.context.RootContext;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.test.seata.product.entity.SeataProduct;
import org.jeecg.modules.test.seata.product.mapper.SeataProductMapper;
import org.jeecg.modules.test.seata.product.service.SeataProductService;
@ -35,7 +36,7 @@ public class SeataProductServiceImpl implements SeataProductService {
@DS("product")
@Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class)
@Override
public BigDecimal reduceStock(Long productId, Integer count) {
public Result<BigDecimal> reduceStock(Long productId, Integer count) {
log.info("xid:"+ RootContext.getXID());
log.info("=============PRODUCT START=================");
// 检查库存
@ -46,7 +47,7 @@ public class SeataProductServiceImpl implements SeataProductService {
if (stock < count) {
log.warn("商品编号为{} 库存不足,当前库存:{}", productId, stock);
throw new RuntimeException("库存不足");
return Result.error("库存不足");
}
log.info("开始扣减商品编号为 {} 库存,单价商品价格为{}", productId, product.getPrice());
// 扣减库存
@ -56,6 +57,6 @@ public class SeataProductServiceImpl implements SeataProductService {
BigDecimal totalPrice = product.getPrice().multiply(new BigDecimal(count));
log.info("扣减商品编号为 {} 库存成功,扣减后库存为{}, {} 件商品总价为 {} ", productId, currentStock, count, totalPrice);
log.info("=============PRODUCT END=================");
return totalPrice;
return Result.OK(totalPrice);
}
}

View File

@ -1,6 +1,15 @@
server:
port: 5003
spring:
data:
redis:
##redis 单机环境配置
host: jeecg-boot-redis
port: 6379
database: 0
password:
ssl:
enabled: false
application:
name: seata-product
cloud:
@ -14,14 +23,14 @@ spring:
exclude: com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jeecg_product?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false
url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg_product?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: root
sql:
init:
schema-locations: classpath:sql/schema-product.sql
seata:
enable-auto-data-source-proxy: false
enable-auto-data-source-proxy: true
service:
grouplist:
default: 127.0.0.1:8091