feat(docs): 添加档案管理模块业务流程文档
- 设计档案分类书架分层分列管理功能
- 实现档案文档集中存储与检索机制
- 支持电子附件与实体位置兼具存储
- 建立密级管控与敏感权限管理体系
- 实现借阅登记与两级审批流程
- 添加归还登记与流转闭环功能
- 提供逾期未还实时提醒机制
- 开发档案存量与流转统计功能
- 实现课题会员财务三方归档联动
- 定义档案借阅审批BPM流程模型
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # æ¡£æ¡ç®¡ç模å - å端èè°æ¹æ¡ |
| | | |
| | | > 模åï¼`yudao-module-archive`ï¼ä¸»æ¨¡åï¼+ `yudao-module-archive-api`ï¼è·¨æ¨¡å彿¡£ RPCï¼ |
| | | > å端æ¥å£åç¼ï¼`/archive/category`ã`/archive/document`ã`/archive/borrow`ã`/archive/stat` |
| | | > éä»¶å
³èï¼`recordType = archive_document`ï¼`application = file` |
| | | > æéç¹åç¼ï¼`archive:category:*`ã`archive:document:*`ã`archive:borrow:*`ã`archive:stat:query` |
| | | |
| | | ## ä¸ãæ¶å页é¢ï¼å端æä»¶æ¸
åï¼ |
| | | |
| | | | æä»¶ | 说æ | |
| | | |------|------| |
| | | | `src/packages/constants/src/dict-enum.ts` | æ°å¢ `ARCHIVE_DICT`ï¼6 个åå
¸ç±»åï¼å¹¶å±å¼è¿ `DICT_TYPE` | |
| | | | `src/api/archive/category/index.ts` | æ¡£æ¡åç±» API | |
| | | | `src/api/archive/document/index.ts` | æ¡£æ¡ API | |
| | | | `src/api/archive/borrow/index.ts` | åé
å API | |
| | | | `src/api/archive/stat/index.ts` | æ¡£æ¡ç»è®¡ API | |
| | | | `src/views/archive/category/index.vue` | åç±»æ 表页ï¼å·¦æ å³è¡¨å½¢æï¼`treeConfig` å±å¼ï¼ | |
| | | | `src/views/archive/category/data.ts` | å类表å + æç´¢è¡¨å + è¡¨æ ¼å | |
| | | | `src/views/archive/category/modules/form.vue` | åç±»æ°å¢/ç¼è¾å¼¹çªï¼å«ãæ°å¢ä¸çº§ãï¼ | |
| | | | `src/views/archive/document/index.vue` | æ¡£æ¡åè¡¨é¡µï¼æ£ç´¢ + å¯¼åº + éä»¶æ è®°ï¼ | |
| | | | `src/views/archive/document/data.ts` | æ¡£æ¡è¡¨å + æç´¢è¡¨å + è¡¨æ ¼å | |
| | | | `src/views/archive/document/modules/form.vue` | æ¡£æ¡æ°å¢/ç¼è¾/详æ
å¼¹çªï¼å®ä½ä½ç½®ååæ®µ + çµåéä»¶ä¸ä¼ ï¼ | |
| | | | `src/views/archive/borrow/index.vue` | åé
å表页ï¼é¾æ Tagãæäº¤å®¡æ¹ãå½è¿ç»è®°ï¼ | |
| | | | `src/views/archive/borrow/data.ts` | åé
表å + æç´¢è¡¨å + è¡¨æ ¼å + `BorrowStatus` 常é | |
| | | | `src/views/archive/borrow/modules/form.vue` | åé
ç»è®°/ç¼è¾/详æ
å¼¹çª | |
| | | | `src/views/archive/borrow/modules/process-select-modal.vue` | éæ©å®¡æ¹æµç¨å¼¹çª | |
| | | | `src/views/archive/borrow/modules/return-form.vue` | å½è¿ç»è®°å¼¹çª | |
| | | | `src/views/archive/borrow/detail/approve/index.vue` | **BPM 审æ¹è¯¦æ
页**ï¼è·¯å¾å¿
é¡»ä¸ `bpm_process_definition_info.form_custom_view_path` å®å
¨ä¸è´ | |
| | | | `src/views/archive/stat/index.vue` | æ¡£æ¡ç»è®¡é¡µï¼4 å¡ç + 3 å¾è¡¨ï¼ | |
| | | | `src/views/archive/stat/data.ts` | å¡çå®ä¹ + 饼å¾/æ±å¾ option æé | |
| | | |
| | | > åå
¸æä¸¾å¿
é¡»ç»è®°å° `dict-enum.ts`ï¼å¦å `DICT_TYPE.ARCHIVE_*` åä¸å°å¼ï¼å表åä¸è¡¨å䏿ä¼ç©ºç½ã |
| | | |
| | | **èåå·²é
ç½®å®æ**ï¼æ¬é¡¹ç®ä¸ºå¨æè·¯ç±ï¼å端æ éæå·¥å è·¯ç±æä»¶ï¼ |
| | | |
| | | | èå | id | è·¯å¾ | ç»ä»¶ | æéæ è¯ | |
| | | |------|----|------|------|----------| |
| | | | æ¡£æ¡ç®¡çï¼é¡¶çº§ç®å½ `parent_id=0`ï¼`path=/archive`ï¼ | 1075600 | `/archive` | â | â | |
| | | | æ¡£æ¡åç±» | 1075601 | `category` | `archive/category/index` | `archive:category:query` | |
| | | | æ¡£æ¡ç®¡ç | 1075602 | `document` | `archive/document/index` | `archive:document:query` | |
| | | | åé
ç»è®° | 1075603 | `borrow` | `archive/borrow/index` | `archive:borrow:query` | |
| | | | æ¡£æ¡ç»è®¡ | 1075604 | `stat` | `archive/stat/index` | `archive:stat:query` | |
| | | |
| | | æé®æéï¼`archive:category:create/update/delete`ã`archive:document:create/update/delete/export/sensitive`ã`archive:borrow:create/update/delete/submit/return`ã`archive:stat:query`ã |
| | | |
| | | > â **æææéç¹**ï¼è¿äºèå䏿éç¹**æªæäºä»»ä½è§è²**ï¼å æ¤åªæè¶
级管çåï¼`super_admin`ï¼ä»£ç ç´è¿å
¨é¨èåï¼è½çå°ï¼æ®éè§è²éå¨ãç³»ç»ç®¡ç â è§è²ãå¾éææã |
| | | > â **æææé**ï¼`archive:document:sensitive`ï¼èå 1075625ãä¿å¯æ¡£æ¡æ¥çãï¼å³å®è½å¦çå°å¯çº§=ä¿å¯çæ¡£æ¡ã**æªæææ¶å端ä¼å¼ºå¶è¿æ»¤**ï¼ä¸æ¯å端éèã |
| | | |
| | | **åå
¸å·²é
ç½®å®æ**ï¼åç«¯ç´æ¥ç¨ `getDictOptions` / `DictTag` åå¼ï¼æ éèªå»ºæä¸¾ï¼ |
| | | |
| | | | åå
¸ç±»å | åç§° | åå¼ | |
| | | |----------|------|------| |
| | | | `archive_category_status` | æ¡£æ¡åç±»ç¶æ | 0 å¯ç¨ / 1 åç¨ | |
| | | | `archive_document_status` | æ¡£æ¡ç¶æ | 10 å¨åº / 20 ååºä¸ | |
| | | | `archive_secret_level` | æ¡£æ¡å¯çº§ | 1 å
¬å¼ / 2 å
é¨ / 3 ä¿å¯ | |
| | | | `archive_carrier_type` | æ¡£æ¡è½½ä½ | 1 çµå / 2 å®ä½ / 3 çµå+å®ä½ | |
| | | | `archive_source_type` | æ¡£æ¡æ¥æº | 1 æå·¥å½å
¥ / 2 课é¢å½æ¡£ / 3 ä¼å彿¡£ / 4 è´¢å¡å½æ¡£ | |
| | | | `archive_borrow_status` | æ¡£æ¡åé
ç¶æ | 0 è稿 / 15 审æ¹ä¸ / 20 ååºä¸ / 30 å·²å½è¿ / 35 已驳å | |
| | | |
| | | --- |
| | | |
| | | ## äºãä¸å¡æµç¨ä¸æ°æ®å¸¦å
¥ |
| | | |
| | | ### 2.1 æ¡£æ¡ç»è®°ï¼æå·¥ï¼ |
| | | |
| | | ``` |
| | | éæ©æ¡£æ¡åç±»ï¼æ 形䏿ï¼é»è®¤å¸¦åºè¯¥åç±»ç default_secret_levelï¼ |
| | | â |
| | | âââ æ¡£æ¡æ é¢ãå¯çº§ãè½½ä½ã彿¡£æ¥æï¼å¿
å¡«ï¼ |
| | | âââ å®ä½ä½ç½®ï¼ä¹¦æ¶å· / å±å· / åå· / åå·ï¼æ¡£æ¡çå·ï¼/ åæ¾ä½ç½®æè¿° |
| | | âââ çµåæä»¶ï¼èµ° /system/storage-blob/upload æ¿ blobIdï¼é create/update ä¸èµ·æäº¤ |
| | | â |
| | | ä¿åï¼createï¼ |
| | | â¼ |
| | | åç«¯çææ¡£æ¡ç¼å· DA+yyyyMMdd+6使µæ°´ï¼è½åºå¹¶ bindAttachments |
| | | â |
| | | åè¡¨å¯æ£ç´¢ï¼æ é¢/å
³é®è¯/æ¥æºåå·/åç±»/å¯çº§/è½½ä½/ç¶æ/彿¡£æ¥æåºé´ï¼ |
| | | ``` |
| | | |
| | | - **éä»¶åæ®µ**ï¼è¡¨ååæ®µå `blobIds`ï¼number[]ï¼ã**å
¨éæ¿æ¢è¯ä¹** ââ æ¸
空å
¨é¨éä»¶æ¶å¿
é¡»æ¾å¼ä¼ `[]`ï¼ä¼ `null` è§ä¸ºãä¸å¨éä»¶ãã |
| | | - **æå¼ç¼è¾/详æ
æ¶**ï¼éæ `attachmentList` æ å°æä¸ä¼ ç»ä»¶å¯è¯å«ç对象ï¼`uid`/`name`/`url`/`status`/`id`ï¼ï¼æäº¤æ¶æ `valueKey: 'id'` æå为 blobIdã |
| | | - **åªè¯»å段**ï¼`no`ï¼æ¡£æ¡ç¼å·ï¼ã`status`ï¼æ¡£æ¡ç¶æï¼ã`sourceType` / `sourceNo`ï¼æ¥æºï¼ã`archivistName`ï¼å½æ¡£äººï¼ç±å端维æ¤ï¼è¡¨ååªå±ç¤ºä¸åä¼ ã |
| | | |
| | | ### 2.2 åé
éç¯ |
| | | |
| | | ``` |
| | | ç»è®°åé
ï¼éæ©å¨åºæ¡£æ¡ + åé
人 + åé
æ¥æ + å½è¿æéï¼ |
| | | â |
| | | ä¿åï¼è稿 0ï¼ |
| | | â |
| | | æäº¤å®¡æ¹ï¼å
è° approve-process-list æ¿æµç¨ keyï¼å submitï¼ |
| | | â¼ |
| | | 审æ¹ä¸ 15 ââ[BPM éè¿]ââ⺠ååºä¸ 20 ââ[å½è¿ç»è®°]ââ⺠已å½è¿ 30 |
| | | â â |
| | | â ï¼åæ¶ææ¡£æ¡ç½®ä¸ºãååºä¸ãï¼ |
| | | â |
| | | âââ[BPM 驳å]ââ⺠已驳å 35 ââï¼æ¹åå¯éæ°æäº¤ï¼ |
| | | ``` |
| | | |
| | | **å
³é®å¸¦å
¥è§å**ï¼ |
| | | |
| | | 1. **åé
ç»è®°æ¶**ï¼éä¸çæ¡£æ¡ä¼ä»¥ `no + title` å½¢å¼å±ç¤ºï¼æäº¤æ¶åªä¼ `documentId`ï¼æ¡£æ¡ç¼å·ä¸æ é¢ç±å端快ç
§å°åé
åï¼`documentNo` / `documentTitle`ï¼ã |
| | | 2. **æäº¤å®¡æ¹æ¶**ï¼**æµç¨ key å¿
é¡»æ¥èªå端 `approve-process-list`ï¼ç¦æ¢åç«¯åæ»**ãå表为空æ¶åºæç¤ºãææ å¯ç¨å®¡æ¹æµç¨ï¼è¯·å
å° BPM æµç¨è®¾è®¡å¨å叿¡£æ¡åé
å®¡æ¹æµç¨ãã |
| | | 3. **å½è¿ç»è®°æ¶**ï¼åªä¼ `id` + `returnRemark`ãå½è¿æååæ¡£æ¡èªå¨åå°ãå¨åºãï¼åé
ååãå·²å½è¿ãå¹¶åå
¥ `returnTime` / `returnConfirmUserName`ã |
| | | |
| | | ### 2.3 龿æéï¼å®æ¶è®¡ç®ï¼ä¸è½åºãä¸åéç¥ï¼ |
| | | |
| | | - åç«¯å¨ `page` / `overdue-page` è¿åæ¶å®æ¶è®¡ç®ï¼`overdue = (status == 20 && returnDeadline < ä»å¤©)`ï¼`overdueDays = ä»å¤© - returnDeadline`ã |
| | | - å端**ä¸éè¦**èªè¡è®¡ç®ï¼ç´æ¥ç¨ `row.overdue` / `row.overdueDays` 渲æçº¢è² Tagã |
| | | - `overdueOnly` 䏿¯æ¥è¯¢åæ°ï¼èæ¯ç¬ç«æ¥å£ `GET /archive/borrow/overdue-page`ï¼å端ç¨ãåªç龿ãæé®åæ¢è°ç¨çæ¥å£å³å¯ã |
| | | |
| | | ### 2.4 䏿¹å½æ¡£èå¨ï¼æ¬æ¨¡åçå¤é¨å
¥å£ï¼ |
| | | |
| | | | æ¥æºæ¨¡å | æ¥å£ | æéç¹ | 触ååæ | |
| | | |----------|------|--------|----------| |
| | | | è¯¾é¢ | `POST /research/application/archive?id` | `research:application:archive` | ç³æ¥å `status=20 å·²ç«é¡¹` 䏿ªå½æ¡£ | |
| | | | ä¼å | `POST /ums/member/archive?id` | `ums:member:archive` | ä¼å `status=1 æ£å¸¸` 䏿ªå½æ¡£ | |
| | | | è´¢å¡ | `POST /finance/reimbursement/archive?id` | `finance:reimbursement:archive`ï¼æ¢æï¼ | æ¥éå `status=20 å·²éè¿` 䏿ªå½æ¡£ | |
| | | |
| | | - ä¸ä¸ªæ¥å£**åè¿åçæçæ¡£æ¡ç¼å·**ï¼`CommonResult<String>`ï¼å¦ `DA20260929000001`ï¼ï¼å端 toast ç´æ¥æç¤ºã彿¡£æåï¼å·²çææ¡£æ¡ XXXãã |
| | | - 䏿¹å表页çååºä½æ°å¢ä¸¤ä¸ªå段ç¨äºæ§å¶æé®æ¾éä¸ã已彿¡£ãæ è®°ï¼ |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | `archiveDocumentId` | number | 彿¡£çæçæ¡£æ¡ IDï¼é空å³å·²å½æ¡£ï¼ | |
| | | | `archived` | boolean | æ¯å¦å·²å½æ¡£ | |
| | | - çæçæ¡£æ¡ï¼`sourceType` 为 2 è¯¾é¢ / 3 ä¼å / 4 è´¢å¡ï¼`sourceNo` 忥æºåå·ï¼ç«é¡¹ç¼å· / ä¼åç¼å· / æ¥éåå·ï¼ï¼åç±»åºå®å `research` / `member` / `finance`ã |
| | | - **è´¢å¡å½æ¡£é»è®¤å¯çº§ä¸ºãä¿å¯ã**ï¼åç±» `finance` ç `default_secret_level=3`ï¼ï¼å æ¤è´¢å¡æ¡£æ¡å¨æ `archive:document:sensitive` æéæ¶**卿¡£æ¡å表éçä¸å°**ã |
| | | - **éå¤å½æ¡£ä¼æ¥é**ï¼æç¤ºä¸å¸¦æ¥æºåå·ä¸å·²çæçæ¡£æ¡ç¼å·ï¼å端åºå¨å½æ¡£æååå·æ°å表ï¼`archiveDocumentId` é空åæé®èªå¨éèï¼ã |
| | | - **è´¢å¡å½æ¡£æ¯å å è¯ä¹**ï¼æ¢æé»è¾ææ¥éå 20â40 å¹¶å `archiveTime`ï¼æ¬æ¬¡å¨æ¤åºç¡ä¸è¿½å çææ¡£æ¡ï¼ä¸¤è
åäºå¡ã |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãAPI |
| | | |
| | | ### 3.1 æ¡£æ¡åç±» `/archive/category` |
| | | |
| | | | æ¹æ³ | è·¯å¾ | æé | 说æ | |
| | | |------|------|------|------| |
| | | | POST | `/archive/category/create` | `archive:category:create` | æ°å¢åç±» | |
| | | | PUT | `/archive/category/update` | `archive:category:update` | ä¿®æ¹åç±» | |
| | | | DELETE | `/archive/category/delete?id` | `archive:category:delete` | å é¤ï¼æååç±»/ææ¡£æ¡æ¶æç»ï¼ | |
| | | | GET | `/archive/category/get?id` | `archive:category:query` | å类详æ
| |
| | | | GET | `/archive/category/list` | `archive:category:query` | åç±»å表ï¼**å¹³éº**ï¼ä¾æ 表 `transform` ç¨ï¼ | |
| | | | GET | `/archive/category/tree` | `archive:category:query` | åç±»æ ï¼ä¾å·¦æ ä¸ä¸æç¨ï¼ | |
| | | |
| | | **`/list` 请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | `name` | String | å¦ | åç±»åç§°ï¼æ¨¡ç³å¹é
| |
| | | | `status` | Integer | å¦ | ç¶æï¼0 å¯ç¨ / 1 åç¨ | |
| | | |
| | | **æ°å¢/ä¿®æ¹è¯·æ±ä½ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | `id` | Long | ä¿®æ¹å¿
å¡« | ç¼å· | |
| | | | `parentId` | Long | æ¯ | ç¶åç±» IDï¼0=顶级 | |
| | | | `name` | String | æ¯ | åç±»åç§° | |
| | | | `code` | String | æ¯ | åç±»ç¼ç ï¼å¯ä¸ï¼member/research/finance çï¼å½æ¡£èå¨ææ¤æ¥æ¾ï¼ | |
| | | | `sort` | Integer | å¦ | æ¾ç¤ºæåº | |
| | | | `description` | String | å¦ | å类说æ | |
| | | | `defaultSecretLevel` | Integer | æ¯ | é»è®¤å¯çº§ï¼1/2/3ï¼ | |
| | | | `status` | Integer | å¦ | ç¶æï¼0 å¯ç¨ / 1 åç¨ï¼ | |
| | | | `remark` | String | å¦ | 夿³¨ | |
| | | |
| | | **ååºå段ï¼** `id`ã`parentId`ã`name`ã`code`ã`sort`ã`description`ã`defaultSecretLevel`ã`status`ã`remark`ã`createTime`ã`children`ï¼æ å½¢æ¥å£æè¿åï¼ã |
| | | |
| | | **æ 表æ¥å
¥è¦ç¹**ï¼`/list` è¿å**å¹³éº**æ°ç»ï¼å端 VXE è¡¨æ ¼ç¨ `treeConfig: { parentField: 'parentId', rowField: 'id', transform: true, expandAll: true, reserve: true }` èªè¡è½¬æ ï¼`pagerConfig.enabled = false`ï¼åç§°åå `treeNode: true`ã |
| | | |
| | | ### 3.2 æ¡£æ¡ `/archive/document` |
| | | |
| | | | æ¹æ³ | è·¯å¾ | æé | 说æ | |
| | | |------|------|------|------| |
| | | | POST | `/archive/document/create` | `archive:document:create` | æ°å¢æ¡£æ¡ | |
| | | | PUT | `/archive/document/update` | `archive:document:update` | ä¿®æ¹ï¼ååºä¸æç»ï¼ | |
| | | | DELETE | `/archive/document/delete?id` | `archive:document:delete` | å é¤ï¼ååºä¸/å卿ªå½è¿åé
åæç»ï¼ | |
| | | | GET | `/archive/document/get?id` | `archive:document:query` | 详æ
ï¼ä¿å¯æ¡£æ¡é `archive:document:sensitive`ï¼ | |
| | | | GET | `/archive/document/page` | `archive:document:query` | åé¡µï¼æ æææéæ¶èªå¨è¿æ»¤ä¿å¯æ¡£æ¡ï¼ | |
| | | | GET | `/archive/document/export-excel` | `archive:document:export` | å¯¼åº Excelï¼åä¸è¿æ»¤ï¼ | |
| | | |
| | | **`/page` 请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | `pageNo` / `pageSize` | Integer | æ¯ | å页 | |
| | | | `no` | String | å¦ | æ¡£æ¡ç¼å·ï¼æ¨¡ç³å¹é
| |
| | | | `title` | String | å¦ | æ¡£æ¡æ é¢ï¼æ¨¡ç³å¹é
| |
| | | | `categoryId` | Long | å¦ | æ¡£æ¡åç±» ID | |
| | | | `secretLevel` | Integer | å¦ | å¯çº§ | |
| | | | `carrierType` | Integer | å¦ | è½½ä½ | |
| | | | `sourceType` | Integer | å¦ | æ¥æºç±»å | |
| | | | `sourceNo` | String | å¦ | æ¥æºåå·ï¼æ¨¡ç³å¹é
| |
| | | | `tags` | String | å¦ | å
³é®è¯ï¼æ¨¡ç³å¹é
tags åæ®µ | |
| | | | `status` | Integer | å¦ | æ¡£æ¡ç¶æ | |
| | | | `archiveDate` | LocalDate[] | å¦ | 彿¡£æ¥æåºé´ï¼**æ ¼å¼ `yyyy-MM-dd`**ï¼RangePicker å¿
须设 `valueFormat: 'YYYY-MM-DD'`ï¼ä¸è½å¸¦æ¶åç§ï¼ | |
| | | |
| | | **æ°å¢/ä¿®æ¹è¯·æ±ä½ï¼SaveReqVO åªæ¥å以ä¸å段ï¼ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | `id` | Long | ä¿®æ¹å¿
å¡« | ç¼å· | |
| | | | `title` | String | æ¯ | æ¡£æ¡æ é¢ | |
| | | | `categoryId` | Long | æ¯ | æ¡£æ¡åç±» ID | |
| | | | `secretLevel` | Integer | æ¯ | å¯çº§ | |
| | | | `carrierType` | Integer | æ¯ | è½½ä½ | |
| | | | `shelfNo` / `layerNo` / `columnNo` / `boxNo` | String | å¦ | å®ä½ä½ç½®ååæ®µ | |
| | | | `storePlace` | String | å¦ | åæ¾ä½ç½®æè¿° | |
| | | | `archiveDate` | String(`yyyy-MM-dd`) | æ¯ | 彿¡£æ¥æ | |
| | | | `summary` | String | å¦ | æè¦ | |
| | | | `tags` | String | å¦ | å
³é®è¯ï¼è±æéå·åé | |
| | | | `remark` | String | å¦ | 夿³¨ | |
| | | | `blobIds` | Long[] | å¦ | éä»¶ ID å
¨éå表ï¼**æ¸
ç©ºé¡»ä¼ `[]`** | |
| | | |
| | | **ååºæ°å¢/åªè¯»å段ï¼** `no`ã`categoryName`ã`sourceType`ã`sourceNo`ã`sourceId`ã`sourceTitle`ã`archivistUserId`ã`archivistName`ã`status`ã`attachmentList`ã`hasAttachment`ã |
| | | |
| | | > â `no` / `status` / `source*` / `archivist*` **ä¸è¦å¨æäº¤ä½éåä¼ **ï¼å端 SaveReqVO 䏿¥æ¶ï¼åä¼ æ æä¹ä¸ä¼è¢«å¿½ç¥ï¼ã |
| | | |
| | | ### 3.3 åé
`/archive/borrow` |
| | | |
| | | | æ¹æ³ | è·¯å¾ | æé | 说æ | |
| | | |------|------|------|------| |
| | | | POST | `/archive/borrow/create` | `archive:borrow:create` | ç»è®°åé
ï¼èç¨¿ï¼ | |
| | | | PUT | `/archive/borrow/update` | `archive:borrow:update` | ä¿®æ¹ï¼ä»
è稿/已驳åï¼ | |
| | | | DELETE | `/archive/borrow/delete?id` | `archive:borrow:delete` | å é¤ï¼ä»
èç¨¿ï¼ | |
| | | | GET | `/archive/borrow/get?id` | `archive:borrow:query` | 详æ
| |
| | | | GET | `/archive/borrow/page` | `archive:borrow:query` | å页 | |
| | | | GET | `/archive/borrow/overdue-page` | `archive:borrow:query` | **龿æªè¿**å页ï¼ååºä¸ ä¸ å½è¿æéå·²è¿ï¼ | |
| | | | POST | `/archive/borrow/submit?id&processDefinitionKey` | `archive:borrow:submit` | æäº¤å®¡æ¹ | |
| | | | GET | `/archive/borrow/approve-process-list` | `archive:borrow:query` | å®¡æ¹æµç¨å®ä¹å表ï¼`{ id, key, name }`ï¼ | |
| | | | POST | `/archive/borrow/return` | `archive:borrow:return` | å½è¿ç»è®° | |
| | | |
| | | **`/page` ä¸ `/overdue-page` 请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | `pageNo` / `pageSize` | Integer | æ¯ | å页 | |
| | | | `no` | String | å¦ | åé
åå·ï¼æ¨¡ç³å¹é
| |
| | | | `documentNo` | String | å¦ | æ¡£æ¡ç¼å·ï¼æ¨¡ç³å¹é
| |
| | | | `documentTitle` | String | å¦ | æ¡£æ¡æ é¢ï¼æ¨¡ç³å¹é
| |
| | | | `borrowerName` | String | å¦ | åé
人å§åï¼æ¨¡ç³å¹é
| |
| | | | `status` | Integer | å¦ | ç¶æ | |
| | | | `borrowDate` | LocalDate[] | å¦ | åé
æ¥æåºé´ï¼`yyyy-MM-dd` | |
| | | | `returnDeadline` | LocalDate[] | å¦ | å½è¿æéåºé´ï¼`yyyy-MM-dd` | |
| | | |
| | | **æ°å¢/ä¿®æ¹è¯·æ±ä½ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | `id` | Long | ä¿®æ¹å¿
å¡« | ç¼å· | |
| | | | `documentId` | Long | æ¯ | æ¡£æ¡ IDï¼é¡»ä¸º**å¨åº**æ¡£æ¡ï¼ | |
| | | | `borrowerUserId` | Long | å¦ | åé
äººç¨æ· ID | |
| | | | `borrowerName` | String | æ¯ | åé
人å§å | |
| | | | `borrowerDept` | String | å¦ | åé
人é¨é¨ | |
| | | | `borrowerPhone` | String | å¦ | èç³»çµè¯ | |
| | | | `borrowDate` | String(`yyyy-MM-dd`) | æ¯ | åé
æ¥æ | |
| | | | `borrowPurpose` | String | å¦ | åé
ç®ç | |
| | | | `returnDeadline` | String(`yyyy-MM-dd`) | æ¯ | å½è¿æéï¼ä¸å¾æ©äºåé
æ¥æï¼ | |
| | | | `remark` | String | å¦ | 夿³¨ | |
| | | |
| | | **å½è¿ç»è®°è¯·æ±ä½ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | `id` | Long | æ¯ | åé
åç¼å· | |
| | | | `returnRemark` | String | å¦ | å½è¿å¤æ³¨ | |
| | | |
| | | **ååºæ°å¢åªè¯»å段ï¼** `no`ã`documentNo`ã`documentTitle`ã`approveTime`ã`returnTime`ã`returnConfirmUserId`ã`returnConfirmUserName`ã`rejectReason`ã`rejectTime`ã`overdue`ã`overdueDays`ã`processInstanceId`ã |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": { |
| | | "list": [ |
| | | { |
| | | "id": 1, |
| | | "no": "JY20260929000001", |
| | | "documentId": 1, |
| | | "documentNo": "DA20260929000001", |
| | | "documentTitle": "2026年度å¦ä¼å·¥ä½æ»ç»", |
| | | "borrowerName": "å¼ ä¸", |
| | | "borrowerDept": "ç§ä¹¦å¤", |
| | | "borrowDate": "2026-09-20", |
| | | "returnDeadline": "2026-10-05", |
| | | "status": 20, |
| | | "approveTime": "2026-09-20 10:12:33", |
| | | "overdue": false, |
| | | "overdueDays": 0 |
| | | } |
| | | ], |
| | | "total": 1 |
| | | }, |
| | | "msg": "" |
| | | } |
| | | ``` |
| | | |
| | | ### 3.4 ç»è®¡ `/archive/stat` |
| | | |
| | | | æ¹æ³ | è·¯å¾ | æé | 说æ | |
| | | |------|------|------|------| |
| | | | GET | `/archive/stat/overview` | `archive:stat:query` | ç»è®¡æ»è§ï¼åé + æµè½¬ + ä¸ç»åå¸ï¼ | |
| | | |
| | | **ååºå段ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | `totalCount` | Long | æ¡£æ¡æ»æ° | |
| | | | `inStockCount` | Long | å¨åºæ¡£æ¡æ° | |
| | | | `borrowedCount` | Long | ååºä¸**æ¡£æ¡**æ° | |
| | | | `borrowingCount` | Long | ååºä¸**åé
å**æ° | |
| | | | `overdueCount` | Long | 龿æªè¿åé
åæ° | |
| | | | `byCategory` | Array | åç±»åå¸ï¼å
ç´ `{ categoryId, name, total }` | |
| | | | `bySecretLevel` | Array | å¯çº§åå¸ï¼å
ç´ `{ value, name, total }` | |
| | | | `byCarrierType` | Array | è½½ä½åå¸ï¼å
ç´ `{ value, name, total }` | |
| | | |
| | | > `bySecretLevel` / `byCarrierType` ç `name` å·²ç±å端转æåå
¸æ ç¾ï¼å端**ç´æ¥å½å¾ä¾åç¨**ï¼æ é忥åå
¸ã |
| | | |
| | | ### 3.5 跨模å彿¡£ï¼æ¬æ¨¡å对å¤ï¼ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | æé | è¿å | |
| | | |------|------|------|------| |
| | | | POST | `/research/application/archive?id` | `research:application:archive` | `CommonResult<String>`ï¼æ¡£æ¡ç¼å·ï¼ | |
| | | | POST | `/ums/member/archive?id` | `ums:member:archive` | `CommonResult<String>`ï¼æ¡£æ¡ç¼å·ï¼ | |
| | | | POST | `/finance/reimbursement/archive?id` | `finance:reimbursement:archive` | `CommonResult<String>`ï¼æ¡£æ¡ç¼å·ï¼ | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { "code": 0, "data": "DA20260929000001", "msg": "" } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## åãåæ®µå±ç¤ºè§å |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | è§å | |
| | | |------|----------|------| |
| | | | `no` | æ¡£æ¡å表ã详æ
| å端çæï¼åªè¯» | |
| | | | `title` | å表ã详æ
ã表å | åè¡¨å¯æ¨¡ç³æç´¢ | |
| | | | `categoryName` | å表 | å端 join åç±»åä½ï¼åè¡¨ç´æ¥å±ç¤ºåç§°èé ID | |
| | | | `secretLevel` | å表ã表å | `CellDict` å `archive_secret_level`ï¼**ä¿å¯æ¡£æ¡æ æéæ¶æ ¹æ¬ä¸è¿å** | |
| | | | `carrierType` | å表ã表å | `CellDict` å `archive_carrier_type` | |
| | | | `sourceType` | å表 | `CellDict` å `archive_source_type` | |
| | | | `sourceNo` | å表ã详æ
| æ¥æºåå·ï¼ç«é¡¹ç¼å·/ä¼åç¼å·/æ¥éåå·ï¼ | |
| | | | `storePlace` + åä½ç½®å段 | å表ã详æ
| å®ä½ä½ç½®ï¼çµåè½½ä½æ¶å¯ä¸ºç©º | |
| | | | `archiveDate` | å表ã详æ
ã表å | `yyyy-MM-dd` | |
| | | | `status`ï¼æ¡£æ¡ï¼ | å表ã表åï¼åªè¯»ï¼ | `CellDict` å `archive_document_status` | |
| | | | `hasAttachment` | å表 | ç¨ slot 渲æãæ / æ ãTag | |
| | | | `overdue` / `overdueDays` | åé
å表ãåé
详æ
| ç¨ slot 渲æï¼é¾ææ¶çº¢è² Tagã龿 N 天ã | |
| | | | `status`ï¼åé
ï¼ | åé
å表ã审æ¹è¯¦æ
| `CellDict` å `archive_borrow_status` | |
| | | | `documentNo` / `documentTitle` | åé
å表 | 彿¡£æ¶çå¿«ç
§ï¼æ¡£æ¡æ¹åä¸å½±ååå²åé
å | |
| | | | `approveTime` / `returnTime` | åé
å表 | `formatDateTime` æ ¼å¼å | |
| | | | `archiveDocumentId` | è¯¾é¢ / ä¼å / è´¢å¡å表 | éç©ºå³æ¾ç¤ºã已彿¡£ãï¼å¹¶éèã彿¡£ãæé® | |
| | | |
| | | --- |
| | | |
| | | ## äºãä¸å¡è§å说æ |
| | | |
| | | | åºæ¯ | è§å | |
| | | |------|------| |
| | | | å é¤åç±» | æååç±»æææ¡£æ¡æ¶æç»ï¼æç¤ºä¸åæ¾åç±»åä¸å
·ä½åå | |
| | | | ä¿®æ¹åç±»ç¶çº§ | ä¸è½æå类设为èªèº«æå
¶ååç±» | |
| | | | ä¿®æ¹æ¡£æ¡ | æ¡£æ¡å¤äºãååºä¸ãæ¶æç»ä¿®æ¹ | |
| | | | å 餿¡£æ¡ | æ¡£æ¡å¤äºãååºä¸ãæå卿ªå½è¿åé
åæ¶æç» | |
| | | | å é¤åé
å | ä»
ãè稿ãå¯å é¤ | |
| | | | æäº¤åé
å®¡æ¹ | ä»
ãè稿ãã已驳åãå¯æäº¤ï¼æäº¤åæ ¡éªåæ¡£æ¡æ ã审æ¹ä¸/ååºä¸ãåé
å | |
| | | | å½è¿æé | ä¸å¾æ©äºåé
æ¥æ | |
| | | | 审æ¹éè¿ | åé
å â ååºä¸å¹¶å `approveTime`ï¼**åæ¶**ææ¡£æ¡ç½®ä¸ºãååºä¸ã | |
| | | | 审æ¹é©³å | åé
å â 已驳åå¹¶å `rejectReason` / `rejectTime`ï¼æ¹åå¯éæ°æäº¤ | |
| | | | å½è¿ç»è®° | ä»
ãååºä¸ãå¯ç»è®°ï¼æååæ¡£æ¡åå°ãå¨åºã | |
| | | | 龿 | 宿¶è®¡ç®ï¼ä¸è½åºãä¸åç«å
ä¿¡ãä¸å»ºå®æ¶ä»»å¡ï¼ä»
å表 Tag ä¸ãåªçé¾æãæ¥å£ä½ç° | |
| | | | æææ¡£æ¡ | æ `archive:document:sensitive` æ¶ï¼`/page`ã`/get`ã`/export-excel` ä¸ä¸ªå
¥å£åè¿æ»¤/æç» | |
| | | | 彿¡£å¹ç | å䏿¥æºåæ®éå¤å½æ¡£ä¼æ¥éï¼æç¤ºä¸å¸¦æ¥æºåå·ä¸å·²çææ¡£æ¡ç¼å· | |
| | | | è´¢å¡å½æ¡£ | æ¥éå 20â40ï¼æ¢æï¼**å¹¶**çæãä¿å¯ãæ¡£æ¡ï¼æ¬æ¬¡æ°å¢ï¼ï¼åäºå¡ | |
| | | |
| | | --- |
| | | |
| | | ## å
ãæ³¨æäºé¡¹ |
| | | |
| | | 1. **éä»¶ä¸å¾èµ° system 模å**ï¼`POST /system/storage-blob/upload` â æ¿ `blobId`ï¼è¡¨ååæ®µç¨å
¨å± `FileUpload` ç»ä»¶ç»å® `blobIds`ã**ç¦æ¢**卿¡£æ¡è¡¨å `file_url` åãç¦æ¢æ°å¢ä¸ä¼ æ¥å£ãç¦æ¢ç¨ infra ç `FileApi`ã |
| | | 2. **`blobIds` æ¯å
¨éæ¿æ¢è¯ä¹**ï¼ç¼è¾æ¶è¥æ¸
空äºå
¨é¨éä»¶ï¼å¿
é¡»æäº¤ `[]`ï¼æäº¤ `null` å端ä¼è§ä¸ºãä¸å¨éä»¶ããæå¼ç¼è¾å¼¹çªæ¶åºæ `attachmentList` æ å°æ `{ uid, name, url, status: 'done', id }` æ°ç»ã |
| | | 3. **æ¥æåºé´ä¸å¾ `valueFormat: 'YYYY-MM-DD'`**ï¼å端 `LocalDate[]` åªæ¥å `yyyy-MM-dd`ï¼å¸¦æ¶åç§ä¼è§£æå¤±è´¥ã |
| | | 4. **æµç¨ key ä¸åæ»**ï¼æäº¤åé
审æ¹åå¿
é¡»å
è° `approve-process-list`ï¼è¿å空æ°ç»æ¶æç¤ºç¨æ·å
å» BPM å叿µç¨ã |
| | | 5. **审æ¹è¯¦æ
é¡µè·¯å¾æ¯ç¡¬çº¦å®**ï¼`src/views/archive/borrow/detail/approve/index.vue` å¿
é¡»ä¸ `bpm_process_definition_info.form_custom_view_path` ä¸è´ï¼ä¸ç»ä»¶éæ¥å `props: { id: string }`ï¼BPM 审æ¹ä¸å¿éè¿ `businessKey` ä¼ å
¥åé
å IDï¼ãæ¹å¨è·¯å¾ä¼å¯¼è´å¾
å审æ¹é¡µæä¸å¼ã |
| | | 6. **æ¡£æ¡ãååºä¸ãæ¯å¹¶åææç**ï¼å®¡æ¹éè¿æ¶ä¼æ¡ä»¶æ´æ°æ¡£æ¡ç¶æï¼è¥æ¡£æ¡å·²è¢«å¦ä¸æ¡åé
åå ç¨ä¼è¿åä¸å¡å¼å¸¸ï¼å端æç¤ºç¨æ·å·æ°åéè¯å³å¯ï¼ä¸è¦éé»å¿½ç¥ã |
| | | 7. **ä¸è¦å¨å½æ¡£æé®é夿 `archived` ä¹å¤çåæ®µ**ï¼æé®æ¾éæ¡ä»¶å»ºè®®ç¨ `status === å·²éè¿/å·²ç«é¡¹/æ£å¸¸ && !archiveDocumentId`ï¼å½æ¡£æååå·æ°å表å³å¯èªå¨éèã |
| | | 8. **è¶
ç®¡ä¸æ®éè§è²çå¯è§æ§å·®å¼**ï¼èå䏿éç¹é»è®¤åªå¯¹è¶
管å¯è§ï¼æ®éè§è²éå
å¨ãç³»ç»ç®¡ç â è§è²ãææï¼å¦åæ´å `/archive` èåä¸åºç°ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # è´¢å¡-å票æ¥é - å端èè°æ¹æ¡ |
| | | |
| | | > 模åï¼`yudao-module-finance`ï¼ç¬ç«æ¨¡åï¼ä¸ä¸å
¶ä»ä¸å¡æ¨¡åå
³èï¼ |
| | | > å端æ¥å£åç¼ï¼`/finance/reimbursement` |
| | | > éä»¶å
³èï¼`recordType = finance_reimbursement`ï¼`application = file` |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | å端 `finance` ç®å½å·²ææ¬é¡¹ç®çº¦å®å»ºå¥½ï¼å
± 8 个æä»¶ï¼å«åå
¸æä¸¾æ³¨åï¼ï¼ |
| | | |
| | | | æä»¶ | 说æ | |
| | | |------|------| |
| | | | `src/packages/constants/src/dict-enum.ts` | æ°å¢ `FINANCE_DICT`ï¼`FINANCE_REIMBURSEMENT_STATUS` / `FINANCE_EXPENSE_TYPE`ï¼ï¼å¹¶å å
¥ `DICT_TYPE` æ±æ»å¯¼åº | |
| | | | `src/api/finance/reimbursement/index.ts` | æ¥éå API å°è£
| |
| | | | `src/views/finance/reimbursement/index.vue` | æ¥éåå表页ï¼èåæåæ¤ç»ä»¶ï¼ | |
| | | | `src/views/finance/reimbursement/data.ts` | 表åæå¸ + è¡¨æ ¼åå®ä¹ + ç¶æå¸¸é `ReimbursementStatus` | |
| | | | `src/views/finance/reimbursement/modules/form.vue` | æ°å»º/ç¼è¾/详æ
å¼¹çªï¼ä¸»è¡¨å段 + å票ä¸ä¼ ï¼ | |
| | | | `src/views/finance/reimbursement/modules/item-form.vue` | æ¥éæç»è¡ç¼è¾ï¼å¯å¢å è¡ï¼é颿±æ»åå¡«ä¸»è¡¨ï¼ | |
| | | | `src/views/finance/reimbursement/modules/process-select-modal.vue` | éæ©å®¡æ¹æµç¨å¼¹çª | |
| | | | `src/views/finance/reimbursement/detail/approve/index.vue` | 审æ¹è¯¦æ
页ï¼BPM 审æ¹ä¸å¿å¨æå è½½ç¨ï¼ | |
| | | |
| | | > åå
¸æä¸¾å¿
é¡»ç»è®°å° `dict-enum.ts`ï¼å¦å `DICT_TYPE.FINANCE_*` åä¸å°å¼ï¼å表ä¸è¡¨å䏿ä¼ç©ºç½ã |
| | | |
| | | **èåå·²é
ç½®å®æ**ï¼æ éå端æå·¥å è·¯ç±ï¼æ¬é¡¹ç®ä¸ºå¨æè·¯ç±ï¼ï¼ |
| | | |
| | | | èå | id | è·¯å¾ | ç»ä»¶ | 说æ | |
| | | |------|----|------|------|------| |
| | | | è´¢å¡æ¥é | 1075425 | `/finance` | â | **顶级ç®å½**ï¼`parent_id=0`ï¼sort=75ï¼æå¨ãå®å管çãä¸ãåºç¡è®¾æ½ãä¹é´ï¼ | |
| | | | æ¥éå | 1075417 | `reimbursement` | `finance/reimbursement/index` | æå¨ãè´¢å¡æ¥éãä¸ | |
| | | |
| | | > æ¥éå为**ç¬ç«æ¨¡å**ï¼å æ¤å»æ**ä¸æå¨ ERP ç³»ç» â è´¢å¡ç®¡ç**ä¸ï¼é£éæ¯ä»æ¬¾å/æ¶æ¬¾å/ç»ç®è´¦æ·ï¼å± ERP ä¸å¡ï¼ï¼èæ¯æ°å»ºé¡¶çº§ç®å½ãè´¢å¡æ¥éãèªæä¸æ¡é¾è·¯ã |
| | | > |
| | | > â **èåä½ç½®æéç¹**ï¼æ¥é忝**顶级èåçäºçº§é¡¹** ââ ä¾§è¾¹æ å±å¼ **ãè´¢å¡æ¥éã** å³å¯çå°ï¼é¢å
屿¾ç¤ºä¸º `è´¢å¡æ¥é > æ¥éå`ï¼æç»è·¯ç± `/finance/reimbursement`ï¼**注æä¸æ¯** `/erp/finance/reimbursement`ï¼ãERP ç³»ç»ä¸çãè´¢å¡ç®¡çãé**没æ**æ¥éåã |
| | | > |
| | | > â **æææéç¹**ï¼`system_role_menu` ä¸ 1075425 ä¸ 1075417 **åæªæäºä»»ä½è§è²**ï¼å æ¤**åªæè¶
级管çå**ï¼`super_admin`ï¼ä»£ç ç´è¿å
¨é¨èåï¼è½çå°ï¼æ®éè§è²ç»å½çä¸å°ï¼éè¦å¨ãç³»ç»ç®¡ç â è§è²ãéå¾éææã |
| | | > |
| | | > èå**æ¯æ¬¡è¿å
¥åºç¨é½ä¼éæ°æå**ï¼`accessStore` ç `persist.pick` åªå« token/accessCodesï¼ä¸å« `accessMenus`ï¼ï¼æä»¥ä¸åå¨ãéè¦æ¸
ç¼åæçå¾å°ãçé®é¢ï¼çä¸å°åªå¯è½æ¯**ä½ç½®æ²¡å±å¼**æ**è´¦å·è§è²æªææ**ã |
| | | |
| | | **åå
¸å·²é
ç½®å®æ**ï¼åç«¯ç´æ¥ç¨ `getDictOptions` / `DictTag` åå¼ï¼æ éèªå»ºæä¸¾ï¼ |
| | | |
| | | | åå
¸ç±»å | åç§° | åå¼ | |
| | | |----------|------|------| |
| | | | `finance_reimbursement_status` | æ¥éç¶æ | 0 è稿 / 15 审æ¹ä¸ / 20 å·²éè¿ / 35 已驳å / 40 已彿¡£ | |
| | | | `finance_expense_type` | è´¹ç¨ç±»å | 1 å·®æ
/ 2 åå
¬ / 3 æå¾
/ 4 交é / 5 å
¶ä» | |
| | | |
| | | **æé®æéæ è¯**ï¼å·²è½ `system_menu`ï¼åç«¯ç¨ `v-access:code` æ `AccessControl` æ§å¶æ¾éï¼ï¼ |
| | | |
| | | `finance:reimbursement:query`ã`:create`ã`:update`ã`:delete`ã`:export`ã`:update-status`ã`:archive` |
| | | |
| | | ## ä¸å¡æµç¨ä¸æ°æ®å¸¦å
¥ |
| | | |
| | | ``` |
| | | æ°å»ºæ¥éåï¼å¡«ä¸»è¡¨ + æç»è¡ + ä¸ä¼ åç¥¨ï¼ |
| | | â |
| | | âââ ä¸»è¡¨åæ®µï¼æ¥éæ é¢ãæ¥éæ»éé¢ãç³è¯·æ¥æã夿³¨ |
| | | âââ æç»è¡ï¼1..nï¼ï¼è´¹ç¨ç±»åãå票å·ç ãå票éé¢ãåç¥¨æ¥æãå¼ç¥¨æ¹ãè´¹ç¨è¯´æ |
| | | â |
| | | ä¿åï¼createï¼ |
| | | â â éä»¶ï¼å
ä¸ä¼ æ¿ blobIdï¼åæå
¨é¨ blobId æ¾è¿æ¬æ¬¡è¯·æ±ä½ä¸èµ·æäº¤ |
| | | â¼ |
| | | status = 0 è稿 |
| | | â |
| | | ãæäº¤å®¡æ¹ãéæµç¨ â çæ BPM å®ä¾ |
| | | â¼ |
| | | status = 15 审æ¹ä¸ ââââââââââââââââ |
| | | â â |
| | | ââââââââââââ´âââââââââââ â |
| | | 审æ¹éè¿ å®¡æ¹é©³å â |
| | | â¼ â¼ â |
| | | status = 20 å·²éè¿ status = 35 已驳å âââ éæ°æäº¤ |
| | | â |
| | | ã彿¡£ã |
| | | â¼ |
| | | status = 40 已彿¡£ï¼ç»æï¼ |
| | | ``` |
| | | |
| | | **æ°æ®å¸¦å
¥è¦ç¹** |
| | | |
| | | 1. **æç»è¡ä¸åç¬è°ç¨æ¥å£**ï¼æç»é主表ç `create` / `update` 䏿¬¡æ§æäº¤ï¼`items` æ°ç»ï¼ï¼å端æãå
å åå¢ãå
¨éè¦çãå端ä¸éè¦éè¡è°æ¥å£ã |
| | | 2. **å票é件两æ¥èµ°**ï¼ä¸å¾å¨ä¸å¡è¡¨åæä»¶å°åï¼ï¼ |
| | | 1. å
è° `/system/storage-blob/upload` æ¿å° `blobId`ï¼ |
| | | 2. ä¿åæ¥éåæ¶æ**该åå½åå
¨é¨** `blobId` æ¾è¿ `blobIds` ä¸èµ·æäº¤ï¼ç±å端ç»ä¸ç»å®å° `recordType=finance_reimbursement` + `recordId=æ¥éåid`ã |
| | | 3. **ä¸»è¡¨ãæ¥éæ»éé¢ã建议å端èªå¨æ±æ»**ï¼åç«¯ä¸æ ¡éª `totalAmount` ä¸ `items[].invoiceAmount` ä¹åæ¯å¦ç¸çï¼ç´æ¥å
¥åºãè¥è¦ä¿è¯ä¸è´ï¼è¯·åç«¯å¨ `items` ååæ¶æ `invoiceAmount` æ±ååå¡« `totalAmount`ï¼ç¨æ·ä»å¯ææ¹ï¼ã |
| | | 4. **å®¡æ¹æµç¨ key æ¥èª `approve-process-list`**ï¼å端ä¸å¾åæ»æµç¨ keyï¼å¿
须宿¶åå表åç±ç¨æ·éæ©ï¼åç«¯å¨æäº¤æ¶ä¼ææé key å建æµç¨å®ä¾ï¼ã |
| | | 5. **审æ¹è¯¦æ
页跳转**ï¼BPM 审æ¹ä¸å¿å¸¦ `processInstanceId` 跳转ï¼å端åºä»è¯¦æ
æ¥å£ `get` åå° `processInstanceId` åæ¼æ¥è¯¦æ
页路ç±ã |
| | | |
| | | ## API |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | æéæ è¯ | |
| | | |------|------|------|----------| |
| | | | POST | `/finance/reimbursement/create` | å建æ¥éå | `finance:reimbursement:create` | |
| | | | PUT | `/finance/reimbursement/update` | ä¿®æ¹æ¥éå | `finance:reimbursement:update` | |
| | | | DELETE | `/finance/reimbursement/delete` | å 餿¥éå | `finance:reimbursement:delete` | |
| | | | GET | `/finance/reimbursement/get` | æ¥è¯¢æ¥éå详æ
| `finance:reimbursement:query` | |
| | | | GET | `/finance/reimbursement/page` | å页æ¥è¯¢æ¥éå | `finance:reimbursement:query` | |
| | | | GET | `/finance/reimbursement/export-excel` | å¯¼åº Excel | `finance:reimbursement:export` | |
| | | | POST | `/finance/reimbursement/submit` | æäº¤å®¡æ¹ | `finance:reimbursement:update-status` | |
| | | | POST | `/finance/reimbursement/archive` | 彿¡£ | `finance:reimbursement:archive` | |
| | | | GET | `/finance/reimbursement/approve-process-list` | è·åå¯ç¨å®¡æ¹æµç¨å表 | `finance:reimbursement:query` | |
| | | |
| | | ### POST /finance/reimbursement/create |
| | | |
| | | **请æ±åæ°**ï¼JSON bodyï¼ï¼ |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | no | String | å¦ | æ¥éåå·ï¼æé¿ 36ã**ç空ï¼å«åªå¡«ç©ºæ ¼ï¼åç±å端èªå¨çæ**ï¼å¡«äºåæèªå®ä¹åå·æ ¡éªåè½åº | |
| | | | title | String | æ¯ | æ¥éæ é¢ï¼æé¿ 200 | |
| | | | totalAmount | BigDecimal | æ¯ | æ¥éæ»éé¢ | |
| | | | applyDate | String | æ¯ | ç³è¯·æ¥æï¼æ ¼å¼ `yyyy-MM-dd` | |
| | | | remark | String | å¦ | 夿³¨ï¼æé¿ 500 | |
| | | | blobIds | Long[] | å¦ | å票éä»¶ç blobId å表ï¼å¯ä¸ºç©ºæ°ç»è¡¨ç¤ºæ åç¥¨ï¼ | |
| | | | items | Object[] | æ¯ | æ¥éæç»ï¼è³å° 1 è¡ | |
| | | |
| | | **èªå®ä¹åå·è§åï¼`no`ï¼**ï¼ |
| | | |
| | | | è¾å
¥ | å端è¡ä¸º | |
| | | |------|----------| |
| | | | ä¸ä¼ / `null` / 空串 / çº¯ç©ºæ ¼ï¼å«å
¨è§ç©ºæ ¼ `ã`ãå¶è¡¨ç¬¦ï¼ | è§ä¸ºãæªå¡«ãï¼ç±ç³»ç»æ `BX` + `yyyyMMdd` + 6 使µæ°´çæ | |
| | | | æå¼ | 廿é¦å°¾ç©ºæ ¼åä½ä¸ºèªå®ä¹åå·ï¼**ä¸é´**å«ç©ºæ ¼ / å¶è¡¨ç¬¦ / å
¨è§ç©ºæ ¼åæ¥é | |
| | | | æå¼ä½ä¸å
¶ä»æ¥éåéå¤ | æ¥é `æ¥éåå·({})已被å
¶ä»æ¥éå使ç¨ï¼è¯·æ´æ¢å
¶ä»åå·ï¼ææ¸
ç©ºè¯¥åæ®µç±ç³»ç»èªå¨çæ` | |
| | | | æå¼ä¸ä¸é´æç©ºæ ¼ | æ¥é `æ¥éåå·({})ä¸é´ä¸è½å
å«ç©ºæ ¼ï¼è¯·å»æç©ºæ ¼åéæ°è¾å
¥ï¼ææ¸
ç©ºè¯¥åæ®µç±ç³»ç»èªå¨çæ` | |
| | | | é¿åº¦ > 36 | æ ¡éªå¤±è´¥ `æ¥éåå·é¿åº¦ä¸è½è¶
è¿ 36 个å符` | |
| | | |
| | | > åç«¯å¨æäº¤å建议å
`trim()`ï¼æçº¯ç©ºæ ¼è§ä¸ºç©ºä¸²åæäº¤ï¼é¿å
ç¨æ·è¯¯ä»¥ä¸ºå¡«äºåå·ã |
| | | |
| | | `items` å
ç´ ï¼ |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | expenseType | Integer | æ¯ | è´¹ç¨ç±»åï¼ååå
¸ `finance_expense_type` | |
| | | | invoiceNo | String | å¦ | å票å·ç ï¼æé¿ 64 | |
| | | | invoiceAmount | BigDecimal | æ¯ | å票éé¢ | |
| | | | invoiceDate | String | å¦ | åç¥¨æ¥æï¼æ ¼å¼ `yyyy-MM-dd` | |
| | | | drawer | String | å¦ | å¼ç¥¨æ¹ï¼æé¿ 200 | |
| | | | description | String | å¦ | è´¹ç¨è¯´æï¼æé¿ 500 | |
| | | |
| | | **ååº**ï¼`data` 为æ°å»ºæ¥éåç `id`ï¼Longï¼ã |
| | | |
| | | ### PUT /finance/reimbursement/update |
| | | |
| | | 请æ±åæ°ä¸ `create` ç¸åï¼é¢å¤**å¿
å¡«** `id`ï¼Longï¼ãä»
`status=0 è稿` æ `status=35 已驳å` 坿¹ã |
| | | |
| | | **`no` å¨ä¿®æ¹æ¶çè¯ä¹ä¸æ°å¢ä¸å**ï¼ |
| | | |
| | | | è¾å
¥ | å端è¡ä¸º | |
| | | |------|----------| |
| | | | ä¸ä¼ / `null` / 空串 / çº¯ç©ºæ ¼ | **ä¿æååå·ä¸å**ï¼ä¸ä¼éæ°çæï¼ | |
| | | | ä¸å½ååå·ç¸å | è§ä¸ºä¸åæ´ | |
| | | | æå¼ä¸ä¸å½åä¸å | æ ¡éªæ ¼å¼ä¸å¯ä¸æ§åè¦ç为æ°åå· | |
| | | |
| | | > å端ç¼è¾æåºåæ¾ååå·ï¼è¥ç¨æ·æ¸
空该è¾å
¥æ¡ï¼æäº¤æ¶ä¼ 空串å³è¡¨ç¤ºã䏿¹åå·ãï¼ä¸ä¼è¢«ç³»ç»éæ°çæã |
| | | |
| | | **ååº**ï¼`data = true`ã |
| | | |
| | | ### DELETE /finance/reimbursement/delete |
| | | |
| | | | åæ° | ä½ç½® | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------|------| |
| | | | id | query | Long | æ¯ | æ¥éå id | |
| | | |
| | | ä»
`status=0 è稿` å¯å ãå 餿¶ä¼åæ¶æ¸
çæç»ãå票éä»¶ã |
| | | |
| | | ### GET /finance/reimbursement/get |
| | | |
| | | | åæ° | ä½ç½® | ç±»å | å¿
å¡« | |
| | | |------|------|------|------| |
| | | | id | query | Long | æ¯ | |
| | | |
| | | **ååºå段**ï¼ |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | id | Long | æ¥éå id | |
| | | | no | String | æ¥éåå·ãå¯è½æ¯å端çæç `BX` + `yyyyMMdd` + 6 使µæ°´ï¼å¦ `BX20260928000001`ï¼ï¼ä¹å¯è½æ¯ç¨æ·èªå®ä¹çåå· | |
| | | | title | String | æ¥éæ é¢ | |
| | | | totalAmount | BigDecimal | æ¥éæ»éé¢ | |
| | | | status | Integer | ç¶æï¼ååå
¸ `finance_reimbursement_status` | |
| | | | applicantId | Long | ç³è¯·äºº id | |
| | | | applicantName | String | ç³è¯·äººå§åï¼åç«¯å·²è§£ææµç§°ï¼å端ä¸ç¨åæ¥ï¼ | |
| | | | applyDate | String | ç³è¯·æ¥æ `yyyy-MM-dd` | |
| | | | processInstanceId | String | BPM æµç¨å®ä¾ idï¼æªæäº¤æ¶ä¸º `null` | |
| | | | archiveTime | String | 彿¡£æ¶é´ `yyyy-MM-dd HH:mm:ss`ï¼æªå½æ¡£ä¸º `null` | |
| | | | remark | String | 夿³¨ | |
| | | | creator | String | å建人 idï¼å符串形å¼ï¼ | |
| | | | creatorName | String | å建人å§åï¼å端已解æï¼ | |
| | | | createTime | String | å建æ¶é´ | |
| | | | updateTime | String | æ´æ°æ¶é´ | |
| | | | items | Object[] | æ¥éæç»å表 | |
| | | | attachmentList | Object[] | å票éä»¶å表 | |
| | | | hasAttachment | Boolean | æ¯å¦æå票éä»¶ | |
| | | |
| | | `items` å
ç´ ï¼`id`ã`reimbursementId`ã`expenseType`ã`invoiceNo`ã`invoiceAmount`ã`invoiceDate`ã`drawer`ã`description`ã |
| | | |
| | | `attachmentList` å
ç´ ï¼`id`ï¼blobIdï¼ã`url`ï¼æä»¶å°åï¼ã`previewURL`ï¼é¢è§å°åï¼ã`name`ï¼æä»¶åï¼ã`downloadURL`ï¼ä¸è½½å°åï¼ã`application`ã`storageAttachmentId`ï¼éä»¶å
³è idï¼ã |
| | | |
| | | ### GET /finance/reimbursement/page |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | pageNo | Integer | æ¯ | 页ç ï¼ä» 1 å¼å§ | |
| | | | pageSize | Integer | æ¯ | æ¯é¡µæ¡æ° | |
| | | | no | String | å¦ | æ¥éåå·ï¼æ¨¡ç³å¹é
| |
| | | | title | String | å¦ | æ¥éæ é¢ï¼æ¨¡ç³å¹é
| |
| | | | status | Integer | å¦ | ç¶æï¼ç²¾ç¡®å¹é
| |
| | | | applicantId | Long | å¦ | ç³è¯·äºº id | |
| | | | applyDate | String[] | å¦ | ç³è¯·æ¥æåºé´ | |
| | | |
| | | **æ¥æåºé´ä¼ åï¼æéç¹ï¼**ï¼åç«¯åæ®µæ¯æ°ç»ï¼éæä¸é¢å½¢å¼ä¼ 两个å¼ï¼æ ¼å¼ **`yyyy-MM-dd`ï¼ä¸å«æ¶åç§ï¼**ï¼ |
| | | |
| | | - `applyDate[0]=2026-09-01&applyDate[1]=2026-09-30` |
| | | |
| | | **ååº**ï¼`data.list` 为详æ
åæ®µçæ°ç»ï¼å« `items`ã`attachmentList`ï¼ï¼`data.total` ä¸ºæ»æ°ã |
| | | |
| | | ### GET /finance/reimbursement/export-excel |
| | | |
| | | æ¥è¯¢åæ°å `page`ï¼æ å页éå¶ï¼å¿½ç¥ `pageSize`ï¼ãååºä¸ºæä»¶æµï¼å端æ `blob` å¤çå³å¯ã |
| | | |
| | | 导åºåä¸ºï¼æ¥éåå·ãæ¥éæ é¢ãæ¥éæ»éé¢ãç¶æï¼èªå¨è½¬ä¸æï¼ãç³è¯·äººãç³è¯·æ¥æã彿¡£æ¶é´ã夿³¨ãå建æ¶é´ãæ¯å¦ä¸ä¼ å票ã |
| | | |
| | | ### POST /finance/reimbursement/submit |
| | | |
| | | | åæ° | ä½ç½® | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------|------| |
| | | | id | query | Long | æ¯ | æ¥éå id | |
| | | | processDefinitionKey | query | String | æ¯ | æµç¨å®ä¹ keyï¼åèª `approve-process-list` | |
| | | |
| | | 注æï¼åæ°å¨ **query string**ï¼è¯·æ±ä½ä¸ºç©ºã |
| | | |
| | | **ååº**ï¼`data = true`ãæå忥éå `status` å为 `15 审æ¹ä¸`ï¼`processInstanceId` 被ååã |
| | | |
| | | ### POST /finance/reimbursement/archive |
| | | |
| | | | åæ° | ä½ç½® | ç±»å | å¿
å¡« | |
| | | |------|------|------|------| |
| | | | id | query | Long | æ¯ | |
| | | |
| | | **ååº**ï¼`data = true`ãæåå `status=40 已彿¡£`ã`archiveTime` 被åå
¥ã |
| | | |
| | | ### GET /finance/reimbursement/approve-process-list |
| | | |
| | | æ 请æ±åæ°ã |
| | | |
| | | **ååº**ï¼`data` 为æ°ç»ï¼å
ç´ å½¢å¦ï¼ |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | id | String | æµç¨å®ä¹ id | |
| | | | key | String | æµç¨å®ä¹ keyï¼æäº¤å®¡æ¹æ¶åä¼ æ¤å¼ | |
| | | | name | String | æµç¨åç§° | |
| | | |
| | | è¥è¿å空æ°ç»ï¼è¯´æãæ¥é审æ¹ãåç±»ä¸**å°æ å·²åå¸çæµç¨å®ä¹**ï¼æ¤æ¶å¿
é¡»ç¦ç¨ãæäº¤å®¡æ¹ãæé®å¹¶æç¤ºç¨æ·å
å° BPM æµç¨è®¾è®¡å¨å叿µç¨ã |
| | | |
| | | ## åæ®µå±ç¤ºè§å |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | æ¥éåå· `no` | å表ã详æ
ãç¼è¾è¡¨å | å¯ç¼è¾ï¼éå¡«ï¼ãæ°å¢æ¶ç空ç±ç³»ç»çæï¼ç¼è¾æ¶çç©ºè¡¨ç¤ºä¸æ¹åå· | |
| | | | æ¥éæ é¢ `title` | å表ï¼å¯ç¹å¼è¯¦æ
ï¼ãç¼è¾è¡¨å | å¿
å¡« | |
| | | | ç¶æ `status` | å表ã详æ
| ç¨ `DictTag` 渲æåå
¸ `finance_reimbursement_status`ï¼åå端è¿åçé¢è² | |
| | | | æ¥éæ»éé¢ `totalAmount` | å表ï¼å³å¯¹é½ï¼ã详æ
| å¿
å¡«ï¼å»ºè®®ç±æç»æ±æ»åå¡« | |
| | | | ç³è¯·äºº `applicantName` | å表ã详æ
| åªè¯»ï¼å端已解æå§å | |
| | | | ç³è¯·æ¥æ `applyDate` | å表ãç¼è¾è¡¨å | å¿
å¡«ï¼æ¥æéæ©å¨ï¼ä¸å¸¦æ¶é´ï¼ | |
| | | | å建人 `creatorName` / å建æ¶é´ `createTime` | å表ã详æ
| åªè¯» | |
| | | | 彿¡£æ¶é´ `archiveTime` | 详æ
| åªè¯»ï¼æªå½æ¡£æ¾ç¤º `-` | |
| | | | 夿³¨ `remark` | 详æ
ãç¼è¾è¡¨å | éå¡« | |
| | | | æç»è¡ `items` | ç¼è¾è¡¨åï¼åè¡¨æ ¼ï¼ã详æ
| å表页å¯ä¸å±ç¤ºï¼è¯¦æ
页坿å å±å¼ | |
| | | | æç».è´¹ç¨ç±»å `expenseType` | æç»è¡¨æ ¼ | ç¨åå
¸ `finance_expense_type` 渲æ | |
| | | | æç».å票éé¢ `invoiceAmount` | æç»è¡¨æ ¼ï¼å³å¯¹é½ï¼ | å¿
å¡« | |
| | | | å票éä»¶ `attachmentList` | ç¼è¾è¡¨åã详æ
| åªè¯»å表 + é¢è§/ä¸è½½ï¼ç¼è¾æå
许å¢å ï¼è§ã注æäºé¡¹ãï¼ | |
| | | | æ¯å¦æå票 `hasAttachment` | å表 | å¯å±ç¤ºä¸ºãæ/æ ãæ ç¾ï¼æ¹ä¾¿è´¢å¡æ«å | |
| | | |
| | | ## ä¸å¡è§å说æ |
| | | |
| | | ### ç¶æä¸å¯ç¨æä½ç©éµ |
| | | |
| | | | ç¶æ | ç¼è¾ | å é¤ | æäº¤å®¡æ¹ | 彿¡£ | 说æ | |
| | | |------|:----:|:----:|:--------:|:----:|------| |
| | | | 0 è稿 | â
| â
| â
| â | å¯ä¸å¯å é¤çç¶æ | |
| | | | 15 审æ¹ä¸ | â | â | â | â | å
¨é¨åªè¯»ï¼çå¾
审æ¹ç»æ | |
| | | | 20 å·²éè¿ | â | â | â | â
| ä»
å¯å½æ¡£ | |
| | | | 35 已驳å | â
| â | â
| â | 坿¹å票åéæ°æäº¤ï¼**ä¸å¯å é¤** | |
| | | | 40 已彿¡£ | â | â | â | â | ç»æï¼å
¨é¨åªè¯» | |
| | | |
| | | ### æ ¡éªè§åï¼å端已å®ç°ï¼å端åºå忥åç½®æ ¡éªä»¥æåä½éªï¼ |
| | | |
| | | | åºæ¯ | è§å | å端è¿åçæç¤º | |
| | | |------|------|----------------| |
| | | | å建/ä¿®æ¹æ¶ `items` 为空 | è³å° 1 è¡æç» | `æ¥éæç»ä¸è½ä¸ºç©º` | |
| | | | å建/ä¿®æ¹æ¶ `title` / `totalAmount` / `applyDate` 为空 | å¿
å¡« | `æ¥éæ é¢ä¸è½ä¸ºç©º` / `æ¥éæ»éé¢ä¸è½ä¸ºç©º` / `ç³è¯·æ¥æä¸è½ä¸ºç©º` | |
| | | | èªå®ä¹åå·ä¸å
¶ä»æ¥éåéå¤ | æç» | `æ¥éåå·({})已被å
¶ä»æ¥éå使ç¨ï¼è¯·æ´æ¢å
¶ä»åå·ï¼ææ¸
ç©ºè¯¥åæ®µç±ç³»ç»èªå¨çæ` | |
| | | | èªå®ä¹åå·ä¸é´å«ç©ºæ ¼/å¶è¡¨ç¬¦/å
¨è§ç©ºæ ¼ | æç» | `æ¥éåå·({})ä¸é´ä¸è½å
å«ç©ºæ ¼ï¼è¯·å»æç©ºæ ¼åéæ°è¾å
¥ï¼ææ¸
ç©ºè¯¥åæ®µç±ç³»ç»èªå¨çæ` | |
| | | | èªå®ä¹åå·é¿åº¦ > 36 | æç» | `æ¥éåå·é¿åº¦ä¸è½è¶
è¿ 36 个å符` | |
| | | | éè稿/é已驳åç¶æè° `update` | æç» | `æ¥éå({})䏿¯è稿æå·²é©³åç¶æï¼æ æ³ä¿®æ¹ï¼åªæè稿å已驳åçæ¥éåå¯ä»¥ç¼è¾` | |
| | | | éèç¨¿ç¶æè° `delete` | æç» | `æ¥éå({})䏿¯èç¨¿ç¶æï¼æ æ³å é¤` | |
| | | | éè稿/é已驳åè° `submit` | æç» | `æäº¤å®¡æ¹å¤±è´¥ï¼åªæè稿æå·²é©³åç¶æçæ¥éåæè½æäº¤` | |
| | | | æäº¤æ¶æ æç» | æç» | `æäº¤å®¡æ¹å¤±è´¥ï¼æ¥éåæ²¡ææç»è¡ï¼æ æ³æäº¤` | |
| | | | éå·²éè¿è° `archive` | æç» | `彿¡£å¤±è´¥ï¼åªæå·²éè¿ç¶æçæ¥éåæè½å½æ¡£` | |
| | | | æ¥éåä¸åå¨ | æç» | `æ¥éåä¸åå¨` | |
| | | |
| | | ### 审æ¹ç»æå¦ä½ååç¶æï¼å端ä¸ç¨ç®¡ï¼ä»
ä½äºè§£ï¼ |
| | | |
| | | BPM å®¡æ¹æµå®æåï¼å端çå¬å¨æç»æèªå¨æ¹ç¶æï¼ |
| | | - 审æ¹éè¿ â `20 å·²éè¿` |
| | | - 审æ¹é©³å â `35 已驳å` |
| | | - 审æ¹åæ¶ â éå `0 è稿` |
| | | |
| | | å端åªéå¨å®¡æ¹éè¿åéæ°æå表/详æ
å³å¯çå°æ°ç¶æã |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | 1. **éä»¶æ´æ°æ¯å
¨éæ¿æ¢ï¼ä¸æ¯å¢é**ï¼æå®¹æè¸©çåï¼ï¼`update` æ¥å£ç `blobIds` è¯ä¹æ¯ã该æ¥éåä¿åååºææç**å
¨é¨**éä»¶ããå æ¤ç¼è¾æå¿
é¡»æ**å·²æéä»¶ç blobId 䏿°å¢éä»¶ç blobId åå¹¶æä¸ä¸ªæ°ç»**ä¸èµ·æäº¤ï¼åªä¼ æ°å¢çé£å 个ï¼ä¼æåæå票å
¨é¨å æãä¼ ç©ºæ°ç» `[]` 表示æ¸
空å
¨é¨éä»¶ï¼ä¸ä¼ ï¼`null`ï¼è¡¨ç¤ºä¸å¨éä»¶ã |
| | | |
| | | 2. **ä¸ä¼ ä¸ä¿åå离**ï¼ä¸ä¼ èµ° `/system/storage-blob/upload` æ¿ `blobId`ï¼ä¿åèµ° `create` / `update` æäº¤ `blobIds`ãç¦æ¢è°ç¨ `/infra/file/upload`ã`/infra/file/presigned-url`ï¼ä¹ç¦æ¢å¨ä¸å¡è¡¨/表åéå `fileUrl` ä¹ç±»çæä»¶å°ååæ®µã |
| | | |
| | | 3. **å 餿¶éä»¶ä¼ä¸å¹¶æ¸
ç**ï¼å端已å¤çï¼ï¼å端ä¸éè¦é¢å¤è°éä»¶å 餿¥å£ãä½è¦æ³¨æï¼**ä¸ä¼ åæªä¿åå°±å
³éå¼¹çª**çå¤å¿æä»¶ä¸ä¼è¢«èªå¨æ¸
çï¼å»ºè®®å端å¨å
³éæ¶æç¤ºï¼æå¤ç¨å䏿¹ `blobId` 䏿¬¡ä¿åã |
| | | |
| | | 4. **`submit` çåæ°å¨ queryï¼è¯·æ±ä½ä¸ºç©º**ãè¥æ JSON body ä¼ ä¼åä¸å° `id` ä¸ `processDefinitionKey`ã |
| | | |
| | | 5. **å®¡æ¹æµç¨ key 严ç¦åæ»**ï¼å¿
é¡»å
è° `approve-process-list`ï¼æè¿åç `name`+`key` 渲ææä¸æï¼å¯åè ERP 仿¬¾åç `process-select-modal`ï¼ãå表为空æ¶ç¦ç¨æäº¤æé®ã |
| | | |
| | | 6. **ã已驳åãå¯ç¼è¾ï¼ä½ä¸å¯å é¤**ï¼å端 `update` æ¾è¡ `status=0 è稿` ä¸ `status=35 已驳å`ï¼`delete` ä»åªæ¾è¡è稿ãå æ¤ç¼è¾æé®å¨ 0/35 æ¾ç¤ºï¼å 餿é®åªå¨ 0 æ¾ç¤ºã |
| | | |
| | | 7. **`totalAmount` ä¸æç»æ±æ»ä¸è卿 ¡éª**ï¼å端ä¸åä¸è´æ§æ ¡éªï¼æ»éé¢ç±å端è´è´£åå¡«ä¸å±ç¤ºï¼ç¨æ·å¯ææ¹ãè¥è¦æ±å¼ºä¸è´ï¼éåç«¯è¡¥æ ¡éªè§åã |
| | | |
| | | 8. **æ¥æåºé´çéä¼ åæ ¼å¼æ¯ `yyyy-MM-dd`**ï¼å¦ `applyDate[0]=2026-09-01`ï¼ï¼**ä¸è¦å¸¦æ¶åç§**ï¼å¦åå端解æå¤±è´¥æ¥ 400ãæ³¨æåè¡¨æ¥æåºé´éæ©å¨å¿
é¡»æ¾å¼è®¾ç½® `valueFormat: 'YYYY-MM-DD'`ï¼é¡¹ç®éç¨ç `getRangePickerDefaultProps()` é»è®¤æ¯ `YYYY-MM-DD HH:mm:ss`ï¼ç´æ¥ç¨ä¼è¸©è¿ä¸ªåã |
| | | |
| | | 9. **å表页请ä¸è¦é»è®¤å±å¼ `items` ä¸ `attachmentList`**ï¼å页æ¥å£å¯¹æ¯è¡é½ä¼æ¥æç»åéä»¶ï¼è¡æ°å¤æ¶å¼éè¾å¤§ï¼å»ºè®®å表åªå±ç¤ºä¸»è¡¨å段ï¼å« `hasAttachment`ï¼ï¼æç»ä¸éä»¶æ¾å°è¯¦æ
页æéå è½½ã |
| | | |
| | | 10. **æ¥éåå·å¯èªå®ä¹ï¼ç空åç±å端çæ**ï¼è¡¨åéä¿çãæ¥éåå·ãè¾å
¥æ¡ï¼å ä½æç¤ºåãç空åç±ç³»ç»èªå¨çæããæäº¤å请 `trim()`ï¼çº¯ç©ºæ ¼è¦å½ä½æªå¡«æäº¤ï¼å端ä¹ä¼å trim 䏿¬¡å
åºï¼ãçæè§å为 Redis åºå `BX` + `yyyyMMdd` + 6 使µæ°´ï¼æ¯æ¥éç½®ï¼ã**ä¸è¦å¨ç¼è¾æç¨ç©ºä¸²è¦çå·²æåå·**ââå端æç©ºå¼è§£é为ãä¿æä¸åãï¼ä¸ä¼éæ°çæã |
| | | |
| | | 11. **æç»è¡æäº¤æ¶ä¸è¦å¸¦ `id`**ï¼å端ä¿åæç»æ¯ãå
å åå¢ãå
¨éè¦çï¼èæç»å 餿¯**软å é¤**ï¼è¥åä¼ äºåè¡ `id`ï¼éæ°æå
¥æ¶ä¼ä¸å·²è½¯å çè¡ä¸»é®å²çªãå端æäº¤åå¿
须奿æ¯è¡ç `id` ä¸ `reimbursementId`ï¼åªä¿ç `expenseType`ã`invoiceNo`ã`invoiceAmount`ã`invoiceDate`ã`drawer`ã`description`ã |
| | | |
| | | 12. **审æ¹è¯¦æ
é¡µç± BPM æµç¨è®¾è®¡å¨æè½½**ï¼BPM 审æ¹ä¸å¿éè¿æµç¨å®ä¹ç `formCustomViewPath` 卿å è½½ä¸å¡è¯¦æ
页ï¼`registerComponent` æè·¯å¾å¹é
ï¼ï¼å æ¤ BPM æµç¨è®¾è®¡å¨éå¿
é¡»æãèªå®ä¹è¡¨åè·¯å¾ãé
置为 `/finance/reimbursement/detail/approve/index.vue`ï¼å¦å审æ¹ä¸å¿éçä¸å°æ¥éåå
容ã |
| | |
| | | - **ä¸å¡å®ä½**ï¼ç¦»æ£å¶é å·¥å产ä¾é人财ç©ä¸ä½åï¼è¦çãé宿¥å â éè´/ç产 â è´¨æ£ â ä»å¨ â åè´§ â 忬¾ â å®åãå
¨é¾è·¯éç¯ |
| | | - **ææ¯åºåº§**ï¼yudaoï¼ruoyi-vue-proï¼äºå¼ï¼Spring Boot + MyBatis + Flowable + Redis + MySQL 8.4 + Milvus + éä¹åé®ï¼å端 mom-pro2-beforeï¼Vue3ï¼ |
| | | - **æ ¸å¿ä¸»çº¿**ï¼CRM åå â ERP éå®è®¢å â MES 主计å/å·¥å/æ¥å·¥ â è´¨æ£ä¸ä»å¨ â éå®åºåº â å¼ç¥¨å款 â å®åéç¯ |
| | | - **ç¬ç«æ¨¡å**ï¼è´¢å¡æ¥éï¼`yudao-module-finance`ï¼æ¥éå/æç»/å票éä»¶/审æ¹/彿¡£ï¼å¯¹å¤æä¾ `yudao-module-finance-api` ä¾ä»æ¨¡å建åï¼ä¸ä¼å管çï¼`yudao-module-ums`ï¼å
¥ä¼ç³è¯·/ç§ä¹¦å¤ä¸çäºä¼ä¸¤çº§å®¡æ¹/ä¼å/é讯å½ï¼åèªæä¸æ¡é¾è·¯ï¼UMS ä¾å¤ï¼å®¡æ¹éè¿ä¼ç» AdminUserApi å建系ç»ç»å½è´¦å·ï¼ï¼è¯¾é¢ç®¡çï¼`yudao-module-research`ï¼è¯¾é¢æå/å¨çº¿ç³æ¥/ä¸å®¶è¯å®¡/ä¸çº§ç«é¡¹å®¡æ¹/ç«é¡¹éç¥/ç»è´¹æ¨ä»ï¼ä¸ºå¦ä¸æ¡ç¬ç«ç§ç 主线ï¼åå¤å `ums_member` ä½ä¸ºç³æ¥äººãå `system_notice` ç«é¡¹å
¬åï¼**并已对æ¥è´¢å¡**ï¼ç»è´¹æ¨ä» 1:1 èªå¨çæè´¢å¡æ¥éåå¹¶æäº¤å®¡æ¹ï¼å®¡æ¹ç»æç» BPM çå¬å¨åå课é¢ä¾§æ¨æ¬¾å°è´¦ |
| | | - **ç¬ç«æ¨¡å**ï¼è´¢å¡æ¥éï¼`yudao-module-finance`ï¼æ¥éå/æç»/å票éä»¶/审æ¹/彿¡£ï¼å¯¹å¤æä¾ `yudao-module-finance-api` ä¾ä»æ¨¡å建åï¼ä¸ä¼å管çï¼`yudao-module-ums`ï¼å
¥ä¼ç³è¯·/ç§ä¹¦å¤ä¸çäºä¼ä¸¤çº§å®¡æ¹/ä¼å/é讯å½ï¼åèªæä¸æ¡é¾è·¯ï¼UMS ä¾å¤ï¼å®¡æ¹éè¿ä¼ç» AdminUserApi å建系ç»ç»å½è´¦å·ï¼ï¼è¯¾é¢ç®¡çï¼`yudao-module-research`ï¼è¯¾é¢æå/å¨çº¿ç³æ¥/ä¸å®¶è¯å®¡/ä¸çº§ç«é¡¹å®¡æ¹/ç«é¡¹éç¥/ç»è´¹æ¨ä»ï¼ä¸ºå¦ä¸æ¡ç¬ç«ç§ç 主线ï¼åå¤å `ums_member` ä½ä¸ºç³æ¥äººãå `system_notice` ç«é¡¹å
¬åï¼**并已对æ¥è´¢å¡**ï¼ç»è´¹æ¨ä» 1:1 èªå¨çæè´¢å¡æ¥éåå¹¶æäº¤å®¡æ¹ï¼å®¡æ¹ç»æç» BPM çå¬å¨åå课é¢ä¾§æ¨æ¬¾å°è´¦ï¼æ¡£æ¡ç®¡çï¼`yudao-module-archive`ï¼å类书æ¶/æ¡£æ¡ç»è®°ä¸æ£ç´¢/åé
两级审æ¹/å½è¿éç¯/龿宿¶æé/ç»è®¡ï¼ä¸ºç¬¬åæ¡ç¬ç«ä¸»çº¿ï¼**å¯¹å¤æä¾ `yudao-module-archive-api` ä¾è¯¾é¢ãä¼åãè´¢å¡ä¸æ¹åå
¶å½æ¡£**ï¼å表页æå¨ã彿¡£ãæé®ï¼å½æ¡£ä¸å忥æºä¸å¡ç¶æï¼ï¼èªèº«å¯¹ä¸æ¹**æ ååä¾èµ** |
| | | |
| | | ## 2. ç®å½ç»æ |
| | | |
| | | ```text |
| | | docs/project-business/ |
| | | âââ index.html # å¯è§å页é¢ï¼åå»ç´æ¥æå¼ï¼file:// å³å¯ï¼æ é任使å¡ï¼ |
| | | âââ mermaid/ # 14 å¼ Mermaid ä¸å¡å¾ï¼æå¨æºï¼æ¹è¿éï¼ |
| | | âââ mermaid/ # 15 å¼ Mermaid ä¸å¡å¾ï¼æå¨æºï¼æ¹è¿éï¼ |
| | | âââ data/ # ä¸å¡æ°æ®ï¼æå¨æºï¼æ¹è¿éï¼ |
| | | â âââ business.json # 项ç®å
ä¿¡æ¯/ä¸å¡åé®/AIè½å/å¾
确认äºé¡¹ |
| | | â âââ modules.json # 16 个ä¸å¡æ¨¡åå®ä¹ |
| | | â âââ modules.json # 17 个ä¸å¡æ¨¡åå®ä¹ |
| | | â âââ objects.json # æ ¸å¿ä¸å¡å¯¹è±¡ï¼ä½ç¨/䏿¸¸/䏿¸¸/表åï¼ |
| | | â âââ flows.json # 9 æ¡æµç¨ï¼æè¦+æ¥éª¤+è§è²ï¼ |
| | | â âââ flows.json # 10 æ¡æµç¨ï¼æè¦+æ¥éª¤+è§è²ï¼ |
| | | â âââ roles.json # è§è²æé |
| | | âââ README.md |
| | | ``` |
| | |
| | | | 12-finance-flow | è´¢å¡æ¥éï¼ç¬ç«æ¨¡åï¼ï¼æ¥éå+æç»+å票éä»¶ â æäº¤ BPM å®¡æ¹ â éè¿/驳å â 彿¡£ç»æï¼åæ®æ¥æºå«æå·¥æ°å»ºä¸ã课é¢ç»è´¹æ¨ä»èªå¨çæã两类 | |
| | | | 13-ums-membership-flow | ä¼åå
¥ä¼ï¼ç¬ç«æ¨¡åï¼ï¼å
¥ä¼ç³è¯· + ææéä»¶ â æäº¤ BPM 两级审æ¹ï¼ç§ä¹¦å¤å审âçäºä¼å®¡è®®ï¼â éè¿èªå¨å»ºä¼åä¸ç»å½è´¦å· â ä¼åå表/éè®¯å½æ£ç´¢ | |
| | | | 14-research-flow | 课é¢ç®¡çï¼ç¬ç«æ¨¡åï¼ï¼æååå¸(éç¹/ä¸è¬)âå¨çº¿ç³æ¥(éä¼å带åºç³æ¥äºº)âä¸å®¶è¯åæç»å ææåâBPM ä¸çº§å®¡æ¹(ç§ä¹¦å¤å½¢å¼å®¡æ¥âä¸å®¶è¯å®¡âå¦ä¼ç«é¡¹å®¡æ¹)âç«é¡¹ç¼å·ä¸å
¬åâç»è´¹æ¨ä»ï¼åè¯å¿
å¡«â1:1 èªå¨çæå¹¶æäº¤è´¢å¡æ¥éåâè´¢å¡å®¡æ ¸/è´¢å¡ä¸»ç®¡ä¸¤çº§å®¡æ¹âç»æç»çå¬å¨ååå°è´¦ï¼éè¿å·²æ¨ä»/驳å已驳åå¯éå/æ¤ååå¾
æ¨ä»ï¼| |
| | | | 15-archive-flow | æ¡£æ¡ç®¡çï¼ç¬ç«æ¨¡åï¼ï¼å类书æ¶(æ 形·é»è®¤å¯çº§âæ°å¢æ¡£æ¡èªå¨å¸¦åº)âæ¡£æ¡ç»è®°(å¯çº§ä¸æ¡£/è½½ä½ä¸å/å®ä½ä½ç½®ååæ®µ/çµåéä»¶/DA ç¼å·)â䏿¹å½æ¡£èå¨(课é¢å·²ç«é¡¹/ä¼åæ£å¸¸/è´¢å¡å·²éè¿ åå表æå¨ã彿¡£ãâç» `archive-api` çææ¡£æ¡å¹¶åå `archive_document_id`)âåé
ç»è®°(ä»
ãå¨åºãå¯éÂ·åæ¡£æ¡ä¸å¾æå¨éåé
å)âBPM 两级审æ¹(æ¡£æ¡ç®¡çåå®¡æ ¸âå管é¢å¯¼å®¡æ¹Â·éè¿åæ¡£æ¡æ¡ä»¶æ´æ°ä¸ºååºä¸)âå½è¿ç»è®°(åå¨åº)â龿宿¶è®¡ç®(ä¸å»ºå®æ¶ä»»å¡)âåéæµè½¬ç»è®¡ | |
| | | |
| | | å¾ä¸ç¶ææ°åå为æºç æä¸¾çå®å¼ï¼å¦å·¥å 0è稿/1已确认/2宿/3åæ¶ï¼ERP å®¡æ¹ 15审æ¹ä¸/20å·²å®¡æ ¸ï¼ã |
| | | |
| | |
| | | - æ¬ç®å½ç±é¡¹ç®æè½ **project-business-analysis** 管çï¼`.claude/skills/project-business-analysis/`ï¼ï¼å¹¶æè§å `.claude/rules/business-visualization-maintenance.md` 强å¶ï¼ä¸å¡æ¨¡å/æµç¨/ç¶æ/对象/è§è²/AI åæ´åéåæ¥ç»´æ¤æ¬ç®å½ã |
| | | - å¢éç»´æ¤ï¼æ¹å¯¹åºç `mermaid/*.mmd` + `data/*.json` â è¿è¡ä¸é¢ç sync èæ¬ â æµè§å¨éªè¯åå½±åå¾ã |
| | | - å
¨ééåï¼åå·®è¿å¤§æ¶ï¼ï¼å¯¹ Claude 说ãéæ°çæä¸å¡å
¨æ¯ãï¼æè½ä¼éæ°èµ°è¯»æºç å¹¶æçææ¨¡å¼é建ã |
| | | - çæåºçº¿ï¼dev_business @ 87bf4a99ï¼2026-09-10ï¼2026-09-28 å¢éè¡¥å
è´¢å¡æ¥é模åï¼`yudao-module-finance`ï¼ãä¼åç®¡çæ¨¡åï¼`yudao-module-ums`ï¼ä¸è¯¾é¢ç®¡ç模åï¼`yudao-module-research`ï¼ä¸æé¡¹ 1~5ï¼äºæç»é¡¹éªæ¶ä¸ææå½æ¡£å°æªåï¼å¾ä¸å·²æ 注æªè¦çèå´ï¼ï¼**2026-09-29 å¢é**ï¼è¯¾é¢ç»è´¹æ¨ä»å¯¹æ¥è´¢å¡æ¥éââæ°å»º `yudao-module-finance-api`ï¼`FinanceReimbursementApi` æ¬å° Bean è°ç¨ï¼å»ºå+æäº¤/æ¹å+éæ/å é¤/æ¥è¯¢ï¼ï¼ç»è®°æ¨æ¬¾æ¶ 1:1 èªå¨çæ `finance_reimbursement`ï¼ç³»ç»çæ 1 è¡æç»ï¼å¹¶èªå¨æäº¤ `finance_reimbursement_approve` 两级审æ¹ï¼æ°å¢ç¬¬ 15 个ä¸å¡çå¬å¨ `ResearchFundStatusListener` æå®¡æ¹ç»æååè¯¾é¢æ¨æ¬¾å°è´¦ï¼éè¿ 20 / 驳å 30 / æ¤å 0ï¼ï¼å½±åå¾ 08 / 09 / 10 / 14 ä¸ data å
¨é¨å份 jsonã |
| | | - çæåºçº¿ï¼dev_business @ 87bf4a99ï¼2026-09-10ï¼2026-09-28 å¢éè¡¥å
è´¢å¡æ¥é模åï¼`yudao-module-finance`ï¼ãä¼åç®¡çæ¨¡åï¼`yudao-module-ums`ï¼ä¸è¯¾é¢ç®¡ç模åï¼`yudao-module-research`ï¼ä¸æé¡¹ 1~5ï¼äºæç»é¡¹éªæ¶ä¸ææå½æ¡£å°æªåï¼å¾ä¸å·²æ 注æªè¦çèå´ï¼ï¼**2026-09-29 å¢é**ï¼è¯¾é¢ç»è´¹æ¨ä»å¯¹æ¥è´¢å¡æ¥éââæ°å»º `yudao-module-finance-api`ï¼`FinanceReimbursementApi` æ¬å° Bean è°ç¨ï¼å»ºå+æäº¤/æ¹å+éæ/å é¤/æ¥è¯¢ï¼ï¼ç»è®°æ¨æ¬¾æ¶ 1:1 èªå¨çæ `finance_reimbursement`ï¼ç³»ç»çæ 1 è¡æç»ï¼å¹¶èªå¨æäº¤ `finance_reimbursement_approve` 两级审æ¹ï¼æ°å¢ç¬¬ 15 个ä¸å¡çå¬å¨ `ResearchFundStatusListener` æå®¡æ¹ç»æååè¯¾é¢æ¨æ¬¾å°è´¦ï¼éè¿ 20 / 驳å 30 / æ¤å 0ï¼ï¼å½±åå¾ 08 / 09 / 10 / 14 ä¸ data å
¨é¨å份 jsonï¼**2026-09-29 åå¢é**ï¼æ°å¢æ¡£æ¡ç®¡çç¬ç«æ¨¡å `yudao-module-archive` + `yudao-module-archive-api`ï¼`ArchiveDocumentApi`ï¼`archiveBySource` å¹ç彿¡£ / `isArchived` / `getBySource`ï¼ï¼3 å¼ è¡¨ `archive_category`/`archive_document`/`archive_borrow`ã6 个åå
¸ï¼82000~82005ï¼ã`bpm_category(8003)` + æå `archive_borrow_approve.bpmn`ï¼å·²å¨ mom-jssm é¨ç½²ä¸ºçæ¬ 1ï¼form_type=20ï¼åå»ºè·¯å¾ `/archive/borrow/index`ãæ¥çè·¯å¾ `/archive/borrow/detail/approve/index.vue`ï¼ãèå 1075600~1075699ï¼æ°å¢ä¸å¡çå¬å¨ `ArchiveBorrowStatusListener`ï¼å
¨åºä¸å¡ç¶æçå¬å¨è®¡æ°ä¿®æ£ä¸º **24 个** `*StatusListener`ï¼14 ä¸ªç»§æ¿ `BpmProcessInstanceStatusEventListener`ï¼ï¼ä¸æ¹å½æ¡£åå `archive_document_id` å° `research_application`/`ums_member`/`finance_reimbursement`ï¼å
¨åºè¡¨æ° 427â430ï¼æ°å¢å¾ **15-archive-flow**ï¼å¢éä¿®è®¢å¾ 01 / 08 / 09 / 10 ä¸ data å
¨é¨äºä»½ jsonï¼æ°å¢ `arc` 模åã3 个ä¸å¡å¯¹è±¡ã`archive` æµç¨ã4 个ä¸å¡è§è²ï¼ã |
| | | |
| | | ## 7. å·²ç¥å¾
确认ä¸å¡ |
| | | |
| | | è§ `data/business.json` ç `pendingConfirm`ï¼é¡µé¢ãå¾
确认äºé¡¹ãæ ï¼ï¼è¦ç¹ï¼ä»åºç±»å/åæ ¼ä»æ¹é æªè½å°ãHRM äº¤æ¥ expandUserIds å°æªè¢«ä¸å¡æ¥è¯¢æ¥å
¥ã忬¾ä¸æ¶æ¬¾åæªèµ° BPMãè´¢å¡å¾ç¨½ååæ¹æ³ä¸ºç©ºãNCR å¤ç½®ä¸ååæºåãè´¢å¡æ¥éç BPM æµç¨å®ä¹æªåå¸ä¸æ®éè§è²æªæèåãä¼å管çç BPM æµç¨æªåå¸ä¸ç¼ºå®¡æ¹èªå®ä¹è¡¨å页ãèªå¨å»ºè´¦å·ç¨ææºå·ä½åå§å¯ç åå¨å¼±å£ä»¤é£é©ã课é¢ç®¡ççè¯åæéä¸éè¿éå¼ä¸ºå ä½è§åå¾
å¦ä¼ç¡®è®¤ã课é¢ç»è´¹æ¨ä»è½å·²å¯¹æ¥è´¢å¡æ¥éä½å°è´¦ä¸æ¥éå为软å
³èï¼è´¢å¡ä¾§å åä¼çæ¬ç©º `reimbursement_id`ï¼ãæ°å»ºçè´¢å¡æ¥éå®¡æ¹æµç¨èç¹å®¡æ¹äººéä¸çº¿åå¨ BPM è®¾è®¡å¨æå®é
ç»ç»è°æ´ãç³æ¥åä¸ä¼å为软å
³èå¯è½æ¬ç©ºçã |
| | | è§ `data/business.json` ç `pendingConfirm`ï¼é¡µé¢ãå¾
确认äºé¡¹ãæ ï¼ï¼è¦ç¹ï¼ä»åºç±»å/åæ ¼ä»æ¹é æªè½å°ãHRM äº¤æ¥ expandUserIds å°æªè¢«ä¸å¡æ¥è¯¢æ¥å
¥ã忬¾ä¸æ¶æ¬¾åæªèµ° BPMãè´¢å¡å¾ç¨½ååæ¹æ³ä¸ºç©ºãNCR å¤ç½®ä¸ååæºåãè´¢å¡æ¥éç BPM æµç¨å®ä¹æªåå¸ä¸æ®éè§è²æªæèåãä¼å管çç BPM æµç¨æªåå¸ä¸ç¼ºå®¡æ¹èªå®ä¹è¡¨å页ãèªå¨å»ºè´¦å·ç¨ææºå·ä½åå§å¯ç åå¨å¼±å£ä»¤é£é©ã课é¢ç®¡ççè¯åæéä¸éè¿éå¼ä¸ºå ä½è§åå¾
å¦ä¼ç¡®è®¤ã课é¢ç»è´¹æ¨ä»è½å·²å¯¹æ¥è´¢å¡æ¥éä½å°è´¦ä¸æ¥éå为软å
³èï¼è´¢å¡ä¾§å åä¼çæ¬ç©º `reimbursement_id`ï¼ãæ°å»ºçè´¢å¡æ¥éå®¡æ¹æµç¨èç¹å®¡æ¹äººéä¸çº¿åå¨ BPM è®¾è®¡å¨æå®é
ç»ç»è°æ´ãç³æ¥åä¸ä¼å为软å
³èå¯è½æ¬ç©ºï¼æ¡£æ¡ç®¡çç BPM é¨ç½²äº§ç©ä¸ºæå·¥å¯¼åºé严å®ãå
é¨ç½²å导åºååå¹¶ã顺åºãèå䏿éä»
å¨å彿¡£èæ¬ä¸æ®éè§è²æªææãæ¡£æ¡ä¸æ¥æºåæ®ï¼è¯¾é¢ç³æ¥ä¹¦/ä¼å/æ¥éåï¼ä¸ºè½¯å
³èæ¥æºå ååä¼çæ¬ç©ºå¿«ç
§ããæä¹¦æ¡£æ¡ãçæ æ¥æºæ¨¡åä»
æå·¥å½å
¥ä¸ååæ¡£æ¡æªçº³å
¥èªå¨å½æ¡£ã龿ä»
æ¥è¯¢æ¶å®æ¶è®¡ç®ä¸å»ºå®æ¶ä»»å¡ä¸åç«å
ä¿¡ããå䏿¡£æ¡ä»
䏿¡æªå½è¿åé
åãç±åºç¨å±æ ¡éª + æ¡ä»¶æ´æ°å
±åä¿è¯ãç»è®¡ä¸º `GROUP BY` èåè¿ä¸åéæ¹é ã䏿¹æ¥æºè¡¨åå å¯ç©ºå `archive_document_id` å±è·¨æ¨¡åæ¹è¡¨éç¡®è®¤åæ´çªå£çã |
| | |
| | | "FINï¼å票æ¥éï¼ç¬ç«æ¨¡åï¼", |
| | | "UMSï¼å¦ä¼ä¼åï¼ç¬ç«æ¨¡åï¼", |
| | | "RESï¼ç§ç 课é¢ï¼ç¬ç«æ¨¡åï¼", |
| | | "ARCï¼æ¡£æ¡ç®¡çï¼ç¬ç«æ¨¡åï¼", |
| | | "CRMï¼å®¢æ·å
³ç³»ï¼", |
| | | "SRMï¼ä¾åºåå
³ç³»ï¼", |
| | | "HRMï¼äººåèµæºï¼", |
| | |
| | | "businessPositioning": "让工åç订åãç©æãç产ãåºåãè´¨éã人åãèµéå¨ä¸ä¸ªç³»ç»å
éç¯æµè½¬ï¼ç®¡çå±å¯éè¿ BI 大屿æ¡å
¨å±ã", |
| | | "coreChain": "CRM åæº/åå â ERP éå®è®¢å â MES 主ç产计å/å·¥å/æ¥å·¥ â MES è´¨æ£ä¸ä»å¨ â éå®åºåºåè´§ â å¼ç¥¨å款 â å®åéç¯", |
| | | "techBase": "Spring Boot + MyBatis + Flowable + Redis + Quartz/RocketMQ/Kafka + Milvus åéåº + éä¹åé®", |
| | | "database": "MySQL 8.4ï¼è¿è¡åº mom-jssm å
± 427 å¼ è¡¨ï¼å« system_*ãbpm_*ãact_* åºåº§è¡¨ä¸ mes_*/erp_*/crm_*/srm_*/hrm_*/mdm_*/ai_*/finance_*/ums_*/research_* ä¸å¡è¡¨ï¼ï¼å¤ç§æ·å·²å
³é", |
| | | "database": "MySQL 8.4ï¼è¿è¡åº mom-jssm å
± 430 å¼ è¡¨ï¼å« system_*ãbpm_*ãact_* åºåº§è¡¨ä¸ mes_*/erp_*/crm_*/srm_*/hrm_*/mdm_*/ai_*/finance_*/ums_*/research_*/archive_* ä¸å¡è¡¨ï¼ï¼å¤ç§æ·å·²å
³é", |
| | | "frontend": "mom-pro2-beforeï¼Vue3 管çåå°ï¼åä»åºåæ¾ï¼åªè¯»åèï¼" |
| | | }, |
| | | "stats": { |
| | | "businessModules": 16, |
| | | "coreObjects": 56, |
| | | "documentFlows": 9, |
| | | "approvalListeners": 15, |
| | | "businessModules": 17, |
| | | "coreObjects": 59, |
| | | "documentFlows": 10, |
| | | "approvalListeners": 24, |
| | | "aiCapabilities": 8, |
| | | "wmBillTypes": 15 |
| | | }, |
| | |
| | | "课é¢ç®¡çï¼ç»è´¹æ¨ä»å°è´¦çãå·²æ¨ä»(20)ãçä»·äºæ¥éåãå·²éè¿(20)ãï¼ä¸å«åºçº³å®é
仿¬¾å¨ä½ï¼è¥æ¥åéè¦ç¬ç«çã已仿¬¾ãç¶æï¼éå¦å¢ç¶æä¸å®¡æ¹èç¹ãäºæå¯æ©å±ã", |
| | | "课é¢ç®¡çï¼ç³æ¥åä¸ ums_member æ¯è½¯å
³èï¼æ å¤é®ï¼ï¼ä¼å被å é¤åç³æ¥åä¼ç䏿¬ç©º memberIdï¼æåå表é容éå±ç¤ºãä¼åå·²å é¤ããå¾
确认æ¯å¦å å¤é®æå é¤ä¿æ¤ã", |
| | | "课é¢ç®¡çï¼BPM æµç¨ research_topic_approve ä¸èç¹é»è®¤å®¡æ¹äººä¸ºãè§è²=è¶
级管çå(1) + 便¬¡å®¡æ¹ãï¼è¯¥ dev åºè¶
级管çåè§è²ä¸æ 4 ä¸ªç¨æ·ï¼admin/å¼ å¨/马è³/马è´ï¼ï¼æ¯ä¸ªèç¹é 4 人ä¼ç¾ææ¨è¿ï¼å
¨æ°å®è£
åºè¯¥è§è²ä»
admin ä¸äººãæµç¨å¯å¼ç®±å³ç¨ãdev åºéåå°è¶
级管çåç¨æ·ææ¹å¨ BPM 设计å¨ä¸ä¸ºæ¯èç¹æå®å®¡æ¹äººãç¯å¢é
置项ï¼é代ç 缺é·ã", |
| | | "课é¢ç®¡çï¼ç«é¡¹éç¥å¤ç¨ system_notice ç³»ç»å
¬åï¼ä¸æ°å¢ system_notify_templateãä¸åç«å
ä¿¡ï¼å¦éçä¿¡/ç«å
ä¿¡å®åéç¥éå¦è¡é
ç½®ãå¾
确认éç¥æ¸ éã" |
| | | "课é¢ç®¡çï¼ç«é¡¹éç¥å¤ç¨ system_notice ç³»ç»å
¬åï¼ä¸æ°å¢ system_notify_templateãä¸åç«å
ä¿¡ï¼å¦éçä¿¡/ç«å
ä¿¡å®åéç¥éå¦è¡é
ç½®ãå¾
确认éç¥æ¸ éã", |
| | | "æ¡£æ¡ç®¡çï¼æ¡£æ¡åé
BPM æµç¨ archive_borrow_approve 为æå·¥å¯¼åºé¨ç½²äº§ç©ï¼_archive_bpm_export.sql å
act_*/bpm 表ç UUID 䏿¶é´æ³åªè½å¨é¨ç½²æ¶çæï¼æ æ³é¢åï¼ï¼å¿
é¡»å
å¨ BPM 模åé¨ç½²å导åºååå¹¶è¿ config_export_all é¶æ®µä¸ï¼é¡ºåºéä¼å¯¼è´æ°åºåå§åæ¶è¯¥æµç¨ç¼ºå¤±ãé¨ç½²é¡ºåºç¡¬çº¦æï¼å·²å¨æä»¶å¤´ä¸ README åéæ æ³¨ã", |
| | | "æ¡£æ¡ç®¡çï¼èå 1075600~1075699 ä¸å archive:* æéç¹ä»
å¨å½æ¡£èæ¬ä¸ï¼æ®éè§è²æªé
system_role_menuï¼éè¶
管ç»å½çä¸å°ãæ¡£æ¡ç®¡çãç®å½ãå¾
确认æ¯å¦è¡¥ææï¼ä¸è´¢å¡æ¥é/ä¼å管çåç±»é®é¢ã", |
| | | "æ¡£æ¡ç®¡çï¼æ¡£æ¡ä¸æ¥æºåæ®ï¼è¯¾é¢ç³æ¥ä¹¦/ä¼å/æ¥éåï¼ä¸ºè½¯å
³èï¼æ¥æºåæ®è¢«å é¤åæ¡£æ¡ç source_id/source_no ä¼æä¸ºæ¬ç©ºå¿«ç
§ï¼æ¡£æ¡æ¬èº«ä¸éæ¥æºåæ®å é¤èå é¤ãå¾
确认æ¯å¦éè¦å é¤ä¿æ¤æå¤é®ã", |
| | | "æ¡£æ¡ç®¡çï¼éæ±ä¸çãå¦ä¼æä»¶ãä¼è®®çºªè¦ãè°ç æ¥åã妿¯è®ºæãåååè®®ãççµåææ¡£ç±ãæä¹¦æ¡£æ¡ãåç±»æ¿è½½ï¼ç³»ç»å
æ å¯¹åºæ¥æºæ¨¡åï¼ä»
æ¯ææå·¥å½å
¥å¹¶æçµåéä»¶ï¼ååæ¡£æ¡æªçº³å
¥èªå¨å½æ¡£ï¼ç¨æ·æç¡®æé¤ï¼ã已确认çè¾¹çã", |
| | | "æ¡£æ¡ç®¡çï¼é¾ææéæç¨æ·å³çä»
æ¥è¯¢æ¶å®æ¶è®¡ç®ï¼ä¸å»º infra_jobãä¸åç«å
ä¿¡ï¼ï¼åé
å表ã龿ãåä¸ /overdue-page ç¬ç«å
¥å£åç°ï¼è¥æ¥åéè¦å°æä¸»å¨æ¨éï¼éå¦å 宿¶ä»»å¡ä¸éç¥æ¸ éãç¨æ·å·²ç¡®è®¤çç®åï¼äºæå¯æ©å±ã", |
| | | "æ¡£æ¡ç®¡çï¼ãå䏿¡£æ¡ä»
å
è®¸ä¸æ¡æªå½è¿åé
åãç±åºç¨å± submit æ ¡éª + 审æ¹éè¿æ¶æ¡ä»¶æ´æ°ï¼UPDATE ... WHERE status=10ï¼å
±åä¿è¯ï¼MySQL æ æ³å¯¹ãé¨åç¶æå¯ä¸ã建约æï¼æ ¡éªä¸æ´æ°ä¹é´çç论çªå£å·²æ¶æä¸ºå¯æç¥çå²çªæ¥éï¼æ¡£æ¡å·²è¢«å ç¨ï¼èéèæ°æ®ãå·²æ¥åçé£é©ã", |
| | | "æ¡£æ¡ç®¡çï¼æ¡£æ¡ç»è®¡æåç±»/å¯çº§/è½½ä½ä¸ç» GROUP BY èåï¼æ N+1ï¼ï¼å½åéçº§å¯æ¥åï¼æ¡£æ¡è¿ä¸åéæ¹ä¸ºç¼åæç©åç»è®¡è¡¨ãæ¬æä¸åã", |
| | | "æ¡£æ¡ç®¡çï¼è·¨æ¨¡åæ¹è¡¨ââresearch_application / ums_member / finance_reimbursement åæ°å¢å¯ç©ºå archive_document_idï¼archive_module_migration.sql ç¨ information_schema å®å«ä¿è¯å¹çï¼ï¼éä¸ä¸æ¹æ¨¡åç¡®è®¤åæ´çªå£ãè·¨æ¨¡åæ¹è¡¨ï¼æ ç ´åæ§ã" |
| | | ], |
| | | "generatedAt": "2026-09-29", |
| | | "analysisBasis": "åºäº dev_business 忝 87bf4a99 æºç ï¼6 ç»å¹¶è¡æºç 走读ï¼MES ç产质é / MES ä»å¨ / ERP / CRM+SRM / å®å+HRM / AI+BI+MDM+BPM+åºåº§ï¼ï¼2026-09-28 å¢éè¡¥å
yudao-module-finance ç¬ç«è´¢å¡æ¥é模åï¼æ¥éå + æç» + å票éä»¶ + BPM å®¡æ¹ + 彿¡£ï¼ä¸ yudao-module-ums ç¬ç«ä¼åç®¡çæ¨¡åï¼å
¥ä¼ç³è¯· + BPM ä¸¤çº§å®¡æ¹ + 审æ¹éè¿èªå¨å»ºä¼åä¸ç»å½è´¦å· + ä¼åå表/é讯å½ï¼ï¼2026-09-28 å¢éï¼BPM æµç¨å®ä¹ ums_membership_approveï¼å
¥ä¼å®¡æ¹ï¼å·²å¨ mom-jssm é¨ç½²å¹¶å¹¶å
¥ config_export_all é¶æ®µä¸ï¼åç±» ums_membership_approveï¼ç§ä¹¦å¤å审 â çäºä¼å®¡è®®ï¼ä¸¤èç¹å®¡æ¹äººå为ãè§è²ãçç¥ãè§è²=è¶
级管çå(1) å
åºï¼è¡¨åç±»å=èªå®ä¹è¡¨åï¼æ¥çè·¯å¾ /ums/application/detail/approve/index.vueï¼ï¼åæ¶ä¿®å¤ mom-jssm ç± CREATE TABLE ... LIKE å
é导è´ç 47 个æå ruoyi-vue-pro ç act_*/flw_* è·¨åºå¤é®ï¼é建为æå mom-jssm èªèº«ï¼å¤å¿è¡é¢æ£ä¸º 0ï¼ï¼2026-09-28 å¢éï¼æ°å¢ yudao-module-research ç¬ç«ç§ç è¯¾é¢æ¨¡å䏿ï¼è¯¾é¢æååå¸ + å¨çº¿ç³æ¥ + ä¸å®¶è¯å®¡æç» + BPM ä¸çº§ç«é¡¹å®¡æ¹ + ç«é¡¹éç¥å
¬å + ç»è´¹æ¨ä»è®°å½ï¼4 å¼ research_* 表 / 5 个åå
¸ / bpm_category id=8002 / æµç¨ research_topic_approve / èå 1075510~1075553ï¼ï¼å¹¶å¹¶å
¥ config_export_all_20260928 é¶æ®µä¸ï¼ç³æ¥äººå ums_memberï¼è½¯å
³èï¼ãç«é¡¹éç¥å¤ç¨ system_notice å
¬åãæ¨æ¬¾åè¯èµ° system éä»¶ä¸å¿ recordType=research_fund_recordï¼2026-09-29 å¢éï¼è¯¾é¢ç»è´¹æ¨ä»å¯¹æ¥è´¢å¡æ¥éââæ°å»º yudao-module-finance-apiï¼FinanceReimbursementApiï¼å»ºå+æäº¤/æ¹å+éæ/å é¤/æ¥è¯¢åæ¹æ³ï¼æ¬å° Spring Bean è°ç¨ï¼æ é Feignï¼ï¼è¯¾é¢ä¾§ç»è®°æ¨æ¬¾æ¶ 1:1 èªå¨çæ finance_reimbursementï¼ç³»ç»çæ 1 è¡æç»ï¼è´¹ç¨ç±»å=å
¶ä» 5ãå票éé¢=æ¨ä»éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æã说æ=ã课é¢ãåã第 N ææ¨æ¬¾ãï¼å¹¶ç«å³æäº¤ BPMï¼åå reimbursement_id/reimbursement_noãå°è´¦ç½®ãæ¥é审æ¹ä¸(15)ãï¼åè¯æ¹ä¸ºç»è®°æ¶å¿
å¡«å¹¶åç»ï¼research_fund_record + finance_reimbursementï¼ï¼æ°å¢ ResearchFundStatusListenerï¼ç¬¬ 15 个ä¸å¡çå¬å¨ï¼ä¸ finance èªå·±ç FinanceReimbursementStatusListener 订é
å䏿µç¨ key å¹¶è¡è§¦åï¼æå®¡æ¹ç»æååå°è´¦ï¼éè¿âå·²æ¨ä»(20)ã驳åâ已驳å(30)+驳ååå /æ¶é´ãåæ¶æµç¨âéåå¾
æ¨ä»(0)坿¹åå¯éæ°åèµ·ï¼å起人æ¤ååªæå®ä¾éååèµ·èç¹ãæµç¨æªç»æï¼ä¸è§¦åååï¼å°è´¦ä¿æ 15ï¼ï¼æ°é 2 èç¹ BPMN docs/sql/finance_reimbursement_approve.bpmnï¼è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼category id=216 å·²åå¨ï¼ï¼2026-09-29 å·²å¨ mom-jssm é¨ç½²ä¸ºçæ¬ 1ï¼form_type=20ãèªå®ä¹è¡¨ååå»ºè·¯å¾ /finance/reimbursement/indexãæ¥çè·¯å¾ /finance/reimbursement/detail/approve/index.vueï¼å¹¶å¹¶å
¥ config_export_all_20260929 é¶æ®µä¸ï¼ä¸¤çº§å®¡æ¹å
¨éè¿/驳å/忶䏿¡ååé¾è·¯å已端å°ç«¯éªè¯" |
| | | "analysisBasis": "åºäº dev_business 忝 87bf4a99 æºç ï¼6 ç»å¹¶è¡æºç 走读ï¼MES ç产质é / MES ä»å¨ / ERP / CRM+SRM / å®å+HRM / AI+BI+MDM+BPM+åºåº§ï¼ï¼2026-09-28 å¢éè¡¥å
yudao-module-finance ç¬ç«è´¢å¡æ¥é模åï¼æ¥éå + æç» + å票éä»¶ + BPM å®¡æ¹ + 彿¡£ï¼ä¸ yudao-module-ums ç¬ç«ä¼åç®¡çæ¨¡åï¼å
¥ä¼ç³è¯· + BPM ä¸¤çº§å®¡æ¹ + 审æ¹éè¿èªå¨å»ºä¼åä¸ç»å½è´¦å· + ä¼åå表/é讯å½ï¼ï¼2026-09-28 å¢éï¼BPM æµç¨å®ä¹ ums_membership_approveï¼å
¥ä¼å®¡æ¹ï¼å·²å¨ mom-jssm é¨ç½²å¹¶å¹¶å
¥ config_export_all é¶æ®µä¸ï¼åç±» ums_membership_approveï¼ç§ä¹¦å¤å审 â çäºä¼å®¡è®®ï¼ä¸¤èç¹å®¡æ¹äººå为ãè§è²ãçç¥ãè§è²=è¶
级管çå(1) å
åºï¼è¡¨åç±»å=èªå®ä¹è¡¨åï¼æ¥çè·¯å¾ /ums/application/detail/approve/index.vueï¼ï¼åæ¶ä¿®å¤ mom-jssm ç± CREATE TABLE ... LIKE å
é导è´ç 47 个æå ruoyi-vue-pro ç act_*/flw_* è·¨åºå¤é®ï¼é建为æå mom-jssm èªèº«ï¼å¤å¿è¡é¢æ£ä¸º 0ï¼ï¼2026-09-28 å¢éï¼æ°å¢ yudao-module-research ç¬ç«ç§ç è¯¾é¢æ¨¡å䏿ï¼è¯¾é¢æååå¸ + å¨çº¿ç³æ¥ + ä¸å®¶è¯å®¡æç» + BPM ä¸çº§ç«é¡¹å®¡æ¹ + ç«é¡¹éç¥å
¬å + ç»è´¹æ¨ä»è®°å½ï¼4 å¼ research_* 表 / 5 个åå
¸ / bpm_category id=8002 / æµç¨ research_topic_approve / èå 1075510~1075553ï¼ï¼å¹¶å¹¶å
¥ config_export_all_20260928 é¶æ®µä¸ï¼ç³æ¥äººå ums_memberï¼è½¯å
³èï¼ãç«é¡¹éç¥å¤ç¨ system_notice å
¬åãæ¨æ¬¾åè¯èµ° system éä»¶ä¸å¿ recordType=research_fund_recordï¼2026-09-29 å¢éï¼è¯¾é¢ç»è´¹æ¨ä»å¯¹æ¥è´¢å¡æ¥éââæ°å»º yudao-module-finance-apiï¼FinanceReimbursementApiï¼å»ºå+æäº¤/æ¹å+éæ/å é¤/æ¥è¯¢åæ¹æ³ï¼æ¬å° Spring Bean è°ç¨ï¼æ é Feignï¼ï¼è¯¾é¢ä¾§ç»è®°æ¨æ¬¾æ¶ 1:1 èªå¨çæ finance_reimbursementï¼ç³»ç»çæ 1 è¡æç»ï¼è´¹ç¨ç±»å=å
¶ä» 5ãå票éé¢=æ¨ä»éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æã说æ=ã课é¢ãåã第 N ææ¨æ¬¾ãï¼å¹¶ç«å³æäº¤ BPMï¼åå reimbursement_id/reimbursement_noãå°è´¦ç½®ãæ¥é审æ¹ä¸(15)ãï¼åè¯æ¹ä¸ºç»è®°æ¶å¿
å¡«å¹¶åç»ï¼research_fund_record + finance_reimbursementï¼ï¼æ°å¢ ResearchFundStatusListenerï¼ç¬¬ 15 个ä¸å¡çå¬å¨ï¼ä¸ finance èªå·±ç FinanceReimbursementStatusListener 订é
å䏿µç¨ key å¹¶è¡è§¦åï¼æå®¡æ¹ç»æååå°è´¦ï¼éè¿âå·²æ¨ä»(20)ã驳åâ已驳å(30)+驳ååå /æ¶é´ãåæ¶æµç¨âéåå¾
æ¨ä»(0)坿¹åå¯éæ°åèµ·ï¼å起人æ¤ååªæå®ä¾éååèµ·èç¹ãæµç¨æªç»æï¼ä¸è§¦åååï¼å°è´¦ä¿æ 15ï¼ï¼æ°é 2 èç¹ BPMN docs/sql/finance_reimbursement_approve.bpmnï¼è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼category id=216 å·²åå¨ï¼ï¼2026-09-29 å·²å¨ mom-jssm é¨ç½²ä¸ºçæ¬ 1ï¼form_type=20ãèªå®ä¹è¡¨ååå»ºè·¯å¾ /finance/reimbursement/indexãæ¥çè·¯å¾ /finance/reimbursement/detail/approve/index.vueï¼å¹¶å¹¶å
¥ config_export_all_20260929 é¶æ®µä¸ï¼ä¸¤çº§å®¡æ¹å
¨éè¿/驳å/忶䏿¡ååé¾è·¯å已端å°ç«¯éªè¯ï¼2026-09-29 å¢éï¼æ°å¢ yudao-module-archive ç¬ç«æ¡£æ¡ç®¡ç模å + yudao-module-archive-apiï¼ArchiveDocumentApiï¼archiveBySource æ sourceType+sourceId å¹ç彿¡£ / isArchived / getBySource 䏿¹æ³ï¼æ¬å° Spring Bean è°ç¨ï¼æ Feignï¼ï¼è¦ç书æ¶åç±»ï¼archive_category æ å½¢ãcode å¯ä¸ãdefaultSecretLevel é»è®¤å¯çº§ã6 æ¡åå§åç±»ï¼ä¼å/课é¢/ä¼è®®/è´¢å¡/æä¹¦/å
建ï¼è´¢å¡é»è®¤å¯çº§=ä¿å¯ 3ï¼ãæ¡£æ¡ç®¡çï¼archive_documentï¼DA+yyyyMMdd+6 使µæ°´ç¼å·ãå¯çº§ä¸æ¡£ 1 å
¬å¼ 2 å
é¨ 3 ä¿å¯ãè½½ä½ä¸å 1 çµå 2 å®ä½ 3 çµå+å®ä½ãå®ä½ä½ç½®ååæ®µ shelfNo/layerNo/columnNo/boxNo + storePlaceãæ¥æºåç±» sourceType 1 æå·¥ 2 è¯¾é¢ 3 ä¼å 4 è´¢å¡å¸¦ sourceNo/sourceId/sourceTitle åä½å¿«ç
§ãç¶æ 10 å¨åº 20 ååºä¸ãçµåéä»¶èµ° system éä»¶ä¸å¿ recordType=archive_documentãarchiveBySource å¹ççè·¯ + 䏿¹è¡¨ archive_document_id ååä½ä¸ºå·²å½æ¡£ç¡¬æ è®°ï¼éå¤å½æ¡£ç±æ¥æºä¾§éè¯¯ç æ¦æªä¸ archive ä¾§ DOCUMENT_DUPLICATE_SOURCE å
åºï¼ãåé
ç»è®°ä¸å®¡æ¹ï¼archive_borrowï¼JY+åçº§æµæ°´ç¼å·ãåé
人信æ¯/åé
ç®ç/å½è¿æéãç¶æ 0 è稿 15 审æ¹ä¸ 20 ååºä¸ 30 å·²å½è¿ 35 已驳åï¼ä»
0/35 坿¹å¯éæãä»
0 å¯å ãä»
20 å¯ç»è®°å½è¿ï¼submit åæ ¡éªåæ¡£æ¡ä¸å¾å·²æ 15/20 å¨éåé
ï¼å
è§£ææµç¨å建åæç»å¤å¿è稿ï¼BPM æµç¨ archive_borrow_approve ä¸¤çº§ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ï¼çå¬å¨ ArchiveBorrowStatusListener æ businessKey åå 20+approveTime / 35+驳ååå æ¶é´ / éå 0ï¼å®¡æ¹éè¿æ¶æ¡ä»¶æ´æ°æ¡£æ¡ SET status=20 WHERE status=10ï¼0 è¡åæ¥æ¡£æ¡å·²è¢«å ç¨å¹¶åæ»ï¼ãå½è¿ç»è®°ï¼æ¡ä»¶æ´æ° 20â30 + returnTime/å½è¿ç¡®è®¤äººï¼åææ¡£æ¡æ¡ä»¶æ´æ°å 10ï¼å½¢æéç¯ï¼ã龿宿¶è®¡ç®ï¼overdue=status==20 ä¸ returnDeadline<ä»å¤©ï¼ä¸å»º infra_job ä¸åç«å
ä¿¡ï¼å表ã龿ãå + /archive/borrow/overdue-page ç¬ç«å
¥å£ï¼ãæ¡£æ¡ç»è®¡ï¼4 å¡çï¼æ»æ°/å¨åº/ååº/龿 + åç±»/å¯çº§/è½½ä½ä¸ç» GROUP BY èåï¼æ N+1ï¼ï¼æææ¡£æ¡ç¨å¯çº§å段 + ç¬ç«æéç¹ archive:document:sensitiveï¼/get è¶ææ DOCUMENT_SENSITIVE_NO_PERMISSIONã/page ä¸ /export-excel 强å¶è¿æ»¤ secret_level<>3ï¼ç»ä¸èµ° applySecretLevelFilter / validateSecretLevelVisible ä¸¤ç§ææ¹æ³ï¼æ°å¢ 3 å¼ è¡¨ archive_category/archive_document/archive_borrowã6 个åå
¸ï¼82000~82005ï¼ãbpm_category id=8003 + æå docs/sql/archive_borrow_approve.bpmnï¼category=archive_borrow_approveãform_type=20ãåå»ºè·¯å¾ /archive/borrow/indexãæ¥çè·¯å¾ /archive/borrow/detail/approve/index.vueï¼å·²å¨ mom-jssm é¨ç½²ä¸ºçæ¬ 1ãèå 1075600~1075699ï¼ä¸æ¹å½æ¡£èå¨ä¸ºå表页æå¨ã彿¡£ãæé®ï¼éäºä»¶é©±å¨ï¼å½æ¡£ä¸å忥æºä¸å¡ç¶æï¼ï¼è¯¾é¢ research_application status=20 å·²ç«é¡¹ â sourceType=2 å¯çº§ 2 å
é¨ sourceNo=ç«é¡¹ç¼å·ï¼ä¼å ums_member status=1 æ£å¸¸ â sourceType=3ï¼è´¢å¡ finance_reimbursement status=20 â sourceType=4 å¯çº§ 3 ä¿å¯ï¼ä¸æ¢æ 20â40 + archiveTime åäºå¡å å ï¼ä¸å¼ æ¥æºè¡¨åæ°å¢å¯ç©ºå archive_document_idï¼archive_module_migration.sql ç¨ information_schema å®å«ä¿è¯å¹çï¼ãå
¨åºè¡¨æ° 427â430ï¼ä¸å¡ç¶æçå¬å¨å®é
计æ°ä¿®æ£ä¸º 24 个 *StatusListenerï¼14 ä¸ªç»§æ¿ BpmProcessInstanceStatusEventListenerï¼ãæ¬æ¨¡åä¸ååä¾èµ ums/finance/researchï¼ä»
æä¾ -api 忍¡åç±ä¸æ¹æå¨è°ç¨ï¼ä¾èµæ¹å research/ums/finance â archive-apiï¼æ ç¯ãæ¬æ¬¡åæ¥æ´æ°çä¸å¡å¯è§å产ç©ï¼æ°å¢ mermaid/15-archive-flow.mmdï¼å¢é修订 01-business-mindmap / 08-module-relation / 09-data-flow / 10-business-objectï¼ä»¥å data/modules.jsonï¼æ°å¢ arc 模åãbpm çå¬å¨è®¡æ° 15â24ï¼ãobjects.jsonï¼æ°å¢æ¡£æ¡åç±»/æ¡£æ¡/åé
å 3 对象 + 课é¢ç³æ¥ä¹¦/ä¼å/æ¥éååè¡¥ archive_document_idï¼ãflows.jsonï¼æ°å¢ archive æµç¨ 9 æ¥ï¼ãroles.jsonï¼æ°å¢æ¡£æ¡ç®¡çå/åé
人/åé
审æ¹äºº/彿¡£ç»å人 4 è§è²ï¼ãbusiness.json" |
| | | } |
| | |
| | | {"stage": "ä¸å®¶è¯å®¡", "action": "ç³æ¥åå¤äºå®¡æ¹ä¸(15)æ¶å½å
¥ä¸å®¶è¯åæç»ï¼ä¸ä½ä¸å®¶ä¸è¡ï¼å§å/åä½/èç§° + éé¢ä»·å¼0.3/ç ç©¶æ¹æ¡0.3/å¢éåºç¡0.2/颿ææ0.2 å项åå¼ + ç»è®º + æè§ï¼ï¼åç«¯æ¯æ¬¡å¢å æ¹åéç® compositeScore å æå计ãæå æåéåºéæ rankingï¼å¹¶åå主å reviewAvgScoreï¼å
¨é¨ä¸å®¶ååï¼ä¸ reviewPassï¼ååè¾¾æ ä¸å¤æ°ç»è®ºä¸ºæ¨èç«é¡¹ï¼ï¼æç»å
¨é¨å 餿¶æ±æ»å¼æ¸
ç©ºä¸ºæªæ±æ»ï¼å项åå¼åå¨ 0~100 ä¹å¤æ¶æç¤ºæåºå
·ä½ç»´åº¦ä¸å®é
å¼", "roles": ["è¯å®¡ä¸å®¶", "å¦ä¼ç§ä¹¦å¤", "课é¢ç®¡çå"]}, |
| | | {"stage": "ç«é¡¹å®¡æ¹", "action": "BPM æµç¨ research_topic_approve 顺åºèµ°ä¸èç¹ï¼ç§ä¹¦å¤å½¢å¼å®¡æ¥ â ä¸å®¶è¯å®¡ â å¦ä¼ç«é¡¹å®¡æ¹ãå®¡æ¹æ¹æ³ä¸å®¡æ¹äººå¨æµç¨å®ä¹å
é
ç½®ï¼é¨ç½²åç±ç®¡çåå¨ BPM æµç¨è®¾è®¡å¨æå¦ä¼å®é
ç»ç»è°æ´ï¼å®¡æ¹ä¸å¿å
çèªå®ä¹è¡¨ååªè¯»åæ¾ç³æ¥å + è¯å®¡æç» + æ¨ä»è®°å½ãéè¿â20 å·²ç«é¡¹ã驳åâ35 已驳åãåæ¶âéå 0 è稿", "roles": ["å¦ä¼ç§ä¹¦å¤ï¼å½¢å¼å®¡æ¥ï¼", "è¯å®¡ä¸å®¶ï¼è¯å®¡èç¹ï¼", "å¦ä¼çäºä¼ï¼ç«é¡¹å®¡æ¹ï¼"]}, |
| | | {"stage": "ç«é¡¹ä¸éç¥", "action": "çå¬å¨ ResearchApplicationStatusListener å
åå审æ¹ç¶æï¼å®¡æ¹éè¿ååè° approveApplicationï¼çæç«é¡¹ç¼å· LX+yyyyMMdd+6使µæ°´ ä¸ approveTimeï¼å·²æç¼å·åå¹çè·³è¿ï¼ãç¹ãåå¸ç«é¡¹éç¥ãçæ system_notice å
¬åï¼æ é¢ãå
³äºå
¬å¸ç«é¡¹è¯¾é¢çéç¥ãï¼æ£æå«è¯¾é¢å/ç«é¡¹ç¼å·/ç±»å«/ç³æ¥äºº/åä½/èµå©éé¢ï¼ï¼åå noticeId é²éå¤ââéå¤ç¹å»æå·²å叿¦æªå¹¶åç¥ä¸æ¬¡å叿¶é´", "roles": ["课é¢ç®¡çå", "å¦ä¼ç§ä¹¦å¤"]}, |
| | | {"stage": "ç»è´¹æ¨ä»", "action": "ä»
ãå·²ç«é¡¹(20)ãçç³æ¥åå¯ç»è®°æ¨æ¬¾è®°å½ï¼æ¹æ¬¡åç§°/æ¨ä»éé¢/æ¨ä»æ¥æ/æ¶æ¬¾åä½/夿³¨/åè¯éä»¶ï¼ï¼åè¯å¿
å¡«ãç»è®°æ¶ä¸æ¡é¾å®æï¼â 课é¢ä¾§è½ research_fund_record å°è´¦ï¼å
ç½®å¾
æ¨ä»ï¼â¡ å䏿¹ blob åç»å°è¯¾é¢å°è´¦ä¸è´¢å¡æ¥éå â¢ ç» yudao-module-finance-api èªå¨çæ 1:1 ç finance_reimbursement æ¥éåï¼1 è¡æç»ï¼è´¹ç¨ç±»å=å
¶ä»ãå票éé¢=æ¨ä»éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æãè´¹ç¨è¯´æ=ã课é¢ã课é¢åã第Næ/第N次ç»è´¹æ¨æ¬¾ãï¼â£ ç«å³æäº¤ BPM æ¥éå®¡æ¹ â¤ å°è´¦å忥éåå·å¹¶ç½®ãæ¥é审æ¹ä¸(15)ããé颿 ¡éªï¼å·²ç»è®°éé¢ + æ¬æ¬¡éé¢ ä¸å¾è¶
åºè¯¥åç³è¯·ç»è´¹ï¼è¶
åºæ¶æç¤ºæ¥åºæ¬æ¬¡ãå·²ç»è®°ãå计ãé¢ç®å项æ°å¼ãç¶æç±ç³»ç»é©±å¨ï¼0å¾
æ¨ä»/15æ¥é审æ¹ä¸/20å·²æ¨ä»/30已驳åï¼åªæãå¾
æ¨ä»ãå¯å ï¼å é¤è卿¸
çè´¢å¡ä¾§è稿æ¥éåï¼ï¼ãå¾
æ¨ä»ãã已驳åã坿¹å¹¶éæ°åèµ·æ¥éï¼å·²é©³åæ¹åæ¸
空驳ååå 䏿¶é´ï¼ï¼åæ¶æµç¨åéåãå¾
æ¨ä»(0)ãï¼å起人æ¤ååªæå®ä¾éååèµ·èç¹ãæµç¨æªç»æï¼å°è´¦ä¿æãæ¥é审æ¹ä¸(15)ãï¼ééæ°æäº¤åæç»§ç»èµ°å®¡æ¹ï¼ãè´¢å¡å®¡æ¹åç±»ä¸æ²¡æå·²å叿µç¨æ¶ç´æ¥æ¥éä¸ä¸å»ºåï¼ä¸çå¤å¿è稿æ¥éå", "roles": ["å¦ä¼è´¢å¡", "课é¢ç®¡çå", "è´¢å¡å®¡æ ¸äºº", "è´¢å¡ä¸»ç®¡"]}]}, |
| | | {"stage": "ç»è´¹æ¨ä»", "action": "ä»
ãå·²ç«é¡¹(20)ãçç³æ¥åå¯ç»è®°æ¨æ¬¾è®°å½ï¼æ¹æ¬¡åç§°/æ¨ä»éé¢/æ¨ä»æ¥æ/æ¶æ¬¾åä½/夿³¨/åè¯éä»¶ï¼ï¼åè¯å¿
å¡«ãç»è®°æ¶ä¸æ¡é¾å®æï¼â 课é¢ä¾§è½ research_fund_record å°è´¦ï¼å
ç½®å¾
æ¨ä»ï¼â¡ å䏿¹ blob åç»å°è¯¾é¢å°è´¦ä¸è´¢å¡æ¥éå â¢ ç» yudao-module-finance-api èªå¨çæ 1:1 ç finance_reimbursement æ¥éåï¼1 è¡æç»ï¼è´¹ç¨ç±»å=å
¶ä»ãå票éé¢=æ¨ä»éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æãè´¹ç¨è¯´æ=ã课é¢ã课é¢åã第Næ/第N次ç»è´¹æ¨æ¬¾ãï¼â£ ç«å³æäº¤ BPM æ¥éå®¡æ¹ â¤ å°è´¦å忥éåå·å¹¶ç½®ãæ¥é审æ¹ä¸(15)ããé颿 ¡éªï¼å·²ç»è®°éé¢ + æ¬æ¬¡éé¢ ä¸å¾è¶
åºè¯¥åç³è¯·ç»è´¹ï¼è¶
åºæ¶æç¤ºæ¥åºæ¬æ¬¡ãå·²ç»è®°ãå计ãé¢ç®å项æ°å¼ãç¶æç±ç³»ç»é©±å¨ï¼0å¾
æ¨ä»/15æ¥é审æ¹ä¸/20å·²æ¨ä»/30已驳åï¼åªæãå¾
æ¨ä»ãå¯å ï¼å é¤è卿¸
çè´¢å¡ä¾§è稿æ¥éåï¼ï¼ãå¾
æ¨ä»ãã已驳åã坿¹å¹¶éæ°åèµ·æ¥éï¼å·²é©³åæ¹åæ¸
空驳ååå 䏿¶é´ï¼ï¼åæ¶æµç¨åéåãå¾
æ¨ä»(0)ãï¼å起人æ¤ååªæå®ä¾éååèµ·èç¹ãæµç¨æªç»æï¼å°è´¦ä¿æãæ¥é审æ¹ä¸(15)ãï¼ééæ°æäº¤åæç»§ç»èµ°å®¡æ¹ï¼ãè´¢å¡å®¡æ¹åç±»ä¸æ²¡æå·²å叿µç¨æ¶ç´æ¥æ¥éä¸ä¸å»ºåï¼ä¸çå¤å¿è稿æ¥éå", "roles": ["å¦ä¼è´¢å¡", "课é¢ç®¡çå", "è´¢å¡å®¡æ ¸äºº", "è´¢å¡ä¸»ç®¡"]}]}, |
| | | {"id": "archive", "name": "æ¡£æ¡ç®¡çæµç¨", "mermaid": "mermaid/15-archive-flow.mmd", "color": "#7fb3d5", |
| | | "summary": "ç¬ç«æ¡£æ¡æ¨¡åï¼yudao-module-archiveï¼ï¼ä¹¦æ¶åç±»ï¼åå±ååï¼è§æ´ â æ¡£æ¡ç»è®°ï¼çµåéä»¶ + å®ä½ä½ç½®ååæ®µï¼å¯çº§ä¸æ¡£ï¼â åé
ç»è®°èµ° BPM 两级审æ¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ï¼â 审æ¹éè¿æ¡£æ¡è½¬ãååºä¸ãâ å½è¿ç»è®°åãå¨åºãå½¢ææµè½¬éç¯ â 龿æªè¿æ¥è¯¢æ¶å®æ¶è®¡ç®å¹¶å¨å表æ 红 â åé䏿µè½¬ç»è®¡ï¼æ»æ°/å¨åº/ååºä¸/龿 + å类·å¯çº§Â·è½½ä½ä¸ç»åå¸ï¼ãåæ¶æ¥æ¶è¯¾é¢ï¼å·²ç«é¡¹ï¼ãä¼åï¼æ£å¸¸ï¼ãè´¢å¡ï¼å·²éè¿ï¼ä¸æ¹çã彿¡£ãèå¨ï¼ç»æ°å»ºç yudao-module-archive-api çææ¡£æ¡å¹¶å忥æºè¡¨ archive_document_idãä¼è®®/å
建档æ¡ç³»ç»å
æ æ¥æºæ¨¡åï¼ä»
æå·¥å½å
¥ã", |
| | | "steps": [ |
| | | {"stage": "建åç±»", "action": "æ°å»ºåç±»å¯æç¶å类形æåç±»æ ï¼ç¼ç code å
¨å±å¯ä¸ï¼ï¼è®¾æåºã说æãé»è®¤å¯çº§ä¸å¯ç¨ç¶æï¼6 æ¡åå§åç±»ï¼ä¼åæ¡£æ¡/è¯¾é¢æ¡£æ¡/ä¼è®®æ¡£æ¡/è´¢å¡æ¡£æ¡ï¼é»è®¤å¯çº§=ä¿å¯ 3ï¼/æä¹¦æ¡£æ¡/å
建档æ¡ãæååç±»æè¯¥åç±»ä¸å·²ææ¡£æ¡æ¶ç¦æ¢å é¤ï¼ç¶åç±»ä¸è½è®¾ä¸ºèªèº«æå
¶ååç±»", "roles": ["æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "ç»è®°æ¡£æ¡", "action": "å¡«æ é¢ãåç±»ãå¯çº§ï¼1å
¬å¼/2å
é¨/3ä¿å¯ï¼ãè½½ä½ï¼1çµå/2å®ä½/3çµå+å®ä½ï¼ã彿¡£æ¥æãæè¦ãå
³é®è¯ï¼éçµååä¸ä¼ éä»¶ï¼èµ° system éä»¶ä¸å¿ï¼recordType=archive_documentï¼å
/system/storage-blob/upload å blobId åéä¿å请æ±ç blobIds æäº¤ï¼å
¨éæ¿æ¢è¯ä¹ï¼ï¼éå®ä½å填书æ¶å·/å±å·/åå·/åå·æ¡£æ¡çä¸åæ¾ä½ç½®æè¿°ï¼åç«¯çææ¡£æ¡ç¼å· DA+yyyyMMdd+6使µæ°´ï¼Redis æ¯æ¥éç½®ï¼ï¼ç¶æãå¨åº(10)ã", "roles": ["æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "æ£ç´¢", "action": "ææ¡£æ¡ç¼å·/æ é¢/å
³é®è¯ tags/æ¥æºåå·/åç±»/å¯çº§/è½½ä½/ç¶æ/彿¡£æ¥æåºé´å¤æ¡ä»¶æ£ç´¢ï¼æ¯æ Excel 导åºãå¯çº§=ä¿å¯(3) çæ¡£æ¡ï¼å½åç¨æ·æ archive:document:sensitive æ¶å表ä¸å¯¼åºå¼ºå¶è¿æ»¤æãç´è¿è¯¦æ
æ¥å£æ¥æ æéé误", "roles": ["æ¡£æ¡ç®¡çå", "å
¨å坿¥å
¬å¼æ¡£"]}, |
| | | {"stage": "䏿¹å½æ¡£", "action": "课é¢ç³æ¥ä¹¦ï¼ä»
å·²ç«é¡¹ 20ï¼ãä¼åï¼ä»
æ£å¸¸ 1ï¼ãè´¢å¡æ¥éåï¼ä»
å·²éè¿ 20ï¼çå表页åæä¸ä¸ªã彿¡£ãæé®ï¼ç» yudao-module-archive-api ç archiveBySource æãæ¥æºç±»å + æ¥æºåæ® IDãå¹ççææ¡£æ¡ï¼æ¥æºåå·/æ é¢ä½ä¸ºå¿«ç
§åå
¥æ¡£æ¡ï¼æºåéä»¶ä¸å¹¶å¸¦å
¥æ¡£æ¡ï¼è´¢å¡æ¡£æ¡å¯çº§åºå®ä¸ºãä¿å¯ãï¼ï¼å¹¶å忥æºè¡¨ archive_document_id ä½ä¸ºå·²å½æ¡£ç¡¬æ è®°ï¼éå¤ç¹å»ç±æ¥æºä¾§æ¦æªå¹¶æç¤ºå·²çæçæ¡£æ¡ç¼å·ãè´¢å¡ä¾§ã彿¡£ãä¸å
¶æ¢æ 20â40 ç¶ææ¨è¿å¨åä¸äºå¡å
å å æ§è¡", "roles": ["课é¢ç®¡çå", "ä¼å管çå", "è´¢å¡"]}, |
| | | {"stage": "åé
ç»è®°", "action": "éæ¡£æ¡ï¼ä»
ãå¨åº(10)ãå¯éï¼ãå¡«åé
人/é¨é¨/èç³»çµè¯ãåé
æ¥æãåé
ç®çãå½è¿æéï¼çæåé
åå· JY+yyyyMMdd+6使µæ°´ï¼ç¶æãè稿(0)ããæäº¤åæ ¡éªå䏿¡£æ¡ä¸å¾åå¨ã审æ¹ä¸(15)ãæãååºä¸(20)ãçåé
åï¼å½ä¸æ¶æå·²åå¨çåé
åå·ç²¾ç¡®æ¥éï¼submit å
è§£ææµç¨åè¡¨ï¼æ å·²å叿µç¨ç´æ¥æ¥éãä¸çå¤å¿è稿ï¼å建åï¼åå processInstanceId å¹¶ç½®ã审æ¹ä¸(15)ã", "roles": ["åé
人", "æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "åé
审æ¹", "action": "BPM æµç¨ archive_borrow_approve 两级顺åºå®¡æ¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ï¼å®¡æ¹æ¹æ³ä¸å®¡æ¹äººå¨æµç¨å®ä¹å
é
ç½®ï¼å端åªéæµç¨ä¸åæ» keyï¼å®¡æ¹ä¸å¿ç»èªå®ä¹è¡¨åæ¥çè·¯å¾ /archive/borrow/detail/approve/index.vue åªè¯»åæ¾åé
å䏿¡£æ¡ä¿¡æ¯ï¼ã审æ¹éè¿ç± ArchiveBorrowStatusListener ç½®ãååºä¸(20)ãå¹¶åå approveTimeï¼åæ¶æ¡ä»¶æ´æ°æ¡£æ¡ç¶æä¸ºãååºä¸ãï¼å½±å 0 è¡è¯´ææ¡£æ¡å·²è¢«å
¶å®æµç¨å ç¨ â æ¥éå¹¶åæ»ï¼ä¿è¯å䏿¡£æ¡ä¸ä¼è¢«ä¸¤æ¡æµç¨åæ¶ååºï¼ï¼é©³åç½®ã已驳å(35)ãå¹¶åå驳ååå 䏿¶é´ï¼ä¿®æ¹åå¯éæ°æäº¤ï¼åæ¶æµç¨éåãè稿(0)ã", "roles": ["æ¡£æ¡ç®¡çåï¼å®¡æ ¸ï¼", "å管é¢å¯¼ï¼å®¡æ¹ï¼"]}, |
| | | {"stage": "å½è¿ç»è®°", "action": "ä»
ãååºä¸(20)ãå¯ç»è®°å½è¿ï¼å¡«å½è¿å¤æ³¨ â æ¡ä»¶æ´æ°åé
åç¶æå°ãå·²å½è¿(30)ãå¹¶åå returnTime ä¸å½è¿ç¡®è®¤äººï¼åæ¶æ¡ä»¶æ´æ°æ¡£æ¡åãå¨åº(10)ãï¼å½¢æå®æ´æµè½¬éç¯ï¼æ´æ° 0 è¡è¯´æç¶æå·²ååï¼æ¥æç¡®é误", "roles": ["æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "龿æé", "action": "ä¸å»ºå®æ¶ä»»å¡ãä¸åç«å
ä¿¡ï¼é¾æä»
卿¥è¯¢æ¶å®æ¶è®¡ç®ï¼ç¶æ=ååºä¸ ä¸ å½è¿æéæ©äºä»å¤©ï¼é¾æå¤©æ°=ä»å¤©âå½è¿æéï¼ï¼åé
å表çã龿ã忏²æçº¢è²ã龿 N å¤©ãæ ç¾ï¼å¦æä¾ /archive/borrow/overdue-page ç¬ç«å
¥å£ï¼å表页æãåªç龿ãåæ¢å¨ /page ä¸ /overdue-page ä¹é´åæ¢æ°æ®æº", "roles": ["æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "æ¡£æ¡ç»è®¡", "action": "ç»è®¡é¡µå±ç¤ºæ¡£æ¡æ»æ°ãå¨åºæ°ãååºä¸æ°ã龿æªè¿æ°åå¼ å¡çï¼ä»¥åæåç±»åå¸ï¼é¥¼å¾ï¼ãæå¯çº§åå¸ï¼æ±å¾ï¼ãæè½½ä½åå¸ï¼é¥¼å¾ï¼ä¸ç»åå¸ï¼æ°æ®æ¥èª /archive/stat/overview ç忬¡èåæ¥è¯¢", "roles": ["æ¡£æ¡ç®¡çå", "管çå±"]}]}, |
| | | {"id": "ai", "name": "AI ä¸å¡æµç¨", "mermaid": "mermaid/11-ai-business-flow.mmd", "color": "#56c8d8", |
| | | "summary": "ç»ä¸æ¨¡å¼ï¼ä¸å¡ä¾§æ¶éä¸ä¸æ(å¿
è¦æ¶è° MDM/SRM/CRM API ååç§°)âç»è£
Promptâchat/chatWithImageâè§£æ JSONâå端é¢å¡«æå»ºè®®ï¼æ Function Callingï¼RAG ç¥è¯åºå·²å»ºæä½ææ ä¸å¡æ¶è´¹ã", |
| | | "steps": [ |
| | |
| | | "upstream": ["ä¼å管ç(ums_member åç³æ¥äººå§å/åä½/èç§°/çµè¯)", "BPM(æµç¨å®ä¹ research_topic_approve / finance_reimbursement_approve)"], |
| | | "downstream": ["system(system_notice ç«é¡¹éç¥å
¬å)", "system(éä»¶ä¸å¿)", "è´¢å¡(ç»è´¹æ¨ä»çæ finance_reimbursement æ¥éå·已对æ¥)"], |
| | | "coreTables": ["research_guideline", "research_application", "research_topic_review", "research_fund_record"]}, |
| | | {"key": "arc", "name": "æ¡£æ¡ç®¡çï¼ç¬ç«ï¼", "color": "#7fb3d5", "tag": "ARC", "flow": "archive", |
| | | "positioning": "å¦ä¼/åä¼åå®ä½ä¸çµåæ¡£æ¡å
¨çå½å¨æï¼å类书æ¶è§æ´ â æ¡£æ¡ç»è®°ä¸æ£ç´¢ â åé
å®¡æ¹ â å½è¿éç¯ â åé䏿µè½¬ç»è®¡ï¼å¹¶æ¥æ¶è¯¾é¢/ä¼å/è´¢å¡ä¸æ¹ç彿¡£èå¨", |
| | | "problem": "è¯¾é¢ææãä¼åææãè´¢å¡åè¯æ£è½åæ¨¡åæ å¤å½éï¼çº¸è´¨æ¡£æ¡åæ¾ä½ç½®é 线ä¸å°è´¦ï¼åé
ä¸å½è¿æ ççã龿æ 人管ï¼è´¢å¡çæææ¡£æ¡æ å¯çº§ç®¡æ§", |
| | | "features": ["æ¡£æ¡åç±»æ (书æ¶Â·åå±åå)ï¼ä¼å/课é¢/ä¼è®®/è´¢å¡/æä¹¦/å
建 6 æ¡åå§å类·ç¼ç å¯ä¸Â·æ¯æç¶åå±çº§", "åç±»é»è®¤å¯çº§(è´¢å¡åç±»=ä¿å¯)·åç±»æååç±»æä¸ææ¡£æ¡ç¦å ", "æ¡£æ¡ä¸»è¡¨ï¼çµåéä»¶ + å®ä½ä½ç½®ååæ®µ(书æ¶å·/å±å·/åå·/åå·æ¡£æ¡ç)+åæ¾ä½ç½®æè¿°", "æ¡£æ¡ç¼å· DA+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)·åé
åå· JY+åæ¥æµæ°´", "å¯çº§ä¸æ¡£ å
¬å¼1/å
é¨2/ä¿å¯3 + ç¬ç«æéç¹ archive:document:sensitive(æ æéæ¶å表ä¸å¯¼åºå¼ºå¶è¿æ»¤ã详æ
æ¥é)", "è½½ä½ä¸å çµå1/å®ä½2/çµå+å®ä½3", "æ¥æºåç±» æå·¥1/课é¢2/ä¼å3/è´¢å¡4(è®°å½æ¥æºåå·/ID/æ é¢å¿«ç
§ä¾¿äºæ£ç´¢)", "å
¨å段æ£ç´¢ï¼æ é¢/å
³é®è¯ tags/æ¥æºåå·/åç±»/å¯çº§/è½½ä½/ç¶æ/彿¡£æ¥æåºé´ + Excel 导åº", "åé
ç»è®°(åé
人/é¨é¨/çµè¯/æ¥æ/ç®ç/å½è¿æé)+BPM 两级审æ¹(æ¡£æ¡ç®¡çåå®¡æ ¸âå管é¢å¯¼å®¡æ¹)·æµç¨ key=archive_borrow_approve", "å½è¿ç»è®°ï¼å®æ¶æ´æ°æ¡£æ¡ç¶æåãå¨åºãï¼å½¢æå®æ´æµè½¬éç¯", "龿æªè¿ä»
æ¥è¯¢æ¶å®æ¶è®¡ç®(overdueDays)·å表红è²ã龿 N 天ãTag + /overdue-page ç¬ç«å
¥å£ + ãåªç龿ãåæ¢Â·ä¸å»º infra_job ä¸åç«å
ä¿¡", "æ¡£æ¡ç»è®¡ï¼æ»æ°/å¨åº/ååºä¸/龿æªè¿ + æåç±»/å¯çº§/è½½ä½ä¸ç»åå¸(4 å¡ç + 3 å¾è¡¨)", "å¯¹å¤æä¾ yudao-module-archive-api(ArchiveDocumentApiï¼archiveBySource å¹ç/ isArchived / getBySource)ä¾è¯¾é¢Â·ä¼å·财å¡ä¸æ¹æå¨å½æ¡£", "éä»¶èµ° system éä»¶ä¸å¿(recordType=archive_document / archive_borrow)"], |
| | | "objects": ["æ¡£æ¡åç±»", "æ¡£æ¡", "åé
å"], |
| | | "roles": ["æ¡£æ¡ç®¡çå", "å管é¢å¯¼(åé
审æ¹)", "åé
人", "彿¡£ç»å人(课é¢/ä¼å/è´¢å¡)"], |
| | | "upstream": ["课é¢ç®¡ç(å·²ç«é¡¹ç³æ¥ä¹¦Â·archiveApplication)", "ä¼å管ç(æ£å¸¸ä¼å·archiveMember)", "è´¢å¡æ¥é(å·²éè¿æ¥éåÂ·æ¢æ archive å å )", "BPM(æµç¨å®ä¹ archive_borrow_approve)"], |
| | | "downstream": ["system(éä»¶ä¸å¿ storage_attachment)", "æ¥æºè¡¨åå archive_document_id"], |
| | | "coreTables": ["archive_category", "archive_document", "archive_borrow"]}, |
| | | {"key": "bpm", "name": "åå审æ¹", "color": "#e6a23c", "tag": "BPM", "flow": null, |
| | | "positioning": "å
¨ç³»ç»åæ®å®¡æ¹ä¸æ¢ï¼Flowableï¼", |
| | | "problem": "夿¨¡ååæ®éè¦çµæ´»å¯é
çå¤çº§å®¡æ¹", |
| | | "features": ["BPMN+éé飿 ¼å设计å¨", "æµç¨å®ä¹é¨ç½²", "审æ¹äºä»¶ç»ä¸åè°(BpmProcessInstanceStatusEvent)", "15个ä¸å¡çå¬å¨(å䏿µç¨ key å
许å¤ä¸ªçå¬å¨å¹¶è¡Â·åèªæ key è¿æ»¤)", "表åÂ·ç¨æ·ç»Â·æé·å ç¾"], |
| | | "features": ["BPMN+éé飿 ¼å设计å¨", "æµç¨å®ä¹é¨ç½²", "审æ¹äºä»¶ç»ä¸åè°(BpmProcessInstanceStatusEvent)", "24个ä¸å¡ç¶æçå¬å¨(*StatusListener·å䏿µç¨ key å
许å¤ä¸ªçå¬å¨å¹¶è¡Â·åèªæ key è¿æ»¤Â·æ¡£æ¡åé
ArchiveBorrowStatusListener ä¸è´¢å¡/课é¢çå¬å¨è®¢é
ä¸å key äºä¸å¹²æ°)", "表åÂ·ç¨æ·ç»Â·æé·å ç¾"], |
| | | "objects": ["æµç¨æ¨¡å", "æµç¨å®ä¾", "审æ¹ä»»å¡"], |
| | | "roles": ["审æ¹äºº(ææµç¨é
ç½®)", "æµç¨ç®¡çå"], |
| | | "upstream": ["åä¸å¡æäº¤å®¡æ¹"], "downstream": ["åè°æ´æ°åä¸å¡åæ®ç¶æ"], |
| | |
| | | {"name": "æç计å", "module": "设å¤", "table": "mes_cal_plan", "doc": "çç»Ãçæ¬¡Ãæ¥ææçï¼ä¾ç产ä¸èå¤å¼ç¨", "upstream": [], "downstream": ["ç产任å¡", "èå¤"], "keywords": "æç çç» çæ¬¡ æ¥å"}, |
| | | {"name": "æ¥å模æ¿", "module": "è´¨æ£æ¥å", "table": "qc_report_template", "doc": "æºè½è´¨æ£æ¥å模æ¿ï¼å¯ç¨0/åç¨1ï¼ç»å¸å
容åå¨ qc_report_template_versionï¼è稿0/å·²åå¸1/å·²åç¨2ï¼å·²åå¸ä¸å¯è¦çï¼ï¼currentVersion æåå½åå·²åå¸çæ¬ï¼æºæä»¶ç» AI 导å
¥è¯å«æè稿åç±äººå·¥ç¡®è®¤ææä¸ºçæ¬ï¼å䏿¨¡æ¿éå¤å¯¼å
¥æãæ¿æ¢ãå¤çââå
å æ§éä»¶ï¼è¿å¸¦ blob è¡ä¸ç£çæä»¶ï¼åç»æ°çï¼ä¸çå¤å¿æä»¶ï¼å 餿¨¡æ¿ä¼è¿å¸¦æ¸
éä»¶", "upstream": ["人工设计(GrapesJS 设计å¨)", "AI 导å
¥è稿(qc-report/ai-import/draft)"], "downstream": ["模æ¿çæ¬", "æ¥åå®ä¾"], "keywords": "æ¥åæ¨¡æ¿ è´¨æ£æ¥å template è®¾è®¡å¨ çæ¬ AI导å
¥ è¯å« è稿 æºæä»¶æ¿æ¢"}, |
| | | {"name": "æ¥åå®ä¾", "module": "è´¨æ£æ¥å", "table": "qc_report_instance", "doc": "åºä»¶äº§ç©ï¼ç¼å· QR+yyyyMMdd+4使µæ°´æå¤©ç¬ç«ä¸ä¸å¡å¯ä¸ï¼å¯æ¾å¼æå®è¦çï¼æ³¨æ uk_report_no ä¸åºå软å é¤ï¼å æçå·ä¸åæ¶ï¼ï¼ä¸¤æ¡åºä»¶å
¥å£ï¼éç¨ generateï¼è°ç¨æ¹èªå¸¦ contextï¼ä¸ generate-from-qcï¼æ°æ®ä» MES è´¨æ£ååï¼æéç qc-report:instance:generate å·²å
¥ system_menu id=1075416ï¼äºéæ ¡éªæä¸å¡ä¼å
çº§åªæ¥ç¬¬ä¸å¤ï¼105_000 ç±»åéæ³ / 105_001 åæ®ä¸åå¨ / 105_002 æªå®æ / 105_003 æªå¤å® / 105_005 模æ¿ç±»åä¸ç¬¦ / 105_006 æ å¯ç¨æ£éªé¡¹ï¼åå¼ è´¨æ£åå表çè¡æä½ãåºæ¥åãä»
å¨ status=已宿æ¶å¯è§ï¼å¼¹çªåªå reportType ä¸è´ã模æ¿å¯ç¨ãä¸ currentVersion æåççæ¬å·²åå¸ç模æ¿ï¼å端 /qc-report/template/selectable å¤å®ââåç¨çæ¬ä¸æ¸
空 currentVersionï¼å端æ¿åé¡µç»æèªå·±æ¨å¯¼ä¼æ¼ï¼ï¼ç»æå°±å°å±ç¤ºå¹¶è·³æ¬é¡µå表ï¼ï¼å»ç» data_snapshotï¼å¤å®åæ°æ®ï¼å«å端ç®å¥½ç PASS/FAIL ä¸åæ ¼çï¼ä¸ render_htmlï¼regenerate åªé渲æçãæ°æ®ä¸ç¼å·ä¸åï¼business_id/business_type å MES 表åï¼mes_qc_iqc çï¼ä¸åæ® IDï¼å¯åæ¥ãä¸åå¯åºå¤ä»½ï¼æ¥å头å¦å¸¦åæ®åå¤å® qcResult(æ°)/qcResultText(䏿ï¼åæ ¼/ç¹é/ä¸åæ ¼éè´§/ä¸åæ ¼æ¥åº)ï¼ä¸å¼æä¸æå¤å®å¹¶åäºä¸è¦çï¼ååºå¸¦ undecidableCount=å¿«ç
§ä¸ result 为空串ç项æ°ä¸ warningsï¼åç»æ é¢è·³è¿/ææ å·²å /æªå½å®æµå¼/æ ·åè¶
3ï¼ï¼ä¸¤è
é½ä¸è½åºãäºåçä¸å°", "upstream": ["æ¥å模æ¿çæ¬", "è´¨æ£åä¸ä¸æ(éç¨ generate ç±è°ç¨æ¹ä¼ å
¥)", "MES è´¨æ£å IQC/IPQC/OQC/RQC(generate-from-qc ç» MesQcReportApi åæ°)"], "downstream": ["å端å®ä¾é¡µ /qc/report-instance(å表·iframeé¢è§Â·å¿«ç
§é¡µç¾Â·å¯¼åºPDF)", "PDF彿¡£(system_storage_attachment recordType=qc_report_instance)"], "keywords": "æ¥åå®ä¾ åºä»¶ QRç¼å· å¿«ç
§ å¤ç° regenerate PDF彿¡£ æ¥åå®ä¾é¡µ 导åºPDF generate-from-qc è´¨æ£ååºæ¥å åºæ¥åå¼¹çª qcResult undecidableCount warnings å¾
å¤å® 忥 ä¸å¡åæ®çé"}, |
| | | {"name": "æ¥éå", "module": "è´¢å¡æ¥é", "table": "finance_reimbursement", "doc": "åå·å¯èªå®ä¹(ä¸é´ä¸å
è®¸ç©ºæ ¼ï¼ä¸å·²æåå·éå¤åæ¥é)ï¼æ°å¢æ¶ç空æçº¯ç©ºæ ¼ç±ç³»ç»çæ BX+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼ä¿®æ¹æ¶çç©ºè¡¨ç¤ºä¿æä¸åãstatus: 0è稿/15审æ¹ä¸/20å·²éè¿/35已驳å/40已彿¡£ï¼ä»
è稿å¯å ãè稿ä¸å·²é©³å坿¹ãä»
å·²éè¿å¯å½æ¡£ï¼æäº¤åç± BPM çå¬å¨æç»æååç¶æ(åæ¶éåè稿)ï¼å®¡æ¹ä¸ processInstanceId 被ååãæ¥æºä¸¤æ¡ï¼â è´¢å¡æ¨¡å页é¢äººå·¥å¡«æ¥ â¡è¯¾é¢ç®¡çãç»è´¹æ¨ä»ãç» FinanceReimbursementApi(yudao-module-finance-api)èªå¨å»ºåå¹¶ç«å³æäº¤(1:1ãéé¢ä¸è´ãç³»ç»åºå® 1 è¡æç»Â·è´¹ç¨ç±»å=å
¶ä»)ââåè
ç审æ¹ç»æç±è¯¾é¢ä¾§ ResearchFundStatusListener 订é
å䏿µç¨ååæ¨æ¬¾å°è´¦ï¼æ¥éåæ¬èº«ä¸ååä»»ä½å¤é¨åæ®", "upstream": ["课é¢ç®¡ç(ç»è´¹æ¨ä»Â·ç» FinanceReimbursementApi èªå¨å»ºå)", "人工填æ¥"], "downstream": ["æ¥éæç»", "å票éä»¶(storage_attachment·recordType=finance_reimbursement)", "è¯¾é¢æ¨æ¬¾å°è´¦(ä»
ç» BPM äºä»¶ååç¶æ)"], "keywords": "æ¥éå æ¥é å票 reimbursement BX 彿¡£ è´¢å¡ è´¹ç¨ èªå®ä¹åå· è¯¾é¢ç»è´¹æ¨ä» èªå¨å»ºå FinanceReimbursementApi"}, |
| | | {"name": "æ¥éå", "module": "è´¢å¡æ¥é", "table": "finance_reimbursement", "doc": "åå·å¯èªå®ä¹(ä¸é´ä¸å
è®¸ç©ºæ ¼ï¼ä¸å·²æåå·éå¤åæ¥é)ï¼æ°å¢æ¶ç空æçº¯ç©ºæ ¼ç±ç³»ç»çæ BX+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼ä¿®æ¹æ¶çç©ºè¡¨ç¤ºä¿æä¸åãstatus: 0è稿/15审æ¹ä¸/20å·²éè¿/35已驳å/40已彿¡£ï¼ä»
è稿å¯å ãè稿ä¸å·²é©³å坿¹ãä»
å·²éè¿å¯å½æ¡£ï¼æäº¤åç± BPM çå¬å¨æç»æååç¶æ(åæ¶éåè稿)ï¼å®¡æ¹ä¸ processInstanceId 被ååãæ¥æºä¸¤æ¡ï¼â è´¢å¡æ¨¡å页é¢äººå·¥å¡«æ¥ â¡è¯¾é¢ç®¡çãç»è´¹æ¨ä»ãç» FinanceReimbursementApi(yudao-module-finance-api)èªå¨å»ºåå¹¶ç«å³æäº¤(1:1ãéé¢ä¸è´ãç³»ç»åºå® 1 è¡æç»Â·è´¹ç¨ç±»å=å
¶ä»)ââåè
ç审æ¹ç»æç±è¯¾é¢ä¾§ ResearchFundStatusListener 订é
å䏿µç¨ååæ¨æ¬¾å°è´¦ï¼æ¥éåæ¬èº«ä¸ååä»»ä½å¤é¨åæ®ï¼archive_document_id éç©ºè¡¨ç¤ºå·²å½æ¡£", "upstream": ["课é¢ç®¡ç(ç»è´¹æ¨ä»Â·ç» FinanceReimbursementApi èªå¨å»ºå)", "人工填æ¥"], "downstream": ["æ¥éæç»", "å票éä»¶(storage_attachment·recordType=finance_reimbursement)", "è¯¾é¢æ¨æ¬¾å°è´¦(ä»
ç» BPM äºä»¶ååç¶æ)", "æ¡£æ¡ç®¡ç(æ¢æå½æ¡£å¨ä½åäºå¡å å ·çæãä¿å¯ 3ãçº§è´¢å¡æ¡£æ¡å¹¶åå archive_document_id)"], "keywords": "æ¥éå æ¥é å票 reimbursement BX 彿¡£ è´¢å¡ è´¹ç¨ èªå®ä¹åå· è¯¾é¢ç»è´¹æ¨ä» èªå¨å»ºå FinanceReimbursementApi è´¢å¡æ¡£æ¡ ä¿å¯ archive_document_id"}, |
| | | {"name": "æ¥éæç»", "module": "è´¢å¡æ¥é", "table": "finance_reimbursement_item", "doc": "æ¥éåçè´¹ç¨è¡ï¼è´¹ç¨ç±»å(1å·®æ
/2åå
¬/3æå¾
/4交é/5å
¶ä»)ãå票å·ç ãå票éé¢ãåç¥¨æ¥æãå¼ç¥¨æ¹ãè´¹ç¨è¯´æï¼éä¸»è¡¨ä¸æ¬¡æ§æäº¤(å
å åå¢å
¨éè¦ç)ï¼æäº¤æ¶å¿
é¡»å¥æè¡ id ä¸ reimbursementId ââ æç»å 餿¯è½¯å ï¼åä¼ å id ä¼ä¸å·²è½¯å è¡ä¸»é®å²çª", "upstream": ["æ¥éå"], "downstream": [], "keywords": "æ¥éæç» è´¹ç¨æç» è´¹ç¨ç±»å å票éé¢ item æç»è¡ å·®æ
"}, |
| | | {"name": "å
¥ä¼ç³è¯·å", "module": "ä¼å管ç", "table": "ums_application", "doc": "åå· SQ+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼å端çæä¸å¯èªå®ä¹ï¼memberType 1个人/2åä½å³å®å段åå(ä¸ªäººç¨ workUnit/titleï¼åä½ç¨ legalPerson/organizationCode)ï¼memberGrade æç±»ååä¸ååå
¸ï¼status: 0è稿/15审æ¹ä¸/20å·²éè¿/35已驳åãä»
è稿å¯å (è¿å¸¦æ¸
éä»¶)ãè稿ä¸å·²é©³å坿¹å¯éæï¼æäº¤åç± BPM çå¬å¨æç»æåå(åæ¶éåè稿)ï¼å®¡æ¹ä¸åå processInstanceIdï¼å®¡æ¹éè¿è§¦åèªå¨å»ºä¼åä¸ç³»ç»è´¦å·ãç¬ç«æ¨¡åï¼ä¸ä¸å
¶å®ä¸å¡æ¨¡å产çåæ®å
³è", "upstream": ["人工填æ¥(ç³è¯·äºº)", "è¯æææéä»¶(storage_attachment·recordType=ums_application)"], "downstream": ["ä¼å(审æ¹éè¿èªå¨å建)", "BPM æµç¨å®ä¾(ums_membership_approve åç±»)"], "keywords": "å
¥ä¼ç³è¯· å
¥ä¼ ä¼åç³è¯· application SQ ç§ä¹¦å¤ çäºä¼ å®¡æ¹ ä¼åç±»å 个人 åä½ æ³å®ä»£è¡¨äºº ç ç©¶æ¹å ç³è¯·ç级"}, |
| | | {"name": "ä¼å", "module": "ä¼å管ç", "table": "ums_member", "doc": "åå· HY+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼ä¸¤ä¸ªæ¥æºï¼â å
¥ä¼ç³è¯·å®¡æ¹éè¿èªå¨å建(åå¡« applicationId ä¸ userName/ç³»ç»è´¦å·) â¡ä¼åå表æå·¥æ°å¢ãstatus: 1æ£å¸¸/0æåï¼memberGrade æ memberType å对åºåå
¸ï¼æ ¡éªè§åæ¯åä½ä¼å(type=2)ä¸å¯éãçäºé¿ã(grade=5)ãèªå¨å»ºæ¡£æ¶å
¥ä¼æ¥æ=å½å¤©ã䏿¬è¿ contactUser/unitIntro/expireDate(ç³è¯·åæ 对åºå段)ï¼èªå¨å»ºçç³»ç»è´¦å·ç¨æ·å为èç³»çµè¯ä¸åå§å¯ç å为èç³»çµè¯ï¼é¨é¨åºå®ä¸ºãå¦ä¼ä¼åãï¼ææºå·éå¤ä¼æç¡®æ¥é䏿´åäºå¡åæ»", "upstream": ["å
¥ä¼ç³è¯·å(审æ¹éè¿)", "人工æ°å¢", "éä»¶(storage_attachment·recordType=ums_member)"], "downstream": ["ä¼åé讯å½(æ regionCode/industry æ£ç´¢)", "system_users(ç»å½è´¦å·)"], "keywords": "ä¼å member HY ä¼åç¼å· ä¼åç级 ä¼åç±»å éè®¯å½ å°åº è¡ä¸ å
¥ä¼æ¥æ æææ"}, |
| | | {"name": "ä¼å", "module": "ä¼å管ç", "table": "ums_member", "doc": "åå· HY+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼ä¸¤ä¸ªæ¥æºï¼â å
¥ä¼ç³è¯·å®¡æ¹éè¿èªå¨å建(åå¡« applicationId ä¸ userName/ç³»ç»è´¦å·) â¡ä¼åå表æå·¥æ°å¢ãstatus: 1æ£å¸¸/0æåï¼memberGrade æ memberType å对åºåå
¸ï¼æ ¡éªè§åæ¯åä½ä¼å(type=2)ä¸å¯éãçäºé¿ã(grade=5)ãèªå¨å»ºæ¡£æ¶å
¥ä¼æ¥æ=å½å¤©ã䏿¬è¿ contactUser/unitIntro/expireDate(ç³è¯·åæ 对åºå段)ï¼èªå¨å»ºçç³»ç»è´¦å·ç¨æ·å为èç³»çµè¯ä¸åå§å¯ç å为èç³»çµè¯ï¼é¨é¨åºå®ä¸ºãå¦ä¼ä¼åãï¼ææºå·éå¤ä¼æç¡®æ¥é䏿´åäºå¡åæ»ï¼archive_document_id éç©ºè¡¨ç¤ºå·²å½æ¡£ï¼å½æ¡£åå表页éèã彿¡£ãæé®ï¼", "upstream": ["å
¥ä¼ç³è¯·å(审æ¹éè¿)", "人工æ°å¢", "éä»¶(storage_attachment·recordType=ums_member)"], "downstream": ["ä¼åé讯å½(æ regionCode/industry æ£ç´¢)", "æ¡£æ¡ç®¡ç(æå¨ã彿¡£ã·ä»
æ£å¸¸ç¶æå¯å½æ¡£Â·ç» yudao-module-archive-api çææ¡£æ¡å¹¶åå archive_document_id)", "system_users(ç»å½è´¦å·)"], "keywords": "ä¼å member HY ä¼åç¼å· ä¼åç级 ä¼åç±»å éè®¯å½ å°åº è¡ä¸ å
¥ä¼æ¥æ æææ 彿¡£ archive_document_id"}, |
| | | {"name": "è¯¾é¢æå", "module": "课é¢ç®¡ç", "table": "research_guideline", "doc": "æåç¼å· GL+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼category 1éç¹è¯¾é¢/2ä¸è¬è¯¾é¢ï¼publishStatus 0è稿/20å·²åå¸/30å·²æªæ¢ï¼ä»
èç¨¿å¯æ¹å¯å ï¼publish åå¸åå publishTimeï¼close æªæ¢ç½® 30ï¼å·²äº§çç³æ¥å(applicationMapper.selectCountByGuidelineId å¤§äº 0)çæåç¦æ¢å é¤å¹¶å¨æç¤ºä¸æ¥åºè¯¥æåä¸å·²æå¤å°å¼ ç³æ¥åï¼æ£æ content ä¸ºé¿ææ¬ï¼éä»¶ recordType=research_guideline", "upstream": ["人工维æ¤(å¦ä¼ç§ä¹¦å¤)", "æåéä»¶(storage_attachment·recordType=research_guideline)"], "downstream": ["课é¢ç³æ¥ä¹¦(ç³æ¥æ¶å¼ç¨ä¸å¿
须已åå¸å¹¶å¨ç³æ¥æå
)"], "keywords": "è¯¾é¢æå æå åå¸ æªæ¢ éç¹è¯¾é¢ ä¸è¬è¯¾é¢ GL æåç¼å· ç³æ¥æ ç³æ¥èµ·æ¢"}, |
| | | {"name": "课é¢ç³æ¥ä¹¦", "module": "课é¢ç®¡ç", "table": "research_application", "doc": "ç³æ¥ç¼å· SB+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼guidelineId å
³èæåãmemberId å
³è ums_member(软å
³èæ å¤é®ï¼ä¼åå é¤åä¼ç䏿¬ç©º memberId éå®¹éæ¾ç¤º)ï¼applicantName/workUnit/jobTitle/contactPhone/contactEmail ç±éä¼åèªå¨å¸¦åºå¯ææ¹ï¼category åä½èªæåä¸ä¸ä¿¡ä»»åç«¯ä¼ å¼ï¼budgetAmount ç³è¯·ç»è´¹ä¸ºæ¨ä»ä¸éï¼status: 0è稿/15审æ¹ä¸/20å·²ç«é¡¹/35已驳åãä»
è稿å¯å (è¿å¸¦æ¸
éä»¶)ãè稿ä¸å·²é©³å坿¹å¯éæï¼submit åéæ¡æ ¡éªãæåå·²åå¸ãä¸ãç°å¨å¨ç³æ¥æå
ãï¼ä»»ä¸ä¸æ»¡è¶³å³æç»å¹¶æç»´åº¦ç»åºæååä¸å®é
å¼ï¼å®¡æ¹éè¿ç±çå¬å¨çæç«é¡¹ç¼å· researchNo(LX+åæ¥æµæ°´)ä¸ approveTime(å·²æç¼å·å¹çè·³è¿)ï¼reviewAvgScore/reviewPass 为è¯å®¡æ±æ»ååå¼ï¼æç»å ç©ºæ¶æ¸
ææªæ±æ»ï¼noticeId è®°å½å·²åå¸çç«é¡¹éç¥å
¬åï¼éå¤åå¸è¢«æ¦æª", "upstream": ["è¯¾é¢æå(å¿
须已åå¸ä¸å¨ç³æ¥æå
)", "ä¼å(ums_member·带åºç³æ¥äººä¿¡æ¯)", "ç³æ¥éä»¶(storage_attachment·recordType=research_application)"], "downstream": ["ä¸å®¶è¯å®¡æç»", "ç»è´¹æ¨ä»è®°å½", "ç«é¡¹éç¥(system_notice å
¬å)", "BPM æµç¨å®ä¾(research_topic_approve åç±»)", "éä»¶ä¸å¿"], "keywords": "课é¢ç³æ¥ ç³æ¥ä¹¦ ç³æ¥å SB ç³æ¥ç¼å· ç«é¡¹ ç«é¡¹ç¼å· LX ç³è¯·ç»è´¹ ç³æ¥ä¹¦æ£æ 课é¢ç»æå ä¸å®¶è¯å®¡ è¯å®¡æ±æ» ç«é¡¹éç¥ åå¸éç¥ æäº¤å®¡æ¹ 驳å éæ"}, |
| | | {"name": "课é¢ç³æ¥ä¹¦", "module": "课é¢ç®¡ç", "table": "research_application", "doc": "ç³æ¥ç¼å· SB+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼guidelineId å
³èæåãmemberId å
³è ums_member(软å
³èæ å¤é®ï¼ä¼åå é¤åä¼ç䏿¬ç©º memberId éå®¹éæ¾ç¤º)ï¼applicantName/workUnit/jobTitle/contactPhone/contactEmail ç±éä¼åèªå¨å¸¦åºå¯ææ¹ï¼category åä½èªæåä¸ä¸ä¿¡ä»»åç«¯ä¼ å¼ï¼budgetAmount ç³è¯·ç»è´¹ä¸ºæ¨ä»ä¸éï¼status: 0è稿/15审æ¹ä¸/20å·²ç«é¡¹/35已驳åãä»
è稿å¯å (è¿å¸¦æ¸
éä»¶)ãè稿ä¸å·²é©³å坿¹å¯éæï¼submit åéæ¡æ ¡éªãæåå·²åå¸ãä¸ãç°å¨å¨ç³æ¥æå
ãï¼ä»»ä¸ä¸æ»¡è¶³å³æç»å¹¶æç»´åº¦ç»åºæååä¸å®é
å¼ï¼å®¡æ¹éè¿ç±çå¬å¨çæç«é¡¹ç¼å· researchNo(LX+åæ¥æµæ°´)ä¸ approveTime(å·²æç¼å·å¹çè·³è¿)ï¼reviewAvgScore/reviewPass 为è¯å®¡æ±æ»ååå¼ï¼æç»å ç©ºæ¶æ¸
ææªæ±æ»ï¼noticeId è®°å½å·²åå¸çç«é¡¹éç¥å
¬åï¼éå¤åå¸è¢«æ¦æªï¼archive_document_id éç©ºè¡¨ç¤ºå·²å½æ¡£ï¼å½æ¡£åå表页éèã彿¡£ãæé®ï¼", "upstream": ["è¯¾é¢æå(å¿
须已åå¸ä¸å¨ç³æ¥æå
)", "ä¼å(ums_member·带åºç³æ¥äººä¿¡æ¯)", "ç³æ¥éä»¶(storage_attachment·recordType=research_application)"], "downstream": ["ä¸å®¶è¯å®¡æç»", "ç»è´¹æ¨ä»è®°å½", "ç«é¡¹éç¥(system_notice å
¬å)", "BPM æµç¨å®ä¾(research_topic_approve åç±»)", "æ¡£æ¡ç®¡ç(æå¨ã彿¡£ã·ä»
å·²ç«é¡¹å¯å½æ¡£Â·ç» yudao-module-archive-api çææ¡£æ¡å¹¶åå archive_document_id)", "éä»¶ä¸å¿"], "keywords": "课é¢ç³æ¥ ç³æ¥ä¹¦ ç³æ¥å SB ç³æ¥ç¼å· ç«é¡¹ ç«é¡¹ç¼å· LX ç³è¯·ç»è´¹ ç³æ¥ä¹¦æ£æ 课é¢ç»æå ä¸å®¶è¯å®¡ è¯å®¡æ±æ» ç«é¡¹éç¥ åå¸éç¥ æäº¤å®¡æ¹ 驳å éæ å½æ¡£ archive_document_id"}, |
| | | {"name": "ä¸å®¶è¯å®¡æç»", "module": "课é¢ç®¡ç", "table": "research_topic_review", "doc": "ä¸ä½ä¸å®¶ä¸è¡çä¸ä¸»å¤è¡å表ï¼evaluatorName/evaluatorUnit/evaluatorTitle + topicScore éé¢ä»·å¼ä¸æä¹(æé0.3) + planScore ç ç©¶æ¹æ¡å¯è¡æ§(0.3) + teamScore å¢éä¸ç ç©¶åºç¡(0.2) + resultScore 颿ææä¸æç(0.2) + conclusion 1æ¨èç«é¡¹/2䏿¨èç«é¡¹ + opinion è¯å®¡æè§ + reviewTimeãcompositeScore ç±å端 weightedScore 计ç®ãranking ç±å端æå æåéåºéæï¼å䏿¥ååç«¯ä¼ å¼ï¼æ¯æ¬¡å¢å æ¹åè° recalculate åå主å reviewAvgScore(å
¨é¨ä¸å®¶å æååå¼Â·ä¿ç2ä½)ä¸ reviewPass(ååè¾¾æ ä¸ å¤æ°ç»è®ºä¸ºæ¨èç«é¡¹æ¶ä¸º 1)ï¼å项åå¼è¶
åº 0~100 æ¶æç¤ºæåºå
·ä½ç»´åº¦ä¸å®é
å¼ï¼ä»
å¨ç³æ¥å status=15 审æ¹ä¸å¯å¢å æ¹", "upstream": ["课é¢ç³æ¥ä¹¦(ä»
审æ¹ä¸å¯å)"], "downstream": ["课é¢ç³æ¥ä¹¦(åå reviewAvgScore/reviewPass)"], "keywords": "ä¸å®¶è¯å®¡ è¯å®¡æç» è¯å å æ æé æå ranking compositeScore æ¨èç«é¡¹ è¯å®¡æè§ åå"}, |
| | | {"name": "æ¡£æ¡åç±»", "module": "æ¡£æ¡ç®¡ç", "table": "archive_category", "doc": "æ 形书æ¶åç±»(parentId·0=顶级)ï¼æ¿è½½ãåå±ååãè§æ´ï¼6 æ¡åå§åç±» ä¼åæ¡£æ¡ member / è¯¾é¢æ¡£æ¡ research / ä¼è®®æ¡£æ¡ meeting / è´¢å¡æ¡£æ¡ finance / æä¹¦æ¡£æ¡ document / å
å»ºæ¡£æ¡ partyï¼code å
¨å±å¯ä¸ uk_codeï¼defaultSecretLevel 为该åç±»ä¸æ¡£æ¡çé»è®¤å¯çº§(1å
¬å¼/2å
é¨/3ä¿å¯ï¼è´¢å¡åç±»=3)ï¼status 0å¯ç¨/1åç¨ãä»
坿¹å¯å ï¼æååç±»ç¦å ã该åç±»ä¸ææ¡£æ¡ç¦å ãç¶åç±»ä¸è½è®¾ä¸ºèªèº«æå
¶ååç±»ãä¼è®®/å
建档æ¡ç³»ç»å
æ æ¥æºæ¨¡åï¼ä»
æ¯ææå·¥å½å
¥æ¡£æ¡", "upstream": ["人工维æ¤(æ¡£æ¡ç®¡çå)"], "downstream": ["æ¡£æ¡(æ°å¢æ¶å¸¦åºé»è®¤å¯çº§)"], "keywords": "æ¡£æ¡åç±» ä¹¦æ¶ åå±åå ä¼åæ¡£æ¡ è¯¾é¢æ¡£æ¡ ä¼è®®æ¡£æ¡ è´¢å¡æ¡£æ¡ æä¹¦æ¡£æ¡ å
å»ºæ¡£æ¡ category é»è®¤å¯çº§"}, |
| | | {"name": "æ¡£æ¡", "module": "æ¡£æ¡ç®¡ç", "table": "archive_document", "doc": "æ¡£æ¡ä¸»è¡¨ï¼ç¼å· DA+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ãçµåä¸å®ä½å
¼å
·ï¼çµåèµ° system éä»¶ä¸å¿ recordType=archive_document(表å
ä¸åæä»¶å°å)ãå®ä½è®° shelfNo 书æ¶å·/layerNo å±å·/columnNo åå·/boxNo åå·æ¡£æ¡ç + storePlace åæ¾ä½ç½®æè¿°ãcarrierType 1çµå/2å®ä½/3çµå+å®ä½ï¼secretLevel 1å
¬å¼/2å
é¨/3ä¿å¯(为 3 ä¸å½åç¨æ·æ archive:document:sensitive æ¶è¯¦æ
æ¥éãå表ä¸å¯¼åºå¼ºå¶è¿æ»¤)ï¼sourceType 1æå·¥/2课é¢/3ä¼å/4è´¢å¡ + sourceNo/sourceId/sourceTitle è®°å½æ¥æºå¿«ç
§ä»¥ä¾¿æ£ç´¢ï¼status 10å¨åº/20ååºä¸(ååºä¸ç¦æ¹ãå卿ªå½è¿åé
åæ¶ç¦å )ãæ¥æºä¸º 2/3/4 çæ¡£æ¡ç±ä¸æ¹å表页ã彿¡£ãæé®ç» ArchiveDocumentApi.archiveBySource çæ(å¹ç)ï¼å¹¶å忥æºè¡¨ archive_document_id", "upstream": ["æ¡£æ¡åç±»", "æ¡£æ¡ç»è®°(人工)", "课é¢å½æ¡£(å·²ç«é¡¹ç³æ¥ä¹¦)", "ä¼å彿¡£(æ£å¸¸ä¼å)", "è´¢å¡å½æ¡£(å·²éè¿æ¥éå)"], "downstream": ["åé
å", "éä»¶ä¸å¿(recordType=archive_document)", "æ¥æºè¡¨ archive_document_id åå"], "keywords": "æ¡£æ¡ ææ¡£ document DA æ¡£æ¡ç¼å· å¯çº§ ä¿å¯ å
¬å¼ å
é¨ æææ¡£æ¡ è½½ä½ çµå å®ä½ 书æ¶å· å±å· åå· åå· æ¡£æ¡ç 彿¡£æ¥æ å¨åº ååºä¸ æ£ç´¢ å
³é®è¯ tags æ¥æºåå· å½æ¡£èå¨"}, |
| | | {"name": "åé
å", "module": "æ¡£æ¡ç®¡ç", "table": "archive_borrow", "doc": "åé
ä¸å½è¿åä¸ï¼ç¼å· JY+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ãè®°å½åé
人/é¨é¨/çµè¯ãåé
æ¥æãåé
ç®çãå½è¿æé(returnDeadlineÂ·é¾æå®æ¶è®¡ç®åºå)ï¼documentNo/documentTitle 为档æ¡å¿«ç
§ãstatus 0è稿/15审æ¹ä¸/20ååºä¸/30å·²å½è¿/35已驳åï¼ä»
0 ä¸ 35 坿¹å¯éæãä»
0 å¯å ãä»
20 å¯ç»è®°å½è¿ãsubmit åæ ¡éªå䏿¡£æ¡ä¸å¾å·²æ 15/20 çåé
å(å½ä¸æ¥å·²åç¨å¹¶å¸¦æ¡£æ¡åä¸å·²åå¨åé
åå·)ï¼æµç¨ key archive_borrow_approve 两级(æ¡£æ¡ç®¡çåå®¡æ ¸âå管é¢å¯¼å®¡æ¹)ï¼å端ä¸åæ» keyã审æ¹éè¿ç± ArchiveBorrowStatusListener åå 20+approveTime å¹¶æ¡ä»¶æ´æ°æ¡£æ¡ SET status=20 WHERE status=10(å½±å 0 è¡æ¥æ¡£æ¡å·²è¢«å ç¨å¹¶åæ»)ï¼å½è¿ç»è®°æ¡ä»¶æ´æ° 20â30 å¹¶åå returnTime/å½è¿ç¡®è®¤äººã龿ä¸è½åºï¼æ¥è¯¢æ¶å®æ¶ç® overdueDays å¹¶å¨å表渲æçº¢è²ã龿 N 天ãï¼å¦æ /overdue-page ç¬ç«å
¥å£", "upstream": ["æ¡£æ¡(ä»
å¨åº 10 å¯é)", "BPM(æµç¨ archive_borrow_approve)", "人工ç»è®°"], "downstream": ["æ¡£æ¡(ç¶æ 20 ååºä¸ / å½è¿å 10 å¨åº)"], "keywords": "åé
åé
å åé
ç»è®° å½è¿ å½è¿ç»è®° 龿 龿æªè¿ åé
人 åé
ç®ç å½è¿æé JY åé
åå· æ¡£æ¡ç®¡çåå®¡æ ¸ å管é¢å¯¼å®¡æ¹ æµè½¬éç¯"}, |
| | | {"name": "ç»è´¹æ¨ä»è®°å½", "module": "课é¢ç®¡ç", "table": "research_fund_record", "doc": "ä¸ä¸»å¤è¡çæ¨æ¬¾å°è´¦ï¼batchName æ¹æ¬¡åç§°/amount æ¨ä»éé¢/payDate æ¨ä»æ¥æ/payee æ¶æ¬¾åä½/remarkï¼åè¯éä»¶èµ° system éä»¶ä¸å¿ recordType=research_fund_record(表å
ä¸åæä»¶å°å)ãstatus: 0å¾
æ¨ä»/15æ¥é审æ¹ä¸/20å·²æ¨ä»/30已驳åï¼ç±ç³»ç»ä¸ BPM 驱å¨ï¼æ°å¢/ä¿®æ¹æ¥å£å·²ç§»é¤ status å
¥å(é²ä¼ªé ãå·²æ¨ä»ã)ãç»è®°å³ä¸æ¡é¾ï¼è½å°è´¦ â å䏿¹ blob åç» â ç» FinanceReimbursementApi èªå¨çæ 1:1 ç finance_reimbursement å¹¶ç«å³æäº¤ BPM â åå reimbursement_id/reimbursement_no å¹¶ç½® 15ï¼å®¡æ¹ç»æç±çå¬å¨ååï¼éè¿â20ã驳åâ30(+reject_reason/reject_time)ãåæ¶æµç¨âéå 0ï¼å起人æ¤ååªéååèµ·èç¹ãæµç¨æªç»æï¼ç¶æä¸åï¼ãä»
ç³æ¥å status=20 å·²ç«é¡¹å¯ç»è®°ï¼åè¯å¿
å¡«ï¼é颿 ¡éªï¼å·²ç»è®°éé¢(该åå
¨é¨è®°å½æ±å) + æ¬æ¬¡éé¢ ä¸å¾è¶
åºç³æ¥å budgetAmountï¼è¶
åºæ¶æç¤ºæ¥åºæ¬æ¬¡ãå·²ç»è®°ãå计ãé¢ç®å项æ°å¼ï¼ä»
ãå¾
æ¨ä»ãå¯å (èå¨å é¤è´¢å¡ä¾§è稿æ¥éåï¼éè稿åæç»)ï¼ãå¾
æ¨ä»ãã已驳åã坿¹å¹¶éæ°åèµ·æ¥é(已驳忹忏
空 reject_reason/reject_time)ï¼ç¼è¾æ¶ææ¬è¡éé¢å åå¯ç¨ä½é¢å±ç¤ºé¿å
误解ã䏿¥éå为软å
³è(æ å¤é®)ï¼è´¢å¡ä¾§ç´æ¥å åä¼ç䏿¬ç©º reimbursement_idï¼æ¤æ¶ä¿®æ¹æ¥ãæ¥éåå·²ä¸åå¨ï¼è¯·å 餿¬æ¡è®°å½åéæ°ç»è®°ã", "upstream": ["课é¢ç³æ¥ä¹¦(å¿
须已ç«é¡¹)", "è´¢å¡æ¥éå(1:1 èªå¨çæÂ·è½¯å
³è reimbursement_id)"], "downstream": ["æ¨ä»åè¯(storage_attachment·recordType=research_fund_record)", "è´¢å¡æ¥éå(çæå¹¶æäº¤åºè´¦Â·å®¡æ¹ç»æå忬å°è´¦)"], "keywords": "ç»è´¹æ¨ä» æ¨æ¬¾ æ¨ä»è®°å½ æ¹æ¬¡ æ¨ä»éé¢ åè¯ å¾
æ¨ä» æ¥é审æ¹ä¸ å·²æ¨ä» 已驳å 驳ååå è´¢å¡æ¥éåå· reimbursement_id æ¶æ¬¾åä½ èµå©éé¢ é¢ç® è¶
é¢ éæ°åèµ·æ¥é"} |
| | | ] |
| | | } |
| | |
| | | {"role": "å
¥ä¼ç³è¯·äºº/ä¼å管çå", "modules": ["UMS"], "operations": ["å¡«æ¥ä¸ä¿®æ¹å
¥ä¼ç³è¯·(个人/åä½)", "ä¸ä¼ è¯æææéä»¶", "æäº¤ BPM 审æ¹", "ä¼åå表维æ¤ä¸ä¼åéè®¯å½æ£ç´¢"], "data": ["ums_application", "ums_member"], "scope": "æéç ums:application:create/update/delete/submit · ums:member:create/update/delete/query · ums:member:directoryï¼æ æ°æ®æéé离(å
¨å坿¥é讯å½ï¼ç»´æ¤ç±»æé®å¦åæéç )"}, |
| | | {"role": "ç§ä¹¦å¤/çäºä¼(审æ¹äºº)", "modules": ["UMS", "BPM"], "operations": ["å
¥ä¼ç³è¯·ä¸¤çº§å®¡æ¹ï¼ç§ä¹¦å¤å审 â çäºä¼å®¡è®®"], "data": ["ums_application(ç¶æåå)", "bpm_task"], "scope": "审æ¹äººç± BPM æµç¨å®ä¹é
ç½®ï¼å端ä¸åæ»ï¼éè¿åç³»ç»èªå¨å»ºä¼åä¸ç»å½è´¦å·"}, |
| | | {"role": "课é¢ç³æ¥äºº/课é¢ç®¡çå", "modules": ["RES"], "operations": ["è¯¾é¢æååå¸ä¸æªæ¢(课é¢ç®¡çå)", "æ°å»ºä¸ä¿®æ¹è¯¾é¢ç³æ¥ä¹¦(éä¼å带åºç³æ¥äººä¿¡æ¯ãä¸ä¼ ç³æ¥éä»¶)", "æäº¤ BPM 审æ¹ã驳ååä¿®æ¹éæ", "æ¯æ/æ¯æ¹æ¬¡ç»è®°ç»è´¹æ¨ä»è®°å½ä¸åè¯", "åå¸ç«é¡¹éç¥"], "data": ["research_guideline", "research_application", "research_topic_review", "research_fund_record"], "scope": "æéç research:guideline:create/update/delete/publish · research:application:create/update/delete/submit/notice · research:review:create/update/delete · research:fund:create/update/deleteï¼æ æ°æ®æéé离(åè¡¨ä¸æç³è¯·äººè¿æ»¤)ï¼æé®åæéç æ§å¶"}, |
| | | {"role": "æ¡£æ¡ç®¡çå", "modules": ["ARC"], "operations": ["æ¡£æ¡åç±»(书æ¶)ç»´æ¤ï¼åå±å»ºç±»ã设é»è®¤å¯çº§ãå¯ç¨åç¨", "æ¡£æ¡ç»è®°ä¸å¤æ¡ä»¶æ£ç´¢/导åºï¼çµåéä»¶ + å®ä½ä½ç½®ååæ®µãå¯çº§ä¸æ¡£ï¼", "åé
ç»è®°ãæäº¤å®¡æ¹", "å½è¿ç»è®°ä¸å½è¿å¤æ³¨", "æ¥çæ¡£æ¡ç»è®¡ï¼åé䏿µè½¬ï¼"], "data": ["archive_category", "archive_document", "archive_borrow"], "scope": "æéç archive:category:create/update/delete/query · archive:document:create/update/delete/query/export · archive:borrow:create/update/delete/query/submit/return · archive:stat:queryï¼å¯çº§=ä¿å¯(3) çæ¡£æ¡å¦é archive:document:sensitive æè½æ¥çï¼æ 该æéæ¶å表ä¸å¯¼åºå¼ºå¶è¿æ»¤ï¼æ æ°æ®æéé离(åè¡¨ä¸æäººè¿æ»¤)ï¼æé®åæéç æ§å¶"}, |
| | | {"role": "åé
人", "modules": ["ARC"], "operations": ["ç»è®°åé
åï¼éå¨åºæ¡£æ¡ãå¡«åé
人信æ¯/åé
æ¥æ/åé
ç®ç/å½è¿æéï¼", "æäº¤ BPM åé
审æ¹", "æ¥çåé
è¿åº¦ï¼è·³ BPM æµç¨å®ä¾è¯¦æ
ï¼"], "data": ["archive_borrow", "archive_document(ä»
å¨åº 10 å¯é)"], "scope": "æéç archive:borrow:create/query/submitï¼ä»
è稿(0)ä¸å·²é©³å(35)坿¹å¯éæãä»
è稿å¯å ï¼å䏿¡£æ¡ä¸å¾åæ¶åå¨å®¡æ¹ä¸(15)æååºä¸(20)çåé
å"}, |
| | | {"role": "æ¡£æ¡ç®¡çå/å管é¢å¯¼(åé
审æ¹äºº)", "modules": ["ARC", "BPM"], "operations": ["åé
审æ¹ä¸¤çº§ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹", "å¨å®¡æ¹ä¸å¿éè¿èªå®ä¹è¡¨ååªè¯»æ¥çåé
å䏿¡£æ¡ä¿¡æ¯"], "data": ["archive_borrow(ç¶æåå)", "archive_document(ç¶æé审æ¹ç»ææ¡ä»¶æ´æ°)", "bpm_task"], "scope": "审æ¹äººä¸å®¡æ¹æ¹æ³å¨ BPM æµç¨å®ä¹ archive_borrow_approve å
é
ç½®(é»è®¤ä¾æ¬¡å®¡æ¹Â·è§è²å
åº)ï¼å端ä¸åæ»å®¡æ¹äººï¼é¨ç½²åç±ç®¡çå卿µç¨è®¾è®¡å¨æå®é
ç»ç»è°æ´"}, |
| | | {"role": "彿¡£ç»å人(课é¢/ä¼å/è´¢å¡)", "modules": ["ARC", "RES", "UMS", "FIN"], "operations": ["å¨è¯¾é¢ç³æ¥ä¹¦å表对ãå·²ç«é¡¹ãåæ®ç¹ã彿¡£ã", "å¨ä¼ååè¡¨å¯¹ãæ£å¸¸ãä¼åç¹ã彿¡£ã", "卿¥éåå表对ãå·²éè¿ãåæ®ç¹ã彿¡£ã(ä¸å
¶æ¢æ 20â40 彿¡£åäºå¡å å )"], "data": ["archive_document(çæ)", "research_application / ums_member / finance_reimbursement(åå archive_document_id)"], "scope": "æéç research:application:archive · ums:member:archive · finance:reimbursement:archiveï¼è°ç¨ yudao-module-archive-api ç archiveBySource å¹ççææ¡£æ¡ï¼éå¤ç¹å»ç±æ¥æºä¾§æéè¯¯ç æ¦æªå¹¶ç»åºå·²çææ¡£æ¡ç¼å·"}, |
| | | {"role": "è¯å®¡ä¸å®¶/å¦ä¼ç§ä¹¦å¤Â·çäºä¼(课é¢å®¡æ¹äºº)", "modules": ["RES", "BPM"], "operations": ["å¨å®¡æ¹ä¸(15)å½å
¥æ¬äººçä¸å®¶è¯åæç»(å项åå¼ + ç»è®º + æè§)", "ç§ä¹¦å¤å½¢å¼å®¡æ¥ â ä¸å®¶è¯å®¡ â å¦ä¼ç«é¡¹å®¡æ¹ ä¸èç¹é¡ºåºå®¡æ¹", "å¨å®¡æ¹ä¸å¿éè¿èªå®ä¹è¡¨ååªè¯»æ¥çç³æ¥ä¹¦æ£æãè¯å®¡æç»ä¸æ¨ä»è®°å½"], "data": ["research_topic_review", "research_application(ç¶æåå)", "bpm_task"], "scope": "è¯åå½å
¥è¦æ±ç³æ¥åå¤äºå®¡æ¹ä¸(15)·ç±è¯¾é¢ç®¡çåæä¸å®¶ä¾æ® research:review:* æéç æ§è¡ï¼å®¡æ¹äººä¸å®¡æ¹æ¹æ³å¨ BPM æµç¨å®ä¹ research_topic_approve å
é
ç½®(é»è®¤ä¾æ¬¡å®¡æ¹Â·è§è²å
åº)ï¼å端ä¸åæ»å®¡æ¹äººï¼é¨ç½²åç±ç®¡çå卿µç¨è®¾è®¡å¨æå¦ä¼å®é
ç»ç»è°æ´"} |
| | | ] |
| | | } |
| | |
| | | --line:#24344f; --text:#dbe4f0; --muted:#8fa1b8; |
| | | --c-base:#8a94a6; --c-sale:#4f9cff; --c-sup:#c9a86a; --c-erp:#5fc79e; |
| | | --c-prod:#e0b34f; --c-wm:#7e6bd6; --c-qc:#e06c6c; --c-dv:#59a8b8; |
| | | --c-as:#c78bd6; --c-hrm:#9db85a; --c-bpm:#e6a23c; --c-ai:#56c8d8; --c-fin:#3ec9a7; --c-ums:#d6955c; --c-res:#e070a8; |
| | | --c-as:#c78bd6; --c-hrm:#9db85a; --c-bpm:#e6a23c; --c-ai:#56c8d8; --c-fin:#3ec9a7; --c-ums:#d6955c; --c-res:#e070a8; --c-arch:#7fb3d5; |
| | | } |
| | | *{box-sizing:border-box;margin:0;padding:0} |
| | | html,body{height:100%} |
| | |
| | | <a data-t="flow-finance"><span class="dot" style="background:var(--c-fin)"></span>è´¢å¡æ¥éæµç¨</a> |
| | | <a data-t="flow-ums"><span class="dot" style="background:var(--c-ums)"></span>ä¼åå
¥ä¼æµç¨</a> |
| | | <a data-t="flow-research"><span class="dot" style="background:var(--c-res)"></span>课é¢ç®¡çæµç¨</a> |
| | | <a data-t="flow-archive"><span class="dot" style="background:var(--c-arch)"></span>æ¡£æ¡ç®¡çæµç¨</a> |
| | | <div class="group">ç»æä¸æ°æ®</div> |
| | | <a data-t="relation"><span class="dot" style="background:var(--c-bpm)"></span>ç³»ç»å
³ç³»</a> |
| | | <a data-t="dataflow"><span class="dot" style="background:var(--c-fin)"></span>æ°æ®æµ</a> |
| | |
| | | <section class="page" id="flow-finance"></section> |
| | | <section class="page" id="flow-ums"></section> |
| | | <section class="page" id="flow-research"></section> |
| | | <section class="page" id="flow-archive"></section> |
| | | <section class="page" id="relation"> |
| | | <h2 class="pt">ç³»ç»å
³ç³»</h2> |
| | | <p class="desc">模åä¹é´çè°ç¨ä¸æ°æ®ä¾èµï¼å®çº¿=åæ®/æ°æ®æµåï¼è线=审æ¹åè°ä¸è¾
å©è½åã</p> |
| | |
| | | "FINï¼å票æ¥éï¼ç¬ç«æ¨¡åï¼", |
| | | "UMSï¼å¦ä¼ä¼åï¼ç¬ç«æ¨¡åï¼", |
| | | "RESï¼ç§ç 课é¢ï¼ç¬ç«æ¨¡åï¼", |
| | | "ARCï¼æ¡£æ¡ç®¡çï¼ç¬ç«æ¨¡åï¼", |
| | | "CRMï¼å®¢æ·å
³ç³»ï¼", |
| | | "SRMï¼ä¾åºåå
³ç³»ï¼", |
| | | "HRMï¼äººåèµæºï¼", |
| | |
| | | "businessPositioning": "让工åç订åãç©æãç产ãåºåãè´¨éã人åãèµéå¨ä¸ä¸ªç³»ç»å
éç¯æµè½¬ï¼ç®¡çå±å¯éè¿ BI 大屿æ¡å
¨å±ã", |
| | | "coreChain": "CRM åæº/åå â ERP éå®è®¢å â MES 主ç产计å/å·¥å/æ¥å·¥ â MES è´¨æ£ä¸ä»å¨ â éå®åºåºåè´§ â å¼ç¥¨å款 â å®åéç¯", |
| | | "techBase": "Spring Boot + MyBatis + Flowable + Redis + Quartz/RocketMQ/Kafka + Milvus åéåº + éä¹åé®", |
| | | "database": "MySQL 8.4ï¼è¿è¡åº mom-jssm å
± 427 å¼ è¡¨ï¼å« system_*ãbpm_*ãact_* åºåº§è¡¨ä¸ mes_*/erp_*/crm_*/srm_*/hrm_*/mdm_*/ai_*/finance_*/ums_*/research_* ä¸å¡è¡¨ï¼ï¼å¤ç§æ·å·²å
³é", |
| | | "database": "MySQL 8.4ï¼è¿è¡åº mom-jssm å
± 430 å¼ è¡¨ï¼å« system_*ãbpm_*ãact_* åºåº§è¡¨ä¸ mes_*/erp_*/crm_*/srm_*/hrm_*/mdm_*/ai_*/finance_*/ums_*/research_*/archive_* ä¸å¡è¡¨ï¼ï¼å¤ç§æ·å·²å
³é", |
| | | "frontend": "mom-pro2-beforeï¼Vue3 管çåå°ï¼åä»åºåæ¾ï¼åªè¯»åèï¼" |
| | | }, |
| | | "stats": { |
| | | "businessModules": 16, |
| | | "coreObjects": 56, |
| | | "documentFlows": 9, |
| | | "approvalListeners": 15, |
| | | "businessModules": 17, |
| | | "coreObjects": 59, |
| | | "documentFlows": 10, |
| | | "approvalListeners": 24, |
| | | "aiCapabilities": 8, |
| | | "wmBillTypes": 15 |
| | | }, |
| | |
| | | "课é¢ç®¡çï¼ç»è´¹æ¨ä»å°è´¦çãå·²æ¨ä»(20)ãçä»·äºæ¥éåãå·²éè¿(20)ãï¼ä¸å«åºçº³å®é
仿¬¾å¨ä½ï¼è¥æ¥åéè¦ç¬ç«çã已仿¬¾ãç¶æï¼éå¦å¢ç¶æä¸å®¡æ¹èç¹ãäºæå¯æ©å±ã", |
| | | "课é¢ç®¡çï¼ç³æ¥åä¸ ums_member æ¯è½¯å
³èï¼æ å¤é®ï¼ï¼ä¼å被å é¤åç³æ¥åä¼ç䏿¬ç©º memberIdï¼æåå表é容éå±ç¤ºãä¼åå·²å é¤ããå¾
确认æ¯å¦å å¤é®æå é¤ä¿æ¤ã", |
| | | "课é¢ç®¡çï¼BPM æµç¨ research_topic_approve ä¸èç¹é»è®¤å®¡æ¹äººä¸ºãè§è²=è¶
级管çå(1) + 便¬¡å®¡æ¹ãï¼è¯¥ dev åºè¶
级管çåè§è²ä¸æ 4 ä¸ªç¨æ·ï¼admin/å¼ å¨/马è³/马è´ï¼ï¼æ¯ä¸ªèç¹é 4 人ä¼ç¾ææ¨è¿ï¼å
¨æ°å®è£
åºè¯¥è§è²ä»
admin ä¸äººãæµç¨å¯å¼ç®±å³ç¨ãdev åºéåå°è¶
级管çåç¨æ·ææ¹å¨ BPM 设计å¨ä¸ä¸ºæ¯èç¹æå®å®¡æ¹äººãç¯å¢é
置项ï¼é代ç 缺é·ã", |
| | | "课é¢ç®¡çï¼ç«é¡¹éç¥å¤ç¨ system_notice ç³»ç»å
¬åï¼ä¸æ°å¢ system_notify_templateãä¸åç«å
ä¿¡ï¼å¦éçä¿¡/ç«å
ä¿¡å®åéç¥éå¦è¡é
ç½®ãå¾
确认éç¥æ¸ éã" |
| | | "课é¢ç®¡çï¼ç«é¡¹éç¥å¤ç¨ system_notice ç³»ç»å
¬åï¼ä¸æ°å¢ system_notify_templateãä¸åç«å
ä¿¡ï¼å¦éçä¿¡/ç«å
ä¿¡å®åéç¥éå¦è¡é
ç½®ãå¾
确认éç¥æ¸ éã", |
| | | "æ¡£æ¡ç®¡çï¼æ¡£æ¡åé
BPM æµç¨ archive_borrow_approve 为æå·¥å¯¼åºé¨ç½²äº§ç©ï¼_archive_bpm_export.sql å
act_*/bpm 表ç UUID 䏿¶é´æ³åªè½å¨é¨ç½²æ¶çæï¼æ æ³é¢åï¼ï¼å¿
é¡»å
å¨ BPM 模åé¨ç½²å导åºååå¹¶è¿ config_export_all é¶æ®µä¸ï¼é¡ºåºéä¼å¯¼è´æ°åºåå§åæ¶è¯¥æµç¨ç¼ºå¤±ãé¨ç½²é¡ºåºç¡¬çº¦æï¼å·²å¨æä»¶å¤´ä¸ README åéæ æ³¨ã", |
| | | "æ¡£æ¡ç®¡çï¼èå 1075600~1075699 ä¸å archive:* æéç¹ä»
å¨å½æ¡£èæ¬ä¸ï¼æ®éè§è²æªé
system_role_menuï¼éè¶
管ç»å½çä¸å°ãæ¡£æ¡ç®¡çãç®å½ãå¾
确认æ¯å¦è¡¥ææï¼ä¸è´¢å¡æ¥é/ä¼å管çåç±»é®é¢ã", |
| | | "æ¡£æ¡ç®¡çï¼æ¡£æ¡ä¸æ¥æºåæ®ï¼è¯¾é¢ç³æ¥ä¹¦/ä¼å/æ¥éåï¼ä¸ºè½¯å
³èï¼æ¥æºåæ®è¢«å é¤åæ¡£æ¡ç source_id/source_no ä¼æä¸ºæ¬ç©ºå¿«ç
§ï¼æ¡£æ¡æ¬èº«ä¸éæ¥æºåæ®å é¤èå é¤ãå¾
确认æ¯å¦éè¦å é¤ä¿æ¤æå¤é®ã", |
| | | "æ¡£æ¡ç®¡çï¼éæ±ä¸çãå¦ä¼æä»¶ãä¼è®®çºªè¦ãè°ç æ¥åã妿¯è®ºæãåååè®®ãççµåææ¡£ç±ãæä¹¦æ¡£æ¡ãåç±»æ¿è½½ï¼ç³»ç»å
æ å¯¹åºæ¥æºæ¨¡åï¼ä»
æ¯ææå·¥å½å
¥å¹¶æçµåéä»¶ï¼ååæ¡£æ¡æªçº³å
¥èªå¨å½æ¡£ï¼ç¨æ·æç¡®æé¤ï¼ã已确认çè¾¹çã", |
| | | "æ¡£æ¡ç®¡çï¼é¾ææéæç¨æ·å³çä»
æ¥è¯¢æ¶å®æ¶è®¡ç®ï¼ä¸å»º infra_jobãä¸åç«å
ä¿¡ï¼ï¼åé
å表ã龿ãåä¸ /overdue-page ç¬ç«å
¥å£åç°ï¼è¥æ¥åéè¦å°æä¸»å¨æ¨éï¼éå¦å 宿¶ä»»å¡ä¸éç¥æ¸ éãç¨æ·å·²ç¡®è®¤çç®åï¼äºæå¯æ©å±ã", |
| | | "æ¡£æ¡ç®¡çï¼ãå䏿¡£æ¡ä»
å
è®¸ä¸æ¡æªå½è¿åé
åãç±åºç¨å± submit æ ¡éª + 审æ¹éè¿æ¶æ¡ä»¶æ´æ°ï¼UPDATE ... WHERE status=10ï¼å
±åä¿è¯ï¼MySQL æ æ³å¯¹ãé¨åç¶æå¯ä¸ã建约æï¼æ ¡éªä¸æ´æ°ä¹é´çç论çªå£å·²æ¶æä¸ºå¯æç¥çå²çªæ¥éï¼æ¡£æ¡å·²è¢«å ç¨ï¼èéèæ°æ®ãå·²æ¥åçé£é©ã", |
| | | "æ¡£æ¡ç®¡çï¼æ¡£æ¡ç»è®¡æåç±»/å¯çº§/è½½ä½ä¸ç» GROUP BY èåï¼æ N+1ï¼ï¼å½åéçº§å¯æ¥åï¼æ¡£æ¡è¿ä¸åéæ¹ä¸ºç¼åæç©åç»è®¡è¡¨ãæ¬æä¸åã", |
| | | "æ¡£æ¡ç®¡çï¼è·¨æ¨¡åæ¹è¡¨ââresearch_application / ums_member / finance_reimbursement åæ°å¢å¯ç©ºå archive_document_idï¼archive_module_migration.sql ç¨ information_schema å®å«ä¿è¯å¹çï¼ï¼éä¸ä¸æ¹æ¨¡åç¡®è®¤åæ´çªå£ãè·¨æ¨¡åæ¹è¡¨ï¼æ ç ´åæ§ã" |
| | | ], |
| | | "generatedAt": "2026-09-29", |
| | | "analysisBasis": "åºäº dev_business 忝 87bf4a99 æºç ï¼6 ç»å¹¶è¡æºç 走读ï¼MES ç产质é / MES ä»å¨ / ERP / CRM+SRM / å®å+HRM / AI+BI+MDM+BPM+åºåº§ï¼ï¼2026-09-28 å¢éè¡¥å
yudao-module-finance ç¬ç«è´¢å¡æ¥é模åï¼æ¥éå + æç» + å票éä»¶ + BPM å®¡æ¹ + 彿¡£ï¼ä¸ yudao-module-ums ç¬ç«ä¼åç®¡çæ¨¡åï¼å
¥ä¼ç³è¯· + BPM ä¸¤çº§å®¡æ¹ + 审æ¹éè¿èªå¨å»ºä¼åä¸ç»å½è´¦å· + ä¼åå表/é讯å½ï¼ï¼2026-09-28 å¢éï¼BPM æµç¨å®ä¹ ums_membership_approveï¼å
¥ä¼å®¡æ¹ï¼å·²å¨ mom-jssm é¨ç½²å¹¶å¹¶å
¥ config_export_all é¶æ®µä¸ï¼åç±» ums_membership_approveï¼ç§ä¹¦å¤å审 â çäºä¼å®¡è®®ï¼ä¸¤èç¹å®¡æ¹äººå为ãè§è²ãçç¥ãè§è²=è¶
级管çå(1) å
åºï¼è¡¨åç±»å=èªå®ä¹è¡¨åï¼æ¥çè·¯å¾ /ums/application/detail/approve/index.vueï¼ï¼åæ¶ä¿®å¤ mom-jssm ç± CREATE TABLE ... LIKE å
é导è´ç 47 个æå ruoyi-vue-pro ç act_*/flw_* è·¨åºå¤é®ï¼é建为æå mom-jssm èªèº«ï¼å¤å¿è¡é¢æ£ä¸º 0ï¼ï¼2026-09-28 å¢éï¼æ°å¢ yudao-module-research ç¬ç«ç§ç è¯¾é¢æ¨¡å䏿ï¼è¯¾é¢æååå¸ + å¨çº¿ç³æ¥ + ä¸å®¶è¯å®¡æç» + BPM ä¸çº§ç«é¡¹å®¡æ¹ + ç«é¡¹éç¥å
¬å + ç»è´¹æ¨ä»è®°å½ï¼4 å¼ research_* 表 / 5 个åå
¸ / bpm_category id=8002 / æµç¨ research_topic_approve / èå 1075510~1075553ï¼ï¼å¹¶å¹¶å
¥ config_export_all_20260928 é¶æ®µä¸ï¼ç³æ¥äººå ums_memberï¼è½¯å
³èï¼ãç«é¡¹éç¥å¤ç¨ system_notice å
¬åãæ¨æ¬¾åè¯èµ° system éä»¶ä¸å¿ recordType=research_fund_recordï¼2026-09-29 å¢éï¼è¯¾é¢ç»è´¹æ¨ä»å¯¹æ¥è´¢å¡æ¥éââæ°å»º yudao-module-finance-apiï¼FinanceReimbursementApiï¼å»ºå+æäº¤/æ¹å+éæ/å é¤/æ¥è¯¢åæ¹æ³ï¼æ¬å° Spring Bean è°ç¨ï¼æ é Feignï¼ï¼è¯¾é¢ä¾§ç»è®°æ¨æ¬¾æ¶ 1:1 èªå¨çæ finance_reimbursementï¼ç³»ç»çæ 1 è¡æç»ï¼è´¹ç¨ç±»å=å
¶ä» 5ãå票éé¢=æ¨ä»éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æã说æ=ã课é¢ãåã第 N ææ¨æ¬¾ãï¼å¹¶ç«å³æäº¤ BPMï¼åå reimbursement_id/reimbursement_noãå°è´¦ç½®ãæ¥é审æ¹ä¸(15)ãï¼åè¯æ¹ä¸ºç»è®°æ¶å¿
å¡«å¹¶åç»ï¼research_fund_record + finance_reimbursementï¼ï¼æ°å¢ ResearchFundStatusListenerï¼ç¬¬ 15 个ä¸å¡çå¬å¨ï¼ä¸ finance èªå·±ç FinanceReimbursementStatusListener 订é
å䏿µç¨ key å¹¶è¡è§¦åï¼æå®¡æ¹ç»æååå°è´¦ï¼éè¿âå·²æ¨ä»(20)ã驳åâ已驳å(30)+驳ååå /æ¶é´ãåæ¶æµç¨âéåå¾
æ¨ä»(0)坿¹åå¯éæ°åèµ·ï¼å起人æ¤ååªæå®ä¾éååèµ·èç¹ãæµç¨æªç»æï¼ä¸è§¦åååï¼å°è´¦ä¿æ 15ï¼ï¼æ°é 2 èç¹ BPMN docs/sql/finance_reimbursement_approve.bpmnï¼è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼category id=216 å·²åå¨ï¼ï¼2026-09-29 å·²å¨ mom-jssm é¨ç½²ä¸ºçæ¬ 1ï¼form_type=20ãèªå®ä¹è¡¨ååå»ºè·¯å¾ /finance/reimbursement/indexãæ¥çè·¯å¾ /finance/reimbursement/detail/approve/index.vueï¼å¹¶å¹¶å
¥ config_export_all_20260929 é¶æ®µä¸ï¼ä¸¤çº§å®¡æ¹å
¨éè¿/驳å/忶䏿¡ååé¾è·¯å已端å°ç«¯éªè¯" |
| | | "analysisBasis": "åºäº dev_business 忝 87bf4a99 æºç ï¼6 ç»å¹¶è¡æºç 走读ï¼MES ç产质é / MES ä»å¨ / ERP / CRM+SRM / å®å+HRM / AI+BI+MDM+BPM+åºåº§ï¼ï¼2026-09-28 å¢éè¡¥å
yudao-module-finance ç¬ç«è´¢å¡æ¥é模åï¼æ¥éå + æç» + å票éä»¶ + BPM å®¡æ¹ + 彿¡£ï¼ä¸ yudao-module-ums ç¬ç«ä¼åç®¡çæ¨¡åï¼å
¥ä¼ç³è¯· + BPM ä¸¤çº§å®¡æ¹ + 审æ¹éè¿èªå¨å»ºä¼åä¸ç»å½è´¦å· + ä¼åå表/é讯å½ï¼ï¼2026-09-28 å¢éï¼BPM æµç¨å®ä¹ ums_membership_approveï¼å
¥ä¼å®¡æ¹ï¼å·²å¨ mom-jssm é¨ç½²å¹¶å¹¶å
¥ config_export_all é¶æ®µä¸ï¼åç±» ums_membership_approveï¼ç§ä¹¦å¤å审 â çäºä¼å®¡è®®ï¼ä¸¤èç¹å®¡æ¹äººå为ãè§è²ãçç¥ãè§è²=è¶
级管çå(1) å
åºï¼è¡¨åç±»å=èªå®ä¹è¡¨åï¼æ¥çè·¯å¾ /ums/application/detail/approve/index.vueï¼ï¼åæ¶ä¿®å¤ mom-jssm ç± CREATE TABLE ... LIKE å
é导è´ç 47 个æå ruoyi-vue-pro ç act_*/flw_* è·¨åºå¤é®ï¼é建为æå mom-jssm èªèº«ï¼å¤å¿è¡é¢æ£ä¸º 0ï¼ï¼2026-09-28 å¢éï¼æ°å¢ yudao-module-research ç¬ç«ç§ç è¯¾é¢æ¨¡å䏿ï¼è¯¾é¢æååå¸ + å¨çº¿ç³æ¥ + ä¸å®¶è¯å®¡æç» + BPM ä¸çº§ç«é¡¹å®¡æ¹ + ç«é¡¹éç¥å
¬å + ç»è´¹æ¨ä»è®°å½ï¼4 å¼ research_* 表 / 5 个åå
¸ / bpm_category id=8002 / æµç¨ research_topic_approve / èå 1075510~1075553ï¼ï¼å¹¶å¹¶å
¥ config_export_all_20260928 é¶æ®µä¸ï¼ç³æ¥äººå ums_memberï¼è½¯å
³èï¼ãç«é¡¹éç¥å¤ç¨ system_notice å
¬åãæ¨æ¬¾åè¯èµ° system éä»¶ä¸å¿ recordType=research_fund_recordï¼2026-09-29 å¢éï¼è¯¾é¢ç»è´¹æ¨ä»å¯¹æ¥è´¢å¡æ¥éââæ°å»º yudao-module-finance-apiï¼FinanceReimbursementApiï¼å»ºå+æäº¤/æ¹å+éæ/å é¤/æ¥è¯¢åæ¹æ³ï¼æ¬å° Spring Bean è°ç¨ï¼æ é Feignï¼ï¼è¯¾é¢ä¾§ç»è®°æ¨æ¬¾æ¶ 1:1 èªå¨çæ finance_reimbursementï¼ç³»ç»çæ 1 è¡æç»ï¼è´¹ç¨ç±»å=å
¶ä» 5ãå票éé¢=æ¨ä»éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æã说æ=ã课é¢ãåã第 N ææ¨æ¬¾ãï¼å¹¶ç«å³æäº¤ BPMï¼åå reimbursement_id/reimbursement_noãå°è´¦ç½®ãæ¥é审æ¹ä¸(15)ãï¼åè¯æ¹ä¸ºç»è®°æ¶å¿
å¡«å¹¶åç»ï¼research_fund_record + finance_reimbursementï¼ï¼æ°å¢ ResearchFundStatusListenerï¼ç¬¬ 15 个ä¸å¡çå¬å¨ï¼ä¸ finance èªå·±ç FinanceReimbursementStatusListener 订é
å䏿µç¨ key å¹¶è¡è§¦åï¼æå®¡æ¹ç»æååå°è´¦ï¼éè¿âå·²æ¨ä»(20)ã驳åâ已驳å(30)+驳ååå /æ¶é´ãåæ¶æµç¨âéåå¾
æ¨ä»(0)坿¹åå¯éæ°åèµ·ï¼å起人æ¤ååªæå®ä¾éååèµ·èç¹ãæµç¨æªç»æï¼ä¸è§¦åååï¼å°è´¦ä¿æ 15ï¼ï¼æ°é 2 èç¹ BPMN docs/sql/finance_reimbursement_approve.bpmnï¼è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼category id=216 å·²åå¨ï¼ï¼2026-09-29 å·²å¨ mom-jssm é¨ç½²ä¸ºçæ¬ 1ï¼form_type=20ãèªå®ä¹è¡¨ååå»ºè·¯å¾ /finance/reimbursement/indexãæ¥çè·¯å¾ /finance/reimbursement/detail/approve/index.vueï¼å¹¶å¹¶å
¥ config_export_all_20260929 é¶æ®µä¸ï¼ä¸¤çº§å®¡æ¹å
¨éè¿/驳å/忶䏿¡ååé¾è·¯å已端å°ç«¯éªè¯ï¼2026-09-29 å¢éï¼æ°å¢ yudao-module-archive ç¬ç«æ¡£æ¡ç®¡ç模å + yudao-module-archive-apiï¼ArchiveDocumentApiï¼archiveBySource æ sourceType+sourceId å¹ç彿¡£ / isArchived / getBySource 䏿¹æ³ï¼æ¬å° Spring Bean è°ç¨ï¼æ Feignï¼ï¼è¦ç书æ¶åç±»ï¼archive_category æ å½¢ãcode å¯ä¸ãdefaultSecretLevel é»è®¤å¯çº§ã6 æ¡åå§åç±»ï¼ä¼å/课é¢/ä¼è®®/è´¢å¡/æä¹¦/å
建ï¼è´¢å¡é»è®¤å¯çº§=ä¿å¯ 3ï¼ãæ¡£æ¡ç®¡çï¼archive_documentï¼DA+yyyyMMdd+6 使µæ°´ç¼å·ãå¯çº§ä¸æ¡£ 1 å
¬å¼ 2 å
é¨ 3 ä¿å¯ãè½½ä½ä¸å 1 çµå 2 å®ä½ 3 çµå+å®ä½ãå®ä½ä½ç½®ååæ®µ shelfNo/layerNo/columnNo/boxNo + storePlaceãæ¥æºåç±» sourceType 1 æå·¥ 2 è¯¾é¢ 3 ä¼å 4 è´¢å¡å¸¦ sourceNo/sourceId/sourceTitle åä½å¿«ç
§ãç¶æ 10 å¨åº 20 ååºä¸ãçµåéä»¶èµ° system éä»¶ä¸å¿ recordType=archive_documentãarchiveBySource å¹ççè·¯ + 䏿¹è¡¨ archive_document_id ååä½ä¸ºå·²å½æ¡£ç¡¬æ è®°ï¼éå¤å½æ¡£ç±æ¥æºä¾§éè¯¯ç æ¦æªä¸ archive ä¾§ DOCUMENT_DUPLICATE_SOURCE å
åºï¼ãåé
ç»è®°ä¸å®¡æ¹ï¼archive_borrowï¼JY+åçº§æµæ°´ç¼å·ãåé
人信æ¯/åé
ç®ç/å½è¿æéãç¶æ 0 è稿 15 审æ¹ä¸ 20 ååºä¸ 30 å·²å½è¿ 35 已驳åï¼ä»
0/35 坿¹å¯éæãä»
0 å¯å ãä»
20 å¯ç»è®°å½è¿ï¼submit åæ ¡éªåæ¡£æ¡ä¸å¾å·²æ 15/20 å¨éåé
ï¼å
è§£ææµç¨å建åæç»å¤å¿è稿ï¼BPM æµç¨ archive_borrow_approve ä¸¤çº§ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ï¼çå¬å¨ ArchiveBorrowStatusListener æ businessKey åå 20+approveTime / 35+驳ååå æ¶é´ / éå 0ï¼å®¡æ¹éè¿æ¶æ¡ä»¶æ´æ°æ¡£æ¡ SET status=20 WHERE status=10ï¼0 è¡åæ¥æ¡£æ¡å·²è¢«å ç¨å¹¶åæ»ï¼ãå½è¿ç»è®°ï¼æ¡ä»¶æ´æ° 20â30 + returnTime/å½è¿ç¡®è®¤äººï¼åææ¡£æ¡æ¡ä»¶æ´æ°å 10ï¼å½¢æéç¯ï¼ã龿宿¶è®¡ç®ï¼overdue=status==20 ä¸ returnDeadline<ä»å¤©ï¼ä¸å»º infra_job ä¸åç«å
ä¿¡ï¼å表ã龿ãå + /archive/borrow/overdue-page ç¬ç«å
¥å£ï¼ãæ¡£æ¡ç»è®¡ï¼4 å¡çï¼æ»æ°/å¨åº/ååº/龿 + åç±»/å¯çº§/è½½ä½ä¸ç» GROUP BY èåï¼æ N+1ï¼ï¼æææ¡£æ¡ç¨å¯çº§å段 + ç¬ç«æéç¹ archive:document:sensitiveï¼/get è¶ææ DOCUMENT_SENSITIVE_NO_PERMISSIONã/page ä¸ /export-excel 强å¶è¿æ»¤ secret_level<>3ï¼ç»ä¸èµ° applySecretLevelFilter / validateSecretLevelVisible ä¸¤ç§ææ¹æ³ï¼æ°å¢ 3 å¼ è¡¨ archive_category/archive_document/archive_borrowã6 个åå
¸ï¼82000~82005ï¼ãbpm_category id=8003 + æå docs/sql/archive_borrow_approve.bpmnï¼category=archive_borrow_approveãform_type=20ãåå»ºè·¯å¾ /archive/borrow/indexãæ¥çè·¯å¾ /archive/borrow/detail/approve/index.vueï¼å·²å¨ mom-jssm é¨ç½²ä¸ºçæ¬ 1ãèå 1075600~1075699ï¼ä¸æ¹å½æ¡£èå¨ä¸ºå表页æå¨ã彿¡£ãæé®ï¼éäºä»¶é©±å¨ï¼å½æ¡£ä¸å忥æºä¸å¡ç¶æï¼ï¼è¯¾é¢ research_application status=20 å·²ç«é¡¹ â sourceType=2 å¯çº§ 2 å
é¨ sourceNo=ç«é¡¹ç¼å·ï¼ä¼å ums_member status=1 æ£å¸¸ â sourceType=3ï¼è´¢å¡ finance_reimbursement status=20 â sourceType=4 å¯çº§ 3 ä¿å¯ï¼ä¸æ¢æ 20â40 + archiveTime åäºå¡å å ï¼ä¸å¼ æ¥æºè¡¨åæ°å¢å¯ç©ºå archive_document_idï¼archive_module_migration.sql ç¨ information_schema å®å«ä¿è¯å¹çï¼ãå
¨åºè¡¨æ° 427â430ï¼ä¸å¡ç¶æçå¬å¨å®é
计æ°ä¿®æ£ä¸º 24 个 *StatusListenerï¼14 ä¸ªç»§æ¿ BpmProcessInstanceStatusEventListenerï¼ãæ¬æ¨¡åä¸ååä¾èµ ums/finance/researchï¼ä»
æä¾ -api 忍¡åç±ä¸æ¹æå¨è°ç¨ï¼ä¾èµæ¹å research/ums/finance â archive-apiï¼æ ç¯ãæ¬æ¬¡åæ¥æ´æ°çä¸å¡å¯è§å产ç©ï¼æ°å¢ mermaid/15-archive-flow.mmdï¼å¢é修订 01-business-mindmap / 08-module-relation / 09-data-flow / 10-business-objectï¼ä»¥å data/modules.jsonï¼æ°å¢ arc 模åãbpm çå¬å¨è®¡æ° 15â24ï¼ãobjects.jsonï¼æ°å¢æ¡£æ¡åç±»/æ¡£æ¡/åé
å 3 对象 + 课é¢ç³æ¥ä¹¦/ä¼å/æ¥éååè¡¥ archive_document_idï¼ãflows.jsonï¼æ°å¢ archive æµç¨ 9 æ¥ï¼ãroles.jsonï¼æ°å¢æ¡£æ¡ç®¡çå/åé
人/åé
审æ¹äºº/彿¡£ç»å人 4 è§è²ï¼ãbusiness.json" |
| | | }</script> |
| | | <script type="application/json" id="data-modules">{ |
| | | "modules": [ |
| | |
| | | "upstream": ["ä¼å管ç(ums_member åç³æ¥äººå§å/åä½/èç§°/çµè¯)", "BPM(æµç¨å®ä¹ research_topic_approve / finance_reimbursement_approve)"], |
| | | "downstream": ["system(system_notice ç«é¡¹éç¥å
¬å)", "system(éä»¶ä¸å¿)", "è´¢å¡(ç»è´¹æ¨ä»çæ finance_reimbursement æ¥éå·已对æ¥)"], |
| | | "coreTables": ["research_guideline", "research_application", "research_topic_review", "research_fund_record"]}, |
| | | {"key": "arc", "name": "æ¡£æ¡ç®¡çï¼ç¬ç«ï¼", "color": "#7fb3d5", "tag": "ARC", "flow": "archive", |
| | | "positioning": "å¦ä¼/åä¼åå®ä½ä¸çµåæ¡£æ¡å
¨çå½å¨æï¼å类书æ¶è§æ´ â æ¡£æ¡ç»è®°ä¸æ£ç´¢ â åé
å®¡æ¹ â å½è¿éç¯ â åé䏿µè½¬ç»è®¡ï¼å¹¶æ¥æ¶è¯¾é¢/ä¼å/è´¢å¡ä¸æ¹ç彿¡£èå¨", |
| | | "problem": "è¯¾é¢ææãä¼åææãè´¢å¡åè¯æ£è½åæ¨¡åæ å¤å½éï¼çº¸è´¨æ¡£æ¡åæ¾ä½ç½®é 线ä¸å°è´¦ï¼åé
ä¸å½è¿æ ççã龿æ 人管ï¼è´¢å¡çæææ¡£æ¡æ å¯çº§ç®¡æ§", |
| | | "features": ["æ¡£æ¡åç±»æ (书æ¶Â·åå±åå)ï¼ä¼å/课é¢/ä¼è®®/è´¢å¡/æä¹¦/å
建 6 æ¡åå§å类·ç¼ç å¯ä¸Â·æ¯æç¶åå±çº§", "åç±»é»è®¤å¯çº§(è´¢å¡åç±»=ä¿å¯)·åç±»æååç±»æä¸ææ¡£æ¡ç¦å ", "æ¡£æ¡ä¸»è¡¨ï¼çµåéä»¶ + å®ä½ä½ç½®ååæ®µ(书æ¶å·/å±å·/åå·/åå·æ¡£æ¡ç)+åæ¾ä½ç½®æè¿°", "æ¡£æ¡ç¼å· DA+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)·åé
åå· JY+åæ¥æµæ°´", "å¯çº§ä¸æ¡£ å
¬å¼1/å
é¨2/ä¿å¯3 + ç¬ç«æéç¹ archive:document:sensitive(æ æéæ¶å表ä¸å¯¼åºå¼ºå¶è¿æ»¤ã详æ
æ¥é)", "è½½ä½ä¸å çµå1/å®ä½2/çµå+å®ä½3", "æ¥æºåç±» æå·¥1/课é¢2/ä¼å3/è´¢å¡4(è®°å½æ¥æºåå·/ID/æ é¢å¿«ç
§ä¾¿äºæ£ç´¢)", "å
¨å段æ£ç´¢ï¼æ é¢/å
³é®è¯ tags/æ¥æºåå·/åç±»/å¯çº§/è½½ä½/ç¶æ/彿¡£æ¥æåºé´ + Excel 导åº", "åé
ç»è®°(åé
人/é¨é¨/çµè¯/æ¥æ/ç®ç/å½è¿æé)+BPM 两级审æ¹(æ¡£æ¡ç®¡çåå®¡æ ¸âå管é¢å¯¼å®¡æ¹)·æµç¨ key=archive_borrow_approve", "å½è¿ç»è®°ï¼å®æ¶æ´æ°æ¡£æ¡ç¶æåãå¨åºãï¼å½¢æå®æ´æµè½¬éç¯", "龿æªè¿ä»
æ¥è¯¢æ¶å®æ¶è®¡ç®(overdueDays)·å表红è²ã龿 N 天ãTag + /overdue-page ç¬ç«å
¥å£ + ãåªç龿ãåæ¢Â·ä¸å»º infra_job ä¸åç«å
ä¿¡", "æ¡£æ¡ç»è®¡ï¼æ»æ°/å¨åº/ååºä¸/龿æªè¿ + æåç±»/å¯çº§/è½½ä½ä¸ç»åå¸(4 å¡ç + 3 å¾è¡¨)", "å¯¹å¤æä¾ yudao-module-archive-api(ArchiveDocumentApiï¼archiveBySource å¹ç/ isArchived / getBySource)ä¾è¯¾é¢Â·ä¼å·财å¡ä¸æ¹æå¨å½æ¡£", "éä»¶èµ° system éä»¶ä¸å¿(recordType=archive_document / archive_borrow)"], |
| | | "objects": ["æ¡£æ¡åç±»", "æ¡£æ¡", "åé
å"], |
| | | "roles": ["æ¡£æ¡ç®¡çå", "å管é¢å¯¼(åé
审æ¹)", "åé
人", "彿¡£ç»å人(课é¢/ä¼å/è´¢å¡)"], |
| | | "upstream": ["课é¢ç®¡ç(å·²ç«é¡¹ç³æ¥ä¹¦Â·archiveApplication)", "ä¼å管ç(æ£å¸¸ä¼å·archiveMember)", "è´¢å¡æ¥é(å·²éè¿æ¥éåÂ·æ¢æ archive å å )", "BPM(æµç¨å®ä¹ archive_borrow_approve)"], |
| | | "downstream": ["system(éä»¶ä¸å¿ storage_attachment)", "æ¥æºè¡¨åå archive_document_id"], |
| | | "coreTables": ["archive_category", "archive_document", "archive_borrow"]}, |
| | | {"key": "bpm", "name": "åå审æ¹", "color": "#e6a23c", "tag": "BPM", "flow": null, |
| | | "positioning": "å
¨ç³»ç»åæ®å®¡æ¹ä¸æ¢ï¼Flowableï¼", |
| | | "problem": "夿¨¡ååæ®éè¦çµæ´»å¯é
çå¤çº§å®¡æ¹", |
| | | "features": ["BPMN+éé飿 ¼å设计å¨", "æµç¨å®ä¹é¨ç½²", "审æ¹äºä»¶ç»ä¸åè°(BpmProcessInstanceStatusEvent)", "15个ä¸å¡çå¬å¨(å䏿µç¨ key å
许å¤ä¸ªçå¬å¨å¹¶è¡Â·åèªæ key è¿æ»¤)", "表åÂ·ç¨æ·ç»Â·æé·å ç¾"], |
| | | "features": ["BPMN+éé飿 ¼å设计å¨", "æµç¨å®ä¹é¨ç½²", "审æ¹äºä»¶ç»ä¸åè°(BpmProcessInstanceStatusEvent)", "24个ä¸å¡ç¶æçå¬å¨(*StatusListener·å䏿µç¨ key å
许å¤ä¸ªçå¬å¨å¹¶è¡Â·åèªæ key è¿æ»¤Â·æ¡£æ¡åé
ArchiveBorrowStatusListener ä¸è´¢å¡/课é¢çå¬å¨è®¢é
ä¸å key äºä¸å¹²æ°)", "表åÂ·ç¨æ·ç»Â·æé·å ç¾"], |
| | | "objects": ["æµç¨æ¨¡å", "æµç¨å®ä¾", "审æ¹ä»»å¡"], |
| | | "roles": ["审æ¹äºº(ææµç¨é
ç½®)", "æµç¨ç®¡çå"], |
| | | "upstream": ["åä¸å¡æäº¤å®¡æ¹"], "downstream": ["åè°æ´æ°åä¸å¡åæ®ç¶æ"], |
| | |
| | | {"name": "æç计å", "module": "设å¤", "table": "mes_cal_plan", "doc": "çç»Ãçæ¬¡Ãæ¥ææçï¼ä¾ç产ä¸èå¤å¼ç¨", "upstream": [], "downstream": ["ç产任å¡", "èå¤"], "keywords": "æç çç» çæ¬¡ æ¥å"}, |
| | | {"name": "æ¥å模æ¿", "module": "è´¨æ£æ¥å", "table": "qc_report_template", "doc": "æºè½è´¨æ£æ¥å模æ¿ï¼å¯ç¨0/åç¨1ï¼ç»å¸å
容åå¨ qc_report_template_versionï¼è稿0/å·²åå¸1/å·²åç¨2ï¼å·²åå¸ä¸å¯è¦çï¼ï¼currentVersion æåå½åå·²åå¸çæ¬ï¼æºæä»¶ç» AI 导å
¥è¯å«æè稿åç±äººå·¥ç¡®è®¤ææä¸ºçæ¬ï¼å䏿¨¡æ¿éå¤å¯¼å
¥æãæ¿æ¢ãå¤çââå
å æ§éä»¶ï¼è¿å¸¦ blob è¡ä¸ç£çæä»¶ï¼åç»æ°çï¼ä¸çå¤å¿æä»¶ï¼å 餿¨¡æ¿ä¼è¿å¸¦æ¸
éä»¶", "upstream": ["人工设计(GrapesJS 设计å¨)", "AI 导å
¥è稿(qc-report/ai-import/draft)"], "downstream": ["模æ¿çæ¬", "æ¥åå®ä¾"], "keywords": "æ¥åæ¨¡æ¿ è´¨æ£æ¥å template è®¾è®¡å¨ çæ¬ AI导å
¥ è¯å« è稿 æºæä»¶æ¿æ¢"}, |
| | | {"name": "æ¥åå®ä¾", "module": "è´¨æ£æ¥å", "table": "qc_report_instance", "doc": "åºä»¶äº§ç©ï¼ç¼å· QR+yyyyMMdd+4使µæ°´æå¤©ç¬ç«ä¸ä¸å¡å¯ä¸ï¼å¯æ¾å¼æå®è¦çï¼æ³¨æ uk_report_no ä¸åºå软å é¤ï¼å æçå·ä¸åæ¶ï¼ï¼ä¸¤æ¡åºä»¶å
¥å£ï¼éç¨ generateï¼è°ç¨æ¹èªå¸¦ contextï¼ä¸ generate-from-qcï¼æ°æ®ä» MES è´¨æ£ååï¼æéç qc-report:instance:generate å·²å
¥ system_menu id=1075416ï¼äºéæ ¡éªæä¸å¡ä¼å
çº§åªæ¥ç¬¬ä¸å¤ï¼105_000 ç±»åéæ³ / 105_001 åæ®ä¸åå¨ / 105_002 æªå®æ / 105_003 æªå¤å® / 105_005 模æ¿ç±»åä¸ç¬¦ / 105_006 æ å¯ç¨æ£éªé¡¹ï¼åå¼ è´¨æ£åå表çè¡æä½ãåºæ¥åãä»
å¨ status=已宿æ¶å¯è§ï¼å¼¹çªåªå reportType ä¸è´ã模æ¿å¯ç¨ãä¸ currentVersion æåççæ¬å·²åå¸ç模æ¿ï¼å端 /qc-report/template/selectable å¤å®ââåç¨çæ¬ä¸æ¸
空 currentVersionï¼å端æ¿åé¡µç»æèªå·±æ¨å¯¼ä¼æ¼ï¼ï¼ç»æå°±å°å±ç¤ºå¹¶è·³æ¬é¡µå表ï¼ï¼å»ç» data_snapshotï¼å¤å®åæ°æ®ï¼å«å端ç®å¥½ç PASS/FAIL ä¸åæ ¼çï¼ä¸ render_htmlï¼regenerate åªé渲æçãæ°æ®ä¸ç¼å·ä¸åï¼business_id/business_type å MES 表åï¼mes_qc_iqc çï¼ä¸åæ® IDï¼å¯åæ¥ãä¸åå¯åºå¤ä»½ï¼æ¥å头å¦å¸¦åæ®åå¤å® qcResult(æ°)/qcResultText(䏿ï¼åæ ¼/ç¹é/ä¸åæ ¼éè´§/ä¸åæ ¼æ¥åº)ï¼ä¸å¼æä¸æå¤å®å¹¶åäºä¸è¦çï¼ååºå¸¦ undecidableCount=å¿«ç
§ä¸ result 为空串ç项æ°ä¸ warningsï¼åç»æ é¢è·³è¿/ææ å·²å /æªå½å®æµå¼/æ ·åè¶
3ï¼ï¼ä¸¤è
é½ä¸è½åºãäºåçä¸å°", "upstream": ["æ¥å模æ¿çæ¬", "è´¨æ£åä¸ä¸æ(éç¨ generate ç±è°ç¨æ¹ä¼ å
¥)", "MES è´¨æ£å IQC/IPQC/OQC/RQC(generate-from-qc ç» MesQcReportApi åæ°)"], "downstream": ["å端å®ä¾é¡µ /qc/report-instance(å表·iframeé¢è§Â·å¿«ç
§é¡µç¾Â·å¯¼åºPDF)", "PDF彿¡£(system_storage_attachment recordType=qc_report_instance)"], "keywords": "æ¥åå®ä¾ åºä»¶ QRç¼å· å¿«ç
§ å¤ç° regenerate PDF彿¡£ æ¥åå®ä¾é¡µ 导åºPDF generate-from-qc è´¨æ£ååºæ¥å åºæ¥åå¼¹çª qcResult undecidableCount warnings å¾
å¤å® 忥 ä¸å¡åæ®çé"}, |
| | | {"name": "æ¥éå", "module": "è´¢å¡æ¥é", "table": "finance_reimbursement", "doc": "åå·å¯èªå®ä¹(ä¸é´ä¸å
è®¸ç©ºæ ¼ï¼ä¸å·²æåå·éå¤åæ¥é)ï¼æ°å¢æ¶ç空æçº¯ç©ºæ ¼ç±ç³»ç»çæ BX+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼ä¿®æ¹æ¶çç©ºè¡¨ç¤ºä¿æä¸åãstatus: 0è稿/15审æ¹ä¸/20å·²éè¿/35已驳å/40已彿¡£ï¼ä»
è稿å¯å ãè稿ä¸å·²é©³å坿¹ãä»
å·²éè¿å¯å½æ¡£ï¼æäº¤åç± BPM çå¬å¨æç»æååç¶æ(åæ¶éåè稿)ï¼å®¡æ¹ä¸ processInstanceId 被ååãæ¥æºä¸¤æ¡ï¼â è´¢å¡æ¨¡å页é¢äººå·¥å¡«æ¥ â¡è¯¾é¢ç®¡çãç»è´¹æ¨ä»ãç» FinanceReimbursementApi(yudao-module-finance-api)èªå¨å»ºåå¹¶ç«å³æäº¤(1:1ãéé¢ä¸è´ãç³»ç»åºå® 1 è¡æç»Â·è´¹ç¨ç±»å=å
¶ä»)ââåè
ç审æ¹ç»æç±è¯¾é¢ä¾§ ResearchFundStatusListener 订é
å䏿µç¨ååæ¨æ¬¾å°è´¦ï¼æ¥éåæ¬èº«ä¸ååä»»ä½å¤é¨åæ®", "upstream": ["课é¢ç®¡ç(ç»è´¹æ¨ä»Â·ç» FinanceReimbursementApi èªå¨å»ºå)", "人工填æ¥"], "downstream": ["æ¥éæç»", "å票éä»¶(storage_attachment·recordType=finance_reimbursement)", "è¯¾é¢æ¨æ¬¾å°è´¦(ä»
ç» BPM äºä»¶ååç¶æ)"], "keywords": "æ¥éå æ¥é å票 reimbursement BX 彿¡£ è´¢å¡ è´¹ç¨ èªå®ä¹åå· è¯¾é¢ç»è´¹æ¨ä» èªå¨å»ºå FinanceReimbursementApi"}, |
| | | {"name": "æ¥éå", "module": "è´¢å¡æ¥é", "table": "finance_reimbursement", "doc": "åå·å¯èªå®ä¹(ä¸é´ä¸å
è®¸ç©ºæ ¼ï¼ä¸å·²æåå·éå¤åæ¥é)ï¼æ°å¢æ¶ç空æçº¯ç©ºæ ¼ç±ç³»ç»çæ BX+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼ä¿®æ¹æ¶çç©ºè¡¨ç¤ºä¿æä¸åãstatus: 0è稿/15审æ¹ä¸/20å·²éè¿/35已驳å/40已彿¡£ï¼ä»
è稿å¯å ãè稿ä¸å·²é©³å坿¹ãä»
å·²éè¿å¯å½æ¡£ï¼æäº¤åç± BPM çå¬å¨æç»æååç¶æ(åæ¶éåè稿)ï¼å®¡æ¹ä¸ processInstanceId 被ååãæ¥æºä¸¤æ¡ï¼â è´¢å¡æ¨¡å页é¢äººå·¥å¡«æ¥ â¡è¯¾é¢ç®¡çãç»è´¹æ¨ä»ãç» FinanceReimbursementApi(yudao-module-finance-api)èªå¨å»ºåå¹¶ç«å³æäº¤(1:1ãéé¢ä¸è´ãç³»ç»åºå® 1 è¡æç»Â·è´¹ç¨ç±»å=å
¶ä»)ââåè
ç审æ¹ç»æç±è¯¾é¢ä¾§ ResearchFundStatusListener 订é
å䏿µç¨ååæ¨æ¬¾å°è´¦ï¼æ¥éåæ¬èº«ä¸ååä»»ä½å¤é¨åæ®ï¼archive_document_id éç©ºè¡¨ç¤ºå·²å½æ¡£", "upstream": ["课é¢ç®¡ç(ç»è´¹æ¨ä»Â·ç» FinanceReimbursementApi èªå¨å»ºå)", "人工填æ¥"], "downstream": ["æ¥éæç»", "å票éä»¶(storage_attachment·recordType=finance_reimbursement)", "è¯¾é¢æ¨æ¬¾å°è´¦(ä»
ç» BPM äºä»¶ååç¶æ)", "æ¡£æ¡ç®¡ç(æ¢æå½æ¡£å¨ä½åäºå¡å å ·çæãä¿å¯ 3ãçº§è´¢å¡æ¡£æ¡å¹¶åå archive_document_id)"], "keywords": "æ¥éå æ¥é å票 reimbursement BX 彿¡£ è´¢å¡ è´¹ç¨ èªå®ä¹åå· è¯¾é¢ç»è´¹æ¨ä» èªå¨å»ºå FinanceReimbursementApi è´¢å¡æ¡£æ¡ ä¿å¯ archive_document_id"}, |
| | | {"name": "æ¥éæç»", "module": "è´¢å¡æ¥é", "table": "finance_reimbursement_item", "doc": "æ¥éåçè´¹ç¨è¡ï¼è´¹ç¨ç±»å(1å·®æ
/2åå
¬/3æå¾
/4交é/5å
¶ä»)ãå票å·ç ãå票éé¢ãåç¥¨æ¥æãå¼ç¥¨æ¹ãè´¹ç¨è¯´æï¼éä¸»è¡¨ä¸æ¬¡æ§æäº¤(å
å åå¢å
¨éè¦ç)ï¼æäº¤æ¶å¿
é¡»å¥æè¡ id ä¸ reimbursementId ââ æç»å 餿¯è½¯å ï¼åä¼ å id ä¼ä¸å·²è½¯å è¡ä¸»é®å²çª", "upstream": ["æ¥éå"], "downstream": [], "keywords": "æ¥éæç» è´¹ç¨æç» è´¹ç¨ç±»å å票éé¢ item æç»è¡ å·®æ
"}, |
| | | {"name": "å
¥ä¼ç³è¯·å", "module": "ä¼å管ç", "table": "ums_application", "doc": "åå· SQ+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼å端çæä¸å¯èªå®ä¹ï¼memberType 1个人/2åä½å³å®å段åå(ä¸ªäººç¨ workUnit/titleï¼åä½ç¨ legalPerson/organizationCode)ï¼memberGrade æç±»ååä¸ååå
¸ï¼status: 0è稿/15审æ¹ä¸/20å·²éè¿/35已驳åãä»
è稿å¯å (è¿å¸¦æ¸
éä»¶)ãè稿ä¸å·²é©³å坿¹å¯éæï¼æäº¤åç± BPM çå¬å¨æç»æåå(åæ¶éåè稿)ï¼å®¡æ¹ä¸åå processInstanceIdï¼å®¡æ¹éè¿è§¦åèªå¨å»ºä¼åä¸ç³»ç»è´¦å·ãç¬ç«æ¨¡åï¼ä¸ä¸å
¶å®ä¸å¡æ¨¡å产çåæ®å
³è", "upstream": ["人工填æ¥(ç³è¯·äºº)", "è¯æææéä»¶(storage_attachment·recordType=ums_application)"], "downstream": ["ä¼å(审æ¹éè¿èªå¨å建)", "BPM æµç¨å®ä¾(ums_membership_approve åç±»)"], "keywords": "å
¥ä¼ç³è¯· å
¥ä¼ ä¼åç³è¯· application SQ ç§ä¹¦å¤ çäºä¼ å®¡æ¹ ä¼åç±»å 个人 åä½ æ³å®ä»£è¡¨äºº ç ç©¶æ¹å ç³è¯·ç级"}, |
| | | {"name": "ä¼å", "module": "ä¼å管ç", "table": "ums_member", "doc": "åå· HY+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼ä¸¤ä¸ªæ¥æºï¼â å
¥ä¼ç³è¯·å®¡æ¹éè¿èªå¨å建(åå¡« applicationId ä¸ userName/ç³»ç»è´¦å·) â¡ä¼åå表æå·¥æ°å¢ãstatus: 1æ£å¸¸/0æåï¼memberGrade æ memberType å对åºåå
¸ï¼æ ¡éªè§åæ¯åä½ä¼å(type=2)ä¸å¯éãçäºé¿ã(grade=5)ãèªå¨å»ºæ¡£æ¶å
¥ä¼æ¥æ=å½å¤©ã䏿¬è¿ contactUser/unitIntro/expireDate(ç³è¯·åæ 对åºå段)ï¼èªå¨å»ºçç³»ç»è´¦å·ç¨æ·å为èç³»çµè¯ä¸åå§å¯ç å为èç³»çµè¯ï¼é¨é¨åºå®ä¸ºãå¦ä¼ä¼åãï¼ææºå·éå¤ä¼æç¡®æ¥é䏿´åäºå¡åæ»", "upstream": ["å
¥ä¼ç³è¯·å(审æ¹éè¿)", "人工æ°å¢", "éä»¶(storage_attachment·recordType=ums_member)"], "downstream": ["ä¼åé讯å½(æ regionCode/industry æ£ç´¢)", "system_users(ç»å½è´¦å·)"], "keywords": "ä¼å member HY ä¼åç¼å· ä¼åç级 ä¼åç±»å éè®¯å½ å°åº è¡ä¸ å
¥ä¼æ¥æ æææ"}, |
| | | {"name": "ä¼å", "module": "ä¼å管ç", "table": "ums_member", "doc": "åå· HY+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼ä¸¤ä¸ªæ¥æºï¼â å
¥ä¼ç³è¯·å®¡æ¹éè¿èªå¨å建(åå¡« applicationId ä¸ userName/ç³»ç»è´¦å·) â¡ä¼åå表æå·¥æ°å¢ãstatus: 1æ£å¸¸/0æåï¼memberGrade æ memberType å对åºåå
¸ï¼æ ¡éªè§åæ¯åä½ä¼å(type=2)ä¸å¯éãçäºé¿ã(grade=5)ãèªå¨å»ºæ¡£æ¶å
¥ä¼æ¥æ=å½å¤©ã䏿¬è¿ contactUser/unitIntro/expireDate(ç³è¯·åæ 对åºå段)ï¼èªå¨å»ºçç³»ç»è´¦å·ç¨æ·å为èç³»çµè¯ä¸åå§å¯ç å为èç³»çµè¯ï¼é¨é¨åºå®ä¸ºãå¦ä¼ä¼åãï¼ææºå·éå¤ä¼æç¡®æ¥é䏿´åäºå¡åæ»ï¼archive_document_id éç©ºè¡¨ç¤ºå·²å½æ¡£ï¼å½æ¡£åå表页éèã彿¡£ãæé®ï¼", "upstream": ["å
¥ä¼ç³è¯·å(审æ¹éè¿)", "人工æ°å¢", "éä»¶(storage_attachment·recordType=ums_member)"], "downstream": ["ä¼åé讯å½(æ regionCode/industry æ£ç´¢)", "æ¡£æ¡ç®¡ç(æå¨ã彿¡£ã·ä»
æ£å¸¸ç¶æå¯å½æ¡£Â·ç» yudao-module-archive-api çææ¡£æ¡å¹¶åå archive_document_id)", "system_users(ç»å½è´¦å·)"], "keywords": "ä¼å member HY ä¼åç¼å· ä¼åç级 ä¼åç±»å éè®¯å½ å°åº è¡ä¸ å
¥ä¼æ¥æ æææ 彿¡£ archive_document_id"}, |
| | | {"name": "è¯¾é¢æå", "module": "课é¢ç®¡ç", "table": "research_guideline", "doc": "æåç¼å· GL+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼category 1éç¹è¯¾é¢/2ä¸è¬è¯¾é¢ï¼publishStatus 0è稿/20å·²åå¸/30å·²æªæ¢ï¼ä»
èç¨¿å¯æ¹å¯å ï¼publish åå¸åå publishTimeï¼close æªæ¢ç½® 30ï¼å·²äº§çç³æ¥å(applicationMapper.selectCountByGuidelineId å¤§äº 0)çæåç¦æ¢å é¤å¹¶å¨æç¤ºä¸æ¥åºè¯¥æåä¸å·²æå¤å°å¼ ç³æ¥åï¼æ£æ content ä¸ºé¿ææ¬ï¼éä»¶ recordType=research_guideline", "upstream": ["人工维æ¤(å¦ä¼ç§ä¹¦å¤)", "æåéä»¶(storage_attachment·recordType=research_guideline)"], "downstream": ["课é¢ç³æ¥ä¹¦(ç³æ¥æ¶å¼ç¨ä¸å¿
须已åå¸å¹¶å¨ç³æ¥æå
)"], "keywords": "è¯¾é¢æå æå åå¸ æªæ¢ éç¹è¯¾é¢ ä¸è¬è¯¾é¢ GL æåç¼å· ç³æ¥æ ç³æ¥èµ·æ¢"}, |
| | | {"name": "课é¢ç³æ¥ä¹¦", "module": "课é¢ç®¡ç", "table": "research_application", "doc": "ç³æ¥ç¼å· SB+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼guidelineId å
³èæåãmemberId å
³è ums_member(软å
³èæ å¤é®ï¼ä¼åå é¤åä¼ç䏿¬ç©º memberId éå®¹éæ¾ç¤º)ï¼applicantName/workUnit/jobTitle/contactPhone/contactEmail ç±éä¼åèªå¨å¸¦åºå¯ææ¹ï¼category åä½èªæåä¸ä¸ä¿¡ä»»åç«¯ä¼ å¼ï¼budgetAmount ç³è¯·ç»è´¹ä¸ºæ¨ä»ä¸éï¼status: 0è稿/15审æ¹ä¸/20å·²ç«é¡¹/35已驳åãä»
è稿å¯å (è¿å¸¦æ¸
éä»¶)ãè稿ä¸å·²é©³å坿¹å¯éæï¼submit åéæ¡æ ¡éªãæåå·²åå¸ãä¸ãç°å¨å¨ç³æ¥æå
ãï¼ä»»ä¸ä¸æ»¡è¶³å³æç»å¹¶æç»´åº¦ç»åºæååä¸å®é
å¼ï¼å®¡æ¹éè¿ç±çå¬å¨çæç«é¡¹ç¼å· researchNo(LX+åæ¥æµæ°´)ä¸ approveTime(å·²æç¼å·å¹çè·³è¿)ï¼reviewAvgScore/reviewPass 为è¯å®¡æ±æ»ååå¼ï¼æç»å ç©ºæ¶æ¸
ææªæ±æ»ï¼noticeId è®°å½å·²åå¸çç«é¡¹éç¥å
¬åï¼éå¤åå¸è¢«æ¦æª", "upstream": ["è¯¾é¢æå(å¿
须已åå¸ä¸å¨ç³æ¥æå
)", "ä¼å(ums_member·带åºç³æ¥äººä¿¡æ¯)", "ç³æ¥éä»¶(storage_attachment·recordType=research_application)"], "downstream": ["ä¸å®¶è¯å®¡æç»", "ç»è´¹æ¨ä»è®°å½", "ç«é¡¹éç¥(system_notice å
¬å)", "BPM æµç¨å®ä¾(research_topic_approve åç±»)", "éä»¶ä¸å¿"], "keywords": "课é¢ç³æ¥ ç³æ¥ä¹¦ ç³æ¥å SB ç³æ¥ç¼å· ç«é¡¹ ç«é¡¹ç¼å· LX ç³è¯·ç»è´¹ ç³æ¥ä¹¦æ£æ 课é¢ç»æå ä¸å®¶è¯å®¡ è¯å®¡æ±æ» ç«é¡¹éç¥ åå¸éç¥ æäº¤å®¡æ¹ 驳å éæ"}, |
| | | {"name": "课é¢ç³æ¥ä¹¦", "module": "课é¢ç®¡ç", "table": "research_application", "doc": "ç³æ¥ç¼å· SB+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ï¼guidelineId å
³èæåãmemberId å
³è ums_member(软å
³èæ å¤é®ï¼ä¼åå é¤åä¼ç䏿¬ç©º memberId éå®¹éæ¾ç¤º)ï¼applicantName/workUnit/jobTitle/contactPhone/contactEmail ç±éä¼åèªå¨å¸¦åºå¯ææ¹ï¼category åä½èªæåä¸ä¸ä¿¡ä»»åç«¯ä¼ å¼ï¼budgetAmount ç³è¯·ç»è´¹ä¸ºæ¨ä»ä¸éï¼status: 0è稿/15审æ¹ä¸/20å·²ç«é¡¹/35已驳åãä»
è稿å¯å (è¿å¸¦æ¸
éä»¶)ãè稿ä¸å·²é©³å坿¹å¯éæï¼submit åéæ¡æ ¡éªãæåå·²åå¸ãä¸ãç°å¨å¨ç³æ¥æå
ãï¼ä»»ä¸ä¸æ»¡è¶³å³æç»å¹¶æç»´åº¦ç»åºæååä¸å®é
å¼ï¼å®¡æ¹éè¿ç±çå¬å¨çæç«é¡¹ç¼å· researchNo(LX+åæ¥æµæ°´)ä¸ approveTime(å·²æç¼å·å¹çè·³è¿)ï¼reviewAvgScore/reviewPass 为è¯å®¡æ±æ»ååå¼ï¼æç»å ç©ºæ¶æ¸
ææªæ±æ»ï¼noticeId è®°å½å·²åå¸çç«é¡¹éç¥å
¬åï¼éå¤åå¸è¢«æ¦æªï¼archive_document_id éç©ºè¡¨ç¤ºå·²å½æ¡£ï¼å½æ¡£åå表页éèã彿¡£ãæé®ï¼", "upstream": ["è¯¾é¢æå(å¿
须已åå¸ä¸å¨ç³æ¥æå
)", "ä¼å(ums_member·带åºç³æ¥äººä¿¡æ¯)", "ç³æ¥éä»¶(storage_attachment·recordType=research_application)"], "downstream": ["ä¸å®¶è¯å®¡æç»", "ç»è´¹æ¨ä»è®°å½", "ç«é¡¹éç¥(system_notice å
¬å)", "BPM æµç¨å®ä¾(research_topic_approve åç±»)", "æ¡£æ¡ç®¡ç(æå¨ã彿¡£ã·ä»
å·²ç«é¡¹å¯å½æ¡£Â·ç» yudao-module-archive-api çææ¡£æ¡å¹¶åå archive_document_id)", "éä»¶ä¸å¿"], "keywords": "课é¢ç³æ¥ ç³æ¥ä¹¦ ç³æ¥å SB ç³æ¥ç¼å· ç«é¡¹ ç«é¡¹ç¼å· LX ç³è¯·ç»è´¹ ç³æ¥ä¹¦æ£æ 课é¢ç»æå ä¸å®¶è¯å®¡ è¯å®¡æ±æ» ç«é¡¹éç¥ åå¸éç¥ æäº¤å®¡æ¹ 驳å éæ å½æ¡£ archive_document_id"}, |
| | | {"name": "ä¸å®¶è¯å®¡æç»", "module": "课é¢ç®¡ç", "table": "research_topic_review", "doc": "ä¸ä½ä¸å®¶ä¸è¡çä¸ä¸»å¤è¡å表ï¼evaluatorName/evaluatorUnit/evaluatorTitle + topicScore éé¢ä»·å¼ä¸æä¹(æé0.3) + planScore ç ç©¶æ¹æ¡å¯è¡æ§(0.3) + teamScore å¢éä¸ç ç©¶åºç¡(0.2) + resultScore 颿ææä¸æç(0.2) + conclusion 1æ¨èç«é¡¹/2䏿¨èç«é¡¹ + opinion è¯å®¡æè§ + reviewTimeãcompositeScore ç±å端 weightedScore 计ç®ãranking ç±å端æå æåéåºéæï¼å䏿¥ååç«¯ä¼ å¼ï¼æ¯æ¬¡å¢å æ¹åè° recalculate åå主å reviewAvgScore(å
¨é¨ä¸å®¶å æååå¼Â·ä¿ç2ä½)ä¸ reviewPass(ååè¾¾æ ä¸ å¤æ°ç»è®ºä¸ºæ¨èç«é¡¹æ¶ä¸º 1)ï¼å项åå¼è¶
åº 0~100 æ¶æç¤ºæåºå
·ä½ç»´åº¦ä¸å®é
å¼ï¼ä»
å¨ç³æ¥å status=15 审æ¹ä¸å¯å¢å æ¹", "upstream": ["课é¢ç³æ¥ä¹¦(ä»
审æ¹ä¸å¯å)"], "downstream": ["课é¢ç³æ¥ä¹¦(åå reviewAvgScore/reviewPass)"], "keywords": "ä¸å®¶è¯å®¡ è¯å®¡æç» è¯å å æ æé æå ranking compositeScore æ¨èç«é¡¹ è¯å®¡æè§ åå"}, |
| | | {"name": "æ¡£æ¡åç±»", "module": "æ¡£æ¡ç®¡ç", "table": "archive_category", "doc": "æ 形书æ¶åç±»(parentId·0=顶级)ï¼æ¿è½½ãåå±ååãè§æ´ï¼6 æ¡åå§åç±» ä¼åæ¡£æ¡ member / è¯¾é¢æ¡£æ¡ research / ä¼è®®æ¡£æ¡ meeting / è´¢å¡æ¡£æ¡ finance / æä¹¦æ¡£æ¡ document / å
å»ºæ¡£æ¡ partyï¼code å
¨å±å¯ä¸ uk_codeï¼defaultSecretLevel 为该åç±»ä¸æ¡£æ¡çé»è®¤å¯çº§(1å
¬å¼/2å
é¨/3ä¿å¯ï¼è´¢å¡åç±»=3)ï¼status 0å¯ç¨/1åç¨ãä»
坿¹å¯å ï¼æååç±»ç¦å ã该åç±»ä¸ææ¡£æ¡ç¦å ãç¶åç±»ä¸è½è®¾ä¸ºèªèº«æå
¶ååç±»ãä¼è®®/å
建档æ¡ç³»ç»å
æ æ¥æºæ¨¡åï¼ä»
æ¯ææå·¥å½å
¥æ¡£æ¡", "upstream": ["人工维æ¤(æ¡£æ¡ç®¡çå)"], "downstream": ["æ¡£æ¡(æ°å¢æ¶å¸¦åºé»è®¤å¯çº§)"], "keywords": "æ¡£æ¡åç±» ä¹¦æ¶ åå±åå ä¼åæ¡£æ¡ è¯¾é¢æ¡£æ¡ ä¼è®®æ¡£æ¡ è´¢å¡æ¡£æ¡ æä¹¦æ¡£æ¡ å
å»ºæ¡£æ¡ category é»è®¤å¯çº§"}, |
| | | {"name": "æ¡£æ¡", "module": "æ¡£æ¡ç®¡ç", "table": "archive_document", "doc": "æ¡£æ¡ä¸»è¡¨ï¼ç¼å· DA+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ãçµåä¸å®ä½å
¼å
·ï¼çµåèµ° system éä»¶ä¸å¿ recordType=archive_document(表å
ä¸åæä»¶å°å)ãå®ä½è®° shelfNo 书æ¶å·/layerNo å±å·/columnNo åå·/boxNo åå·æ¡£æ¡ç + storePlace åæ¾ä½ç½®æè¿°ãcarrierType 1çµå/2å®ä½/3çµå+å®ä½ï¼secretLevel 1å
¬å¼/2å
é¨/3ä¿å¯(为 3 ä¸å½åç¨æ·æ archive:document:sensitive æ¶è¯¦æ
æ¥éãå表ä¸å¯¼åºå¼ºå¶è¿æ»¤)ï¼sourceType 1æå·¥/2课é¢/3ä¼å/4è´¢å¡ + sourceNo/sourceId/sourceTitle è®°å½æ¥æºå¿«ç
§ä»¥ä¾¿æ£ç´¢ï¼status 10å¨åº/20ååºä¸(ååºä¸ç¦æ¹ãå卿ªå½è¿åé
åæ¶ç¦å )ãæ¥æºä¸º 2/3/4 çæ¡£æ¡ç±ä¸æ¹å表页ã彿¡£ãæé®ç» ArchiveDocumentApi.archiveBySource çæ(å¹ç)ï¼å¹¶å忥æºè¡¨ archive_document_id", "upstream": ["æ¡£æ¡åç±»", "æ¡£æ¡ç»è®°(人工)", "课é¢å½æ¡£(å·²ç«é¡¹ç³æ¥ä¹¦)", "ä¼å彿¡£(æ£å¸¸ä¼å)", "è´¢å¡å½æ¡£(å·²éè¿æ¥éå)"], "downstream": ["åé
å", "éä»¶ä¸å¿(recordType=archive_document)", "æ¥æºè¡¨ archive_document_id åå"], "keywords": "æ¡£æ¡ ææ¡£ document DA æ¡£æ¡ç¼å· å¯çº§ ä¿å¯ å
¬å¼ å
é¨ æææ¡£æ¡ è½½ä½ çµå å®ä½ 书æ¶å· å±å· åå· åå· æ¡£æ¡ç 彿¡£æ¥æ å¨åº ååºä¸ æ£ç´¢ å
³é®è¯ tags æ¥æºåå· å½æ¡£èå¨"}, |
| | | {"name": "åé
å", "module": "æ¡£æ¡ç®¡ç", "table": "archive_borrow", "doc": "åé
ä¸å½è¿åä¸ï¼ç¼å· JY+yyyyMMdd+6使µæ°´(Redis æ¯æ¥éç½®)ãè®°å½åé
人/é¨é¨/çµè¯ãåé
æ¥æãåé
ç®çãå½è¿æé(returnDeadlineÂ·é¾æå®æ¶è®¡ç®åºå)ï¼documentNo/documentTitle 为档æ¡å¿«ç
§ãstatus 0è稿/15审æ¹ä¸/20ååºä¸/30å·²å½è¿/35已驳åï¼ä»
0 ä¸ 35 坿¹å¯éæãä»
0 å¯å ãä»
20 å¯ç»è®°å½è¿ãsubmit åæ ¡éªå䏿¡£æ¡ä¸å¾å·²æ 15/20 çåé
å(å½ä¸æ¥å·²åç¨å¹¶å¸¦æ¡£æ¡åä¸å·²åå¨åé
åå·)ï¼æµç¨ key archive_borrow_approve 两级(æ¡£æ¡ç®¡çåå®¡æ ¸âå管é¢å¯¼å®¡æ¹)ï¼å端ä¸åæ» keyã审æ¹éè¿ç± ArchiveBorrowStatusListener åå 20+approveTime å¹¶æ¡ä»¶æ´æ°æ¡£æ¡ SET status=20 WHERE status=10(å½±å 0 è¡æ¥æ¡£æ¡å·²è¢«å ç¨å¹¶åæ»)ï¼å½è¿ç»è®°æ¡ä»¶æ´æ° 20â30 å¹¶åå returnTime/å½è¿ç¡®è®¤äººã龿ä¸è½åºï¼æ¥è¯¢æ¶å®æ¶ç® overdueDays å¹¶å¨å表渲æçº¢è²ã龿 N 天ãï¼å¦æ /overdue-page ç¬ç«å
¥å£", "upstream": ["æ¡£æ¡(ä»
å¨åº 10 å¯é)", "BPM(æµç¨ archive_borrow_approve)", "人工ç»è®°"], "downstream": ["æ¡£æ¡(ç¶æ 20 ååºä¸ / å½è¿å 10 å¨åº)"], "keywords": "åé
åé
å åé
ç»è®° å½è¿ å½è¿ç»è®° 龿 龿æªè¿ åé
人 åé
ç®ç å½è¿æé JY åé
åå· æ¡£æ¡ç®¡çåå®¡æ ¸ å管é¢å¯¼å®¡æ¹ æµè½¬éç¯"}, |
| | | {"name": "ç»è´¹æ¨ä»è®°å½", "module": "课é¢ç®¡ç", "table": "research_fund_record", "doc": "ä¸ä¸»å¤è¡çæ¨æ¬¾å°è´¦ï¼batchName æ¹æ¬¡åç§°/amount æ¨ä»éé¢/payDate æ¨ä»æ¥æ/payee æ¶æ¬¾åä½/remarkï¼åè¯éä»¶èµ° system éä»¶ä¸å¿ recordType=research_fund_record(表å
ä¸åæä»¶å°å)ãstatus: 0å¾
æ¨ä»/15æ¥é审æ¹ä¸/20å·²æ¨ä»/30已驳åï¼ç±ç³»ç»ä¸ BPM 驱å¨ï¼æ°å¢/ä¿®æ¹æ¥å£å·²ç§»é¤ status å
¥å(é²ä¼ªé ãå·²æ¨ä»ã)ãç»è®°å³ä¸æ¡é¾ï¼è½å°è´¦ â å䏿¹ blob åç» â ç» FinanceReimbursementApi èªå¨çæ 1:1 ç finance_reimbursement å¹¶ç«å³æäº¤ BPM â åå reimbursement_id/reimbursement_no å¹¶ç½® 15ï¼å®¡æ¹ç»æç±çå¬å¨ååï¼éè¿â20ã驳åâ30(+reject_reason/reject_time)ãåæ¶æµç¨âéå 0ï¼å起人æ¤ååªéååèµ·èç¹ãæµç¨æªç»æï¼ç¶æä¸åï¼ãä»
ç³æ¥å status=20 å·²ç«é¡¹å¯ç»è®°ï¼åè¯å¿
å¡«ï¼é颿 ¡éªï¼å·²ç»è®°éé¢(该åå
¨é¨è®°å½æ±å) + æ¬æ¬¡éé¢ ä¸å¾è¶
åºç³æ¥å budgetAmountï¼è¶
åºæ¶æç¤ºæ¥åºæ¬æ¬¡ãå·²ç»è®°ãå计ãé¢ç®å项æ°å¼ï¼ä»
ãå¾
æ¨ä»ãå¯å (èå¨å é¤è´¢å¡ä¾§è稿æ¥éåï¼éè稿åæç»)ï¼ãå¾
æ¨ä»ãã已驳åã坿¹å¹¶éæ°åèµ·æ¥é(已驳忹忏
空 reject_reason/reject_time)ï¼ç¼è¾æ¶ææ¬è¡éé¢å åå¯ç¨ä½é¢å±ç¤ºé¿å
误解ã䏿¥éå为软å
³è(æ å¤é®)ï¼è´¢å¡ä¾§ç´æ¥å åä¼ç䏿¬ç©º reimbursement_idï¼æ¤æ¶ä¿®æ¹æ¥ãæ¥éåå·²ä¸åå¨ï¼è¯·å 餿¬æ¡è®°å½åéæ°ç»è®°ã", "upstream": ["课é¢ç³æ¥ä¹¦(å¿
须已ç«é¡¹)", "è´¢å¡æ¥éå(1:1 èªå¨çæÂ·è½¯å
³è reimbursement_id)"], "downstream": ["æ¨ä»åè¯(storage_attachment·recordType=research_fund_record)", "è´¢å¡æ¥éå(çæå¹¶æäº¤åºè´¦Â·å®¡æ¹ç»æå忬å°è´¦)"], "keywords": "ç»è´¹æ¨ä» æ¨æ¬¾ æ¨ä»è®°å½ æ¹æ¬¡ æ¨ä»éé¢ åè¯ å¾
æ¨ä» æ¥é审æ¹ä¸ å·²æ¨ä» 已驳å 驳ååå è´¢å¡æ¥éåå· reimbursement_id æ¶æ¬¾åä½ èµå©éé¢ é¢ç® è¶
é¢ éæ°åèµ·æ¥é"} |
| | | ] |
| | | }</script> |
| | |
| | | {"stage": "ä¸å®¶è¯å®¡", "action": "ç³æ¥åå¤äºå®¡æ¹ä¸(15)æ¶å½å
¥ä¸å®¶è¯åæç»ï¼ä¸ä½ä¸å®¶ä¸è¡ï¼å§å/åä½/èç§° + éé¢ä»·å¼0.3/ç ç©¶æ¹æ¡0.3/å¢éåºç¡0.2/颿ææ0.2 å项åå¼ + ç»è®º + æè§ï¼ï¼åç«¯æ¯æ¬¡å¢å æ¹åéç® compositeScore å æå计ãæå æåéåºéæ rankingï¼å¹¶åå主å reviewAvgScoreï¼å
¨é¨ä¸å®¶ååï¼ä¸ reviewPassï¼ååè¾¾æ ä¸å¤æ°ç»è®ºä¸ºæ¨èç«é¡¹ï¼ï¼æç»å
¨é¨å 餿¶æ±æ»å¼æ¸
ç©ºä¸ºæªæ±æ»ï¼å项åå¼åå¨ 0~100 ä¹å¤æ¶æç¤ºæåºå
·ä½ç»´åº¦ä¸å®é
å¼", "roles": ["è¯å®¡ä¸å®¶", "å¦ä¼ç§ä¹¦å¤", "课é¢ç®¡çå"]}, |
| | | {"stage": "ç«é¡¹å®¡æ¹", "action": "BPM æµç¨ research_topic_approve 顺åºèµ°ä¸èç¹ï¼ç§ä¹¦å¤å½¢å¼å®¡æ¥ â ä¸å®¶è¯å®¡ â å¦ä¼ç«é¡¹å®¡æ¹ãå®¡æ¹æ¹æ³ä¸å®¡æ¹äººå¨æµç¨å®ä¹å
é
ç½®ï¼é¨ç½²åç±ç®¡çåå¨ BPM æµç¨è®¾è®¡å¨æå¦ä¼å®é
ç»ç»è°æ´ï¼å®¡æ¹ä¸å¿å
çèªå®ä¹è¡¨ååªè¯»åæ¾ç³æ¥å + è¯å®¡æç» + æ¨ä»è®°å½ãéè¿â20 å·²ç«é¡¹ã驳åâ35 已驳åãåæ¶âéå 0 è稿", "roles": ["å¦ä¼ç§ä¹¦å¤ï¼å½¢å¼å®¡æ¥ï¼", "è¯å®¡ä¸å®¶ï¼è¯å®¡èç¹ï¼", "å¦ä¼çäºä¼ï¼ç«é¡¹å®¡æ¹ï¼"]}, |
| | | {"stage": "ç«é¡¹ä¸éç¥", "action": "çå¬å¨ ResearchApplicationStatusListener å
åå审æ¹ç¶æï¼å®¡æ¹éè¿ååè° approveApplicationï¼çæç«é¡¹ç¼å· LX+yyyyMMdd+6使µæ°´ ä¸ approveTimeï¼å·²æç¼å·åå¹çè·³è¿ï¼ãç¹ãåå¸ç«é¡¹éç¥ãçæ system_notice å
¬åï¼æ é¢ãå
³äºå
¬å¸ç«é¡¹è¯¾é¢çéç¥ãï¼æ£æå«è¯¾é¢å/ç«é¡¹ç¼å·/ç±»å«/ç³æ¥äºº/åä½/èµå©éé¢ï¼ï¼åå noticeId é²éå¤ââéå¤ç¹å»æå·²å叿¦æªå¹¶åç¥ä¸æ¬¡å叿¶é´", "roles": ["课é¢ç®¡çå", "å¦ä¼ç§ä¹¦å¤"]}, |
| | | {"stage": "ç»è´¹æ¨ä»", "action": "ä»
ãå·²ç«é¡¹(20)ãçç³æ¥åå¯ç»è®°æ¨æ¬¾è®°å½ï¼æ¹æ¬¡åç§°/æ¨ä»éé¢/æ¨ä»æ¥æ/æ¶æ¬¾åä½/夿³¨/åè¯éä»¶ï¼ï¼åè¯å¿
å¡«ãç»è®°æ¶ä¸æ¡é¾å®æï¼â 课é¢ä¾§è½ research_fund_record å°è´¦ï¼å
ç½®å¾
æ¨ä»ï¼â¡ å䏿¹ blob åç»å°è¯¾é¢å°è´¦ä¸è´¢å¡æ¥éå â¢ ç» yudao-module-finance-api èªå¨çæ 1:1 ç finance_reimbursement æ¥éåï¼1 è¡æç»ï¼è´¹ç¨ç±»å=å
¶ä»ãå票éé¢=æ¨ä»éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æãè´¹ç¨è¯´æ=ã课é¢ã课é¢åã第Næ/第N次ç»è´¹æ¨æ¬¾ãï¼â£ ç«å³æäº¤ BPM æ¥éå®¡æ¹ â¤ å°è´¦å忥éåå·å¹¶ç½®ãæ¥é审æ¹ä¸(15)ããé颿 ¡éªï¼å·²ç»è®°éé¢ + æ¬æ¬¡éé¢ ä¸å¾è¶
åºè¯¥åç³è¯·ç»è´¹ï¼è¶
åºæ¶æç¤ºæ¥åºæ¬æ¬¡ãå·²ç»è®°ãå计ãé¢ç®å项æ°å¼ãç¶æç±ç³»ç»é©±å¨ï¼0å¾
æ¨ä»/15æ¥é审æ¹ä¸/20å·²æ¨ä»/30已驳åï¼åªæãå¾
æ¨ä»ãå¯å ï¼å é¤è卿¸
çè´¢å¡ä¾§è稿æ¥éåï¼ï¼ãå¾
æ¨ä»ãã已驳åã坿¹å¹¶éæ°åèµ·æ¥éï¼å·²é©³åæ¹åæ¸
空驳ååå 䏿¶é´ï¼ï¼åæ¶æµç¨åéåãå¾
æ¨ä»(0)ãï¼å起人æ¤ååªæå®ä¾éååèµ·èç¹ãæµç¨æªç»æï¼å°è´¦ä¿æãæ¥é审æ¹ä¸(15)ãï¼ééæ°æäº¤åæç»§ç»èµ°å®¡æ¹ï¼ãè´¢å¡å®¡æ¹åç±»ä¸æ²¡æå·²å叿µç¨æ¶ç´æ¥æ¥éä¸ä¸å»ºåï¼ä¸çå¤å¿è稿æ¥éå", "roles": ["å¦ä¼è´¢å¡", "课é¢ç®¡çå", "è´¢å¡å®¡æ ¸äºº", "è´¢å¡ä¸»ç®¡"]}]}, |
| | | {"stage": "ç»è´¹æ¨ä»", "action": "ä»
ãå·²ç«é¡¹(20)ãçç³æ¥åå¯ç»è®°æ¨æ¬¾è®°å½ï¼æ¹æ¬¡åç§°/æ¨ä»éé¢/æ¨ä»æ¥æ/æ¶æ¬¾åä½/夿³¨/åè¯éä»¶ï¼ï¼åè¯å¿
å¡«ãç»è®°æ¶ä¸æ¡é¾å®æï¼â 课é¢ä¾§è½ research_fund_record å°è´¦ï¼å
ç½®å¾
æ¨ä»ï¼â¡ å䏿¹ blob åç»å°è¯¾é¢å°è´¦ä¸è´¢å¡æ¥éå â¢ ç» yudao-module-finance-api èªå¨çæ 1:1 ç finance_reimbursement æ¥éåï¼1 è¡æç»ï¼è´¹ç¨ç±»å=å
¶ä»ãå票éé¢=æ¨ä»éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æãè´¹ç¨è¯´æ=ã课é¢ã课é¢åã第Næ/第N次ç»è´¹æ¨æ¬¾ãï¼â£ ç«å³æäº¤ BPM æ¥éå®¡æ¹ â¤ å°è´¦å忥éåå·å¹¶ç½®ãæ¥é审æ¹ä¸(15)ããé颿 ¡éªï¼å·²ç»è®°éé¢ + æ¬æ¬¡éé¢ ä¸å¾è¶
åºè¯¥åç³è¯·ç»è´¹ï¼è¶
åºæ¶æç¤ºæ¥åºæ¬æ¬¡ãå·²ç»è®°ãå计ãé¢ç®å项æ°å¼ãç¶æç±ç³»ç»é©±å¨ï¼0å¾
æ¨ä»/15æ¥é审æ¹ä¸/20å·²æ¨ä»/30已驳åï¼åªæãå¾
æ¨ä»ãå¯å ï¼å é¤è卿¸
çè´¢å¡ä¾§è稿æ¥éåï¼ï¼ãå¾
æ¨ä»ãã已驳åã坿¹å¹¶éæ°åèµ·æ¥éï¼å·²é©³åæ¹åæ¸
空驳ååå 䏿¶é´ï¼ï¼åæ¶æµç¨åéåãå¾
æ¨ä»(0)ãï¼å起人æ¤ååªæå®ä¾éååèµ·èç¹ãæµç¨æªç»æï¼å°è´¦ä¿æãæ¥é审æ¹ä¸(15)ãï¼ééæ°æäº¤åæç»§ç»èµ°å®¡æ¹ï¼ãè´¢å¡å®¡æ¹åç±»ä¸æ²¡æå·²å叿µç¨æ¶ç´æ¥æ¥éä¸ä¸å»ºåï¼ä¸çå¤å¿è稿æ¥éå", "roles": ["å¦ä¼è´¢å¡", "课é¢ç®¡çå", "è´¢å¡å®¡æ ¸äºº", "è´¢å¡ä¸»ç®¡"]}]}, |
| | | {"id": "archive", "name": "æ¡£æ¡ç®¡çæµç¨", "mermaid": "mermaid/15-archive-flow.mmd", "color": "#7fb3d5", |
| | | "summary": "ç¬ç«æ¡£æ¡æ¨¡åï¼yudao-module-archiveï¼ï¼ä¹¦æ¶åç±»ï¼åå±ååï¼è§æ´ â æ¡£æ¡ç»è®°ï¼çµåéä»¶ + å®ä½ä½ç½®ååæ®µï¼å¯çº§ä¸æ¡£ï¼â åé
ç»è®°èµ° BPM 两级审æ¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ï¼â 审æ¹éè¿æ¡£æ¡è½¬ãååºä¸ãâ å½è¿ç»è®°åãå¨åºãå½¢ææµè½¬éç¯ â 龿æªè¿æ¥è¯¢æ¶å®æ¶è®¡ç®å¹¶å¨å表æ 红 â åé䏿µè½¬ç»è®¡ï¼æ»æ°/å¨åº/ååºä¸/龿 + å类·å¯çº§Â·è½½ä½ä¸ç»åå¸ï¼ãåæ¶æ¥æ¶è¯¾é¢ï¼å·²ç«é¡¹ï¼ãä¼åï¼æ£å¸¸ï¼ãè´¢å¡ï¼å·²éè¿ï¼ä¸æ¹çã彿¡£ãèå¨ï¼ç»æ°å»ºç yudao-module-archive-api çææ¡£æ¡å¹¶å忥æºè¡¨ archive_document_idãä¼è®®/å
建档æ¡ç³»ç»å
æ æ¥æºæ¨¡åï¼ä»
æå·¥å½å
¥ã", |
| | | "steps": [ |
| | | {"stage": "建åç±»", "action": "æ°å»ºåç±»å¯æç¶å类形æåç±»æ ï¼ç¼ç code å
¨å±å¯ä¸ï¼ï¼è®¾æåºã说æãé»è®¤å¯çº§ä¸å¯ç¨ç¶æï¼6 æ¡åå§åç±»ï¼ä¼åæ¡£æ¡/è¯¾é¢æ¡£æ¡/ä¼è®®æ¡£æ¡/è´¢å¡æ¡£æ¡ï¼é»è®¤å¯çº§=ä¿å¯ 3ï¼/æä¹¦æ¡£æ¡/å
建档æ¡ãæååç±»æè¯¥åç±»ä¸å·²ææ¡£æ¡æ¶ç¦æ¢å é¤ï¼ç¶åç±»ä¸è½è®¾ä¸ºèªèº«æå
¶ååç±»", "roles": ["æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "ç»è®°æ¡£æ¡", "action": "å¡«æ é¢ãåç±»ãå¯çº§ï¼1å
¬å¼/2å
é¨/3ä¿å¯ï¼ãè½½ä½ï¼1çµå/2å®ä½/3çµå+å®ä½ï¼ã彿¡£æ¥æãæè¦ãå
³é®è¯ï¼éçµååä¸ä¼ éä»¶ï¼èµ° system éä»¶ä¸å¿ï¼recordType=archive_documentï¼å
/system/storage-blob/upload å blobId åéä¿å请æ±ç blobIds æäº¤ï¼å
¨éæ¿æ¢è¯ä¹ï¼ï¼éå®ä½å填书æ¶å·/å±å·/åå·/åå·æ¡£æ¡çä¸åæ¾ä½ç½®æè¿°ï¼åç«¯çææ¡£æ¡ç¼å· DA+yyyyMMdd+6使µæ°´ï¼Redis æ¯æ¥éç½®ï¼ï¼ç¶æãå¨åº(10)ã", "roles": ["æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "æ£ç´¢", "action": "ææ¡£æ¡ç¼å·/æ é¢/å
³é®è¯ tags/æ¥æºåå·/åç±»/å¯çº§/è½½ä½/ç¶æ/彿¡£æ¥æåºé´å¤æ¡ä»¶æ£ç´¢ï¼æ¯æ Excel 导åºãå¯çº§=ä¿å¯(3) çæ¡£æ¡ï¼å½åç¨æ·æ archive:document:sensitive æ¶å表ä¸å¯¼åºå¼ºå¶è¿æ»¤æãç´è¿è¯¦æ
æ¥å£æ¥æ æéé误", "roles": ["æ¡£æ¡ç®¡çå", "å
¨å坿¥å
¬å¼æ¡£"]}, |
| | | {"stage": "䏿¹å½æ¡£", "action": "课é¢ç³æ¥ä¹¦ï¼ä»
å·²ç«é¡¹ 20ï¼ãä¼åï¼ä»
æ£å¸¸ 1ï¼ãè´¢å¡æ¥éåï¼ä»
å·²éè¿ 20ï¼çå表页åæä¸ä¸ªã彿¡£ãæé®ï¼ç» yudao-module-archive-api ç archiveBySource æãæ¥æºç±»å + æ¥æºåæ® IDãå¹ççææ¡£æ¡ï¼æ¥æºåå·/æ é¢ä½ä¸ºå¿«ç
§åå
¥æ¡£æ¡ï¼æºåéä»¶ä¸å¹¶å¸¦å
¥æ¡£æ¡ï¼è´¢å¡æ¡£æ¡å¯çº§åºå®ä¸ºãä¿å¯ãï¼ï¼å¹¶å忥æºè¡¨ archive_document_id ä½ä¸ºå·²å½æ¡£ç¡¬æ è®°ï¼éå¤ç¹å»ç±æ¥æºä¾§æ¦æªå¹¶æç¤ºå·²çæçæ¡£æ¡ç¼å·ãè´¢å¡ä¾§ã彿¡£ãä¸å
¶æ¢æ 20â40 ç¶ææ¨è¿å¨åä¸äºå¡å
å å æ§è¡", "roles": ["课é¢ç®¡çå", "ä¼å管çå", "è´¢å¡"]}, |
| | | {"stage": "åé
ç»è®°", "action": "éæ¡£æ¡ï¼ä»
ãå¨åº(10)ãå¯éï¼ãå¡«åé
人/é¨é¨/èç³»çµè¯ãåé
æ¥æãåé
ç®çãå½è¿æéï¼çæåé
åå· JY+yyyyMMdd+6使µæ°´ï¼ç¶æãè稿(0)ããæäº¤åæ ¡éªå䏿¡£æ¡ä¸å¾åå¨ã审æ¹ä¸(15)ãæãååºä¸(20)ãçåé
åï¼å½ä¸æ¶æå·²åå¨çåé
åå·ç²¾ç¡®æ¥éï¼submit å
è§£ææµç¨åè¡¨ï¼æ å·²å叿µç¨ç´æ¥æ¥éãä¸çå¤å¿è稿ï¼å建åï¼åå processInstanceId å¹¶ç½®ã审æ¹ä¸(15)ã", "roles": ["åé
人", "æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "åé
审æ¹", "action": "BPM æµç¨ archive_borrow_approve 两级顺åºå®¡æ¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ï¼å®¡æ¹æ¹æ³ä¸å®¡æ¹äººå¨æµç¨å®ä¹å
é
ç½®ï¼å端åªéæµç¨ä¸åæ» keyï¼å®¡æ¹ä¸å¿ç»èªå®ä¹è¡¨åæ¥çè·¯å¾ /archive/borrow/detail/approve/index.vue åªè¯»åæ¾åé
å䏿¡£æ¡ä¿¡æ¯ï¼ã审æ¹éè¿ç± ArchiveBorrowStatusListener ç½®ãååºä¸(20)ãå¹¶åå approveTimeï¼åæ¶æ¡ä»¶æ´æ°æ¡£æ¡ç¶æä¸ºãååºä¸ãï¼å½±å 0 è¡è¯´ææ¡£æ¡å·²è¢«å
¶å®æµç¨å ç¨ â æ¥éå¹¶åæ»ï¼ä¿è¯å䏿¡£æ¡ä¸ä¼è¢«ä¸¤æ¡æµç¨åæ¶ååºï¼ï¼é©³åç½®ã已驳å(35)ãå¹¶åå驳ååå 䏿¶é´ï¼ä¿®æ¹åå¯éæ°æäº¤ï¼åæ¶æµç¨éåãè稿(0)ã", "roles": ["æ¡£æ¡ç®¡çåï¼å®¡æ ¸ï¼", "å管é¢å¯¼ï¼å®¡æ¹ï¼"]}, |
| | | {"stage": "å½è¿ç»è®°", "action": "ä»
ãååºä¸(20)ãå¯ç»è®°å½è¿ï¼å¡«å½è¿å¤æ³¨ â æ¡ä»¶æ´æ°åé
åç¶æå°ãå·²å½è¿(30)ãå¹¶åå returnTime ä¸å½è¿ç¡®è®¤äººï¼åæ¶æ¡ä»¶æ´æ°æ¡£æ¡åãå¨åº(10)ãï¼å½¢æå®æ´æµè½¬éç¯ï¼æ´æ° 0 è¡è¯´æç¶æå·²ååï¼æ¥æç¡®é误", "roles": ["æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "龿æé", "action": "ä¸å»ºå®æ¶ä»»å¡ãä¸åç«å
ä¿¡ï¼é¾æä»
卿¥è¯¢æ¶å®æ¶è®¡ç®ï¼ç¶æ=ååºä¸ ä¸ å½è¿æéæ©äºä»å¤©ï¼é¾æå¤©æ°=ä»å¤©âå½è¿æéï¼ï¼åé
å表çã龿ã忏²æçº¢è²ã龿 N å¤©ãæ ç¾ï¼å¦æä¾ /archive/borrow/overdue-page ç¬ç«å
¥å£ï¼å表页æãåªç龿ãåæ¢å¨ /page ä¸ /overdue-page ä¹é´åæ¢æ°æ®æº", "roles": ["æ¡£æ¡ç®¡çå"]}, |
| | | {"stage": "æ¡£æ¡ç»è®¡", "action": "ç»è®¡é¡µå±ç¤ºæ¡£æ¡æ»æ°ãå¨åºæ°ãååºä¸æ°ã龿æªè¿æ°åå¼ å¡çï¼ä»¥åæåç±»åå¸ï¼é¥¼å¾ï¼ãæå¯çº§åå¸ï¼æ±å¾ï¼ãæè½½ä½åå¸ï¼é¥¼å¾ï¼ä¸ç»åå¸ï¼æ°æ®æ¥èª /archive/stat/overview ç忬¡èåæ¥è¯¢", "roles": ["æ¡£æ¡ç®¡çå", "管çå±"]}]}, |
| | | {"id": "ai", "name": "AI ä¸å¡æµç¨", "mermaid": "mermaid/11-ai-business-flow.mmd", "color": "#56c8d8", |
| | | "summary": "ç»ä¸æ¨¡å¼ï¼ä¸å¡ä¾§æ¶éä¸ä¸æ(å¿
è¦æ¶è° MDM/SRM/CRM API ååç§°)âç»è£
Promptâchat/chatWithImageâè§£æ JSONâå端é¢å¡«æå»ºè®®ï¼æ Function Callingï¼RAG ç¥è¯åºå·²å»ºæä½ææ ä¸å¡æ¶è´¹ã", |
| | | "steps": [ |
| | |
| | | {"role": "å
¥ä¼ç³è¯·äºº/ä¼å管çå", "modules": ["UMS"], "operations": ["å¡«æ¥ä¸ä¿®æ¹å
¥ä¼ç³è¯·(个人/åä½)", "ä¸ä¼ è¯æææéä»¶", "æäº¤ BPM 审æ¹", "ä¼åå表维æ¤ä¸ä¼åéè®¯å½æ£ç´¢"], "data": ["ums_application", "ums_member"], "scope": "æéç ums:application:create/update/delete/submit · ums:member:create/update/delete/query · ums:member:directoryï¼æ æ°æ®æéé离(å
¨å坿¥é讯å½ï¼ç»´æ¤ç±»æé®å¦åæéç )"}, |
| | | {"role": "ç§ä¹¦å¤/çäºä¼(审æ¹äºº)", "modules": ["UMS", "BPM"], "operations": ["å
¥ä¼ç³è¯·ä¸¤çº§å®¡æ¹ï¼ç§ä¹¦å¤å审 â çäºä¼å®¡è®®"], "data": ["ums_application(ç¶æåå)", "bpm_task"], "scope": "审æ¹äººç± BPM æµç¨å®ä¹é
ç½®ï¼å端ä¸åæ»ï¼éè¿åç³»ç»èªå¨å»ºä¼åä¸ç»å½è´¦å·"}, |
| | | {"role": "课é¢ç³æ¥äºº/课é¢ç®¡çå", "modules": ["RES"], "operations": ["è¯¾é¢æååå¸ä¸æªæ¢(课é¢ç®¡çå)", "æ°å»ºä¸ä¿®æ¹è¯¾é¢ç³æ¥ä¹¦(éä¼å带åºç³æ¥äººä¿¡æ¯ãä¸ä¼ ç³æ¥éä»¶)", "æäº¤ BPM 审æ¹ã驳ååä¿®æ¹éæ", "æ¯æ/æ¯æ¹æ¬¡ç»è®°ç»è´¹æ¨ä»è®°å½ä¸åè¯", "åå¸ç«é¡¹éç¥"], "data": ["research_guideline", "research_application", "research_topic_review", "research_fund_record"], "scope": "æéç research:guideline:create/update/delete/publish · research:application:create/update/delete/submit/notice · research:review:create/update/delete · research:fund:create/update/deleteï¼æ æ°æ®æéé离(åè¡¨ä¸æç³è¯·äººè¿æ»¤)ï¼æé®åæéç æ§å¶"}, |
| | | {"role": "æ¡£æ¡ç®¡çå", "modules": ["ARC"], "operations": ["æ¡£æ¡åç±»(书æ¶)ç»´æ¤ï¼åå±å»ºç±»ã设é»è®¤å¯çº§ãå¯ç¨åç¨", "æ¡£æ¡ç»è®°ä¸å¤æ¡ä»¶æ£ç´¢/导åºï¼çµåéä»¶ + å®ä½ä½ç½®ååæ®µãå¯çº§ä¸æ¡£ï¼", "åé
ç»è®°ãæäº¤å®¡æ¹", "å½è¿ç»è®°ä¸å½è¿å¤æ³¨", "æ¥çæ¡£æ¡ç»è®¡ï¼åé䏿µè½¬ï¼"], "data": ["archive_category", "archive_document", "archive_borrow"], "scope": "æéç archive:category:create/update/delete/query · archive:document:create/update/delete/query/export · archive:borrow:create/update/delete/query/submit/return · archive:stat:queryï¼å¯çº§=ä¿å¯(3) çæ¡£æ¡å¦é archive:document:sensitive æè½æ¥çï¼æ 该æéæ¶å表ä¸å¯¼åºå¼ºå¶è¿æ»¤ï¼æ æ°æ®æéé离(åè¡¨ä¸æäººè¿æ»¤)ï¼æé®åæéç æ§å¶"}, |
| | | {"role": "åé
人", "modules": ["ARC"], "operations": ["ç»è®°åé
åï¼éå¨åºæ¡£æ¡ãå¡«åé
人信æ¯/åé
æ¥æ/åé
ç®ç/å½è¿æéï¼", "æäº¤ BPM åé
审æ¹", "æ¥çåé
è¿åº¦ï¼è·³ BPM æµç¨å®ä¾è¯¦æ
ï¼"], "data": ["archive_borrow", "archive_document(ä»
å¨åº 10 å¯é)"], "scope": "æéç archive:borrow:create/query/submitï¼ä»
è稿(0)ä¸å·²é©³å(35)坿¹å¯éæãä»
è稿å¯å ï¼å䏿¡£æ¡ä¸å¾åæ¶åå¨å®¡æ¹ä¸(15)æååºä¸(20)çåé
å"}, |
| | | {"role": "æ¡£æ¡ç®¡çå/å管é¢å¯¼(åé
审æ¹äºº)", "modules": ["ARC", "BPM"], "operations": ["åé
审æ¹ä¸¤çº§ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹", "å¨å®¡æ¹ä¸å¿éè¿èªå®ä¹è¡¨ååªè¯»æ¥çåé
å䏿¡£æ¡ä¿¡æ¯"], "data": ["archive_borrow(ç¶æåå)", "archive_document(ç¶æé审æ¹ç»ææ¡ä»¶æ´æ°)", "bpm_task"], "scope": "审æ¹äººä¸å®¡æ¹æ¹æ³å¨ BPM æµç¨å®ä¹ archive_borrow_approve å
é
ç½®(é»è®¤ä¾æ¬¡å®¡æ¹Â·è§è²å
åº)ï¼å端ä¸åæ»å®¡æ¹äººï¼é¨ç½²åç±ç®¡çå卿µç¨è®¾è®¡å¨æå®é
ç»ç»è°æ´"}, |
| | | {"role": "彿¡£ç»å人(课é¢/ä¼å/è´¢å¡)", "modules": ["ARC", "RES", "UMS", "FIN"], "operations": ["å¨è¯¾é¢ç³æ¥ä¹¦å表对ãå·²ç«é¡¹ãåæ®ç¹ã彿¡£ã", "å¨ä¼ååè¡¨å¯¹ãæ£å¸¸ãä¼åç¹ã彿¡£ã", "卿¥éåå表对ãå·²éè¿ãåæ®ç¹ã彿¡£ã(ä¸å
¶æ¢æ 20â40 彿¡£åäºå¡å å )"], "data": ["archive_document(çæ)", "research_application / ums_member / finance_reimbursement(åå archive_document_id)"], "scope": "æéç research:application:archive · ums:member:archive · finance:reimbursement:archiveï¼è°ç¨ yudao-module-archive-api ç archiveBySource å¹ççææ¡£æ¡ï¼éå¤ç¹å»ç±æ¥æºä¾§æéè¯¯ç æ¦æªå¹¶ç»åºå·²çææ¡£æ¡ç¼å·"}, |
| | | {"role": "è¯å®¡ä¸å®¶/å¦ä¼ç§ä¹¦å¤Â·çäºä¼(课é¢å®¡æ¹äºº)", "modules": ["RES", "BPM"], "operations": ["å¨å®¡æ¹ä¸(15)å½å
¥æ¬äººçä¸å®¶è¯åæç»(å项åå¼ + ç»è®º + æè§)", "ç§ä¹¦å¤å½¢å¼å®¡æ¥ â ä¸å®¶è¯å®¡ â å¦ä¼ç«é¡¹å®¡æ¹ ä¸èç¹é¡ºåºå®¡æ¹", "å¨å®¡æ¹ä¸å¿éè¿èªå®ä¹è¡¨ååªè¯»æ¥çç³æ¥ä¹¦æ£æãè¯å®¡æç»ä¸æ¨ä»è®°å½"], "data": ["research_topic_review", "research_application(ç¶æåå)", "bpm_task"], "scope": "è¯åå½å
¥è¦æ±ç³æ¥åå¤äºå®¡æ¹ä¸(15)·ç±è¯¾é¢ç®¡çåæä¸å®¶ä¾æ® research:review:* æéç æ§è¡ï¼å®¡æ¹äººä¸å®¡æ¹æ¹æ³å¨ BPM æµç¨å®ä¹ research_topic_approve å
é
ç½®(é»è®¤ä¾æ¬¡å®¡æ¹Â·è§è²å
åº)ï¼å端ä¸åæ»å®¡æ¹äººï¼é¨ç½²åç±ç®¡çå卿µç¨è®¾è®¡å¨æå¦ä¼å®é
ç»ç»è°æ´"} |
| | | ] |
| | | }</script> |
| | |
| | | ç§ä¹¦å¤çäºä¼ä¸çº§å®¡æ¹ |
| | | ç«é¡¹ç¼å·ä¸ç«é¡¹éç¥å
Œ |
| | | ç»è´¹æ¨ä»è®°å½ä¸åè¯ |
| | | æ¡£æ¡ç®¡ç ARCHIVE ç¬ç« |
| | | æ¡£æ¡å类书æ¶åå±åå |
| | | æ¡£æ¡ææ¡£éä¸åå¨ä¸æ£ç´¢ |
| | | çµåéä»¶ä¸å®ä½ä½ç½®å
¼å
· |
| | | å¯çº§ç®¡æ§ä¸æææé |
| | | åé
ç»è®°ä¸ä¸¤çº§å®¡æ¹ |
| | | å½è¿ç»è®°ä¸æµè½¬éç¯ |
| | | 龿æªè¿å®æ¶æé |
| | | æ¡£æ¡åé䏿µè½¬ç»è®¡ |
| | | 课é¢ä¼åè´¢å¡ä¸æ¹å½æ¡£èå¨ |
| | | ç产管ç MES |
| | | 主ç产计å MPS |
| | | ç产工å |
| | |
| | | RES -->|ç«é¡¹éç¥å system_notice å
Œ| SYS |
| | | RES -->|ç»è´¹æ¨ä» 1:1 èªå¨çæ finance_reimbursement æ¥éåå¹¶æäº¤å®¡æ¹Â·èµ°æ°å»ºç yudao-module-finance-api| FIN |
| | | FIN -.->|æ¥é审æ¹ç»æç» BPM äºä»¶åè° ResearchFundStatusListener ååè¯¾é¢æ¨æ¬¾å°è´¦| RES |
| | | ARC[æ¡£æ¡ç®¡ç ç¬ç«æ¨¡å yudao-module-archive åç±» æ¡£æ¡ åé
å½è¿ ç»è®¡] -.->|å¤ç¨ BPM 两级审æ¹ä¸ç¶æåè°Â·æµç¨ key=archive_borrow_approve| BPM |
| | | ARC -.->|æ¡£æ¡çµåéä»¶èµ°éä»¶ä¸å¿ recordType=archive_document / archive_borrow| STG |
| | | RES -->|å·²ç«é¡¹ç³æ¥å彿¡£Â·ç» yudao-module-archive-api çææ¡£æ¡å¹¶åå archive_document_id| ARC |
| | | UMS -->|æ£å¸¸ç¶æä¼å彿¡£Â·ç» yudao-module-archive-api çææ¡£æ¡å¹¶åå archive_document_id| ARC |
| | | FIN -->|å·²éè¿æ¥éå彿¡£Â·åäºå¡å å çæãä¿å¯ãæ¡£æ¡å¹¶åå archive_document_id| ARC |
| | | ARC -.->|ä¸ååä¾èµ ums / finance / research·ä»
æä¾ -api 忍¡åç±ä¸æ¹æå¨è°å½æ¡£| RES |
| | | </pre> |
| | | <pre style="display:none" class="mmd-src" data-mmd="09-data-flow"> |
| | | flowchart LR |
| | |
| | | RBM -->|"æ¥éåè¿å
¥å䏿¡ BPM æµç¨ finance_reimbursement_approve(è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹)·businessKey=æ¥éå ID"| RBS |
| | | RBS -.->|"BPM çå¬å¨ ResearchFundStatusListener åå课é¢å°è´¦ éè¿20 驳å30(+驳ååå /æ¶é´) æ¤å0"| RFR |
| | | RESNOTE[䏿已坹æ¥è´¢å¡Â·è¯¾é¢å°è´¦ä¸ºæ¨æ¬¾å°è´¦Â·æ¥éå为财å¡åºè´¦åè¯Â·ä¸¤è¾¹ä»¥ reimbursement_id 软å
³èæ å¤é®Â·è´¢å¡ä¾§ç´æ¥å åä¼ç䏿¬ç©º ID ç±ä¸å¡æ¥éå
åº] -.-> RFR |
| | | subgraph S7 [ç¬ç«æ¡£æ¡ç®¡ç archive] |
| | | ACD[æ¡£æ¡åç±» archive_category æ å½¢] --> ADO[æ¡£æ¡ archive_document] |
| | | ADO --> ABR[åé
å archive_borrow] |
| | | ADO --> AST[æ¡£æ¡ç¶æ 10å¨åº 20ååºä¸] |
| | | ABR --> ABS[åé
ç¶æ 0è稿 15审æ¹ä¸ 20ååºä¸ 30å·²å½è¿ 35已驳å] |
| | | end |
| | | ACD -->|"æ°å»ºæ¡£æ¡æåç±»å¸¦åº default_secret_level é»è®¤å¯çº§Â·è´¢å¡åç±»=3 ä¿å¯"| ADO |
| | | ADO -.->|"çµåéä»¶ recordType=archive_document·表å
ä¸åæä»¶å°å"| PDFARCH |
| | | ADO -->|"æ¡£æ¡ç¼å· DA + yyyyMMdd + 6使µæ°´(RedisÂ·æ¯æ¥éç½®)·åé
åå· JY + åæ¥æµæ°´"| ADO |
| | | RAP -->|"æå¨ã彿¡£ãç» yudao-module-archive-api.archiveBySource(sourceType=2·å¯çº§ 2å
é¨Â·sourceNo=ç«é¡¹ç¼å·Â·blobIds=ç³æ¥ä¹¦éä»¶)·å¹ç"| ADO |
| | | UMSM -->|"æå¨ã彿¡£ã(sourceType=3·å¯çº§ 2å
é¨Â·sourceNo=ä¼åç¼å·Â·blobIds=ä¼åææ)"| ADO |
| | | RBM -->|"æ¢æ archive 彿¡£åäºå¡å å archiveBySource(sourceType=4·å¯çº§ 3ä¿å¯Â·sourceNo=æ¥éåå·Â·blobIds=å票éä»¶)·æ¥éå 20â40 ä¸çææ¡£æ¡ä¸¤è¡¨å¹¶å"| ADO |
| | | ADO -->|"å忥æºè¡¨ archive_document_id ä½ä¸ºå·²å½æ¡£ç¡¬æ è®°Â·æ¥æºä¾§éå¤ç¹å½æ¡£æå
¶éè¯¯ç æ¦æªå¹¶ç»åºå·²çææ¡£æ¡ç¼å·"| RAP |
| | | ADO -->|"åå archive_document_id"| RBM |
| | | ABR -->|"submit åæ ¡éª: å䏿¡£æ¡ä¸å¾å·²æ 审æ¹ä¸ 15 æ ååºä¸ 20 çåé
å·å½ä¸æ¥å·²åç¨(带档æ¡åä¸å·²åå¨åé
åå·)"| ABS |
| | | ABS -.->|"BPM çå¬å¨ ArchiveBorrowStatusListener åå éè¿20 驳å35 åæ¶éå0"| ABR |
| | | ABS -->|"ä¸å¡å¨ä½: å½è¿ç»è®° ä»
æ¾è¡ 20 ååºä¸ â 30 å·²å½è¿Â·åå returnTime ä¸å½è¿ç¡®è®¤äºº"| ABR |
| | | ABR -->|"审æ¹éè¿æ¡ä»¶æ´æ° archive_document SET status=20 WHERE status=10·å½è¿æ¡ä»¶æ´æ°å 10·影å 0 è¡å³æ¥å²çªå¹¶åæ»"| AST |
| | | ABR -.->|"龿ä¸è½åºÂ·æ¥è¯¢æ¶å®æ¶è®¡ç® status=20 ä¸ return_deadline æ©äºä»å¤©Â·overdue-page 为ç¬ç«å
¥å£éæ¥è¯¢åæ°"| ABS |
| | | ADO -.->|"å¯çº§=3 ä¿å¯ 䏿 archive:document:sensitive æ¶Â·è¯¦æ
æ¥é·å表ä¸å¯¼åºå¼ºå¶è¿æ»¤ secret_level ä¸çäº 3"| SEC3[æéç¹ archive:document:sensitive] |
| | | ARCNOTE[ç¬ç«æ¨¡åÂ·ä¸æ¹å½æ¡£ä¸ºå表页æå¨æé®èéäºä»¶é©±å¨Â·å½æ¡£åªçææ¡£æ¡ä¸å忥æºåæ®ä¸å¡ç¶æ(è´¢å¡ä¾§ 20â40 æ¯æ¢æé»è¾Â·æ¬æ¨¡åä»
å å )] -.-> ADO |
| | | </pre> |
| | | <pre style="display:none" class="mmd-src" data-mmd="10-business-object"> |
| | | erDiagram |
| | |
| | | research_application ||--o{ research_fund_record : "ç»è´¹æ¨ä»è®°å½" |
| | | research_fund_record ||--|| finance_reimbursement : "1:1 çæåºè´¦æ¥éå(软å
³è reimbursement_id)" |
| | | ums_member ||--o{ research_application : "ç³æ¥äºº(软å
³èæ å¤é®)" |
| | | archive_category ||--o{ archive_document : "åç±»å½æ¡£(æ 形书æ¶)" |
| | | archive_document ||--o{ archive_borrow : "åé
ç»è®°" |
| | | research_application ||--o| archive_document : "å·²ç«é¡¹å½æ¡£(archive_document_id)" |
| | | ums_member ||--o| archive_document : "æ£å¸¸ä¼å彿¡£(archive_document_id)" |
| | | finance_reimbursement ||--o| archive_document : "å·²éè¿æ¥é彿¡£(archive_document_id)" |
| | | </pre> |
| | | <pre style="display:none" class="mmd-src" data-mmd="11-ai-business-flow"> |
| | | flowchart TD |
| | |
| | | BOUND["ç¬ç«æ¨¡å yudao-module-research·对 ums_member 为软å
³è(æ å¤é®)Â·å¯¹è´¢å¡æ¨¡åèµ° -api 忍¡åæ¬å°è°ç¨Â·ä»
å¤ç¨ BPM 审æ¹ãsystem å
¬åä¸éä»¶ä¸å¿"] --- K1 |
| | | </pre> |
| | | |
| | | <pre style="display:none" class="mmd-src" data-mmd="15-archive-flow"> |
| | | flowchart TD |
| | | subgraph P1 [æ¡£æ¡å类·书æ¶ç®¡ç archive_category] |
| | | C1[æ°å»ºå类·å¯éç¶å类形æåç±»æ ] --> C2["å¡« åç±»åç§° · ç¼ç code · æåº · å类说æ · é»è®¤å¯çº§ · ç¶æ"] |
| | | C2 --> C3["ç¼ç å
¨å±å¯ä¸ uk_code · ç¶æ 0å¯ç¨ 1åç¨ Â· é»è®¤å¯çº§ 1å
¬å¼ 2å
é¨ 3ä¿å¯"] |
| | | C3 --> C4["åå§ 6 æ¡åç±»: ä¼åæ¡£æ¡ member · è¯¾é¢æ¡£æ¡ research · ä¼è®®æ¡£æ¡ meeting · è´¢å¡æ¡£æ¡ finance(é»è®¤å¯çº§=ä¿å¯ 3) · æä¹¦æ¡£æ¡ document · å
å»ºæ¡£æ¡ party"] |
| | | C4 --> C5["坿¹å¯å · æååç±»ç¦å · 该åç±»ä¸ææ¡£æ¡ç¦å · ç¶åç±»ä¸è½æ¯èªèº«æå
¶ååç±» · åç¨åç±»ä¸è½æ°å¢æ¡£æ¡"] |
| | | end |
| | | subgraph P2 [æ¡£æ¡ç®¡ç archive_document] |
| | | D1["æ°å»ºæ¡£æ¡: æ é¢ Â· åç±» · å¯çº§ · è½½ä½(1çµå 2å®ä½ 3çµå+å®ä½) · 彿¡£æ¥æ · æè¦ · å
³é®è¯ tags"] --> D2["å®ä½ä½ç½®ååæ®µ: 书æ¶å· shelfNo · å±å· layerNo · åå· columnNo · åå·æ¡£æ¡ç boxNo · åæ¾ä½ç½®æè¿° storePlace"] |
| | | D2 --> D3["çµåéä»¶èµ° system éä»¶ä¸å¿ · recordType=archive_document · 表å
ä¸åæä»¶å°å · blobIds 为å
¨éæ¿æ¢è¯ä¹"] |
| | | D3 --> D4["æ¡£æ¡ç¼å· DA + yyyyMMdd + 6使µæ°´ (RedisÂ·æ¯æ¥éç½®)"] |
| | | D4 --> D5["ç¶æ 10 å¨åº · 坿¹å¯å "] |
| | | D5 -->|"åé
审æ¹éè¿"| D6["ç¶æ 20 ååºä¸ · ç¦æ¹ · å卿ªå½è¿åé
åæ¶ç¦å "] |
| | | D6 -->|"å½è¿ç»è®°"| D5 |
| | | end |
| | | subgraph P3 [䏿¹å½æ¡£èå¨Â·å表页æå¨ã彿¡£ãæé®âyudao-module-archive-api] |
| | | AD["ArchiveDocumentApi.archiveBySource å¹ç: å
æ source_type + source_id æ¥ Â· å½ä¸ç´æ¥è¿åæ¢ææ¡£æ¡ ID"] |
| | | AD2["æ categoryCode ååç±»(member / research / finance) · åç±»ä¸å卿¥ DOCUMENT_SOURCE_CATEGORY_NOT_EXISTS"] |
| | | AD3["çæ DA ç¼å· + è½åº + bindAttachments(recordType=archive_document)"] |
| | | AD4["å忥æºè¡¨ archive_document_id ä½ä¸ºå·²å½æ¡£ç¡¬æ è®° · æ¥æºä¾§éå¤å½æ¡£æå
¶èªèº«éè¯¯ç æ¦æªå¹¶ç»åºå·²çææ¡£æ¡ç¼å·(archive ä¾§ DOCUMENT_DUPLICATE_SOURCE 为å
åº)"] |
| | | R1["课é¢ç³æ¥ä¹¦ research_application · ä»
status=20 å·²ç«é¡¹ · æé research:application:archive"] -->|"sourceType=2 · å¯çº§ 2å
é¨ Â· sourceNo=ç«é¡¹ç¼å· · blobIds=ç³æ¥ä¹¦éä»¶"| AD |
| | | M1["ä¼å ums_member · ä»
status=1 æ£å¸¸ · æé ums:member:archive"] -->|"sourceType=3 · å¯çº§ 2å
é¨ Â· sourceNo=ä¼åç¼å·"| AD |
| | | F1["è´¢å¡æ¥éå finance_reimbursement · ä»
status=20 å·²éè¿ Â· æé finance:reimbursement:archive"] -->|"sourceType=4 · å¯çº§ 3ä¿å¯ · sourceNo=æ¥éåå· Â· blobIds=å票éä»¶ · 䏿¢æ 20â40 彿¡£åäºå¡å å "| AD |
| | | AD --> AD2 |
| | | AD2 --> AD3 |
| | | AD3 --> AD4 |
| | | end |
| | | AD3 -->|"彿¡£ç»æ: æ°æ¡£æ¡ç´æ¥è½ä¸º å¨åº 10"| D5 |
| | | subgraph P4 [åé
ç»è®°ä¸å®¡æ¹ archive_borrow] |
| | | B1["ç»è®°åé
: éæ¡£æ¡(ä»
å¨åº 10 å¯é) · åé
人 · é¨é¨ · èç³»çµè¯ · åé
æ¥æ · åé
ç®ç · å½è¿æé"] --> B2["åé
åå· JY + yyyyMMdd + 6使µæ°´ (RedisÂ·æ¯æ¥éç½®) · ç¶æ 0 è稿"] |
| | | B2 --> B3["submit åæ ¡éª: å䏿¡£æ¡ä¸å¾åå¨ å®¡æ¹ä¸ 15 æ ååºä¸ 20 çåé
å · å½ä¸æ¥ å·²åç¨(带档æ¡åä¸å·²åå¨åé
åå·)"] |
| | | B3 --> B4["submit ä¼ id ä¸ processDefinitionKey (query åæ°) · å
è§£ææµç¨å表å建å(æ å·²å叿µç¨åç´æ¥æ¥é·ä¸çå¤å¿è稿) · ç¶æ 15 审æ¹ä¸ · åå processInstanceId"] |
| | | B4 --> B5["BPM æµç¨ archive_borrow_approve 两级: æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹"] |
| | | end |
| | | B5 -->|"审æ¹éè¿"| B6["ç¶æ 20 ååºä¸ · åå approveTime · æ¡ä»¶æ´æ°æ¡£æ¡ SET status=20 WHERE status=10(å½±å 0 è¡åæ¥ æ¡£æ¡å·²è¢«å ç¨ å¹¶åæ»)"] |
| | | B5 -->|"审æ¹é©³å"| B7["ç¶æ 35 已驳å · åå驳ååå 䏿¶é´ · ä¿®æ¹åå¯éæ° submit"] |
| | | B5 -->|"åæ¶æµç¨"| B2 |
| | | B6 -->|"å½è¿ç»è®° return · æ¡ä»¶æ´æ° status=20 â 30"| B8["ç¶æ 30 å·²å½è¿ · åå returnTime ä¸å½è¿ç¡®è®¤äºº · å½è¿å¤æ³¨"] |
| | | B8 -->|"æ¡ä»¶æ´æ°æ¡£æ¡ SET status=10 WHERE status=20"| D5 |
| | | B6 -->|"ä»
0 è稿 ä¸ 35 已驳å 坿¹å¯éæ · ä»
0 è稿 å¯å "| B2 |
| | | B6 -->|"ä»
20 ååºä¸ å¯ç»è®°å½è¿"| B8 |
| | | OV["龿ä¸è½åºÂ·æ¥è¯¢æ¶å®æ¶è®¡ç®: status=20 ä¸ return_deadline æ©äºä»å¤© · overdueDays = ä»å¤© å å½è¿æé"] -.-> B6 |
| | | OVP["GET /archive/borrow/overdue-page ç¬ç«å
¥å£(éæ¥è¯¢åæ°) · å表ã龿ã忏²æçº¢è²ã龿 N 天ã · ä¸å»º infra_job ä¸åç«å
ä¿¡ · åè¡¨é¡µå¦æãåªç龿ã忢"] -.-> OV |
| | | ST["æ¡£æ¡ç»è®¡ GET /archive/stat/overview: æ¡£æ¡æ»æ° · å¨åºæ° · ååºä¸æ° · 龿æªè¿æ° + æåç±»/æå¯çº§/æè½½ä½ ä¸ç»åå¸"] -.-> D5 |
| | | SEC["æææ¡£æ¡ç®¡æ§: å¯çº§=3 ä¿å¯ ä¸å½åç¨æ·æ archive:document:sensitive æ¶ Â· 详æ
æ¥å£ç´æ¥æ¥é · å表ä¸å¯¼åºå¼ºå¶è¿æ»¤ secret_level ä¸çäº 3"] -.-> D1 |
| | | ATT["éä»¶ recordType = archive_document / archive_borrow"] -.-> D3 |
| | | ROL["审æ¹ä¸å¿çå: æµç¨å®ä¹è¡¨åç±»å=èªå®ä¹è¡¨å · åå»ºè·¯å¾ /archive/borrow/index · æ¥çè·¯å¾ /archive/borrow/detail/approve/index.vue · æ businessKey åæ¾åé
å"] -.-> B5 |
| | | LIS["çå¬å¨ ArchiveBorrowStatusListener(æµç¨ key=archive_borrow_approve · businessKey=åé
å ID): éè¿â20 ååºä¸ + approveTime å¹¶æ¡ä»¶æ´æ°æ¡£æ¡ â 20 · 驳åâ35 + åå 䏿¶é´ · åæ¶âéå 0 · ä¸ finance/research çå¬å¨è®¢é
ä¸å key äºä¸å¹²æ°"] -.-> B5 |
| | | BOUND["ç¬ç«æ¨¡å yudao-module-archive(å« -api 忍¡å)·ä¾èµ system/bpm·ä¸ååä¾èµ ums/finance/research(é¿å
循ç¯ä¾èµ)Â·ä¸æ¹ä»
ä¾èµ archive-api æå¨è°å½æ¡£"] --- D1 |
| | | </pre> |
| | | |
| | | <script type="module"> |
| | | const DATA = {}; |
| | | async function loadJson(key){ |
| | |
| | | const mmdSrc = {}; |
| | | document.querySelectorAll('pre.mmd-src').forEach(p=>{ mmdSrc[p.dataset.mmd]=p.textContent.trim(); }); |
| | | |
| | | const flowColor = {sales:'var(--c-sale)',purchase:'var(--c-erp)',production:'var(--c-prod)',quality:'var(--c-qc)',warehouse:'var(--c-wm)',aftersales:'var(--c-as)',finance:'var(--c-fin)',ums:'var(--c-ums)',research:'var(--c-res)',ai:'var(--c-ai)'}; |
| | | const flowColor = {sales:'var(--c-sale)',purchase:'var(--c-erp)',production:'var(--c-prod)',quality:'var(--c-qc)',warehouse:'var(--c-wm)',aftersales:'var(--c-as)',finance:'var(--c-fin)',ums:'var(--c-ums)',research:'var(--c-res)',archive:'var(--c-arch)',ai:'var(--c-ai)'}; |
| | | |
| | | async function boot(){ |
| | | DATA.business = await loadJson('business'); |
| | |
| | | </div> |
| | | <h3 class="sec">ä¸å¡æ¨¡å</h3> |
| | | <div class="grid cards">`; |
| | | const targets = {crm:'flow-sales',erp:'flow-purchase',pro:'flow-production',wm:'flow-warehouse',qc:'flow-quality',aftersales:'flow-aftersales',fin:'flow-finance',ums:'flow-ums',res:'flow-research',ai:'ai',srm:'flow-purchase',mdm:'objects',dv:'objects',hrm:'objects',bpm:'relation'}; |
| | | const accs = {mdm:'var(--c-base)',crm:'var(--c-sale)',srm:'var(--c-sup)',erp:'var(--c-erp)',fin:'var(--c-fin)',ums:'var(--c-ums)',res:'var(--c-res)',pro:'var(--c-prod)',wm:'var(--c-wm)',qc:'var(--c-qc)',dv:'var(--c-dv)',aftersales:'var(--c-as)',hrm:'var(--c-hrm)',bpm:'var(--c-bpm)',ai:'var(--c-ai)'}; |
| | | const targets = {crm:'flow-sales',erp:'flow-purchase',pro:'flow-production',wm:'flow-warehouse',qc:'flow-quality',aftersales:'flow-aftersales',fin:'flow-finance',ums:'flow-ums',res:'flow-research',arc:'flow-archive',ai:'ai',srm:'flow-purchase',mdm:'objects',dv:'objects',hrm:'objects',bpm:'relation'}; |
| | | const accs = {mdm:'var(--c-base)',crm:'var(--c-sale)',srm:'var(--c-sup)',erp:'var(--c-erp)',fin:'var(--c-fin)',ums:'var(--c-ums)',res:'var(--c-res)',arc:'var(--c-arch)',pro:'var(--c-prod)',wm:'var(--c-wm)',qc:'var(--c-qc)',dv:'var(--c-dv)',aftersales:'var(--c-as)',hrm:'var(--c-hrm)',bpm:'var(--c-bpm)',ai:'var(--c-ai)'}; |
| | | DATA.modules.modules.forEach(m=>{ |
| | | html += `<div class="card" style="--acc:${accs[m.key]||'#2c5cff'}" data-goto="${targets[m.key]||'panorama'}"> |
| | | <h3>${esc(m.name)}<span class="tag">${esc(m.tag)}</span></h3> |
| | |
| | | ç§ä¹¦å¤çäºä¼ä¸çº§å®¡æ¹ |
| | | ç«é¡¹ç¼å·ä¸ç«é¡¹éç¥å
Œ |
| | | ç»è´¹æ¨ä»è®°å½ä¸åè¯ |
| | | æ¡£æ¡ç®¡ç ARCHIVE ç¬ç« |
| | | æ¡£æ¡å类书æ¶åå±åå |
| | | æ¡£æ¡ææ¡£éä¸åå¨ä¸æ£ç´¢ |
| | | çµåéä»¶ä¸å®ä½ä½ç½®å
¼å
· |
| | | å¯çº§ç®¡æ§ä¸æææé |
| | | åé
ç»è®°ä¸ä¸¤çº§å®¡æ¹ |
| | | å½è¿ç»è®°ä¸æµè½¬éç¯ |
| | | 龿æªè¿å®æ¶æé |
| | | æ¡£æ¡åé䏿µè½¬ç»è®¡ |
| | | 课é¢ä¼åè´¢å¡ä¸æ¹å½æ¡£èå¨ |
| | | ç产管ç MES |
| | | 主ç产计å MPS |
| | | ç产工å |
| | |
| | | RES -->|ç«é¡¹éç¥å system_notice å
Œ| SYS |
| | | RES -->|ç»è´¹æ¨ä» 1:1 èªå¨çæ finance_reimbursement æ¥éåå¹¶æäº¤å®¡æ¹Â·èµ°æ°å»ºç yudao-module-finance-api| FIN |
| | | FIN -.->|æ¥é审æ¹ç»æç» BPM äºä»¶åè° ResearchFundStatusListener ååè¯¾é¢æ¨æ¬¾å°è´¦| RES |
| | | ARC[æ¡£æ¡ç®¡ç ç¬ç«æ¨¡å yudao-module-archive åç±» æ¡£æ¡ åé
å½è¿ ç»è®¡] -.->|å¤ç¨ BPM 两级审æ¹ä¸ç¶æåè°Â·æµç¨ key=archive_borrow_approve| BPM |
| | | ARC -.->|æ¡£æ¡çµåéä»¶èµ°éä»¶ä¸å¿ recordType=archive_document / archive_borrow| STG |
| | | RES -->|å·²ç«é¡¹ç³æ¥å彿¡£Â·ç» yudao-module-archive-api çææ¡£æ¡å¹¶åå archive_document_id| ARC |
| | | UMS -->|æ£å¸¸ç¶æä¼å彿¡£Â·ç» yudao-module-archive-api çææ¡£æ¡å¹¶åå archive_document_id| ARC |
| | | FIN -->|å·²éè¿æ¥éå彿¡£Â·åäºå¡å å çæãä¿å¯ãæ¡£æ¡å¹¶åå archive_document_id| ARC |
| | | ARC -.->|ä¸ååä¾èµ ums / finance / research·ä»
æä¾ -api 忍¡åç±ä¸æ¹æå¨è°å½æ¡£| RES |
| | |
| | | RBM -->|"æ¥éåè¿å
¥å䏿¡ BPM æµç¨ finance_reimbursement_approve(è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹)·businessKey=æ¥éå ID"| RBS |
| | | RBS -.->|"BPM çå¬å¨ ResearchFundStatusListener åå课é¢å°è´¦ éè¿20 驳å30(+驳ååå /æ¶é´) æ¤å0"| RFR |
| | | RESNOTE[䏿已坹æ¥è´¢å¡Â·è¯¾é¢å°è´¦ä¸ºæ¨æ¬¾å°è´¦Â·æ¥éå为财å¡åºè´¦åè¯Â·ä¸¤è¾¹ä»¥ reimbursement_id 软å
³èæ å¤é®Â·è´¢å¡ä¾§ç´æ¥å åä¼ç䏿¬ç©º ID ç±ä¸å¡æ¥éå
åº] -.-> RFR |
| | | subgraph S7 [ç¬ç«æ¡£æ¡ç®¡ç archive] |
| | | ACD[æ¡£æ¡åç±» archive_category æ å½¢] --> ADO[æ¡£æ¡ archive_document] |
| | | ADO --> ABR[åé
å archive_borrow] |
| | | ADO --> AST[æ¡£æ¡ç¶æ 10å¨åº 20ååºä¸] |
| | | ABR --> ABS[åé
ç¶æ 0è稿 15审æ¹ä¸ 20ååºä¸ 30å·²å½è¿ 35已驳å] |
| | | end |
| | | ACD -->|"æ°å»ºæ¡£æ¡æåç±»å¸¦åº default_secret_level é»è®¤å¯çº§Â·è´¢å¡åç±»=3 ä¿å¯"| ADO |
| | | ADO -.->|"çµåéä»¶ recordType=archive_document·表å
ä¸åæä»¶å°å"| PDFARCH |
| | | ADO -->|"æ¡£æ¡ç¼å· DA + yyyyMMdd + 6使µæ°´(RedisÂ·æ¯æ¥éç½®)·åé
åå· JY + åæ¥æµæ°´"| ADO |
| | | RAP -->|"æå¨ã彿¡£ãç» yudao-module-archive-api.archiveBySource(sourceType=2·å¯çº§ 2å
é¨Â·sourceNo=ç«é¡¹ç¼å·Â·blobIds=ç³æ¥ä¹¦éä»¶)·å¹ç"| ADO |
| | | UMSM -->|"æå¨ã彿¡£ã(sourceType=3·å¯çº§ 2å
é¨Â·sourceNo=ä¼åç¼å·Â·blobIds=ä¼åææ)"| ADO |
| | | RBM -->|"æ¢æ archive 彿¡£åäºå¡å å archiveBySource(sourceType=4·å¯çº§ 3ä¿å¯Â·sourceNo=æ¥éåå·Â·blobIds=å票éä»¶)·æ¥éå 20â40 ä¸çææ¡£æ¡ä¸¤è¡¨å¹¶å"| ADO |
| | | ADO -->|"å忥æºè¡¨ archive_document_id ä½ä¸ºå·²å½æ¡£ç¡¬æ è®°Â·æ¥æºä¾§éå¤ç¹å½æ¡£æå
¶éè¯¯ç æ¦æªå¹¶ç»åºå·²çææ¡£æ¡ç¼å·"| RAP |
| | | ADO -->|"åå archive_document_id"| RBM |
| | | ABR -->|"submit åæ ¡éª: å䏿¡£æ¡ä¸å¾å·²æ 审æ¹ä¸ 15 æ ååºä¸ 20 çåé
å·å½ä¸æ¥å·²åç¨(带档æ¡åä¸å·²åå¨åé
åå·)"| ABS |
| | | ABS -.->|"BPM çå¬å¨ ArchiveBorrowStatusListener åå éè¿20 驳å35 åæ¶éå0"| ABR |
| | | ABS -->|"ä¸å¡å¨ä½: å½è¿ç»è®° ä»
æ¾è¡ 20 ååºä¸ â 30 å·²å½è¿Â·åå returnTime ä¸å½è¿ç¡®è®¤äºº"| ABR |
| | | ABR -->|"审æ¹éè¿æ¡ä»¶æ´æ° archive_document SET status=20 WHERE status=10·å½è¿æ¡ä»¶æ´æ°å 10·影å 0 è¡å³æ¥å²çªå¹¶åæ»"| AST |
| | | ABR -.->|"龿ä¸è½åºÂ·æ¥è¯¢æ¶å®æ¶è®¡ç® status=20 ä¸ return_deadline æ©äºä»å¤©Â·overdue-page 为ç¬ç«å
¥å£éæ¥è¯¢åæ°"| ABS |
| | | ADO -.->|"å¯çº§=3 ä¿å¯ 䏿 archive:document:sensitive æ¶Â·è¯¦æ
æ¥é·å表ä¸å¯¼åºå¼ºå¶è¿æ»¤ secret_level ä¸çäº 3"| SEC3[æéç¹ archive:document:sensitive] |
| | | ARCNOTE[ç¬ç«æ¨¡åÂ·ä¸æ¹å½æ¡£ä¸ºå表页æå¨æé®èéäºä»¶é©±å¨Â·å½æ¡£åªçææ¡£æ¡ä¸å忥æºåæ®ä¸å¡ç¶æ(è´¢å¡ä¾§ 20â40 æ¯æ¢æé»è¾Â·æ¬æ¨¡åä»
å å )] -.-> ADO |
| | |
| | | research_application ||--o{ research_fund_record : "ç»è´¹æ¨ä»è®°å½" |
| | | research_fund_record ||--|| finance_reimbursement : "1:1 çæåºè´¦æ¥éå(软å
³è reimbursement_id)" |
| | | ums_member ||--o{ research_application : "ç³æ¥äºº(软å
³èæ å¤é®)" |
| | | archive_category ||--o{ archive_document : "åç±»å½æ¡£(æ 形书æ¶)" |
| | | archive_document ||--o{ archive_borrow : "åé
ç»è®°" |
| | | research_application ||--o| archive_document : "å·²ç«é¡¹å½æ¡£(archive_document_id)" |
| | | ums_member ||--o| archive_document : "æ£å¸¸ä¼å彿¡£(archive_document_id)" |
| | | finance_reimbursement ||--o| archive_document : "å·²éè¿æ¥é彿¡£(archive_document_id)" |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | flowchart TD |
| | | A1[å¡«æ¥å
¥ä¼ç³è¯·Â·éä¼åç±»å 1个人 / 2åä½] --> A2[ä¸ªäººåæ¯: å§å èç³»çµè¯ é®ç®± å·¥ä½åä½ èç§° ç ç©¶æ¹å è¡ä¸ å°åº] |
| | | A1 --> A3[åä½åæ¯: åä½åç§° æ³å®ä»£è¡¨äºº ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ç ç©¶æ¹å è¡ä¸ å°åº] |
| | | A2 --> A4[éç³è¯·ç级·æä¼åç±»å忢åå
¸ ums_personal_grade / ums_unit_grade] |
| | | A3 --> A4 |
| | | A4 --> A5[è¯æææéä»¶: å
ä¼ system storage-blob upload å blobId] |
| | | A5 --> S1[ä¿å create·éä»¶æè¯¥åå
¨é¨ blobIds ç»å®] |
| | | S1 --> G1["ç³è¯·ç¼å· SQ + yyyyMMdd + 6使µæ°´(RedisÂ·æ¯æ¥éç½®)·å端çæä¸å¯æ¹"] |
| | | G1 --> K1[è稿 0] |
| | | K1 -->|update ä¿®æ¹ç³è¯·| K1 |
| | | K1 -->|submit éå®¡æ¹æµç¨ processDefinitionKey| K2[审æ¹ä¸ 15·åå processInstanceId] |
| | | K2 -->|BPM 审æ¹éè¿| K3[å·²éè¿ 20] |
| | | K2 -->|BPM 审æ¹é©³å| K4[已驳å 35] |
| | | K2 -->|BPM 审æ¹åæ¶| K1 |
| | | K4 -->|ä¿®æ¹åéæ° submit| K2 |
| | | K3 --> M1["审æ¹éè¿é©å: èªå¨å建ä¼å ums_member (å
é¨å
æ¥ç¶æç¡®ä¸ºå·²éè¿ææ§è¡)"] |
| | | M1 --> M2["ä¼åç¼å· HY + yyyyMMdd + 6使µæ°´(Redis)"] |
| | | M2 --> M3["å建系ç»ç»å½è´¦å· AdminUserApi.createUserÂ·ç¨æ·åä¸åå§å¯ç =èç³»çµè¯Â·æµç§°=ç³è¯·äººå§å·é¨é¨=å¦ä¼ä¼å"] |
| | | M3 --> M4[ä¼åè½åºÂ·å
¥ä¼æ¥æ=å½å¤©Â·ç¶æ 1æ£å¸¸Â·æ¥æºç³è¯·å applicationId åå¡«] |
| | | M4 --> D2[ä¼ååè¡¨Â·å¯æå·¥ create / update / delete] |
| | | D2 --> V1["ççº§ç±»åæ ¡éª: åä½ä¼å(memberType=2) ä¸å¯éãçäºé¿ã(memberGrade=5) ç´æ¥æç»"] |
| | | M4 --> D1[ä¼åé讯å½Â·åªè¯»Â·æå°åº regionCode ä¸è¡ä¸ industry æ£ç´¢] |
| | | ATT1["éä»¶ recordType = ums_application"] -.-> K1 |
| | | ATT2["éä»¶ recordType = ums_member"] -.-> M4 |
| | | RES1["ä»
è稿 0 å¯ delete·è¿å¸¦æ¸
çéä»¶"] -.-> K1 |
| | | RES2["ä»
è稿 0 ä¸å·²é©³å 35 å¯ update·å
¶ä½ç¶æåªè¯»"] -.-> K4 |
| | | ROL["审æ¹é¾: BPM æµç¨å®ä¹ ums_membership_approve(å½å±åç±» ums_membership_approve) ç§ä¹¦å¤å审 â çäºä¼å®¡è®®Â·ä¸¤èç¹å®¡æ¹äºº=è§è²çç¥(è¶
管è§è²å
åº)·å端æåç±»å®æ¶åæµç¨ãä¸åæ» key"] -.-> K2 |
| | | F1["审æ¹ä¸å¿çå: æµç¨å®ä¹è¡¨åç±»å=èªå®ä¹è¡¨å·æ¥çè·¯å¾ /ums/application/detail/approve/index.vue·æ businessKey åæ¾ç³è¯·å"] -.-> K2 |
| | | N1["ç¬ç«æ¨¡å·ä¸ä¸å
¶ä»ä¸å¡æ¨¡å产çåæ®å
³è·ä»
å¤ç¨ BPM 审æ¹ä¸ system éä»¶ä¸å¿"] --- K1 |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | flowchart TD |
| | | subgraph P1 [è¯¾é¢æååå¸] |
| | | G0[æ°å»ºæå·éç±»å« 1éç¹è¯¾é¢ / 2ä¸è¬è¯¾é¢] --> G1[å¡«æååç§° ç³æ¥èµ·æ¢æ¶é´ æåæ£æ éä»¶] |
| | | G1 --> G2["æåç¼å· GL + yyyyMMdd + 6使µæ°´(RedisÂ·æ¯æ¥éç½®)"] |
| | | G2 --> G3[è稿 0·ä»
èç¨¿å¯æ¹å¯å ] |
| | | G3 -->|已产çç³æ¥ååç¦æ¢å é¤| G3B["æç¤ºè¯¥æåä¸å·²æ N å¼ ç³æ¥å·éå
å¤çç³æ¥å"] |
| | | G3 -->|publish åå¸| G4["å·²åå¸ 20·åå publishTime"] |
| | | G4 -->|close æªæ¢| G5[å·²æªæ¢ 30] |
| | | end |
| | | G4 -->|"æåå·²å叿å¯ä½ä¸ºç³æ¥åæ"| A1 |
| | | subgraph P2 [å¨çº¿ç³æ¥] |
| | | A1[éæåÂ·è¦æ±å·²åå¸ ä¸å¨ç³æ¥æå
] --> A2[éä¼å ums_member èªå¨å¸¦åº å§å å·¥ä½åä½ èç§° çµè¯ é®ç®±] |
| | | A2 --> A3[填课é¢åç§° 课é¢ç»æå ç³è¯·ç»è´¹ ç³æ¥ä¹¦æ£æ ç³æ¥éä»¶] |
| | | A3 --> A4["ç³æ¥ç¼å· SB + yyyyMMdd + 6使µæ°´Â·ç±»å«åä½èªæåä¸ä¿¡ä»»åç«¯ä¼ å¼"] |
| | | A4 --> K1[è稿 0] |
| | | end |
| | | K1 -->|update ä¿®æ¹Â·ä»
è稿 0 ä¸å·²é©³å 35 æ¾è¡| K1 |
| | | K1 -->|delete å é¤Â·ä»
è稿 0 æ¾è¡Â·è¿å¸¦æ¸
çéä»¶| K1 |
| | | K1 -->|submit éå®¡æ¹æµç¨ processDefinitionKey| K2["审æ¹ä¸ 15·åå processInstanceId"] |
| | | K1 -->|"submit åéæ¡æ ¡éª: â æåå¿
须已åå¸ â¡ å½åæ¶é´å¿
é¡»å¨ç³æ¥èµ·æ¢æå
"| KERR["ä»»ä¸ä¸æ»¡è¶³å³æç»æäº¤Â·æç¤ºå¸¦æååä¸å®é
ç¶ææèµ·æ¢æ¶é´"] |
| | | K2 -->|"ä»
审æ¹ä¸å¯å¢å æ¹ä¸å®¶è¯å"| RK[ä¸å®¶è¯å®¡æç» research_topic_review·ä¸ä½ä¸å®¶ä¸è¡] |
| | | RK -->|"å端éè¡éç® compositeScore = éé¢0.3 + æ¹æ¡0.3 + å¢é0.2 + ææ0.2"| RC[æå æåéåºéæå次 ranking] |
| | | RC -->|"åå主å: reviewAvgScore=å
¨é¨ä¸å®¶åå · reviewPass=ååè¾¾æ ä¸ å¤æ°ç»è®ºä¸ºæ¨èç«é¡¹"| SUM[ç³æ¥åè¯å®¡æ±æ»Â·å 餿å䏿¡æç»æ¶æ¸
ç©ºæ±æ»] |
| | | SUM -->|"ç§ä¹¦å¤æ±æ»ç³æ¥ä¹¦ä¸è¯å®¡ç»æ"| K3 |
| | | K2 --> K3 |
| | | subgraph P3 [ç«é¡¹å®¡æ¹ BPM research_topic_approve] |
| | | K3["ä¸èç¹é¡ºåºÂ·å®¡æ¹æ¹æ³ä¸å®¡æ¹äººå¨æµç¨å®ä¹å
é
ç½®"] --> KA[Activity_secretariat_review ç§ä¹¦å¤å½¢å¼å®¡æ¥] |
| | | KA -->|éè¿| KB[Activity_expert_review ä¸å®¶è¯å®¡] |
| | | KB -->|éè¿| KC[Activity_council_approve å¦ä¼ç«é¡¹å®¡æ¹] |
| | | end |
| | | KC -->|BPM 审æ¹éè¿| K4["å·²ç«é¡¹ 20·çå¬å¨çæ ç«é¡¹ç¼å· LX + yyyyMMdd + 6使µæ°´ ä¸ approveTime·已æç¼å·åå¹çè·³è¿"] |
| | | KC -->|BPM 审æ¹é©³å| K5[已驳å 35] |
| | | KC -->|BPM 审æ¹åæ¶| K1 |
| | | KA -->|驳å| K5 |
| | | K5 -->|ä¿®æ¹åéæ° submit| K2 |
| | | K4 -->|publishNotice åå¸ç«é¡¹éç¥| N1["system_notice å
¬å·æ é¢ãå
³äºå
¬å¸ç«é¡¹è¯¾é¢çéç¥ãÂ·æ£æå«è¯¾é¢å ç«é¡¹ç¼å· ç±»å« ç³æ¥äºº åä½ èµå©éé¢Â·åå noticeId·éå¤åå¸è¢«æ¦æª"] |
| | | K4 -->|ç»è®°æ¨æ¬¾è®°å½ research_fund_record| F1[å¡«æ¹æ¬¡åç§° æ¨ä»éé¢ æ¨ä»æ¥æ æ¶æ¬¾åä½ å¤æ³¨Â·åè¯éä»¶å¿
å¡«] |
| | | F1 -->|"é颿 ¡éª: å·²ç»è®°éé¢ + æ¬æ¬¡éé¢ ä¸å¾è¶
åºç³æ¥åç³è¯·ç»è´¹Â·è¶
åºæ¶æ¥åºæ¬æ¬¡ å·²ç»è®° å计 é¢ç®å项æ°å¼"| FGEN["èªå¨çæ 1:1 è´¢å¡æ¥éå finance_reimbursement(1 è¡æç»: è´¹ç¨ç±»å=å
¶ä» å票éé¢=æ¨ä»éé¢ åç¥¨æ¥æ=æ¨ä»æ¥æ è´¹ç¨è¯´æ=课é¢å+æ¹æ¬¡)·éå䏿¹åè¯Â·ç«å³æäº¤ BPM·å忥éåå·"] |
| | | FGEN -->|ååå°è´¦ç¶æ| F3[æ¥é审æ¹ä¸ 15] |
| | | F3 -->|"è´¢å¡å®¡æ ¸ Activity_finance_review"| FAPP[è´¢å¡ä¸»ç®¡å®¡æ¹ Activity_finance_approve] |
| | | FAPP -->|BPM 审æ¹éè¿| F4[å·²æ¨ä» 20] |
| | | FAPP -->|BPM 审æ¹é©³å| F5["已驳å 30·åå驳ååå ä¸é©³åæ¶é´"] |
| | | F5 -->|"ä¿®æ¹é颿åè¯åéæ°åèµ·æ¥é"| F3 |
| | | FAPP -->|"å起人/管çååæ¶æµç¨"| F2["å¾
æ¨ä» 0·å¯ç¼è¾å¯å é¤"] |
| | | F2 -->|"ä»
å¾
æ¨ä» 0 坿¹å¯å ·å 餿¶è卿¸
çè´¢å¡ä¾§è稿æ¥éå"| F2 |
| | | F2 -->|"ä¿®æ¹åéæ°åèµ·æ¥é"| F3 |
| | | ATT1["éä»¶ recordType = research_guideline"] -.-> G3 |
| | | ATT2["éä»¶ recordType = research_application"] -.-> K1 |
| | | ATT3["éä»¶ recordType = research_fund_record·å䏿¹ blob åç» finance_reimbursement(æ recordType+recordId é离äºä¸å½±å)"] -.-> F1 |
| | | ROL["审æ¹ä¸å¿çå: æµç¨å®ä¹è¡¨åç±»å=èªå®ä¹è¡¨å·åå»ºè·¯å¾ /research/application/index · æ¥çè·¯å¾ /research/application/detail/approve/index.vue·æ businessKey åæ¾ç³æ¥å"] -.-> K3 |
| | | ROL2["审æ¹äººåå¼: ä¸èç¹å¨æµç¨å®ä¹å
é
å¥½å®¡æ¹æ¹æ³(便¬¡å®¡æ¹)ä¸å®¡æ¹äººçç¥Â·é¨ç½²åç±ç®¡çåå¨ BPM æµç¨è®¾è®¡å¨æå¦ä¼å®é
ç»ç»è°æ´Â·æäº¤æ¶å端åªè®©éæµç¨ä¸é审æ¹äºº"] -.-> K3 |
| | | LIS2["çå¬å¨ ResearchFundStatusListener(æµç¨ key=finance_reimbursement_approve·businessKey=æ¥éå ID): éè¿âå°è´¦å·²æ¨ä» 20·驳åâ已驳å 30+åå 䏿¶é´Â·åæ¶æµç¨âéåå¾
æ¨ä» 0(å起人æ¤åä»
éååèµ·èç¹ãæµç¨æªç»æï¼ä¸è§¦ååå)Â·ä¸ finance èªå·±ççå¬å¨è®¢é
åä¸ key å¹¶è¡è§¦å"] -.-> F3 |
| | | FINAPI["跨模åèµ°æ°å»ºç yudao-module-finance-api(FinanceReimbursementApi·æ¬å° Bean é HTTP): æ å·²å叿¥éå®¡æ¹æµç¨æ¶å
è§£æå³æ¥é·ä¸å»ºå·é¿å
çä¸å¤å¿è稿æ¥éå"] -.-> FGEN |
| | | RES1["䏿已坹æ¥è´¢å¡: æ¨æ¬¾å¿
须走 finance_reimbursement æ¥éååºè´¦Â·è¯¾é¢ä¾§å°è´¦=æ¨æ¬¾å°è´¦Â·è´¢å¡æ¥éå=åºè´¦åè¯Â·ä¸¤è¾¹ä»¥ reimbursement_id 软å
³è(æ å¤é®)·财å¡å®¡æ¹ç»æèªå¨å忬å°è´¦"] -.-> F1 |
| | | RES2["äºæèå´(æ¬å¾æªè¦ç): ç»é¡¹éªæ¶ ç»é¡¹è¯ä¹¦ ææå½æ¡£ç¥è¯åº é纳æ
åµä¸ç¤¾ä¼æçæ æ³¨"] -.-> K4 |
| | | BOUND["ç¬ç«æ¨¡å yudao-module-research·对 ums_member 为软å
³è(æ å¤é®)Â·å¯¹è´¢å¡æ¨¡åèµ° -api 忍¡åæ¬å°è°ç¨Â·ä»
å¤ç¨ BPM 审æ¹ãsystem å
¬åä¸éä»¶ä¸å¿"] --- K1 |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | flowchart TD |
| | | subgraph P1 [æ¡£æ¡å类·书æ¶ç®¡ç archive_category] |
| | | C1[æ°å»ºå类·å¯éç¶å类形æåç±»æ ] --> C2["å¡« åç±»åç§° · ç¼ç code · æåº · å类说æ · é»è®¤å¯çº§ · ç¶æ"] |
| | | C2 --> C3["ç¼ç å
¨å±å¯ä¸ uk_code · ç¶æ 0å¯ç¨ 1åç¨ Â· é»è®¤å¯çº§ 1å
¬å¼ 2å
é¨ 3ä¿å¯"] |
| | | C3 --> C4["åå§ 6 æ¡åç±»: ä¼åæ¡£æ¡ member · è¯¾é¢æ¡£æ¡ research · ä¼è®®æ¡£æ¡ meeting · è´¢å¡æ¡£æ¡ finance(é»è®¤å¯çº§=ä¿å¯ 3) · æä¹¦æ¡£æ¡ document · å
å»ºæ¡£æ¡ party"] |
| | | C4 --> C5["坿¹å¯å · æååç±»ç¦å · 该åç±»ä¸ææ¡£æ¡ç¦å · ç¶åç±»ä¸è½æ¯èªèº«æå
¶ååç±» · åç¨åç±»ä¸è½æ°å¢æ¡£æ¡"] |
| | | end |
| | | subgraph P2 [æ¡£æ¡ç®¡ç archive_document] |
| | | D1["æ°å»ºæ¡£æ¡: æ é¢ Â· åç±» · å¯çº§ · è½½ä½(1çµå 2å®ä½ 3çµå+å®ä½) · 彿¡£æ¥æ · æè¦ · å
³é®è¯ tags"] --> D2["å®ä½ä½ç½®ååæ®µ: 书æ¶å· shelfNo · å±å· layerNo · åå· columnNo · åå·æ¡£æ¡ç boxNo · åæ¾ä½ç½®æè¿° storePlace"] |
| | | D2 --> D3["çµåéä»¶èµ° system éä»¶ä¸å¿ · recordType=archive_document · 表å
ä¸åæä»¶å°å · blobIds 为å
¨éæ¿æ¢è¯ä¹"] |
| | | D3 --> D4["æ¡£æ¡ç¼å· DA + yyyyMMdd + 6使µæ°´ (RedisÂ·æ¯æ¥éç½®)"] |
| | | D4 --> D5["ç¶æ 10 å¨åº · 坿¹å¯å "] |
| | | D5 -->|"åé
审æ¹éè¿"| D6["ç¶æ 20 ååºä¸ · ç¦æ¹ · å卿ªå½è¿åé
åæ¶ç¦å "] |
| | | D6 -->|"å½è¿ç»è®°"| D5 |
| | | end |
| | | subgraph P3 [䏿¹å½æ¡£èå¨Â·å表页æå¨ã彿¡£ãæé®âyudao-module-archive-api] |
| | | AD["ArchiveDocumentApi.archiveBySource å¹ç: å
æ source_type + source_id æ¥ Â· å½ä¸ç´æ¥è¿åæ¢ææ¡£æ¡ ID"] |
| | | AD2["æ categoryCode ååç±»(member / research / finance) · åç±»ä¸å卿¥ DOCUMENT_SOURCE_CATEGORY_NOT_EXISTS"] |
| | | AD3["çæ DA ç¼å· + è½åº + bindAttachments(recordType=archive_document)"] |
| | | AD4["å忥æºè¡¨ archive_document_id ä½ä¸ºå·²å½æ¡£ç¡¬æ è®° · æ¥æºä¾§éå¤å½æ¡£æå
¶èªèº«éè¯¯ç æ¦æªå¹¶ç»åºå·²çææ¡£æ¡ç¼å·(archive ä¾§ DOCUMENT_DUPLICATE_SOURCE 为å
åº)"] |
| | | R1["课é¢ç³æ¥ä¹¦ research_application · ä»
status=20 å·²ç«é¡¹ · æé research:application:archive"] -->|"sourceType=2 · å¯çº§ 2å
é¨ Â· sourceNo=ç«é¡¹ç¼å· · blobIds=ç³æ¥ä¹¦éä»¶"| AD |
| | | M1["ä¼å ums_member · ä»
status=1 æ£å¸¸ · æé ums:member:archive"] -->|"sourceType=3 · å¯çº§ 2å
é¨ Â· sourceNo=ä¼åç¼å·"| AD |
| | | F1["è´¢å¡æ¥éå finance_reimbursement · ä»
status=20 å·²éè¿ Â· æé finance:reimbursement:archive"] -->|"sourceType=4 · å¯çº§ 3ä¿å¯ · sourceNo=æ¥éåå· Â· blobIds=å票éä»¶ · 䏿¢æ 20â40 彿¡£åäºå¡å å "| AD |
| | | AD --> AD2 |
| | | AD2 --> AD3 |
| | | AD3 --> AD4 |
| | | end |
| | | AD3 -->|"彿¡£ç»æ: æ°æ¡£æ¡ç´æ¥è½ä¸º å¨åº 10"| D5 |
| | | subgraph P4 [åé
ç»è®°ä¸å®¡æ¹ archive_borrow] |
| | | B1["ç»è®°åé
: éæ¡£æ¡(ä»
å¨åº 10 å¯é) · åé
人 · é¨é¨ · èç³»çµè¯ · åé
æ¥æ · åé
ç®ç · å½è¿æé"] --> B2["åé
åå· JY + yyyyMMdd + 6使µæ°´ (RedisÂ·æ¯æ¥éç½®) · ç¶æ 0 è稿"] |
| | | B2 --> B3["submit åæ ¡éª: å䏿¡£æ¡ä¸å¾åå¨ å®¡æ¹ä¸ 15 æ ååºä¸ 20 çåé
å · å½ä¸æ¥ å·²åç¨(带档æ¡åä¸å·²åå¨åé
åå·)"] |
| | | B3 --> B4["submit ä¼ id ä¸ processDefinitionKey (query åæ°) · å
è§£ææµç¨å表å建å(æ å·²å叿µç¨åç´æ¥æ¥é·ä¸çå¤å¿è稿) · ç¶æ 15 审æ¹ä¸ · åå processInstanceId"] |
| | | B4 --> B5["BPM æµç¨ archive_borrow_approve 两级: æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹"] |
| | | end |
| | | B5 -->|"审æ¹éè¿"| B6["ç¶æ 20 ååºä¸ · åå approveTime · æ¡ä»¶æ´æ°æ¡£æ¡ SET status=20 WHERE status=10(å½±å 0 è¡åæ¥ æ¡£æ¡å·²è¢«å ç¨ å¹¶åæ»)"] |
| | | B5 -->|"审æ¹é©³å"| B7["ç¶æ 35 已驳å · åå驳ååå 䏿¶é´ · ä¿®æ¹åå¯éæ° submit"] |
| | | B5 -->|"åæ¶æµç¨"| B2 |
| | | B6 -->|"å½è¿ç»è®° return · æ¡ä»¶æ´æ° status=20 â 30"| B8["ç¶æ 30 å·²å½è¿ · åå returnTime ä¸å½è¿ç¡®è®¤äºº · å½è¿å¤æ³¨"] |
| | | B8 -->|"æ¡ä»¶æ´æ°æ¡£æ¡ SET status=10 WHERE status=20"| D5 |
| | | B6 -->|"ä»
0 è稿 ä¸ 35 已驳å 坿¹å¯éæ · ä»
0 è稿 å¯å "| B2 |
| | | B6 -->|"ä»
20 ååºä¸ å¯ç»è®°å½è¿"| B8 |
| | | OV["龿ä¸è½åºÂ·æ¥è¯¢æ¶å®æ¶è®¡ç®: status=20 ä¸ return_deadline æ©äºä»å¤© · overdueDays = ä»å¤© å å½è¿æé"] -.-> B6 |
| | | OVP["GET /archive/borrow/overdue-page ç¬ç«å
¥å£(éæ¥è¯¢åæ°) · å表ã龿ã忏²æçº¢è²ã龿 N 天ã · ä¸å»º infra_job ä¸åç«å
ä¿¡ · åè¡¨é¡µå¦æãåªç龿ã忢"] -.-> OV |
| | | ST["æ¡£æ¡ç»è®¡ GET /archive/stat/overview: æ¡£æ¡æ»æ° · å¨åºæ° · ååºä¸æ° · 龿æªè¿æ° + æåç±»/æå¯çº§/æè½½ä½ ä¸ç»åå¸"] -.-> D5 |
| | | SEC["æææ¡£æ¡ç®¡æ§: å¯çº§=3 ä¿å¯ ä¸å½åç¨æ·æ archive:document:sensitive æ¶ Â· 详æ
æ¥å£ç´æ¥æ¥é · å表ä¸å¯¼åºå¼ºå¶è¿æ»¤ secret_level ä¸çäº 3"] -.-> D1 |
| | | ATT["éä»¶ recordType = archive_document / archive_borrow"] -.-> D3 |
| | | ROL["审æ¹ä¸å¿çå: æµç¨å®ä¹è¡¨åç±»å=èªå®ä¹è¡¨å · åå»ºè·¯å¾ /archive/borrow/index · æ¥çè·¯å¾ /archive/borrow/detail/approve/index.vue · æ businessKey åæ¾åé
å"] -.-> B5 |
| | | LIS["çå¬å¨ ArchiveBorrowStatusListener(æµç¨ key=archive_borrow_approve · businessKey=åé
å ID): éè¿â20 ååºä¸ + approveTime å¹¶æ¡ä»¶æ´æ°æ¡£æ¡ â 20 · 驳åâ35 + åå 䏿¶é´ · åæ¶âéå 0 · ä¸ finance/research çå¬å¨è®¢é
ä¸å key äºä¸å¹²æ°"] -.-> B5 |
| | | BOUND["ç¬ç«æ¨¡å yudao-module-archive(å« -api 忍¡å)·ä¾èµ system/bpm·ä¸ååä¾èµ ums/finance/research(é¿å
循ç¯ä¾èµ)Â·ä¸æ¹ä»
ä¾èµ archive-api æå¨è°å½æ¡£"] --- D1 |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # 课é¢ç»è´¹æ¨ä»å¯¹æ¥è´¢å¡æ¥é - å端èè°æ¹æ¡ |
| | | |
| | | > æ¶å模åï¼`yudao-module-research`ï¼è¯¾é¢ç®¡çï¼â `yudao-module-finance`ï¼è´¢å¡æ¥éï¼ï¼è·¨æ¨¡åéè¿æ°å»ºç `yudao-module-finance-api` æ¬å° Bean è°ç¨ã |
| | | > å端æ¥å£åç¼ï¼`/research/fund-record` |
| | | > éä»¶å
³èï¼è¯¾é¢ä¾§ `recordType = research_fund_record`ï¼è´¢å¡ä¾§ `recordType = finance_reimbursement`ï¼`application = file`ï¼å䏿¹ blob åç»ï¼äºä¸å½±åï¼ |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | | æä»¶ | 说æ | |
| | | |------|------| |
| | | | `src/api/research/fund/index.ts` | `FundRecord` ç±»åè¡¥ 4 ä¸ªåæ®µï¼`createFundRecord` / `updateFundRecord` æ³¨éæ´æ° | |
| | | | `src/views/research/application/data.ts` | `FundStatus` æ°å¢ `APPROVING: 15`ã`REJECTED: 30`ï¼`useFundColumns` æ°å¢ãè´¢å¡æ¥éåå·ãã驳ååå ã两å | |
| | | | `src/views/research/application/modules/fund-form.vue` | ç§»é¤ãæ¨ä»ç¶æã䏿ï¼ç¶ææ¹ä¸ºç³»ç»é©±å¨ï¼ï¼ãæ¨ä»åè¯ãæ¹å¿
å¡«ï¼ç¼è¾å·²é©³åè®°å½æ¶å±ç¤ºé©³ååå | |
| | | | `src/views/research/application/modules/fund-panel.vue` | ç¼è¾/å 餿鮿¹ä¸ºä»
ãå¾
æ¨ä»ãå¯è§ï¼ã已驳åãè¡æ°å¢ãéæ°åèµ·æ¥éãæé®ï¼æç¶æè¡¥é¡¶é¨æç¤º | |
| | | | `src/views/research/application/detail/approve/index.vue` | **æ éæ¹**ï¼å
åµ `fund-panel`ï¼åå
¸é©±å¨å±ç¤ºèªå¨å
¼å®¹æ°ç¶æï¼ | |
| | | |
| | | å端 `finance` 模å页é¢**æ éæ¹å¨**ï¼æ¥éåç±å端èªå¨å建并æäº¤ï¼è´¢å¡äººå卿¢æçãè´¢å¡æ¥é â æ¥éåãåè¡¨éæ£å¸¸å®¡æ¹å³å¯ã |
| | | |
| | | **åå
¸å·²ç± SQL èæ¬è¡¥é½**ï¼å端继ç»ç¨ `getDictOptions(DICT_TYPE.RESEARCH_FUND_STATUS)` / `CellDict` åå¼ï¼æ éæ°å»ºæä¸¾ï¼ |
| | | |
| | | | åå
¸ç±»å | åç§° | åå¼ | |
| | | |----------|------|------| |
| | | | `research_fund_status` | ç»è´¹æ¨ä»ç¶æ | 0 å¾
æ¨ä» / 15 æ¥é审æ¹ä¸ / 20 å·²æ¨ä» / 30 已驳å | |
| | | |
| | | > åå
¸é¡¹ id 段ï¼`8100401` å¾
æ¨ä» / `8100403` æ¥é审æ¹ä¸ / `8100402` å·²æ¨ä» / `8100404` 已驳åã |
| | | |
| | | **æé®æéæ è¯**ï¼æ ååï¼æ²¿ç¨ä¸æï¼ï¼ |
| | | |
| | | `research:fund:create`ã`research:fund:update`ã`research:fund:delete`ã`research:fund:query` |
| | | |
| | | ## ä¸å¡æµç¨ä¸æ°æ®å¸¦å
¥ |
| | | |
| | | ``` |
| | | 课é¢è¯¦æ
â ç»è´¹æ¨ä»é¢æ¿ |
| | | â |
| | | ç»è®°æ¨æ¬¾ï¼æ¨ä»æ¹æ¬¡ãæ¨ä»éé¢ãæ¨ä»æ¥æãæ¶æ¬¾åä½ã夿³¨ãæ¨ä»åè¯ï¼ |
| | | â â åè¯å¿
å¡«ï¼å
ä¸ä¼ æ¿ blobIdï¼åæå
¨é¨ blobId æ¾è¿æ¬æ¬¡è¯·æ±ä½ä¸èµ·æäº¤ |
| | | â¼ |
| | | create æ¥å£ï¼ä¸æ¡é¾ï¼å端åªéè°ä¸æ¬¡ï¼ |
| | | âââ 1. 课é¢ä¾§è½ research_fund_record å°è´¦ï¼ç¶æå
ç½®ãå¾
æ¨ä»ãï¼ |
| | | âââ 2. å䏿¹ blob ç»å®å°è¯¾é¢å°è´¦ï¼research_fund_recordï¼ |
| | | âââ 3. èªå¨åå»ºè´¢å¡æ¥éå finance_reimbursementï¼1:1ãéé¢ä¸è´ï¼ |
| | | â æ é¢ = 课é¢ã课é¢åã第Næ/第N次ç»è´¹æ¨æ¬¾ |
| | | â æç»åºå® 1 è¡ï¼è´¹ç¨ç±»å=å
¶ä»(5)ãå票éé¢=æ¨æ¬¾éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æãè´¹ç¨è¯´æ=æ é¢ |
| | | âââ 4. ç«å³æäº¤ BPM 审æ¹ï¼finance_reimbursement_approveï¼ |
| | | âââ 5. å°è´¦åå reimbursementId / reimbursementNoï¼ç¶æç½®ãæ¥é审æ¹ä¸(15)ã |
| | | â¼ |
| | | è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼å¨è´¢å¡æ¨¡åçæ¥éå审æ¹ä¸å¿å®æï¼ |
| | | â |
| | | âââ éè¿ â å°è´¦èªå¨åãå·²æ¨ä»(20)ã |
| | | âââ 驳å â å°è´¦èªå¨åã已驳å(30)ãï¼å¹¶åå驳ååå + é©³åæ¶é´ |
| | | âââ æ¤å/åæ¶ â å°è´¦éåãå¾
æ¨ä»(0)ãï¼å¯ç¼è¾åéæ°åèµ· |
| | | ``` |
| | | |
| | | **ä¿¡æ¯å¸¦å
¥ï¼å
³é®ï¼** |
| | | |
| | | | ä» | å° | 带å
¥å段 | |
| | | |----|----|----------| |
| | | | 课é¢ç³æ¥ä¹¦ | ç»è´¹æ¨ä»ç»è®°å¼¹çª | 课é¢åç§°ãç«é¡¹ç¼å·ãç³è¯·ç»è´¹ï¼ç¨äºä½é¢æç¤ºï¼ãå¯ç»è®°æ§ï¼ä»
ãå·²ç«é¡¹ãå¯ç»è®°ï¼ | |
| | | | ç»è´¹æ¨ä»ç»è®° | èªå¨çæçè´¢å¡æ¥éå | æ é¢ï¼è¯¾é¢å + æ¹æ¬¡ï¼ãæ¥éæ»éé¢ = æ¨ä»éé¢ãç³è¯·æ¥æ = æ¨ä»æ¥æã夿³¨ãè´¹ç¨è¯´æãç³è¯·äºº = å½åç»å½ç¨æ· | |
| | | | ç»è´¹æ¨ä»ç»è®° | è´¢å¡æ¥éååè¯ | å䏿¹ `blobIds` åç»å°è¯¾é¢å°è´¦ä¸è´¢å¡æ¥éå | |
| | | | è´¢å¡æ¥é审æ¹ç»æ | 课é¢ç»è´¹æ¨ä»å°è´¦ | ç¶æï¼20/30/0ï¼ã驳ååå ãé©³åæ¶é´ | |
| | | |
| | | ## API |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | POST | `/research/fund-record/create` | ç»è®°ç»è´¹æ¨ä»ï¼å端èªå¨å建并æäº¤è´¢å¡æ¥é审æ¹ï¼ | |
| | | | PUT | `/research/fund-record/update` | ä¿®æ¹å¹¶éæ°åèµ·æ¥éï¼ä»
ãå¾
æ¨ä»ãã已驳åã坿¹ï¼ | |
| | | | DELETE | `/research/fund-record/delete?id=` | å 餿¨æ¬¾è®°å½ï¼ä»
ãå¾
æ¨ä»ãå¯å ï¼è卿¸
çè´¢å¡ä¾§è稿æ¥éåï¼ | |
| | | | GET | `/research/fund-record/list?applicationId=` | æè¯¾é¢ç³æ¥ä¹¦ä¸çç»è´¹æ¨ä»è®°å½å表 | |
| | | |
| | | **请æ±åæ°ï¼create / update å
±ç¨åä¸ä¸ª VOï¼ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | update å¿
å¡« | æ¨æ¬¾è®°å½ç¼å· | |
| | | | applicationId | Long | æ¯ | 课é¢ç³æ¥ä¹¦ ID | |
| | | | batchName | String | å¦ | æ¨ä»æ¹æ¬¡ï¼å¦ãç¬¬ä¸æãï¼çç©ºæ¶æ 颿 `第N次` èªå¨ç¼å· | |
| | | | amount | BigDecimal | æ¯ | æ¨ä»éé¢ï¼å
ï¼ï¼ä¸å¾ä¸ºè´ | |
| | | | payDate | LocalDateï¼`yyyy-MM-dd`ï¼ | å¦ | æ¨ä»æ¥æï¼ç空æ¶å端æå½å¤©å¤ç | |
| | | | payee | String | å¦ | æ¶æ¬¾åä½/è´¦æ·å | |
| | | | remark | String | å¦ | 夿³¨ | |
| | | | blobIds | Long[] | **æ¯** | æ¨ä»åè¯éä»¶ blobId å表ï¼å
¨éæ¿æ¢è¯ä¹ï¼æ¸
空å¿
é¡»ä¼ ç©ºæ°ç» | |
| | | |
| | | > â **`status` åæ®µå·²ä»è¯·æ±ä½ä¸ç§»é¤**ï¼æ¨ä»ç¶æç±ç³»ç»é©±å¨ï¼ç»è®° â æ¥é审æ¹ä¸ â å·²æ¨ä»/已驳åï¼ï¼å端ä¸è¦åä¼ ï¼ä¹ä¸è¦å¨è¡¨åéæ¾ç¶æä¸æã |
| | | |
| | | **ååºå段æ°å¢ï¼`/list` è¿åçæ¯æ¡è®°å½ï¼ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | reimbursementId | Long | å
³èè´¢å¡æ¥éå ID | |
| | | | reimbursementNo | String | å
³èè´¢å¡æ¥éåå·ï¼ç»è®°æåååå¡«ï¼ | |
| | | | rejectReason | String | è´¢å¡æ¥é驳ååå ï¼BPM ååï¼ | |
| | | | rejectTime | LocalDateTime | è´¢å¡æ¥é驳忶é´ï¼BPM ååï¼ | |
| | | |
| | | **ååºç¤ºä¾ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "data": [ |
| | | { |
| | | "id": 3, |
| | | "applicationId": 2, |
| | | "batchName": "ç¬¬ä¸æ", |
| | | "amount": 50000.0, |
| | | "payDate": "2026-12-01", |
| | | "payee": "XX大å¦", |
| | | "status": 15, |
| | | "reimbursementId": 7, |
| | | "reimbursementNo": "BX20260929000007", |
| | | "rejectReason": "", |
| | | "rejectTime": null, |
| | | "remark": "ç¬¬ä¸ææ¨æ¬¾", |
| | | "creatorName": "è¶
级管çå", |
| | | "createTime": "2026-09-29 10:00:00", |
| | | "attachmentList": [], |
| | | "hasAttachment": true |
| | | } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | ## åæ®µå±ç¤ºè§å |
| | | |
| | | | åæ®µ | å±ç¤ºä½ç½® | 说æ | |
| | | |------|----------|------| |
| | | | status | åè¡¨ãæ¨ä»ç¶æãå | åå
¸ `research_fund_status` 渲æï¼0/15/20/30 åæ | |
| | | | reimbursementNo | å表ãè´¢å¡æ¥éåå·ãå | ç»è®°æåååå¡«ï¼ä¸ºç©ºæ¾ç¤º `-`ï¼è´¢å¡äººåå¨è´¢å¡æ¨¡åææ¤åå·æ¥å | |
| | | | rejectReason | å表ã驳ååå ãåï¼ç¼è¾å¼¹çªé¡¶é¨ Alert | ä»
ã已驳åãæå¼ï¼æªå¡«æ¶å端ååãè´¢å¡æªå¡«å驳ååå ã | |
| | | | rejectTime | ä»
å端åå¨ | å表ä¸å±ç¤ºï¼ä¾ææ¥/追溯 | |
| | | | hasAttachment | åè¡¨ãæ¨ä»åè¯ãå | åè¯å·²å¿
å¡«ï¼ä»
ãå·²ä¸ä¼ / 缺失ã两æ | |
| | | |
| | | ## ä¸å¡è§å说æ |
| | | |
| | | | åºæ¯ | è§å | |
| | | |------|------| |
| | | | åæ®å
³ç³» | 䏿¡æ¨æ¬¾è®°å½ â· ä¸å¼ è´¢å¡æ¥éåï¼**1:1ãéé¢ä¸è´**ï¼ä¸ä¸ªæ¹æ¬¡ä¸å¼ å | |
| | | | ç»è®°å³æäº¤ | 课é¢ä¾§ç¹ä¿ååç«å³èªå¨æäº¤ BPMï¼**ä¸éè¦**åå»è´¢å¡æ¨¡åæäº¤ä¸æ¬¡ | |
| | | | å¯ç»è®°åæ | åªæ**å·²ç«é¡¹**ç课é¢ç³æ¥ä¹¦æè½ç»è®°ç»è´¹æ¨ä» | |
| | | | åè¯å¿
å¡« | æ¨ä»åè¯å¿
å¡«ï¼ä¼éèªå¨çæçè´¢å¡æ¥éåä¸èµ·é交财å¡å®¡æ¹ | |
| | | | éé¢ä¸é | æ¬æ¬¡éé¢ + è¯¥ç³æ¥åå·²ç»è®°éé¢ â¤ ç³è¯·é¢ç®ï¼`budgetAmount`ï¼ | |
| | | | ä¿®æ¹åæ | åªæãå¾
æ¨ä»(0)ãã已驳å(30)ãå¯ä¿®æ¹å¹¶éæ°åèµ·æ¥éï¼ãæ¥é审æ¹ä¸ãéè´¢å¡ç«¯å
æ¤åæçå¾
ç»æ | |
| | | | 驳åéå | ã已驳åãè®°å½æ¹éé¢/åè¯/æ¹æ¬¡åéæ°åèµ·ï¼åæéé¢ãåè¯ãæ¹æ¬¡ä¸ä¸¢å¤±ï¼é©³ååå 䏿¶é´è¢«æ¸
空 | |
| | | | å é¤åæ | åªæãå¾
æ¨ä»(0)ãå¯å é¤ï¼è¥å
³èçè´¢å¡æ¥éå已䏿¯ãè稿ãï¼å é¤ä¼è¢«æç»å¹¶æç¤ºè系财å¡ç¡®è®¤ | |
| | | | 审æ¹åå | æ¥ééè¿ â å°è´¦ãå·²æ¨ä»(20)ãï¼é©³å â ã已驳å(30)ã+ åå /æ¶é´ï¼æ¤åæåæ¶ â éåãå¾
æ¨ä»(0)ã | |
| | | | æ æµç¨å
åº | è´¢å¡å®¡æ¹åç±»ä¸æ²¡æå·²å叿µç¨æ¶ï¼ç»è®°ç´æ¥å¤±è´¥å¹¶æç¤ºå» BPM å建å叿µç¨ï¼**ä¸ä¼çä¸å¤å¿è稿æ¥éå**ï¼å端äºå¡åæ»ï¼ | |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | - **å¿
é¡»å
é¨ç½²è´¢å¡æ¥éå®¡æ¹æµç¨**ï¼`bpm_category` ä¸ `finance_reimbursement_approve` å类已åå¨ï¼ä½å
¶ä¸å¿
é¡»æä¸ä¸ª**å·²åå¸**çæµç¨å®ä¹ï¼2 èç¹ï¼è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼ï¼å¦åç»è®°æ¨æ¬¾ä¼æ¥ã请å
å¨ BPM å建并å叿¥éå®¡æ¹æµç¨åéè¯ãã |
| | | - **æ¨ä»æç»ç±ç³»ç»çæï¼ä¸å¯ç¼è¾**ï¼æ¥éåçæç»åºå® 1 è¡ï¼è´¹ç¨ç±»å=å
¶ä»ãå票éé¢=æ¨æ¬¾éé¢ãåç¥¨æ¥æ=æ¨ä»æ¥æï¼ï¼å端ä¸è¦å¨è¯¾é¢ä¾§åæç»ç¼è¾ã |
| | | - **ç¶æåªè¯»**ï¼æ¨ä»ç¶æç±ç³»ç»ä¸ BPM 驱å¨ï¼å端任ä½è¡¨åé½ä¸è¦åæäº¤ `status`ã |
| | | - **å 餿¯"两æ¸
"**ï¼å å¾
æ¨ä»è®°å½æ¶ä¼èå¨å é¤è´¢å¡ä¾§çè稿æ¥éåï¼è´¢å¡ä¾§å·²æäº¤/å·²éè¿çæ¥éåå¿
é¡»å
æ¤åæå¤çï¼å¦åå é¤è¢«æã |
| | | - **软å
³èæ å¤é®**ï¼å°è´¦ä¸æ¥éåé `reimbursement_id` å
³èãè¥è´¢å¡ä¾§**ç´æ¥å é¤**äºæ¥éåï¼å°è´¦ä¼ç䏿¬ç©º IDï¼æ¤æ¶å次修æ¹ä¼æç¤ºãå
³èçè´¢å¡æ¥éåå·²ä¸åå¨ï¼è¯·å 餿¬æ¡æ¨æ¬¾è®°å½åéæ°ç»è®°ãã |
| | | - **é件为å
¨éæ¿æ¢è¯ä¹**ï¼ä¿®æ¹è®°å½æ¶ `blobIds` ä¼ çæ¯å
¨é¨åè¯ï¼ä¸ä¼ æä¼ 空æ°ç»ä¼æ¸
空åè¯ï¼ä¸å端ä¼å
æ ¡éªå¿
å¡«å¹¶ç´æ¥æç»ï¼ã |
| | | - **å表页ä½é¢æç¤ºä»
ä¾åè**ï¼å¯ç¨ä½é¢ = ç³è¯·ç»è´¹ â å·²ç»è®°æ¨ä»åè®¡ï¼æç»ä»¥æå¡ç«¯ç´¯è®¡æ ¡éªä¸ºåï¼è¶
åºä¼è¿åå¸¦ãæ¬æ¬¡/å·²ç»è®°/å计/ä¸éãåè¦ç´ ç精确æ¥éï¼ã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===== æ¡£æ¡åé
审æ¹ï¼archive_borrow_approveï¼BPM æµç¨å®ä¹ï¼2 个顺åºèç¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ï¼ ===== |
| | | -- çææ¥æºï¼mom-jssm åºï¼ç» BPM 模å设计å¨é¨ç½²ï¼POST /bpm/model/create + /bpm/model/deployï¼ |
| | | -- åç±» bpm_category(id=8003, code=archive_borrow_approve) è§ archive_module.sql |
| | | -- å é¤é¡ºåºï¼åå¨å¤é®ï¼ï¼act_re_model â act_ge_bytearray â act_re_procdef â act_re_deployment |
| | | DELETE FROM `act_re_model` WHERE `KEY_` = 'archive_borrow_approve'; |
| | | DELETE FROM `act_ge_bytearray` WHERE `ID_` IN ('89bbc291-bbbe-11f1-a8aa-00155dd68500','8bad8073-bbbe-11f1-a8aa-00155dd68500','8bc8d0a4-bbbe-11f1-a8aa-00155dd68500'); |
| | | DELETE FROM `act_re_procdef` WHERE `KEY_` = 'archive_borrow_approve'; |
| | | DELETE FROM `act_re_deployment` WHERE `ID_` = '8bad5962-bbbe-11f1-a8aa-00155dd68500'; |
| | | DELETE FROM `bpm_process_definition_info` WHERE `category` = 'archive_borrow_approve'; |
| | | INSERT INTO `act_re_deployment` (`ID_`, `NAME_`, `CATEGORY_`, `KEY_`, `TENANT_ID_`, `DEPLOY_TIME_`, `DERIVED_FROM_`, `DERIVED_FROM_ROOT_`, `PARENT_DEPLOYMENT_ID_`, `ENGINE_VERSION_`) VALUES ('8bad5962-bbbe-11f1-a8aa-00155dd68500', 'æ¡£æ¡åé
审æ¹', 'archive_borrow_approve', 'archive_borrow_approve', '', '2026-09-29 12:30:48.677', NULL, NULL, '8bad5962-bbbe-11f1-a8aa-00155dd68500', NULL); |
| | | INSERT INTO `act_re_procdef` (`ID_`, `REV_`, `CATEGORY_`, `NAME_`, `KEY_`, `VERSION_`, `DEPLOYMENT_ID_`, `RESOURCE_NAME_`, `DGRM_RESOURCE_NAME_`, `DESCRIPTION_`, `HAS_START_FORM_KEY_`, `HAS_GRAPHICAL_NOTATION_`, `SUSPENSION_STATE_`, `TENANT_ID_`, `ENGINE_VERSION_`, `DERIVED_FROM_`, `DERIVED_FROM_ROOT_`, `DERIVED_VERSION_`) VALUES ('archive_borrow_approve:1:8bcc7a25-bbbe-11f1-a8aa-00155dd68500', 2, 'archive_borrow_approve', 'æ¡£æ¡åé
审æ¹', 'archive_borrow_approve', 1, '8bad5962-bbbe-11f1-a8aa-00155dd68500', 'archive_borrow_approve.bpmn', 'archive_borrow_approve.archive_borrow_approve.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); |
| | | INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES ('8bad8073-bbbe-11f1-a8aa-00155dd68500', 1, 'archive_borrow_approve.bpmn', '8bad5962-bbbe-11f1-a8aa-00155dd68500', X'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C223E0A20203C70726F636573732069643D22617263686976655F626F72726F775F617070726F766522206E616D653D22E6A1A3E6A188E5809FE99885E5AEA1E689B92220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D2253746172744576656E7422206E616D653D22E5BC80E5A78B223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D225374617274557365724E6F646522206E616D653D22E58F91E8B5B7E4BABA223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B33365D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68F90E4BAA42220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2266616C7365222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2266616C7365222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2266616C7365222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2266616C7365222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2266616C7365222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B325D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F617263686976655F61646D696E5F72657669657722206E616D653D22E6A1A3E6A188E7AEA1E79086E59198E5AEA1E6A0B8223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F6C65616465725F617070726F766522206E616D653D22E58886E7AEA1E9A286E5AFBCE5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C656E644576656E742069643D22456E644576656E7422206E616D653D22E7BB93E69D9F223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D312220736F757263655265663D2253746172744576656E7422207461726765745265663D225374617274557365724E6F6465223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D322220736F757263655265663D225374617274557365724E6F646522207461726765745265663D2241637469766974795F617263686976655F61646D696E5F726576696577223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D332220736F757263655265663D2241637469766974795F617263686976655F61646D696E5F72657669657722207461726765745265663D2241637469766974795F6C65616465725F617070726F7665223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D342220736F757263655265663D2241637469766974795F6C65616465725F617070726F766522207461726765745265663D22456E644576656E74223E3C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F617263686976655F626F72726F775F617070726F7665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22617263686976655F626F72726F775F617070726F7665222069643D2242504D4E506C616E655F617263686976655F626F72726F775F617070726F7665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2253746172744576656E74222069643D2242504D4E53686170655F53746172744576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D22302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D225374617274557365724E6F6465222069643D2242504D4E53686170655F5374617274557365724E6F6465223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D2238302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F617263686976655F61646D696E5F726576696577222069643D2242504D4E53686170655F41637469766974795F617263686976655F61646D696E5F726576696577223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223233302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F6C65616465725F617070726F7665222069643D2242504D4E53686170655F41637469766974795F6C65616465725F617070726F7665223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223338302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22456E644576656E74222069643D2242504D4E53686170655F456E644576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D223533302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D31222069643D2242504D4E456467655F73657175656E6365466C6F772D31223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D2238302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D32222069643D2242504D4E456467655F73657175656E6365466C6F772D32223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223138302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D33222069643D2242504D4E456467655F73657175656E6365466C6F772D33223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223333302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223338302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D34222069643D2242504D4E456467655F73657175656E6365466C6F772D34223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223438302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E0A', 0); |
| | | INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES ('8bc8d0a4-bbbe-11f1-a8aa-00155dd68500', 1, 'archive_borrow_approve.archive_borrow_approve.png', '8bad5962-bbbe-11f1-a8aa-00155dd68500', X'89504E470D0A1A0A0000000D494844520000023A000000460806000000C5373E5300000D7E49444154785EED9DEF4F1CC719C7378E54E545FE832AAF92FE1FAD94282F7811B5D271E743D83EEE90C10164C9BF24CB56A1F84D5184915AB96ADF44B69A0A15C936C4C6766C30A60EB8D88AD4065C8803C1716D7206FC0B146C30B79D87B2D2646E81BDBD9BBD9987EF47FA08B3B33BB3BEF9F230B777B7380E280AD7757F363535F5F7E1E1E1E5BEBE3EF7EAD5AB3062C5E39E1B1C1C7CD4DFDFFF913A3FB6825C955FE40AEA9063AE007344D1E812A175B3D9ACBBB4B4E4BE7AF50A462C3DEEF4F80F0C0C3C1785A4429D231B41AECA2F720575C831578039F4CC8842AB861946EFCCCCCC9C281C23EA1CD90872658EC815D421A75C01E6D0E55F3C3332439A0751385EAA736423C89539225750879C72059843AFB9AA0186E593E6439D231B41AECC12B9823AE4922BC09CA08563F1D98C3B75FB5377ECDAEFD6A47FD336753F589C5C0A07726596C81572A5432EB902CC095238169E3E7447AF1C77FF75F1D04FA46DD4A6EE0FC3CBA570205766895C21573AE4922BC09C2085E3C1584F5ED1F0FCEFD8E779FBC3F072291CC895592257C8950EB9E40A302748E1F8CFF5DFE7150C4F6A53F787E1E55238902BB344AE902B1D72C915604E90C2317AB539AF6078529BBA3F0C2F97C2815C992572855CE9904BAE00735038CC924BE140AECC12B942AE74C825578039410A077D6A412D189ED4A6EE0FC3CBA570205766895C21573AE4922BC09C2085E3DE977FCC2B189ED4A6EE0FC3CBA570205766895C21573AE4922BC09C208563FEE1BFDDD12F7E9B5734681BB5A9FBC3F072291CC895592257C8950EB9E40A302748E120BFBB7326AF70D036753F589C5C0A07726596C81572A5432EB90A4A2C167B2F1E8F1F12F624128911E103A1BBFE7584B6533BEDA71EAB1DD775770C0F0FFFE6CC99335FB4B4B4CC1D397264A9BEBE3E4727585757B772F0E0C11762DBB7ADADAD9FA452A977D4E33913A870BC7CE9DE1BFA535EE1A06DD496B73F0C2D97C2815C992572855CE9904BAE36432C5ADE146B85F4CE9D3BC7D61735815CDF3F4DC7AB7D9614B1C079EBF2E5CB7F397EFCF8722693714F9D3AE5DEBA75CB9D9C9C74E7E7E75D82BED2F7B49DDAD3E9F46A6363E3546D6DED876A7F1CD9AA70D09D44BFF9F20F7945C393DA70B7D1D2C9A570205766895C21573AE492AB8D100B950AB160B9AB2E620A717DC153A1F65D12C4C2E5E3D6D6D6A5FDFBF7BBC3C3C3EEEAEAEADAC2662B683FDABFA9A96965DFBE7D5FC5E3F177D5BE39B161E110CF7C66EEF5BB5F5F3E9A572C54691FDA17CF968A974BE140AECC12B942AE74C825572ACDCDCD3BC402A54D5DB4ECD9B3C7EDE8E8700707077D2F98D0766AA7FDD463A93FEA571D2B1462CC37AE5CB9F2D9DEBD7BDDDEDE5EF7F5EBD73F5DC904848EA3E3C5092F8A13FC401D870B7E8563AB67451B89674BC5CBA570205766895CE58B5C152F975CC9C462B1B7E3F1F8457991924EA7DDEEEE6E777979595D2AF842FBD1FE749CDC0FF54BFDAB631684E8FF8DB367CFFEB3BEBEDE1D1F1F57C70E05F593C9647E4C269369753C0EF8158E20CF8A36928E55FB83C1E55238902BB344AEFC45AE8A934BAE3CE88A8B58905C901727EDEDEDEEC2C282BA3408041D47C72B57772E14756587AEE4D4D5D5B9D96C561DAF28A8BF542AB5505959F9BE3AA6EDF8150EB51814AADA1F0C2E97C2815C992572B5B16A7F30B85C72E521BF5C25FEED767575B9B95C4E5D1214041D4FFD507F52DF6DEAD881181A1AFA981639A5BA92A322FACDEDDAB5EB69593E36A611BFC201CB2797C2815C9925720575C8255784588054C8575E6871524AA83FE5CA4E616F50167DBC75E2C489257A4F8D4EBABBBB9F2693C9CBEAF83683C261965C0A07726596C815D421975CD147C0E54F57D1CB4DC55EC951A1FEE497B1E8D358057DF4FCD2A54B7FA64F57857DE37150A8FF4C26335B5959F92BF51C6C0585C32CB9140EE4CA2C912BA8432EB9120B8FB4B700A13710877D4FCE5650BFCA1B9483BDF7571CBBE3D8B163CBF491F028B879F3E6337172FF50CFC3565038CC924BE140AECC12B9823AE4922BF966803D3D3DEAAFFD9242FDCB5775D473F1656868E8D7B5B5B581EF93532C344E5555D5B3582CF673F55C4C423C88D785BF54B7ABA07098A5E98503B9B253E40AEA9043AE92C9E42FBC8507DDFF86FE5F3AA1FEE5FBECD0F8EA39E571FAF4E9AB7447E328696969198DC7E3F5EAB99884F7206E35D1281C666941E140AE2C14B9823AE4902BB1FDA0B7DFC99327D55FF75AA071A4733BA89E531EADADADB351BD6CE571EDDA35BACC75563D1793901EC44D271A85C32C2D2A1CC89545225750871C7225BEEFF6DAE9CEC65140E348E7D42D9F8F2F870F1F5E9A9A9A52FBD1CAC4C4C4B438B9DBEAB99884CF04FB4E340A87595A5838902B0B44AEA00E39E44A7CBDED6D8F6A2D41E348E7B2F55AA2AEAE2EF7E4C913B51FADCCCFCF2F88937BA89E8B49F84CACEADA44A37098A5C58503B93258E40AEA9049AEE6BCEFA35A4BD038D2396CBD96A8AEAE76575656D47EB422C67BE1F38059290A8759AAF363ABC89559AAF363ABC89559AAF363BB51AD25681C69DC97EABA268FBD7BF7AE44B50AF3989D9DFD361164155646D40994BC9EC0A56063B5F819127265B0C815D421875C89AF0FBDED51AD250ABEA273E0C0811751BDAEE671F7EEDD3B8920AFAB9591CD2656C6F4C2214ED1D752B59BA68585A32CB9727CE694E4D25E6A91AB703A3E7344DAD2AE5B0EB94AD8F01E9DA3478F7E13F5A7AECE9D3BD793B0E7535779132B1375E12854C7E78756DE566CBB695A5438CA9A2BC7670EE56DB6B7975AE42A9C8ECF9CC8DB4C6FD72D875C256CF8D4554B4BCB2751DF47A7A1A1A1D782FBE86C38B13251178E42757C7E68E56DC5B69BA60585C3885C393E73286FB3BDBDD42257E1747CE644DE667ABB6E39E42A61C37D7452A9D43B994C6635C23B23FF204E6CD6F43B230725EAC251A88ECF0FADBCADD876D334BD70044577AE1C9F3994B7D9DE5E6A91AB703A3E73226F33BD5DB71C72558E3B23EFDEBD3BE78D19E8CEC8446363E37751BD7CD5D9D9F9D704FED655643A3E3FB4F2B662DB4D9343E12074E7CAF19943799BEDEDA516B90AA7E33327F236D3DB75CB2557C6FFAD2BA2B6B6F6C3A6A6A69508FE7AF9037172F7F0D7CBA3D3F1F9A195B715DB6E9A5C0A87EE5C393E73286FB3BDBDD42257E1747CE644DE667ABB6EB9E42A11E15F2FAFA9A959F5C6A271D573D994868686AF7A7B7B736AC72524D7D6D6F6A938B15E756C9B89BA7014AAE3F3432B6F2BB6DD34B9140EDDB9727CE650DE667B7BA945AEC2E9F8CC89BCCDF476DD72C9552C167B53BEAAD3DEDEEEE672A55D4E507FD4AF7C3587C655CF6553C401EFA552A985F1F171B5FF9270E3C68DD3E2E466681C756C9B89BA7014AA38455F4BD56E9A5C0A87EE5C393E734A72692FB5C855381D9F39226D69D72D975C11E2F77B8574A5C5EDEAEA5297014541FDC9FDD378EA390442AC903EA8A9A9F9319BCDAA6314C5F4F4F4E7E2A41E555656BEAF8E693B51170EB8B95C0A07726596C815D421975C798835449B74C5656D7152EC951D3A9EFAA1FEA4BEDBD4B10B22994CA653A9D48B525DD959BF9243774EAC51C7E2000A875972291CC89559225750875C72E5D1DCDCBC43FCAEBF205F79A1979BC2BE67878E935FAE5AF7028DA38E5D3074E5A5BABAFA697777F7D3B06F50A6371EAFBF27E7078E57723C5038CC924BE140AECC12B9823AE4922B99582CF6763C1EBF282F4EE80DCA623DE12E2F2FAB4B055F683FDA5F79E3B14BFD52FFEA98A1111DBE9B4C26AF643299D99B376F3E0B7A9F1DB15FB6B3B3F3337152F78497A81FB56F4EA070982597C2815C9925720575C825572A74C5457E19CB93EEB3D3D1D1B17667E3C9C949777E7E7E6DDD405FE97BDA4EEDF27D723CA9BF925CC9F1833E0A2E0619ACAAAA7A2E06F9BAAFAF6F746262E2FBB9B9B945717E0B8F1F3F9E1A1B1BBB73FEFCF9EEC6C6C64B89FFFFC9F6414E1F21DF0C140EB3E452386CCAD5E2E2A23B3A3A5AB0749CDA97A92257D18B5CD98F580B54C89FC60AE3FAF1E1DE785C2874276331585D3C1EA7BF533522A47BE2D089D0D791F5ED755CEE781C149B0AC776904BE1B02957F4CBC5F1F9E4CA56D2716A5FA68A5C452F72C503FA08B8581BA40B5DF0ACEF9F2EF823E4A0F4D85438B6835C0A874DB9C2336F7B40AECC924BAE8242B79789C7E38736BB6042EDDC6E43633D36158EED2097C2815C9925720575C825578039281C66C9A570205766895C411D72C915600E0A875972291CC89559225750875C72059883C261965C0A874DB9C27B29EC01B9324B2EB902CCB1A9706C07B9140E9B7245BF5C1C9F4FBF6C251DA7F665AAC855F422570018824D85633BC8A570D8942B3CF3B607E4CA2CB9E40A30C7A6C2B11DE45238902BB344AEA00EB9E40A300785C32CB9140EE4CA2C912BA8432EB902CC41E1304B2E8503B9324BE40AEA904BAE00735038CC924BE1B02957782F853D205766C9255780397D7D7DB9A5A5A5BC00C3E815F3F048148E97EA1CD9884DB9A25F2E8ECFA75FB6928E53FB3251E4AA3C22570018C2E0E0E0A36C369B176218BDF7EFDFEF148563449D231BB12957DC9F792357E511B902C010FAFBFB3F1A1818783E33333367CB33256E8AC77D667A7AFA6FA2687C2FAC50E7C84690ABF28B5C411D72CC15D806505869652E7C45AFB9C2C8A5C79D1E7F564583FE3FEBFF2FE4AA3C225750872C7305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005010FF03FB7F2E0A575276F10000000049454E44AE426082', 1); |
| | | INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES ('89bbc291-bbbe-11f1-a8aa-00155dd68500', 1, 'source', NULL, X'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C223E0A20203C70726F636573732069643D22617263686976655F626F72726F775F617070726F766522206E616D653D22E6A1A3E6A188E5809FE99885E5AEA1E689B92220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D2253746172744576656E7422206E616D653D22E5BC80E5A78B223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D225374617274557365724E6F646522206E616D653D22E58F91E8B5B7E4BABA223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B33365D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68F90E4BAA42220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2266616C7365222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2266616C7365222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2266616C7365222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2266616C7365222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2266616C7365222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B325D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F617263686976655F61646D696E5F72657669657722206E616D653D22E6A1A3E6A188E7AEA1E79086E59198E5AEA1E6A0B8223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F6C65616465725F617070726F766522206E616D653D22E58886E7AEA1E9A286E5AFBCE5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C656E644576656E742069643D22456E644576656E7422206E616D653D22E7BB93E69D9F223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D312220736F757263655265663D2253746172744576656E7422207461726765745265663D225374617274557365724E6F6465223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D322220736F757263655265663D225374617274557365724E6F646522207461726765745265663D2241637469766974795F617263686976655F61646D696E5F726576696577223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D332220736F757263655265663D2241637469766974795F617263686976655F61646D696E5F72657669657722207461726765745265663D2241637469766974795F6C65616465725F617070726F7665223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D342220736F757263655265663D2241637469766974795F6C65616465725F617070726F766522207461726765745265663D22456E644576656E74223E3C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F617263686976655F626F72726F775F617070726F7665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D22617263686976655F626F72726F775F617070726F7665222069643D2242504D4E506C616E655F617263686976655F626F72726F775F617070726F7665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2253746172744576656E74222069643D2242504D4E53686170655F53746172744576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D22302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D225374617274557365724E6F6465222069643D2242504D4E53686170655F5374617274557365724E6F6465223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D2238302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F617263686976655F61646D696E5F726576696577222069643D2242504D4E53686170655F41637469766974795F617263686976655F61646D696E5F726576696577223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223233302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F6C65616465725F617070726F7665222069643D2242504D4E53686170655F41637469766974795F6C65616465725F617070726F7665223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223338302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22456E644576656E74222069643D2242504D4E53686170655F456E644576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D223533302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D31222069643D2242504D4E456467655F73657175656E6365466C6F772D31223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D2238302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D32222069643D2242504D4E456467655F73657175656E6365466C6F772D32223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223138302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D33222069643D2242504D4E456467655F73657175656E6365466C6F772D33223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223333302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223338302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D34222069643D2242504D4E456467655F73657175656E6365466C6F772D34223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223438302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E0A', NULL); |
| | | INSERT INTO `act_re_model` (`ID_`, `REV_`, `NAME_`, `KEY_`, `CATEGORY_`, `CREATE_TIME_`, `LAST_UPDATE_TIME_`, `VERSION_`, `META_INFO_`, `DEPLOYMENT_ID_`, `EDITOR_SOURCE_VALUE_ID_`, `EDITOR_SOURCE_EXTRA_VALUE_ID_`, `TENANT_ID_`) VALUES ('89a8afc0-bbbe-11f1-a8aa-00155dd68500', 3, 'æ¡£æ¡åé
审æ¹', 'archive_borrow_approve', 'archive_borrow_approve', '2026-09-29 12:30:45.291', '2026-09-29 12:30:50.065', 1, '{"allowCancelRunningProcess":null,"allowWithdrawTask":null,"autoApprovalType":null,"description":"æ¡£æ¡åé
两级审æ¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸âå管é¢å¯¼å®¡æ¹ï¼","formCustomCreatePath":"/archive/borrow/index","formCustomViewPath":"/archive/borrow/detail/approve/index.vue","formId":null,"formType":20,"icon":null,"managerUserIds":[1],"printTemplateSetting":null,"processAfterTriggerSetting":null,"processBeforeTriggerSetting":null,"processIdRule":null,"sort":1790656245282,"startDeptIds":null,"startUserIds":null,"summarySetting":null,"taskAfterTriggerSetting":null,"taskBeforeTriggerSetting":null,"titleSetting":null,"type":10,"visible":true}', '8bad5962-bbbe-11f1-a8aa-00155dd68500', '89bbc291-bbbe-11f1-a8aa-00155dd68500', NULL, ''); |
| | | INSERT INTO `bpm_process_definition_info` (`id`, `process_definition_id`, `model_id`, `model_type`, `category`, `icon`, `description`, `form_type`, `form_id`, `form_conf`, `form_fields`, `form_custom_create_path`, `form_custom_view_path`, `simple_model`, `visible`, `sort`, `start_user_ids`, `start_dept_ids`, `manager_user_ids`, `allow_cancel_running_process`, `allow_withdraw_task`, `process_id_rule`, `auto_approval_type`, `title_setting`, `summary_setting`, `process_before_trigger_setting`, `process_after_trigger_setting`, `task_before_trigger_setting`, `task_after_trigger_setting`, `print_template_setting`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (43, 'archive_borrow_approve:1:8bcc7a25-bbbe-11f1-a8aa-00155dd68500', '89a8afc0-bbbe-11f1-a8aa-00155dd68500', 10, 'archive_borrow_approve', NULL, 'æ¡£æ¡åé
两级审æ¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸âå管é¢å¯¼å®¡æ¹ï¼', 20, NULL, NULL, NULL, '/archive/borrow/index', '/archive/borrow/detail/approve/index.vue', NULL, 1, 1790656245282, '', NULL, '1', 1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '1', '2026-09-29 12:30:49', '1', '2026-09-29 12:30:49', 0); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // æ ¡éªåå¹¶åç SQL æä»¶ï¼è¯å¥ååãå¼å·éåãæ¬å·å¹³è¡¡ãé¦å
³é®åç½åå |
| | | const fs = require('node:fs'); |
| | | // å
å餿´è¡æ³¨éï¼æ¬æä»¶ä¸æ³¨éå为æ´è¡ï¼ä¸æ³¨éå
ä¼åºç°ç¤ºä¾ SQL çåå·ï¼ |
| | | const raw = fs.readFileSync(__dirname + '/config_export_all_20260928.sql', 'utf8'); |
| | | const s = raw |
| | | .split(/\r?\n/) |
| | | .filter((l) => !l.trimStart().startsWith('--')) |
| | | .join('\n'); |
| | | |
| | | let inS = false; |
| | | let start = 0; |
| | | let depth = 0; |
| | | let maxDepth = 0; |
| | | let statements = 0; |
| | | const keywords = new Set(); |
| | | const ESC = '\\'; |
| | | |
| | | for (let i = 0; i < s.length; i++) { |
| | | const c = s[i]; |
| | | if (!inS) { |
| | | if (c === "'") { |
| | | inS = true; |
| | | } else if (c === '(') { |
| | | depth++; |
| | | if (depth > maxDepth) maxDepth = depth; |
| | | } else if (c === ')') { |
| | | depth--; |
| | | if (depth < 0) throw new Error(`第 ${i} åç¬¦å¤æ¬å·æåéå`); |
| | | } else if (c === ';') { |
| | | const st = s.slice(start, i).trim(); |
| | | if (st) { |
| | | const body = st |
| | | .split(/\r?\n/) |
| | | .filter((l) => l.trim() && !l.trim().startsWith('--')) |
| | | .join('\n'); |
| | | const m = body.match(/^(\w+)/); |
| | | if (!m) throw new Error(`è¯å¥æ æ³è¯å«é¦å
³é®åï¼${st.slice(0, 80)}`); |
| | | keywords.add(m[1].toUpperCase()); |
| | | statements++; |
| | | } |
| | | start = i + 1; |
| | | } |
| | | } else if (c === "'") { |
| | | if (s[i - 1] === ESC && s[i - 2] !== ESC) { |
| | | // åææ 转ä¹çå¼å·ï¼ä»å¨å符串å
|
| | | } else if (s[i + 1] === "'") { |
| | | i++; // '' è½¬ä¹ |
| | | } else { |
| | | inS = false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | console.log('è¯å¥æ° :', statements); |
| | | console.log('æ¬å·ç»å°¾æ·±åº¦:', depth, 'ï¼åºä¸º 0ï¼'); |
| | | console.log('æå¤§åµå¥æ·±åº¦:', maxDepth); |
| | | console.log('æªéåå符串:', inS, 'ï¼åºä¸º falseï¼'); |
| | | console.log('é¦å
³é®åéå:', [...keywords].sort().join(' ')); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===== æ¥é审æ¹ï¼finance_reimbursement_approveï¼BPM æµç¨å®ä¹ï¼2 个顺åºèç¹ï¼è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼ ===== |
| | | -- çææ¥æºï¼mom-jssm åºï¼ç» BPM 模å设计å¨é¨ç½²ï¼POST /bpm/model/create + /bpm/model/deployï¼ï¼é¨ç½²æ¶é´ 2026-09-29 11:28:34 |
| | | -- åç±» bpm_category(id=216, code=finance_reimbursement_approve) å·²åå¨ï¼è¡¨åç±»å=èªå®ä¹è¡¨å(form_type=20) |
| | | -- å é¤é¡ºåºï¼åå¨å¤é®ï¼ï¼act_re_model â act_ge_bytearray â act_re_procdef â act_re_deployment |
| | | DELETE FROM `act_re_model` WHERE ID_ = 'd934d9d5-bbb5-11f1-a8aa-00155dd68500'; |
| | | INSERT INTO `act_re_model` (`ID_`, `REV_`, `NAME_`, `KEY_`, `CATEGORY_`, `CREATE_TIME_`, `LAST_UPDATE_TIME_`, `VERSION_`, `META_INFO_`, `DEPLOYMENT_ID_`, `EDITOR_SOURCE_VALUE_ID_`, `EDITOR_SOURCE_EXTRA_VALUE_ID_`, `TENANT_ID_`) VALUES ('d934d9d5-bbb5-11f1-a8aa-00155dd68500', 3, 'æ¥é审æ¹', 'finance_reimbursement_approve', 'finance_reimbursement_approve', '2026-09-29 11:28:33.279', '2026-09-29 11:28:35.781', 1, '{"allowCancelRunningProcess":null,"allowWithdrawTask":null,"autoApprovalType":null,"description":"æ¥éå两级审æ¹ï¼è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼","formCustomCreatePath":"/finance/reimbursement/index","formCustomViewPath":"/finance/reimbursement/detail/approve/index.vue","formId":null,"formType":20,"icon":null,"managerUserIds":[1],"printTemplateSetting":null,"processAfterTriggerSetting":null,"processBeforeTriggerSetting":null,"processIdRule":null,"sort":1790652513269,"startDeptIds":null,"startUserIds":null,"summarySetting":null,"taskAfterTriggerSetting":null,"taskBeforeTriggerSetting":null,"titleSetting":null,"type":10,"visible":true}', 'd9acc8f7-bbb5-11f1-a8aa-00155dd68500', 'd93ec4e6-bbb5-11f1-a8aa-00155dd68500', NULL, ''); |
| | | -- [act_re_model] 1 è¡ |
| | | DELETE FROM `act_ge_bytearray` WHERE ID_ IN ('d9acc8f8-bbb5-11f1-a8aa-00155dd68500','da62d289-bbb5-11f1-a8aa-00155dd68500','d93ec4e6-bbb5-11f1-a8aa-00155dd68500'); |
| | | INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES ('d93ec4e6-bbb5-11f1-a8aa-00155dd68500', 1, 'source', NULL, 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C223E0A20203C70726F636573732069643D2266696E616E63655F7265696D62757273656D656E745F617070726F766522206E616D653D22E68AA5E99480E5AEA1E689B92220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D2253746172744576656E7422206E616D653D22E5BC80E5A78B223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D225374617274557365724E6F646522206E616D653D22E58F91E8B5B7E4BABA223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B33365D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68F90E4BAA42220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2266616C7365222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2266616C7365222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2266616C7365222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2266616C7365222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2266616C7365222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B325D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F66696E616E63655F72657669657722206E616D653D22E8B4A2E58AA1E5AEA1E6A0B8223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F66696E616E63655F617070726F766522206E616D653D22E8B4A2E58AA1E4B8BBE7AEA1E5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C656E644576656E742069643D22456E644576656E7422206E616D653D22E7BB93E69D9F223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D312220736F757263655265663D2253746172744576656E7422207461726765745265663D225374617274557365724E6F6465223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D322220736F757263655265663D225374617274557365724E6F646522207461726765745265663D2241637469766974795F66696E616E63655F726576696577223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D332220736F757263655265663D2241637469766974795F66696E616E63655F72657669657722207461726765745265663D2241637469766974795F66696E616E63655F617070726F7665223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D342220736F757263655265663D2241637469766974795F66696E616E63655F617070726F766522207461726765745265663D22456E644576656E74223E3C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F66696E616E63655F7265696D62757273656D656E745F617070726F7665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2266696E616E63655F7265696D62757273656D656E745F617070726F7665222069643D2242504D4E506C616E655F66696E616E63655F7265696D62757273656D656E745F617070726F7665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2253746172744576656E74222069643D2242504D4E53686170655F53746172744576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D22302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D225374617274557365724E6F6465222069643D2242504D4E53686170655F5374617274557365724E6F6465223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D2238302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F66696E616E63655F726576696577222069643D2242504D4E53686170655F41637469766974795F66696E616E63655F726576696577223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223233302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F66696E616E63655F617070726F7665222069643D2242504D4E53686170655F41637469766974795F66696E616E63655F617070726F7665223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223338302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22456E644576656E74222069643D2242504D4E53686170655F456E644576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D223533302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D31222069643D2242504D4E456467655F73657175656E6365466C6F772D31223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D2238302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D32222069643D2242504D4E456467655F73657175656E6365466C6F772D32223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223138302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D33222069643D2242504D4E456467655F73657175656E6365466C6F772D33223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223333302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223338302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D34222069643D2242504D4E456467655F73657175656E6365466C6F772D34223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223438302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E0A, NULL); |
| | | INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES ('d9acc8f8-bbb5-11f1-a8aa-00155dd68500', 1, 'finance_reimbursement_approve.bpmn', 'd9acc8f7-bbb5-11f1-a8aa-00155dd68500', 0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C223E0A20203C70726F636573732069643D2266696E616E63655F7265696D62757273656D656E745F617070726F766522206E616D653D22E68AA5E99480E5AEA1E689B92220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D2253746172744576656E7422206E616D653D22E5BC80E5A78B223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D225374617274557365724E6F646522206E616D653D22E58F91E8B5B7E4BABA223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B33365D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68F90E4BAA42220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2266616C7365222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2266616C7365222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2266616C7365222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2266616C7365222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2266616C7365222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B325D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F66696E616E63655F72657669657722206E616D653D22E8B4A2E58AA1E5AEA1E6A0B8223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F66696E616E63655F617070726F766522206E616D653D22E8B4A2E58AA1E4B8BBE7AEA1E5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C656E644576656E742069643D22456E644576656E7422206E616D653D22E7BB93E69D9F223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D312220736F757263655265663D2253746172744576656E7422207461726765745265663D225374617274557365724E6F6465223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D322220736F757263655265663D225374617274557365724E6F646522207461726765745265663D2241637469766974795F66696E616E63655F726576696577223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D332220736F757263655265663D2241637469766974795F66696E616E63655F72657669657722207461726765745265663D2241637469766974795F66696E616E63655F617070726F7665223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D342220736F757263655265663D2241637469766974795F66696E616E63655F617070726F766522207461726765745265663D22456E644576656E74223E3C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F66696E616E63655F7265696D62757273656D656E745F617070726F7665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2266696E616E63655F7265696D62757273656D656E745F617070726F7665222069643D2242504D4E506C616E655F66696E616E63655F7265696D62757273656D656E745F617070726F7665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2253746172744576656E74222069643D2242504D4E53686170655F53746172744576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D22302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D225374617274557365724E6F6465222069643D2242504D4E53686170655F5374617274557365724E6F6465223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D2238302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F66696E616E63655F726576696577222069643D2242504D4E53686170655F41637469766974795F66696E616E63655F726576696577223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223233302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F66696E616E63655F617070726F7665222069643D2242504D4E53686170655F41637469766974795F66696E616E63655F617070726F7665223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223338302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22456E644576656E74222069643D2242504D4E53686170655F456E644576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D223533302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D31222069643D2242504D4E456467655F73657175656E6365466C6F772D31223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D2238302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D32222069643D2242504D4E456467655F73657175656E6365466C6F772D32223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223138302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D33222069643D2242504D4E456467655F73657175656E6365466C6F772D33223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223333302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223338302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D34222069643D2242504D4E456467655F73657175656E6365466C6F772D34223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223438302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E0A, 0); |
| | | INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES ('da62d289-bbb5-11f1-a8aa-00155dd68500', 1, 'finance_reimbursement_approve.finance_reimbursement_approve.png', 'd9acc8f7-bbb5-11f1-a8aa-00155dd68500', 0x89504E470D0A1A0A0000000D494844520000023A000000460806000000C5373E5300000D7D49444154785EED9DDD6F14D719872744AA7291FFA0CA55D2FFA39512E5C217512BAD7759C4C77AD7C2261821F1252150ED9A9B5A1120B5A26A6F22505359B504988081800DB8C4A68022B5B12984E098507016DB7C19C560C34ECF4B3DD2C9D9C19E9DDD33FB9ED7BF477A643C67E69C61CFCFAFCFCEEE8E3D0F5485EFFB3F1B1B1BFBFBF0F0F05C7F7FBF7FE6CC1998B0EA712F0D0E0EDE1B1818F8C89C1F5741AEEA2F72056D2831574038AA68F4A8D0FAC562D19F9D9DF59F3F7F0E13961E777AFCCF9F3FFF58159206738E5C04B9AABFC815B4A1C45C01E1D033230AAD196698BC13131353AA705C36E7C845902B3E2257D0869272058443977FF1CC8887340FAA703C33E7C845902B3E2257D0869272058443AFB99A0186F593E6C39C231741AE78895C411B4AC915104ED4C2F1F4D1843F76E5537FF4ECEF5E49FFA66DE67EB03AA5140EE48A97C81572654329B902C2895238661EDEF5474EEFF6FF7562DB4FA46DD466EE0FE32BA5702057BC44AE902B1B4AC915104E94C27167F45859D108FCEFE8E765FBC3F84A291CC8152F912BE4CA865272058413A570FCE7DCEFCB0A4620B599FBC3F84A291CC8152F912BE4CA865272058413A5708C9C692F2B1881D466EE0FE32BA5702057BC44AE902B1B4AC915100E0A072FA5140EE48A97C81572654329B902C2895238E8530B66C108A436737F185F298503B9E22572855CD9504AAE8070A2148E9B5FFEB1AC6004529BB93F8CAF94C2815CF112B942AE6C2825574038510AC7F4DD7FFB235FFCB6AC68D0366A33F787F1955238902B5E2257C8950DA5E40A08274AE120BFBB7AA8AC70D036733F589D520A0772C54BE40AB9B2A1945C4525954ABD974EA7B7298F653299CBCA3B4A7FE1EB65DA4EEDB49F79AC757CDF5F313C3CFC9B43870E7DD1D1D131B563C78ED9D6D6D6129D604B4BCBFCD6AD5B9FA86DDF7676767E92CBE5DE318F974CA4C2F1EC997F73E84F658583B6515BD9FE30B6520A0772C54BE40AB9B2A1945C2D865AB4BCA9D60AF9952B578E2E2C6A22B9B07F9E8E37FBAC296A81F3D6A953A7FEB27BF7EEB942A1E01F3870C0BF74E9927FEBD62D7F7A7ADA27E82B7D4FDBA93D9FCFBF6C6B6B1B6B6E6EFED0EC4F224B150EBA93E8375FFEA1AC6804521BEE365A3BA5140EE48A97C81572654329B97A1D6AA1D2A0162CD7CC454C252E2C781ACCBE6B825AB87CDCD9D939BB79F3667F7878D87FF9F2E5AB85CD52D07EB4FFA64D9BE6376CD8F0553A9D7ED7EC5B12AF2D1CEA99CFC4CD01FFEB533BCB8A8529ED43FBE2D952F54A291CC8152F912BE4CA86527265D2DEDEBE422D50BACC45CBBA75EBFCFDFBF7FB838383A1174C683BB5D37EE6B1D41FF56B8E150B35E61BA74F9FFE6CFDFAF57E5F5F9FFFE2C58B9FAE642242C7D1F1EA849FAA13FCC01C470A618563A96745AF13CF96AA574AE140AE78895C958B5C55AF945CE9A452A9B7D3E9F4097D9192CFE7FDDEDE5E7F6E6ECE5C2A8442FBD1FE749CDE0FF54BFD9B635684EAFF8DC3870FFFB3B5B5D5BF7EFDBA39762CA89F42A1F063369BCD9BE34920AC70447956F43AE958B33F185D298503B9E22572152E72559D52721540575CD482E4B8BE38D9BB77AF3F3333632E0D2241C7D1F1C6D59DE3555DD9A12B392D2D2D7EB15834C7AB0AEA2F97CBCD343636BE6F8EE93A6185C32C06956AF607A32BA5702057BC44AE5EAFD91F8CAE945C05E82F57A97FFB3D3D3D7EA9543297041541C7533FD49FD677973976248686863EA6454EADAEE498A87E4B6BD6AC7958978F8D5924AC70C0FA29A5702057BC44AEA00DA5E48A500B9006FDCA0B2D4E6A09F5675CD9A9EC0DCAAA8FB7F6ECD9334BEFA9B1496F6FEFC36C367BCA1CDF6550387829A5702057BC44AEA00DA5E48A3E02AE7FBA8A5E6EAAF64A8E09F5A7BF8C459FC6AAE8A3E7274F9EFC337DBA2AEE1B8FA342FD170A85C9C6C6C65F99E7E02A281CBC945238902B5E2257D0865272A5161EF96001426F208EFB9E9CA5A07E8D3728477BEFAF3A76C5AE5DBBE6E823E14970F1E2C547EAE4FE619E87ABA070F0524AE140AE78895C411B4AC9957E33C063C78E99BFF66B0AF5AF5FD531CF2594A1A1A15F37373747BE4F4EB5D038AB56AD7A944AA57E6E9E0B27D483784EF94B73BB090A072FB9170EE4CA4D912B684309B9CA66B3BF08161E74FF1BFA7FD984FAD7EFB343E39BE754C6C18307CFD01D8D93A4A3A363249D4EB79AE7C289E0415C6AA2513878E940E140AE1C14B9823694902BB57D6BB0DFBE7DFBCC5FF756A071B473DB6A9E53199D9D9D9349BD6C1570F6EC59BACC75D83C174E680FE2A2138DC2C14B870A0772E590C815B4A1845CA9EF7B8376BAB37112D038DA39F5EAE713CAF6EDDB67C7C6C6CC7EAC72E3C68D71757257CC73E144C804874E340A072F1D2C1CC895032257D0861272A5BE5E09B627B596A071B473597A2DD1D2D2527AF0E081D98F55A6A7A767D4C9DD35CF851321136BFA6AA2513878E970E140AE188B5C411B0AC9D554F07D526B091A473B87A5D712AB57AFF6E7E7E7CD7EACA2C67B12F28039290A072FCDF97155E48A97E6FCB82A72C54B737E5C37A9B5048DA38DFBCC5CD794B17EFDFAF9A4566101939393DF66A2ACC2EA8839819AE732B814CC56879F2121578C45AEA00D25E44A7DBD1B6C4F6A2D51F1159D2D5BB63C49EA75B5806BD7AE5DCD44795DAD8E2C36B13ADC0B873AC5506BD5CE4D070B8713B9F242324026D55E6F91AB787A21734ABAD26E5B09B9CAB8F01E9D9D3B777E93F4A7AE8E1C39722CE3CEA7AECA265627E9C251A95EC80FADBEADDA766E3A54389CCA951732E7FA36DBEDF516B98AA7173287FA36EEEDB69590AB8C0B9FBAEAE8E8F824E9FBE86CDCB8B1CF81FBE8BC766275922E1C95EA85FCD0EADBAA6DE7A60385C3C95C792173AE6FB3DD5E6F91AB787A2173A86FE3DE6E5B09B9CAB8701F9D5C2EF74EA1507899E09D917F502736C9FDCEC85149BA7054AA17F243AB6FABB69D9BDC0B4754B8E5CA0B99737D9BEDF67A8B5CC5D30B99437D1BF776DB4AC8553DEE8CBC76EDDA523066A43B23136D6D6DDF25F5F2557777F75F33F85B5789E985FCD0EADBAA6DE7A684C24170CB951732E7FA36DBEDF516B98AA7173287FA36EEEDB695922BF67FEB8A686E6EFE70D3A64DF309FCF5F23BEAE46EE2AF9727A717F243AB6FABB69D9B520A07B75C792173AE6FB3DD5E6F91AB787A2173A86FE3DE6E5B29B9CA24F8D7CB9B9A9A5E0663D1B8E6B92CCAC68D1BBFEAEBEB2B991DD790525757D7A7EAC4FACCB15D26E9C251A95EC80FADBEADDA766E4A291CDC72E585CCB9BECD767BBD45AEE2E985CCA1BE8D7BBB6DA5E42A954ABDA95FD5D9BB77AF5F2AD5763941FD51BFFAD51C1AD73C97455107BC97CBE566AE5FBF6EF65F132E5CB870509DDC048D638EED3249178E4A55A7186AADDAB929A57070CB9517920132A9F67A8B5CC5D30B9953D29576DB4AC915A17EBF3768575AFC9E9E1E73195015D49FDE3F8D679E4324D40AE983A6A6A61F8BC5A23946558C8F8F7FAE4EEA5E6363E3FBE698AE9374E1808B2BA5702057BC44AEA00DA5E42A40AD21BAB42B2EAF1627D55ED9A1E3A91FEA4FEBBBCB1CBB22B2D96C3E97CB3DA9D5959D852B3974E7C426732C09A070F0524AE140AE78895C411B4AC955407B7BFB0AF5BBFEB87EE5855E6E8AFB9E1D3A4E7FB96AC1E3348E3976C5D09597D5AB573FECEDED7D18F70DCAF4C6E385F7E4FC20F14A4E000A072FA5140EE48A97C815B4A1945CE9A452A9B7D3E9F4097D71426F5056EB097F6E6ECE5C2A8442FBD1FEC61B8F7DEA97FA37C78C8DEAF0DD6C367BBA50284C5EBC78F151D4FBECA8FD8ADDDDDD9FA993BAA93C49FD987D4B02858397520A0772C54BE40ADA504AAE4CE88A8BFE325620DD6767FFFEFDAFEE6C7CEBD62D7F7A7AFAD5BA81BED2F7B49DDAF5FBE404527F35B99213067D145C0D32B86AD5AAC76A90AFFBFBFB476EDCB8F1FDD4D4D453757E33F7EFDF1F1B1D1DBD7AF4E8D1DEB6B6B69399FFFFC9F641491F215F0C140E5E4A291C2EE5EAE9D3A7FEC8C848C5D271665F5C45AE9217B9721FB51668D03F8D15C785E3E3BDF1B852E84EC66AB096743A4D7FA7EAB292EE894327425F2F2F6C6F9172C7E3A8B854389683520A874BB9A25F2E5EC8275796928E33FBE22A7295BCC8950CE823E06A6D90AF74C1B3B07FBEE28F9083DAE352E1580E4A291C2EE50ACFBCDD01B9E2A5945C45856E2F934EA7B72D76C184DAA5DD86C6795C2A1CCB41298503B9E22572056D2825574038281CBC945238902B5E2257D0865272058483C2C14B298503B9E22572056D2825574038281CBC9452385CCA15DE4BE10EC8152FA5E40A08C7A5C2B11C9452385CCA15FD72F1423EFDB294749CD9175791ABE445AE0060824B85633928A570B8942B3CF37607E48A9752720584E352E1580E4A291CC8152F912B684329B902C241E1E0A594C2815CF112B9823694922B201C140E5E4A291CC8152F912B684329B902C241E1E0A594C2E152AEF05E0A7740AE782925574038FDFDFDA5D9D9D9B200C3E455F3704F158E67E61CB9884BB9A25F2E5EC8A75F96928E33FBE22872551F912B009830383878AF582C96851826EFEDDBB7BB55E1B86CCE918BB8942BE9CFBC91ABFA885C01C0848181818FCE9F3FFF78626262CA95674AD2548FFBC4F8F8F8DF54D1F85ED960CE918B2057F517B9823694982BB00CA0B0D2CA5CF99C5E7385894B8F3B3DFEA28A06FD7F16FE5FC8557D44AEA00D45E60A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A022FE0703BF003102A0BB720000000049454E44AE426082, 1); |
| | | -- [act_ge_bytearray] 3 è¡ |
| | | DELETE FROM `act_re_procdef` WHERE KEY_ = 'finance_reimbursement_approve'; |
| | | INSERT INTO `act_re_procdef` (`ID_`, `REV_`, `CATEGORY_`, `NAME_`, `KEY_`, `VERSION_`, `DEPLOYMENT_ID_`, `RESOURCE_NAME_`, `DGRM_RESOURCE_NAME_`, `DESCRIPTION_`, `HAS_START_FORM_KEY_`, `HAS_GRAPHICAL_NOTATION_`, `SUSPENSION_STATE_`, `TENANT_ID_`, `ENGINE_VERSION_`, `DERIVED_FROM_`, `DERIVED_FROM_ROOT_`, `DERIVED_VERSION_`) VALUES ('da66f13a-bbb5-11f1-a8aa-00155dd68500', 2, 'finance_reimbursement_approve', 'æ¥é审æ¹', 'finance_reimbursement_approve', 1, 'd9acc8f7-bbb5-11f1-a8aa-00155dd68500', 'finance_reimbursement_approve.bpmn', 'finance_reimbursement_approve.finance_reimbursement_approve.png', NULL, 0, 1, 1, '', NULL, NULL, NULL, 0); |
| | | -- [act_re_procdef] 1 è¡ |
| | | DELETE FROM `act_re_deployment` WHERE ID_ = 'd9acc8f7-bbb5-11f1-a8aa-00155dd68500'; |
| | | INSERT INTO `act_re_deployment` (`ID_`, `NAME_`, `CATEGORY_`, `KEY_`, `TENANT_ID_`, `DEPLOY_TIME_`, `DERIVED_FROM_`, `DERIVED_FROM_ROOT_`, `PARENT_DEPLOYMENT_ID_`, `ENGINE_VERSION_`) VALUES ('d9acc8f7-bbb5-11f1-a8aa-00155dd68500', 'æ¥é审æ¹', 'finance_reimbursement_approve', 'finance_reimbursement_approve', '', '2026-09-29 11:28:34.065', NULL, NULL, 'd9acc8f7-bbb5-11f1-a8aa-00155dd68500', NULL); |
| | | -- [act_re_deployment] 1 è¡ |
| | | DELETE FROM `bpm_process_definition_info` WHERE model_id = 'd934d9d5-bbb5-11f1-a8aa-00155dd68500'; |
| | | INSERT INTO `bpm_process_definition_info` (`id`, `process_definition_id`, `model_id`, `model_type`, `category`, `icon`, `description`, `form_type`, `form_id`, `form_conf`, `form_fields`, `form_custom_create_path`, `form_custom_view_path`, `simple_model`, `visible`, `sort`, `start_user_ids`, `start_dept_ids`, `manager_user_ids`, `allow_cancel_running_process`, `allow_withdraw_task`, `process_id_rule`, `auto_approval_type`, `title_setting`, `summary_setting`, `process_before_trigger_setting`, `process_after_trigger_setting`, `task_before_trigger_setting`, `task_after_trigger_setting`, `print_template_setting`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (42, 'da66f13a-bbb5-11f1-a8aa-00155dd68500', 'd934d9d5-bbb5-11f1-a8aa-00155dd68500', 10, 'finance_reimbursement_approve', NULL, 'æ¥éå两级审æ¹ï¼è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼', 20, NULL, NULL, NULL, '/finance/reimbursement/index', '/finance/reimbursement/detail/approve/index.vue', NULL, b'1', 1790652513269, '', NULL, '1', b'1', b'1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '1', '2026-09-29T11:28:36', '1', '2026-09-29T11:28:36', b'0'); |
| | | -- [bpm_process_definition_info] 1 è¡ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // 䏿¬¡æ§èæ¬ï¼ææ¡£æ¡ç®¡ç模åï¼yudao-module-archiveï¼å¹¶å
¥ config_export_all_20260929.sql çé¶æ®µä¸ |
| | | // ç¨æ³ï¼node _merge_archive.js |
| | | const fs = require('node:fs'); |
| | | const path = require('node:path'); |
| | | const os = require('node:os'); |
| | | |
| | | const DIR = __dirname; |
| | | const TARGET = path.join(DIR, 'config_export_all_20260929.sql'); |
| | | const MODULE = path.join(DIR, 'archive_module.sql'); |
| | | const BPM = path.join(DIR, '_archive_bpm_export.sql'); |
| | | const TMP = path.join(os.homedir(), 'AppData', 'Local', 'Temp'); |
| | | |
| | | const raw = fs.readFileSync(TARGET, 'utf8'); |
| | | if (!raw.includes('\r\n')) throw new Error('ç®æ æä»¶ä¸æ¯ CRLF'); |
| | | let doc = raw.replace(/\r\n/g, '\n'); |
| | | |
| | | const norm = (s) => s.replace(/\r\n/g, '\n'); |
| | | const moduleLines = norm(fs.readFileSync(MODULE, 'utf8')).split('\n'); |
| | | const bpmLines = norm(fs.readFileSync(BPM, 'utf8')).split('\n'); |
| | | |
| | | /** æè¨éç¹å¯ä¸ */ |
| | | function anchor(text) { |
| | | const n = doc.split(text).length - 1; |
| | | if (n !== 1) throw new Error(`éç¹åºç° ${n} æ¬¡ï¼ææ 1 次ï¼${text.slice(0, 90)}`); |
| | | } |
| | | /** å¨éç¹åæå
¥ï¼æå
¥å
容ä¸éç¹ä¹é´çä¸ä¸ªç©ºè¡ï¼ */ |
| | | function insertBefore(text, before) { |
| | | anchor(text); |
| | | doc = doc.replace(text, before + '\n\n' + text); |
| | | } |
| | | /** æ¿æ¢ä¸æ¬¡ */ |
| | | function replaceOnce(from, to) { |
| | | anchor(from); |
| | | doc = doc.replace(from, to); |
| | | } |
| | | |
| | | // ---------------------------------------------------------------- æ°æ®è¡é£æ ¼å½ä¸ |
| | | /** æé¡¶å±éå·åå VALUES å
ç»ï¼å°éåå¼å·ä¸åææ è½¬ä¹ï¼ */ |
| | | function splitTuple(s) { |
| | | const out = []; |
| | | let cur = ''; |
| | | let inS = false; |
| | | for (let i = 0; i < s.length; i++) { |
| | | const c = s[i]; |
| | | if (inS) { |
| | | cur += c; |
| | | if (c === '\\' && i + 1 < s.length) { |
| | | cur += s[++i]; |
| | | } else if (c === "'") { |
| | | if (s[i + 1] === "'") cur += s[++i]; |
| | | else inS = false; |
| | | } |
| | | } else if (c === "'") { |
| | | inS = true; |
| | | cur += c; |
| | | } else if (c === ',') { |
| | | out.push(cur.trim()); |
| | | cur = ''; |
| | | } else { |
| | | cur += c; |
| | | } |
| | | } |
| | | if (cur.trim()) out.push(cur.trim()); |
| | | return out; |
| | | } |
| | | |
| | | /** |
| | | * æä»åº JDBC 导åºç INSERT è¡æ¹åææ¬æä»¶çæ¢æé£æ ¼ï¼ |
| | | * å符串/æ°å/æ¥æä¸å¾å åå¼å·ï¼bit å deleted åº X'00'ï¼NULL ä¿æ NULLã |
| | | */ |
| | | function restyle(line) { |
| | | const m = line.match(/^INSERT INTO `([^`]+)` \(([^)]+)\) VALUES \((.*)\);$/); |
| | | if (!m) throw new Error(`æ æ³è§£ææ°æ®è¡ï¼${line.slice(0, 90)}`); |
| | | const [, table, colText, valsText] = m; |
| | | const cols = colText.split(',').map((c) => c.trim().replace(/`/g, '')); |
| | | const vals = splitTuple(valsText); |
| | | if (cols.length !== vals.length) { |
| | | throw new Error(`${table} åæ° ${cols.length} ä¸å¼æ° ${vals.length} ä¸ç¬¦`); |
| | | } |
| | | const out = vals.map((v, i) => { |
| | | if (v === 'NULL') return 'NULL'; |
| | | if (cols[i] === 'deleted') { |
| | | if (v !== '0') throw new Error(`${table}.deleted ææ 0ï¼å®é
${v}`); |
| | | return "X'00'"; |
| | | } |
| | | return v.startsWith("'") ? v : `'${v}'`; |
| | | }); |
| | | return `INSERT INTO \`${table}\` (${cols.map((c) => '`' + c + '`').join(', ')}) VALUES (${out.join(', ')});`; |
| | | } |
| | | |
| | | function readRows(file) { |
| | | const text = norm(fs.readFileSync(path.join(TMP, file), 'utf8')); |
| | | const rows = text |
| | | .split('\n') |
| | | .map((l) => l.trim()) |
| | | .filter((l) => l.startsWith('INSERT INTO ')) |
| | | .map(restyle); |
| | | return rows; |
| | | } |
| | | |
| | | const CATEGORY_ROWS = readRows('archive_category_rows.sql'); |
| | | const DICT_TYPE_ROWS = readRows('archive_dict_type_rows.sql'); |
| | | const DICT_DATA_ROWS = readRows('archive_dict_data_rows.sql'); |
| | | const BPM_CATEGORY_ROWS = readRows('archive_bpm_category_row.sql'); |
| | | if (CATEGORY_ROWS.length !== 6) throw new Error(`åç±»æ°æ® ${CATEGORY_ROWS.length} è¡ï¼ææ 6`); |
| | | if (DICT_TYPE_ROWS.length !== 6) throw new Error(`åå
¸ç±»å ${DICT_TYPE_ROWS.length} è¡ï¼ææ 6`); |
| | | if (DICT_DATA_ROWS.length !== 19) throw new Error(`åå
¸æ°æ® ${DICT_DATA_ROWS.length} è¡ï¼ææ 19`); |
| | | if (BPM_CATEGORY_ROWS.length !== 1) throw new Error(`BPM åç±» ${BPM_CATEGORY_ROWS.length} è¡ï¼ææ 1`); |
| | | |
| | | // ================================================================ 1. 表æ°é 427 â 430 |
| | | replaceOnce( |
| | | '-- èå´ï¼å
¨åº BASE TABLE å
± 427 å¼ ï¼0918 ç 419 å¼ + 2 å¼ finance_* + 2 å¼ ums_* + 4 å¼ research_*ï¼ï¼å
¨é¨è¾åº CREATE TABLEï¼', |
| | | '-- èå´ï¼å
¨åº BASE TABLE å
± 430 å¼ ï¼0918 ç 419 å¼ + 2 å¼ finance_* + 2 å¼ ums_* + 4 å¼ research_* + 3 å¼ archive_*ï¼ï¼å
¨é¨è¾åº CREATE TABLEï¼', |
| | | ); |
| | | |
| | | // ============================================= 2. å¸¦æ°æ®è¡¨æ¸
åè¡¥ â¦ï¼æ¡£æ¡ç®¡ç模åï¼ |
| | | insertBefore( |
| | | '-- ⥠AI é
ç½®ï¼ä»
模å+keyï¼+ åºç¡è®¾æ½é
置管çï¼ai_modelãai_api_keyãinfra_configãinfra_jobãinfra_file_configãinfra_data_source_configãinfra_codegen_tableãinfra_codegen_column', |
| | | '-- ⦠档æ¡ç®¡ç模åï¼1 å¼ å¸¦åå§æ°æ® + 2 å¼ ä»
ç»æï¼ï¼archive_categoryï¼åå§ 6 æ¡åç±»ï¼ãarchive_documentãarchive_borrow', |
| | | ); |
| | | |
| | | // ============================================================== 3. è¡¥ä¸ç»è®°å |
| | | const PREAMBLE = [ |
| | | '-- è¡¥ä¸å
容ï¼2026-09-29ï¼æ¡£æ¡ç®¡ç模å yudao-module-archiveï¼ï¼', |
| | | '-- â è¡¥ 3 å¼ archive_* è¡¨ç»æï¼æ¡£æ¡åç±» / æ¡£æ¡ä¸»è¡¨ / åé
åï¼ï¼å
¶ä¸ archive_category 带åå§ 6 æ¡åç±»æ°æ®ï¼', |
| | | '-- archive_categoryãarchive_documentãarchive_borrow', |
| | | '-- â¡ è¡¥ 6 个åå
¸ç±»å + 19 æ¡åå
¸æ°æ®ï¼å¹¶å
¥é¶æ®µä¸ç system_dict_type / system_dict_dataï¼ï¼', |
| | | '-- archive_category_statusï¼å¯ç¨/åç¨ï¼', |
| | | '-- archive_document_statusï¼å¨åº/ååºä¸ï¼', |
| | | '-- archive_secret_levelï¼å
¬å¼/å
é¨/ä¿å¯ï¼', |
| | | '-- archive_carrier_typeï¼çµå/å®ä½/çµå+å®ä½ï¼', |
| | | '-- archive_source_typeï¼æå·¥å½å
¥/课é¢å½æ¡£/ä¼å彿¡£/è´¢å¡å½æ¡£ï¼', |
| | | '-- archive_borrow_statusï¼è稿/审æ¹ä¸/ååºä¸/å·²å½è¿/已驳åï¼', |
| | | '-- ⢠补 1 æ¡ BPM åç±»ï¼å¹¶å
¥é¶æ®µä¸ç bpm_categoryï¼ï¼', |
| | | '-- id=8003 \'æ¡£æ¡åé
审æ¹\' / code=\'archive_borrow_approve\'', |
| | | '-- ⣠补 1 æ¡ BPM æµç¨å®ä¹ï¼æ¡£æ¡åé
两级审æ¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸âå管é¢å¯¼å®¡æ¹ï¼ï¼', |
| | | '-- åå«è½ act_re_deployment / act_re_procdef / act_ge_bytearray(3 æ¡) / act_re_model /', |
| | | '-- bpm_process_definition_info äºå¼ è¡¨ï¼æµç¨ key=\'archive_borrow_approve\'ã', |
| | | '-- bpm_process_definition_info.form_type=20ï¼èªå®ä¹è¡¨åï¼ï¼', |
| | | '-- form_custom_create_path=/archive/borrow/indexã', |
| | | '-- form_custom_view_path=/archive/borrow/detail/approve/index.vueã', |
| | | '-- â 该æµç¨ç BPMN 为æå两èç¹ï¼**䏿¯** bpm_deploy_flow_from_template çæçåèç¹æµç¨ã', |
| | | '-- ⤠补 3 å¼ æ¥æºè¡¨å 1 å archive_document_idï¼bigint NULLï¼å½æ¡£èå¨ååæ¡£æ¡ IDï¼ï¼', |
| | | '-- research_applicationï¼è¯¾é¢ç³æ¥åï¼ãums_memberï¼ä¼åï¼ãfinance_reimbursementï¼æ¥éåï¼ã', |
| | | '-- åå¯ç©ºãä¸å½±åæ¢ææ°æ®ï¼ãæ¯å¦å·²å½æ¡£ã以该å为硬æ è®°ï¼å¦æ archive_document ä¾§', |
| | | '-- source_type+source_id å¹çå
åºï¼ã', |
| | | '-- ⥠补 24 æ¡æ¡£æ¡ç®¡çèåï¼1075600ãæ¡£æ¡ç®¡çãï¼**顶级ç®å½**ï¼parent_id=0ï¼path=/archiveï¼', |
| | | '-- + 1075601ãæ¡£æ¡åç±»ã/ 1075602ãæ¡£æ¡ç®¡çã/ 1075603ãåé
ç»è®°ã/ 1075604ãæ¡£æ¡ç»è®¡ã', |
| | | '-- + 1075610~1075613ï¼åç±»æ¥è¯¢/å建/æ´æ°/å é¤ï¼ã', |
| | | '-- 1075620~1075625ï¼æ¡£æ¡æ¥è¯¢/å建/æ´æ°/å é¤/导åº/ä¿å¯æ¡£æ¡æ¥çï¼ã', |
| | | '-- 1075630~1075635ï¼åé
æ¥è¯¢/ç»è®°/ä¿®æ¹/å é¤/æäº¤å®¡æ¹/å½è¿ç»è®°ï¼ã', |
| | | '-- 1075640ï¼æ¡£æ¡ç»è®¡æ¥è¯¢ï¼ã', |
| | | '-- 1075536ï¼è¯¾é¢ç³æ¥å½æ¡£ï¼æ 1075512 课é¢ç³æ¥ä¸ï¼ã', |
| | | '-- 1075504ï¼ä¼å彿¡£ï¼æ 1075492 ä¼åå表ä¸ï¼ã', |
| | | '-- è´¢å¡å½æ¡£å¤ç¨æ¢æ finance:reimbursement:archiveï¼1075424ï¼ï¼ä¸æ°å¢æéç¹ã', |
| | | '-- **èåæ®µæ¬æä»¶æ éä¸ºæ¤æ¹å¨**ï¼é¶æ®µâ¡ çåæ³æ¯ `INSERT INTO system_menu SELECT *', |
| | | '-- FROM \\`mom-jssm\\`.system_menu WHERE deleted=b\'0\'`ï¼æ¯æ§è¡æè·¨åºå
¨éæ·è´ï¼', |
| | | '-- åªè¦æ¥æºåº mom-jssm æè¿å è¡å°±ä¼è¢«å¸¦è¿å» ââ ä¸é¶æ®µä¸çåé¢é INSERT ä¸åã', |
| | | '-- 卿¤ç»è®°åªä¸ºè¯´æãè¿çæä»¶ç¡®å®è¦çäºè¯¥åæ´ãï¼é¿å
忥è
以为æ¼äºã', |
| | | '-- â æ¡£æ¡æ¨¡åç BPMN é¨ç½²äº§ç©ï¼â£ï¼ä¸º**å
é¨ç½²å导åº**ï¼æ°åºåå§åæ¶ä¾èµæ¬æä»¶çåé¢é INSERTï¼', |
| | | '-- è¥éè·å¯¼åºè¯·å¿éæ¼äºå¼ 表ï¼å« act_ge_bytearray ç 3 æ¡ï¼bpmn / png / sourceï¼ã', |
| | | ].join('\n'); |
| | | insertBefore('-- åå²è¡¥ä¸å
容ï¼2026-09-18ï¼ï¼', PREAMBLE); |
| | | |
| | | // ======================================== 4. 3 å¼ archive_* 表 DDL + åå§åç±»æ°æ® |
| | | function ddlBlock(fromLine, toLine, tableName, rows) { |
| | | const body = moduleLines.slice(fromLine - 1, toLine).join('\n'); |
| | | const titles = rows ? `å¯¼åº ${rows.length} è¡` : 'ä»
DDLï¼æ æ°æ®'; |
| | | return [`-- ============ 表ï¼${tableName}ï¼${titles}ï¼ ============`, body, ...(rows || []), ''].join('\n'); |
| | | } |
| | | const ARCHIVE_DDL = [ |
| | | '-- ***********************************************************************', |
| | | '-- ⦠档æ¡ç®¡ç模åï¼yudao-module-archiveï¼åç±»æ + æ¡£æ¡ä¸»è¡¨ + åé
åï¼', |
| | | '-- ***********************************************************************', |
| | | '', |
| | | ddlBlock(9, 28, 'archive_category', CATEGORY_ROWS), |
| | | ddlBlock(31, 67, 'archive_document', null), |
| | | ddlBlock(70, 104, 'archive_borrow', null), |
| | | ].join('\n'); |
| | | insertBefore( |
| | | ['-- ***********************************************************************', '-- å
¶ä½ 382 å¼ è¡¨ï¼ä»
è¡¨ç»æï¼æ æ°æ®ï¼', '-- ***********************************************************************'].join('\n'), |
| | | ARCHIVE_DDL, |
| | | ); |
| | | |
| | | // ===================================== 5. ä¸å¼ æ¥æºè¡¨åè¡¥ 1 å archive_document_id |
| | | const ARCHIVE_COL = |
| | | " `archive_document_id` bigint DEFAULT NULL COMMENT '彿¡£çæçæ¡£æ¡ IDï¼archive_document.idï¼å½æ¡£èå¨ååï¼',"; |
| | | // 5.1 research_applicationï¼æ¾å¨ notice_id ä¹åï¼ |
| | | replaceOnce( |
| | | " `notice_id` bigint DEFAULT NULL COMMENT 'å·²åå¸çç«é¡¹éç¥å
Œ ID',", |
| | | " `notice_id` bigint DEFAULT NULL COMMENT 'å·²åå¸çç«é¡¹éç¥å
Œ ID',\n" + ARCHIVE_COL, |
| | | ); |
| | | // 5.2 ums_memberï¼æ¾å¨ status ä¹åï¼ä¸¤è¡éç¹ä»¥æ¶æ§ï¼ |
| | | replaceOnce( |
| | | " `expire_date` date DEFAULT NULL COMMENT 'æææè³',\n" + |
| | | " `status` tinyint NOT NULL DEFAULT '1' COMMENT 'ç¶æï¼1-æ£å¸¸ 0-æå',", |
| | | " `expire_date` date DEFAULT NULL COMMENT 'æææè³',\n" + |
| | | " `status` tinyint NOT NULL DEFAULT '1' COMMENT 'ç¶æï¼1-æ£å¸¸ 0-æå',\n" + |
| | | ARCHIVE_COL, |
| | | ); |
| | | // 5.3 finance_reimbursementï¼æ¾å¨ archive_time ä¹åï¼ä¸¤è¡éç¹ä»¥æ¶æ§ï¼ |
| | | replaceOnce( |
| | | " `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'BPMæµç¨å®ä¾ID',\n" + |
| | | " `archive_time` datetime DEFAULT NULL COMMENT '彿¡£æ¶é´',", |
| | | " `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'BPMæµç¨å®ä¾ID',\n" + |
| | | " `archive_time` datetime DEFAULT NULL COMMENT '彿¡£æ¶é´',\n" + |
| | | ARCHIVE_COL, |
| | | ); |
| | | |
| | | // "å
¶ä½ 382 å¼ è¡¨" â 384ï¼â¦ å·²æå
¥ 3 å¼ ï¼å
¶ä¸ 2 å¼ æ æ°æ®æ
ä¸è¿å¸¦æ°æ®æ¸
åï¼ |
| | | replaceOnce( |
| | | ['-- ***********************************************************************', '-- å
¶ä½ 382 å¼ è¡¨ï¼ä»
è¡¨ç»æï¼æ æ°æ®ï¼', '-- ***********************************************************************'].join('\n'), |
| | | ['-- ***********************************************************************', '-- å
¶ä½ 384 å¼ è¡¨ï¼ä»
è¡¨ç»æï¼æ æ°æ®ï¼', '-- ***********************************************************************'].join('\n'), |
| | | ); |
| | | |
| | | // ===================================================== 6. BPM é¨ç½²äº§ç©ï¼7 æ¡ INSERTï¼ |
| | | const bpmInserts = bpmLines.filter((l) => l.startsWith('INSERT INTO ')); |
| | | if (bpmInserts.length !== 7) throw new Error(`BPM INSERT æ¡æ° ${bpmInserts.length}ï¼ææ 7`); |
| | | const pick = (table) => bpmInserts.filter((l) => l.startsWith(`INSERT INTO \`${table}\``)); |
| | | const insProcdef = pick('act_re_procdef'); |
| | | const insDeployment = pick('act_re_deployment'); |
| | | const insBytearray = pick('act_ge_bytearray'); |
| | | const insModel = pick('act_re_model'); |
| | | const insProcInfo = pick('bpm_process_definition_info'); |
| | | if ( |
| | | insProcdef.length !== 1 || |
| | | insDeployment.length !== 1 || |
| | | insBytearray.length !== 3 || |
| | | insModel.length !== 1 || |
| | | insProcInfo.length !== 1 |
| | | ) { |
| | | throw new Error('BPM INSERT åç±»æ°éä¸ç¬¦'); |
| | | } |
| | | |
| | | // 6.1 act_re_procdefï¼23 â 24 è¡ï¼ |
| | | insertBefore('-- ============ 表ï¼act_re_deploymentï¼å¯¼åº 23 è¡ï¼ ============', insProcdef.join('\n')); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼act_re_procdefï¼å¯¼åº 23 è¡ï¼ ============', |
| | | '-- ============ 表ï¼act_re_procdefï¼å¯¼åº 24 è¡ï¼ ============', |
| | | ); |
| | | // 6.2 act_re_deploymentï¼23 â 24 è¡ï¼ |
| | | insertBefore('-- ============ 表ï¼act_ge_bytearrayï¼å¯¼åº 28 è¡ï¼ ============', insDeployment.join('\n')); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼act_re_deploymentï¼å¯¼åº 23 è¡ï¼ ============', |
| | | '-- ============ 表ï¼act_re_deploymentï¼å¯¼åº 24 è¡ï¼ ============', |
| | | ); |
| | | // 6.3 act_ge_bytearrayï¼28 â 31 è¡ï¼bpmn / png / source 䏿¡ï¼ |
| | | insertBefore('-- ============ 表ï¼act_re_modelï¼å¯¼åº 23 è¡ï¼ ============', insBytearray.join('\n')); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼act_ge_bytearrayï¼å¯¼åº 28 è¡ï¼ ============', |
| | | '-- ============ 表ï¼act_ge_bytearrayï¼å¯¼åº 31 è¡ï¼ ============', |
| | | ); |
| | | // 6.4 act_re_modelï¼23 â 24 è¡ï¼ |
| | | insertBefore('-- ============ 表ï¼bpm_process_definition_infoï¼å¯¼åº 23 è¡ï¼ ============', insModel.join('\n')); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼act_re_modelï¼å¯¼åº 23 è¡ï¼ ============', |
| | | '-- ============ 表ï¼act_re_modelï¼å¯¼åº 24 è¡ï¼ ============', |
| | | ); |
| | | // 6.5 bpm_process_definition_infoï¼23 â 24 è¡ï¼æå¨ â¡ åç»æ¨ªå¹
ä¹åï¼ |
| | | insertBefore( |
| | | ['-- ***********************************************************************', '-- â¡ ååï¼ä¸å¡éä»¶é
ç½® + åç±» + 表å + æ©å±é
ç½®ï¼ï¼DDL + æ°æ®ï¼', '-- ***********************************************************************'].join( |
| | | '\n', |
| | | ), |
| | | insProcInfo.join('\n'), |
| | | ); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼bpm_process_definition_infoï¼å¯¼åº 23 è¡ï¼ ============', |
| | | '-- ============ 表ï¼bpm_process_definition_infoï¼å¯¼åº 24 è¡ï¼ ============', |
| | | ); |
| | | |
| | | // ===================================================== 7. bpm_category è¡¥ 8003ï¼25 â 26 è¡ï¼ |
| | | insertBefore('-- ============ 表ï¼bpm_formï¼å¯¼åº 4 è¡ï¼ ============', BPM_CATEGORY_ROWS.join('\n')); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼bpm_categoryï¼å¯¼åº 25 è¡ï¼ ============', |
| | | '-- ============ 表ï¼bpm_categoryï¼å¯¼åº 26 è¡ï¼ ============', |
| | | ); |
| | | |
| | | // ================================================ 8. åå
¸ç±»å 6 æ¡ï¼254 â 260 è¡ï¼ |
| | | insertBefore('-- ============ 表ï¼system_dict_dataï¼å¯¼åº 1205 è¡ï¼ ============', DICT_TYPE_ROWS.join('\n')); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼system_dict_typeï¼å¯¼åº 254 è¡ï¼ ============', |
| | | '-- ============ 表ï¼system_dict_typeï¼å¯¼åº 260 è¡ï¼ ============', |
| | | ); |
| | | // ================================================ 9. åå
¸æ°æ® 19 æ¡ï¼1205 â 1224 è¡ï¼ |
| | | insertBefore('-- ============ 表ï¼system_tenantï¼å¯¼åº 3 è¡ï¼ ============', DICT_DATA_ROWS.join('\n')); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼system_dict_dataï¼å¯¼åº 1205 è¡ï¼ ============', |
| | | '-- ============ 表ï¼system_dict_dataï¼å¯¼åº 1224 è¡ï¼ ============', |
| | | ); |
| | | |
| | | // ---------------------------------------------------------------- ååº |
| | | doc = doc.replace(/\n/g, '\r\n'); |
| | | fs.writeFileSync(TARGET, doc, 'utf8'); |
| | | console.log(`å并宿 â ${path.basename(TARGET)}ï¼${doc.split('\r\n').length} è¡ï¼`); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // 䏿¬¡æ§èæ¬ï¼æè¯¾é¢ç®¡ç模åï¼yudao-module-researchï¼çè¡¥ä¸å¹¶å
¥ config_export_all_20260928.sql çé¶æ®µä¸ |
| | | const fs = require('node:fs'); |
| | | const path = require('node:path'); |
| | | |
| | | const dir = __dirname; |
| | | const TARGET = path.join(dir, 'config_export_all_20260928.sql'); |
| | | const BPM = path.join(dir, '_research_bpm_export.sql'); |
| | | const MODULE = path.join(dir, 'research_module.sql'); |
| | | |
| | | const EOL = '\r\n'; |
| | | let doc = fs.readFileSync(TARGET, 'utf8'); |
| | | const bpmLines = fs.readFileSync(BPM, 'utf8').split(/\r?\n/); |
| | | const moduleLines = fs.readFileSync(MODULE, 'utf8').split(/\r?\n/); |
| | | |
| | | if (!doc.includes(EOL)) throw new Error('ç®æ æä»¶ä¸æ¯ CRLF'); |
| | | |
| | | /** æè¨éç¹å¯ä¸ */ |
| | | function anchor(text) { |
| | | const n = doc.split(text).length - 1; |
| | | if (n !== 1) throw new Error(`éç¹åºç° ${n} æ¬¡ï¼ææ 1 次ï¼${text.slice(0, 80)}`); |
| | | } |
| | | /** å¨éç¹åæå
¥ */ |
| | | function insertBefore(text, before) { |
| | | anchor(text); |
| | | doc = doc.replace(text, before + EOL + EOL + text); |
| | | } |
| | | /** æ¿æ¢ä¸æ¬¡ */ |
| | | function replaceOnce(from, to) { |
| | | anchor(from); |
| | | doc = doc.replace(from, to); |
| | | } |
| | | |
| | | // ---------------------------------------------------------------- 1. 表æ°é |
| | | replaceOnce( |
| | | '-- èå´ï¼å
¨åº BASE TABLE å
± 423 å¼ ï¼0918 ç 419 å¼ + 2 å¼ finance_* + 2 å¼ ums_*ï¼ï¼å
¨é¨è¾åº CREATE TABLEï¼', |
| | | '-- èå´ï¼å
¨åº BASE TABLE å
± 427 å¼ ï¼0918 ç 419 å¼ + 2 å¼ finance_* + 2 å¼ ums_* + 4 å¼ research_*ï¼ï¼å
¨é¨è¾åº CREATE TABLEï¼', |
| | | ); |
| | | |
| | | // ------------------------------------------------- 2. åè¨è¡¥ä¸ç»è®°å |
| | | const PREAMBLE = [ |
| | | '-- è¡¥ä¸å
容ï¼2026-09-28ï¼è¯¾é¢ç®¡ç模å yudao-module-researchï¼ï¼', |
| | | '-- â è¡¥ 4 å¼ research_* è¡¨ç»æï¼è¯¾é¢æå / 课é¢ç³æ¥ä¹¦ / ä¸å®¶è¯å®¡æç» / ç»è´¹æ¨ä»è®°å½ï¼ä»
å»ºç©ºç»æï¼æ æ°æ®ï¼ï¼', |
| | | '-- research_guidelineãresearch_applicationãresearch_topic_reviewãresearch_fund_record', |
| | | '-- â¡ è¡¥ 5 个åå
¸ç±»å + 13 æ¡åå
¸æ°æ®ï¼å¹¶å
¥é¶æ®µä¸ç system_dict_type / system_dict_dataï¼ï¼', |
| | | '-- research_guideline_categoryï¼éç¹è¯¾é¢/ä¸è¬è¯¾é¢ï¼', |
| | | '-- research_guideline_statusï¼è稿/å·²åå¸/å·²æªæ¢ï¼', |
| | | '-- research_application_statusï¼è稿/审æ¹ä¸/å·²ç«é¡¹/已驳åï¼', |
| | | '-- research_review_conclusionï¼æ¨èç«é¡¹/䏿¨èç«é¡¹ï¼', |
| | | '-- research_fund_statusï¼å¾
æ¨ä»/å·²æ¨ä»ï¼', |
| | | '-- ⢠补 1 æ¡ BPM åç±»ï¼å¹¶å
¥é¶æ®µä¸ç bpm_categoryï¼ï¼', |
| | | '-- id=8002 \'课é¢ç«é¡¹å®¡æ¹\' / code=\'research_topic_approve\'', |
| | | '-- ⣠补 1 æ¡ BPM æµç¨å®ä¹ï¼è¯¾é¢ç³æ¥ä¸çº§å®¡æ¹ï¼ç§ä¹¦å¤å½¢å¼å®¡æ¥âä¸å®¶è¯å®¡âå¦ä¼ç«é¡¹å®¡æ¹ï¼ï¼', |
| | | '-- åå«è½ act_re_deployment / act_re_procdef / act_ge_bytearray(3 æ¡) / act_re_model /', |
| | | '-- bpm_process_definition_info äºå¼ è¡¨ï¼æµç¨ key=\'research_topic_approve\'ã', |
| | | '-- bpm_process_definition_info.form_type=20ï¼èªå®ä¹è¡¨åï¼ï¼', |
| | | '-- form_custom_create_path=/research/application/indexã', |
| | | '-- form_custom_view_path=/research/application/detail/approve/index.vueã', |
| | | '-- â 该æµç¨ç BPMN 为æåä¸èç¹ï¼**䏿¯** bpm_deploy_flow_from_template çæçåèç¹æµç¨ã', |
| | | '-- ⤠补 22 æ¡è¯¾é¢ç®¡çèåï¼1075510ã课é¢ç®¡çãï¼**顶级ç®å½**ï¼parent_id=0ï¼path=/researchï¼', |
| | | '-- + 1075511ãè¯¾é¢æåã/ 1075512ã课é¢ç³æ¥ãï¼èåï¼æ 1075510 ä¸ï¼', |
| | | '-- + 1075520~1075524ï¼æåæ¥è¯¢/å建/æ´æ°/å é¤/å叿ªæ¢ï¼ã', |
| | | '-- 1075530~1075535ï¼ç³æ¥æ¥è¯¢/å建/æ´æ°/å é¤/æäº¤å®¡æ¹/åå¸ç«é¡¹éç¥ï¼ã', |
| | | '-- 1075540~1075543ï¼ä¸å®¶è¯å®¡æ¥è¯¢/å½å
¥/ä¿®æ¹/å é¤ï¼ã', |
| | | '-- 1075550~1075553ï¼ç»è´¹æ¨ä»æ¥è¯¢/ç»è®°/ä¿®æ¹/å é¤ï¼ã', |
| | | '-- **èåæ®µæ¬æä»¶æ éä¸ºæ¤æ¹å¨**ï¼é¶æ®µâ¡ çåæ³æ¯ `INSERT INTO system_menu SELECT *', |
| | | '-- FROM \\`mom-jssm\\`.system_menu WHERE deleted=b\'0\'`ï¼æ¯æ§è¡æè·¨åºå
¨éæ·è´ï¼', |
| | | '-- åªè¦æ¥æºåº mom-jssm æè¿å è¡å°±ä¼è¢«å¸¦è¿å» ââ ä¸é¶æ®µä¸çåé¢é INSERT ä¸åã', |
| | | '-- 卿¤ç»è®°åªä¸ºè¯´æãè¿çæä»¶ç¡®å®è¦çäºè¯¥åæ´ãï¼é¿å
忥è
以为æ¼äºã', |
| | | '', |
| | | ].join(EOL); |
| | | insertBefore('-- åå²è¡¥ä¸å
容ï¼2026-09-18ï¼ï¼', PREAMBLE); |
| | | |
| | | // --------------------------------------------- 3. 4 å¼ research_* 表 DDL |
| | | // ä» research_module.sql æ½å CREATE TABLE 段ï¼ç¬¬ 10~30 / 34~70 / 74~96 / 100~116 è¡ï¼1-basedï¼ |
| | | function ddlBlock(fromLine, toLine, tableName) { |
| | | const body = moduleLines.slice(fromLine - 1, toLine).join(EOL); |
| | | return [ |
| | | `-- ============ 表ï¼${tableName}ï¼ä»
DDLï¼æ æ°æ®ï¼ ============`, |
| | | body, |
| | | '', |
| | | ].join(EOL); |
| | | } |
| | | const RESEARCH_DDL = [ |
| | | ddlBlock(10, 30, 'research_guideline'), |
| | | ddlBlock(34, 70, 'research_application'), |
| | | ddlBlock(74, 96, 'research_topic_review'), |
| | | ddlBlock(100, 116, 'research_fund_record'), |
| | | ].join(EOL); |
| | | insertBefore('-- ============ 表ï¼yudao_demo01_contactï¼ä»
DDLï¼æ æ°æ®ï¼ ============', RESEARCH_DDL); |
| | | |
| | | // --------------------------------------------- 4. BPM æµç¨ INSERTï¼7 æ¡è¯å¥ï¼ |
| | | // _research_bpm_export.sql ç第 10~16 è¡ï¼1-basedï¼ |
| | | const bpmInserts = bpmLines.slice(9, 16).filter((l) => l.trim() !== ''); |
| | | if (bpmInserts.length !== 7) throw new Error(`BPM INSERT æ¡æ° ${bpmInserts.length}ï¼ææ 7`); |
| | | const pick = (prefix) => { |
| | | const hit = bpmInserts.filter((l) => l.startsWith(prefix)); |
| | | return hit; |
| | | }; |
| | | const insProcdef = pick('INSERT INTO `act_re_procdef`'); |
| | | const insDeployment = pick('INSERT INTO `act_re_deployment`'); |
| | | const insBytearray = pick('INSERT INTO `act_ge_bytearray`'); |
| | | const insModel = pick('INSERT INTO `act_re_model`'); |
| | | const insProcInfo = pick('INSERT INTO `bpm_process_definition_info`'); |
| | | if (insProcdef.length !== 1 || insDeployment.length !== 1 || insBytearray.length !== 3 || insModel.length !== 1 || insProcInfo.length !== 1) { |
| | | throw new Error('BPM INSERT åç±»æ°éä¸ç¬¦'); |
| | | } |
| | | |
| | | // 4.1 act_re_procdef |
| | | replaceOnce( |
| | | '-- ============ 表ï¼act_re_deploymentï¼å¯¼åº 21 è¡ï¼ ============', |
| | | '-- ============ 表ï¼act_re_deploymentï¼å¯¼åº 22 è¡ï¼ ============', |
| | | ); |
| | | insertBefore( |
| | | '-- ============ 表ï¼act_re_deploymentï¼å¯¼åº 22 è¡ï¼ ============', |
| | | [...insProcdef, ''].join(EOL), |
| | | ); |
| | | |
| | | // 4.2 act_re_deployment |
| | | replaceOnce( |
| | | '-- ============ 表ï¼act_ge_bytearrayï¼å¯¼åº 22 è¡ï¼ ============', |
| | | '-- ============ 表ï¼act_ge_bytearrayï¼å¯¼åº 25 è¡ï¼ ============', |
| | | ); |
| | | insertBefore( |
| | | '-- ============ 表ï¼act_ge_bytearrayï¼å¯¼åº 25 è¡ï¼ ============', |
| | | [...insDeployment, ''].join(EOL), |
| | | ); |
| | | |
| | | // 4.3 act_ge_bytearrayï¼bpmn / diagram / source 䏿¡ï¼ |
| | | replaceOnce( |
| | | '-- ============ 表ï¼act_re_modelï¼å¯¼åº 21 è¡ï¼ ============', |
| | | '-- ============ 表ï¼act_re_modelï¼å¯¼åº 22 è¡ï¼ ============', |
| | | ); |
| | | insertBefore( |
| | | '-- ============ 表ï¼act_re_modelï¼å¯¼åº 22 è¡ï¼ ============', |
| | | [...insBytearray, ''].join(EOL), |
| | | ); |
| | | |
| | | // 4.4 act_re_model |
| | | replaceOnce( |
| | | '-- ============ 表ï¼bpm_process_definition_infoï¼å¯¼åº 21 è¡ï¼ ============', |
| | | '-- ============ 表ï¼bpm_process_definition_infoï¼å¯¼åº 22 è¡ï¼ ============', |
| | | ); |
| | | insertBefore( |
| | | '-- ============ 表ï¼bpm_process_definition_infoï¼å¯¼åº 22 è¡ï¼ ============', |
| | | [...insModel, ''].join(EOL), |
| | | ); |
| | | |
| | | // 4.5 bpm_process_definition_infoï¼æå¨ â¡ åç»æ¨ªå¹
ä¹åï¼ |
| | | const BANNER2 = [ |
| | | '-- ***********************************************************************', |
| | | '-- â¡ ååï¼ä¸å¡éä»¶é
ç½® + åç±» + 表å + æ©å±é
ç½®ï¼ï¼DDL + æ°æ®ï¼', |
| | | '-- ***********************************************************************', |
| | | ].join(EOL); |
| | | insertBefore(BANNER2, [...insProcInfo, ''].join(EOL)); |
| | | |
| | | // 4.6 bpm_category è¡¥ 1 è¡ |
| | | replaceOnce( |
| | | '-- ============ 表ï¼bpm_formï¼å¯¼åº 4 è¡ï¼ ============', |
| | | '-- ============ 表ï¼bpm_formï¼å¯¼åº 4 è¡ï¼ ============', |
| | | ); |
| | | insertBefore( |
| | | '-- ============ 表ï¼bpm_formï¼å¯¼åº 4 è¡ï¼ ============', |
| | | [ |
| | | 'INSERT INTO `bpm_category` (`id`, `name`, `code`, `description`, `status`, `sort`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)', |
| | | 'VALUES (\'8002\', \'课é¢ç«é¡¹å®¡æ¹\', \'research_topic_approve\', \'课é¢ç³æ¥ä¸çº§å®¡æ¹ï¼ç§ä¹¦å¤å½¢å¼å®¡æ¥âä¸å®¶è¯å®¡âå¦ä¼ç«é¡¹å®¡æ¹ï¼\', \'0\', \'3\', \'1\', \'2026-09-28 20:00:00\', \'1\', \'2026-09-28 20:00:00\', X\'00\');', |
| | | '', |
| | | ].join(EOL), |
| | | ); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼bpm_categoryï¼å¯¼åº 24 è¡ï¼ ============', |
| | | '-- ============ 表ï¼bpm_categoryï¼å¯¼åº 25 è¡ï¼ ============', |
| | | ); |
| | | |
| | | // --------------------------------------- 5. åå
¸ç±»å 5 æ¡ + åå
¸æ°æ® 13 æ¡ |
| | | const DICT_TYPES = [ |
| | | ['81000', 'è¯¾é¢æåç±»å«', 'research_guideline_category', '0', 'éç¹è¯¾é¢/ä¸è¬è¯¾é¢åç±»æ æ³¨'], |
| | | ['81001', 'è¯¾é¢æåç¶æ', 'research_guideline_status', '0', 'è¯¾é¢æååå¸ç¶æï¼è稿/å·²åå¸/å·²æªæ¢'], |
| | | ['81002', '课é¢ç³æ¥ç¶æ', 'research_application_status', '0', '课é¢ç³æ¥ä¹¦å®¡æ¹ç¶æï¼è稿/审æ¹ä¸/å·²ç«é¡¹/已驳å'], |
| | | ['81003', 'ä¸å®¶è¯å®¡ç»è®º', 'research_review_conclusion', '0', 'ä¸å®¶è¯å®¡æ¨èç«é¡¹/䏿¨èç«é¡¹'], |
| | | ['81004', 'ç»è´¹æ¨ä»ç¶æ', 'research_fund_status', '0', '课é¢ç»è´¹å¾
æ¨ä»/å·²æ¨ä»'], |
| | | ]; |
| | | const dictTypeRows = DICT_TYPES.map( |
| | | ([id, name, type, status, remark]) => |
| | | `('${id}', '${name}', '${type}', '${status}', '${remark}', '1', '2026-09-28 20:00:00', '1', '2026-09-28 20:00:00', X'00', NULL),`, |
| | | ).join(EOL); |
| | | insertBefore( |
| | | '-- ============ 表ï¼system_dict_dataï¼å¯¼åº 1192 è¡ï¼ ============', |
| | | [ |
| | | 'INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)', |
| | | 'VALUES', |
| | | dictTypeRows.replace(/,$/, ';'), |
| | | '', |
| | | ].join(EOL), |
| | | ); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼system_dict_typeï¼å¯¼åº 249 è¡ï¼ ============', |
| | | '-- ============ 表ï¼system_dict_typeï¼å¯¼åº 254 è¡ï¼ ============', |
| | | ); |
| | | |
| | | const DICT_DATA = [ |
| | | ['8100001', 1, 'éç¹è¯¾é¢', '1', 'research_guideline_category', 'danger'], |
| | | ['8100002', 2, 'ä¸è¬è¯¾é¢', '2', 'research_guideline_category', 'default'], |
| | | ['8100101', 1, 'è稿', '0', 'research_guideline_status', 'default'], |
| | | ['8100102', 2, 'å·²åå¸', '20', 'research_guideline_status', 'success'], |
| | | ['8100103', 3, 'å·²æªæ¢', '30', 'research_guideline_status', 'info'], |
| | | ['8100201', 1, 'è稿', '0', 'research_application_status', 'default'], |
| | | ['8100202', 2, '审æ¹ä¸', '15', 'research_application_status', 'processing'], |
| | | ['8100203', 3, 'å·²ç«é¡¹', '20', 'research_application_status', 'success'], |
| | | ['8100204', 4, '已驳å', '35', 'research_application_status', 'danger'], |
| | | ['8100301', 1, 'æ¨èç«é¡¹', '1', 'research_review_conclusion', 'success'], |
| | | ['8100302', 2, '䏿¨èç«é¡¹', '2', 'research_review_conclusion', 'danger'], |
| | | ['8100401', 1, 'å¾
æ¨ä»', '0', 'research_fund_status', 'warning'], |
| | | ['8100402', 2, 'å·²æ¨ä»', '20', 'research_fund_status', 'success'], |
| | | ]; |
| | | const dictDataRows = DICT_DATA.map( |
| | | ([id, sort, label, value, type, color]) => |
| | | `('${id}', '${sort}', '${label}', '${value}', '${type}', '0', '${color}', '', '', '1', '2026-09-28 20:00:00', '1', '2026-09-28 20:00:00', X'00'),`, |
| | | ).join(EOL); |
| | | insertBefore( |
| | | '-- ============ 表ï¼system_tenantï¼å¯¼åº 3 è¡ï¼ ============', |
| | | [ |
| | | 'INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)', |
| | | 'VALUES', |
| | | dictDataRows.replace(/,$/, ';'), |
| | | '', |
| | | ].join(EOL), |
| | | ); |
| | | replaceOnce( |
| | | '-- ============ 表ï¼system_dict_dataï¼å¯¼åº 1192 è¡ï¼ ============', |
| | | '-- ============ 表ï¼system_dict_dataï¼å¯¼åº 1205 è¡ï¼ ============', |
| | | ); |
| | | |
| | | // ---------------------------------------------------------------- ååº |
| | | fs.writeFileSync(TARGET, doc, 'utf8'); |
| | | console.log('å并宿'); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // ç± config_export_all_20260928.sql çæ config_export_all_20260929.sqlï¼å¢éè¡¥ä¸ï¼ |
| | | // ç¨æ³ï¼node _patch_0929.js |
| | | import fs from 'node:fs'; |
| | | import path from 'node:path'; |
| | | |
| | | const DIR = process.cwd(); |
| | | const SRC = path.join(DIR, 'config_export_all_20260928.sql'); |
| | | const DST = path.join(DIR, 'config_export_all_20260929.sql'); |
| | | const EXPORT = path.join(DIR, '_finance_bpm_export.sql'); |
| | | |
| | | const raw = fs.readFileSync(SRC, 'utf8'); |
| | | const crlf = raw.includes('\r\n'); |
| | | let sql = crlf ? raw.replace(/\r\n/g, '\n') : raw; |
| | | const exp = fs.readFileSync(EXPORT, 'utf8').replace(/\r\n/g, '\n'); |
| | | |
| | | function sub(oldStr, newStr, label) { |
| | | const n = sql.split(oldStr).length - 1; |
| | | if (n !== 1) throw new Error(`[${label}] ææå¯ä¸å¹é
ï¼å®é
${n} 次`); |
| | | sql = sql.replace(oldStr, newStr); |
| | | console.log(` OK ${label}`); |
| | | } |
| | | |
| | | // ---------- ä»é¨ç½²å¯¼åºæä»¶éå INSERT è¡ ---------- |
| | | function insertsOf(table) { |
| | | return exp |
| | | .split('\n') |
| | | .filter((l) => l.startsWith(`INSERT INTO \`${table}\``)) |
| | | .map((l) => l.trim()); |
| | | } |
| | | const procdefIns = insertsOf('act_re_procdef'); |
| | | const deployIns = insertsOf('act_re_deployment'); |
| | | const byteIns = insertsOf('act_ge_bytearray'); |
| | | const modelIns = insertsOf('act_re_model'); |
| | | const infoIns = insertsOf('bpm_process_definition_info'); |
| | | if (procdefIns.length !== 1 || deployIns.length !== 1 || byteIns.length !== 3 || modelIns.length !== 1 || infoIns.length !== 1) { |
| | | throw new Error(`å¯¼åºæä»¶è¡æ°ä¸ç¬¦ï¼procdef=${procdefIns.length} deploy=${deployIns.length} byte=${byteIns.length} model=${modelIns.length} info=${infoIns.length}`); |
| | | } |
| | | |
| | | console.log('1) æä»¶å¤´'); |
| | | sub('-- æä»¶ï¼config_export_all_20260928.sql', '-- æä»¶ï¼config_export_all_20260929.sql', 'æä»¶å'); |
| | | sub( |
| | | '-- æ¬æ¬¡ä¸º**è¡¥ä¸ç**ï¼åºäº 0918 æä»¶å¢éä¿®æ¹ï¼æªéè·å
¨åºå¯¼åºï¼é¿å
ææ å
³è¡¨ä¸èµ·æ
å¨ï¼ã', |
| | | '-- æ¬æ¬¡ä¸º**è¡¥ä¸ç**ï¼20260929 åºäº 20260928 å¢éä¿®æ¹ï¼20260928 ååºäº 0918ï¼ï¼æªéè·å
¨åºå¯¼åºï¼é¿å
ææ å
³è¡¨ä¸èµ·æ
å¨ï¼ã', |
| | | 'è¡¥ä¸è¯´æ', |
| | | ); |
| | | sub( |
| | | '-- research_fund_statusï¼å¾
æ¨ä»/å·²æ¨ä»ï¼', |
| | | '-- research_fund_statusï¼å¾
æ¨ä»/å·²æ¨ä»ï¼2026-09-29 æ©ä¸º å¾
æ¨ä»/æ¥é审æ¹ä¸/å·²æ¨ä»/已驳åï¼', |
| | | '头é¨åå
¸è¯´æ', |
| | | ); |
| | | sub( |
| | | '-- â 该æµç¨ç BPMN 为æåä¸èç¹ï¼**䏿¯** bpm_deploy_flow_from_template çæçåèç¹æµç¨ã', |
| | | '-- â 该æµç¨ç BPMN 为æåä¸èç¹ï¼**䏿¯** bpm_deploy_flow_from_template çæçåèç¹æµç¨ã\n' + |
| | | '-- è¡¥ä¸å
容ï¼2026-09-29ï¼è¯¾é¢ç»è´¹æ¨ä»å¯¹æ¥è´¢å¡æ¥éï¼ï¼\n' + |
| | | '-- â research_fund_record å¢ 4 åï¼reimbursement_id / reimbursement_no / reject_reason / reject_timeï¼\n' + |
| | | '-- + status åæ³¨éæ¹ä¸ºã0-å¾
æ¨ä» 15-æ¥é审æ¹ä¸ 20-å·²æ¨ä» 30-已驳åã+ idx_reimbursement_id ç´¢å¼ã\n' + |
| | | '-- **æ æ°å¢è¡¨**ï¼å
¨åºä» 427 å¼ ï¼finance_reimbursement è¡¨å·²å¨ 0928 ç建ç«ï¼ã\n' + |
| | | '-- â¡ research_fund_status åå
¸ç± 2 æ¡æ©ä¸º 4 æ¡ï¼å¾
æ¨ä» 0 / æ¥é审æ¹ä¸ 15 / å·²æ¨ä» 20 / 已驳å 30ï¼ï¼\n' + |
| | | '-- system_dict_type.remark 忥æ¹ä¸ºã课é¢ç»è´¹å¾
æ¨ä»/æ¥é审æ¹ä¸/å·²æ¨ä»/已驳åãã\n' + |
| | | '-- ⢠补 1 æ¡ BPM æµç¨å®ä¹ï¼è´¢å¡æ¥é两级审æ¹ï¼è´¢å¡å®¡æ ¸ â è´¢å¡ä¸»ç®¡å®¡æ¹ï¼ï¼æµç¨ key=\'finance_reimbursement_approve\'ï¼\n' + |
| | | '-- åå«è½ act_re_procdef / act_re_deployment / act_ge_bytearray(3 æ¡) / act_re_model /\n' + |
| | | '-- bpm_process_definition_info äºå¼ 表ï¼bpm_process_definition_info.id=42ï¼ã\n' + |
| | | '-- form_type=20ï¼èªå®ä¹è¡¨åï¼ï¼form_custom_create_path=/finance/reimbursement/indexã\n' + |
| | | '-- form_custom_view_path=/finance/reimbursement/detail/approve/index.vueã\n' + |
| | | '-- bpm_category(id=216, code=\'finance_reimbursement_approve\') å·²åå¨ï¼æ éæ°å¢ã\n' + |
| | | '-- â 该æµç¨ç BPMN 为æå两èç¹ï¼**䏿¯** bpm_deploy_flow_from_template çæçåèç¹æµç¨ã\n' + |
| | | '-- ⣠**é¶æ®µäºä¸å¨**ï¼æ¬æ¬¡æ èå/è§è²/ç¨æ·åæ´ã', |
| | | 'æ°å¢è¡¥ä¸æ®µ', |
| | | ); |
| | | sub( |
| | | '-- â æ¬ 0928 ç为å¨å
¶ä¹ä¸çè¡¥ä¸ï¼**å°æªå¨ç©ºåºæ´ä»½è·è¿**ï¼ä¸çº¿/åå§åå请å
å¨å¯è¦ç空åºéªè¯ã', |
| | | '-- â æ¬ 0929 ç为å¨å
¶ä¹ä¸çè¡¥ä¸ï¼**å°æªå¨ç©ºåºæ´ä»½è·è¿**ï¼ä¸çº¿/åå§åå请å
å¨å¯è¦ç空åºéªè¯ã', |
| | | 'éªè¯è¯´æ', |
| | | ); |
| | | |
| | | console.log('2) research_fund_record è¡¨ç»æ'); |
| | | sub( |
| | | " `status` tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0-å¾
æ¨ä» 20-å·²æ¨ä»',\n" + |
| | | " `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨',\n" + |
| | | " `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
',\n" + |
| | | ' `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'å建æ¶é´\',\n' + |
| | | " `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
',\n" + |
| | | ' `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT \'æ´æ°æ¶é´\',\n' + |
| | | " `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤',\n" + |
| | | ' PRIMARY KEY (`id`) USING BTREE,\n' + |
| | | ' KEY `idx_application_id` (`application_id`) USING BTREE\n' + |
| | | ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课é¢-ç»è´¹æ¨ä»è®°å½';", |
| | | " `status` tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0-å¾
æ¨ä» 15-æ¥é审æ¹ä¸ 20-å·²æ¨ä» 30-已驳å',\n" + |
| | | " `reimbursement_id` bigint DEFAULT NULL COMMENT 'å
³èè´¢å¡æ¥éå IDï¼finance_reimbursement.idï¼',\n" + |
| | | " `reimbursement_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å
³èè´¢å¡æ¥éåå·',\n" + |
| | | " `reject_reason` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ¥é驳ååå ï¼BPM ååï¼',\n" + |
| | | " `reject_time` datetime DEFAULT NULL COMMENT 'æ¥é驳忶é´',\n" + |
| | | " `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨',\n" + |
| | | " `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
',\n" + |
| | | ' `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT \'å建æ¶é´\',\n' + |
| | | " `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
',\n" + |
| | | ' `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT \'æ´æ°æ¶é´\',\n' + |
| | | " `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤',\n" + |
| | | ' PRIMARY KEY (`id`) USING BTREE,\n' + |
| | | ' KEY `idx_application_id` (`application_id`) USING BTREE,\n' + |
| | | ' KEY `idx_reimbursement_id` (`reimbursement_id`) USING BTREE\n' + |
| | | ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课é¢-ç»è´¹æ¨ä»è®°å½';", |
| | | 'DDL 4 å + 注é + ç´¢å¼', |
| | | ); |
| | | |
| | | console.log('3) åå
¸'); |
| | | sub( |
| | | "('81004', 'ç»è´¹æ¨ä»ç¶æ', 'research_fund_status', '0', '课é¢ç»è´¹å¾
æ¨ä»/å·²æ¨ä»', '1', '2026-09-28 20:00:00', '1', '2026-09-28 20:00:00', X'00', NULL);", |
| | | "('81004', 'ç»è´¹æ¨ä»ç¶æ', 'research_fund_status', '0', '课é¢ç»è´¹å¾
æ¨ä»/æ¥é审æ¹ä¸/å·²æ¨ä»/已驳å', '1', '2026-09-29 10:00:00', '1', '2026-09-29 10:00:00', X'00', NULL);", |
| | | 'dict_type remark', |
| | | ); |
| | | const ts = '2026-09-29 10:00:00'; |
| | | sub( |
| | | `('8100401', '1', 'å¾
æ¨ä»', '0', 'research_fund_status', '0', 'warning', '', '', '1', '2026-09-28 20:00:00', '1', '2026-09-28 20:00:00', X'00'),\n` + |
| | | `('8100402', '2', 'å·²æ¨ä»', '20', 'research_fund_status', '0', 'success', '', '', '1', '2026-09-28 20:00:00', '1', '2026-09-28 20:00:00', X'00');`, |
| | | `('8100401', '1', 'å¾
æ¨ä»', '0', 'research_fund_status', '0', 'warning', '', '', '1', '${ts}', '1', '${ts}', X'00'),\n` + |
| | | `('8100403', '2', 'æ¥é审æ¹ä¸', '15', 'research_fund_status', '0', 'processing', '', '', '1', '${ts}', '1', '${ts}', X'00'),\n` + |
| | | `('8100402', '3', 'å·²æ¨ä»', '20', 'research_fund_status', '0', 'success', '', '', '1', '${ts}', '1', '${ts}', X'00'),\n` + |
| | | `('8100404', '4', '已驳å', '30', 'research_fund_status', '0', 'danger', '', '', '1', '${ts}', '1', '${ts}', X'00');`, |
| | | 'dict_data 4 æ¡', |
| | | ); |
| | | |
| | | console.log('4) BPM äºå¼ 表'); |
| | | function appendBefore(marker, lines, label) { |
| | | const i = sql.indexOf(marker); |
| | | if (i < 0) throw new Error(`[${label}] æªæ¾å°éç¹`); |
| | | sql = sql.slice(0, i) + lines.join('\n') + '\n\n' + sql.slice(i); |
| | | console.log(` OK ${label}`); |
| | | } |
| | | appendBefore( |
| | | '-- ============ 表ï¼act_re_deploymentï¼å¯¼åº 22 è¡ï¼ ============', |
| | | procdefIns, |
| | | 'act_re_procdef', |
| | | ); |
| | | appendBefore( |
| | | '-- ============ 表ï¼act_ge_bytearrayï¼å¯¼åº 25 è¡ï¼ ============', |
| | | deployIns, |
| | | 'act_re_deployment', |
| | | ); |
| | | appendBefore('-- ============ 表ï¼act_re_modelï¼å¯¼åº 22 è¡ï¼ ============', byteIns, 'act_ge_bytearray'); |
| | | appendBefore( |
| | | '-- ============ 表ï¼bpm_process_definition_infoï¼å¯¼åº 22 è¡ï¼ ============', |
| | | modelIns, |
| | | 'act_re_model', |
| | | ); |
| | | appendBefore( |
| | | '-- ***********************************************************************\n-- â¡ ååï¼ä¸å¡éä»¶é
ç½® + åç±» + 表å + æ©å±é
ç½®ï¼', |
| | | infoIns, |
| | | 'bpm_process_definition_info', |
| | | ); |
| | | |
| | | console.log('5) è¡¨å¤´è¡æ°'); |
| | | sub('表ï¼act_re_procdefï¼å¯¼åº 22 è¡ï¼', '表ï¼act_re_procdefï¼å¯¼åº 23 è¡ï¼', 'procdef è¡æ°'); |
| | | sub('表ï¼act_re_deploymentï¼å¯¼åº 22 è¡ï¼', '表ï¼act_re_deploymentï¼å¯¼åº 23 è¡ï¼', 'deployment è¡æ°'); |
| | | sub('表ï¼act_ge_bytearrayï¼å¯¼åº 25 è¡ï¼', '表ï¼act_ge_bytearrayï¼å¯¼åº 28 è¡ï¼', 'bytearray è¡æ°'); |
| | | sub('表ï¼act_re_modelï¼å¯¼åº 22 è¡ï¼', '表ï¼act_re_modelï¼å¯¼åº 23 è¡ï¼', 'model è¡æ°'); |
| | | sub( |
| | | '表ï¼bpm_process_definition_infoï¼å¯¼åº 22 è¡ï¼', |
| | | '表ï¼bpm_process_definition_infoï¼å¯¼åº 23 è¡ï¼', |
| | | 'procinfo è¡æ°', |
| | | ); |
| | | |
| | | const out = crlf ? sql.replace(/\n/g, '\r\n') : sql; |
| | | fs.writeFileSync(DST, out, 'utf8'); |
| | | console.log(`\nå·²ååº ${DST}ï¼${sql.split('\n').length} è¡ï¼EOL=${crlf ? 'CRLF' : 'LF'}ï¼`); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===== 课é¢ç«é¡¹å®¡æ¹ï¼research_topic_approveï¼BPM æµç¨å®ä¹ï¼3 个顺åºèç¹ï¼ç§ä¹¦å¤å½¢å¼å®¡æ¥ â ä¸å®¶è¯å®¡ â å¦ä¼ç«é¡¹å®¡æ¹ï¼ ===== |
| | | -- çææ¥æºï¼mom-jssm åºï¼ç» BPM 模å设计å¨é¨ç½²ï¼POST /bpm/model/create + /bpm/model/deployï¼ |
| | | -- åç±» bpm_category(id=8002, code=research_topic_approve) è§ research_module.sql |
| | | -- å é¤é¡ºåºï¼åå¨å¤é®ï¼ï¼act_re_model â act_ge_bytearray â act_re_procdef â act_re_deployment |
| | | DELETE FROM `act_re_model` WHERE `KEY_` = 'research_topic_approve'; |
| | | DELETE FROM `act_ge_bytearray` WHERE `ID_` IN ('558289c7-bb1d-11f1-81f2-00155dd68500','575d6449-bb1d-11f1-81f2-00155dd68500','5790a94a-bb1d-11f1-81f2-00155dd68500'); |
| | | DELETE FROM `act_re_procdef` WHERE `KEY_` = 'research_topic_approve'; |
| | | DELETE FROM `act_re_deployment` WHERE `ID_` = '575d6448-bb1d-11f1-81f2-00155dd68500'; |
| | | DELETE FROM `bpm_process_definition_info` WHERE `category` = 'research_topic_approve'; |
| | | INSERT INTO `act_re_deployment` (`ID_`, `NAME_`, `CATEGORY_`, `KEY_`, `TENANT_ID_`, `DEPLOY_TIME_`, `DERIVED_FROM_`, `DERIVED_FROM_ROOT_`, `PARENT_DEPLOYMENT_ID_`, `ENGINE_VERSION_`) VALUES ('575d6448-bb1d-11f1-81f2-00155dd68500', '课é¢ç«é¡¹å®¡æ¹', 'research_topic_approve', 'research_topic_approve', '', '2026-09-28 17:16:51.938', NULL, NULL, NULL, NULL); |
| | | INSERT INTO `act_re_procdef` (`ID_`, `REV_`, `CATEGORY_`, `NAME_`, `KEY_`, `VERSION_`, `DEPLOYMENT_ID_`, `RESOURCE_NAME_`, `DGRM_RESOURCE_NAME_`, `DESCRIPTION_`, `HAS_START_FORM_KEY_`, `HAS_GRAPHICAL_NOTATION_`, `SUSPENSION_STATE_`, `TENANT_ID_`, `ENGINE_VERSION_`, `DERIVED_FROM_`, `DERIVED_FROM_ROOT_`, `DERIVED_VERSION_`) VALUES ('research_topic_approve:1:57953d2b-bb1d-11f1-81f2-00155dd68500', '2', 'research_topic_approve', '课é¢ç«é¡¹å®¡æ¹', 'research_topic_approve', '1', '575d6448-bb1d-11f1-81f2-00155dd68500', 'research_topic_approve.bpmn', 'research_topic_approve.research_topic_approve.png', NULL, '0', '1', '1', '', NULL, NULL, NULL, '0'); |
| | | INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES ('575d6449-bb1d-11f1-81f2-00155dd68500', '1', 'research_topic_approve.bpmn', '575d6448-bb1d-11f1-81f2-00155dd68500', X'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C223E0A20203C70726F636573732069643D2272657365617263685F746F7069635F617070726F766522206E616D653D22E8AFBEE9A298E7AB8BE9A1B9E5AEA1E689B92220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D2253746172744576656E7422206E616D653D22E5BC80E5A78B223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D225374617274557365724E6F646522206E616D653D22E58F91E8B5B7E4BABA223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B33365D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68F90E4BAA42220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2266616C7365222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2266616C7365222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2266616C7365222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2266616C7365222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2266616C7365222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B325D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F73656372657461726961745F72657669657722206E616D653D22E7A798E4B9A6E5A484E5BDA2E5BC8FE5AEA1E69FA5223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F6578706572745F72657669657722206E616D653D22E4B893E5AEB6E8AF84E5AEA1223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F636F756E63696C5F617070726F766522206E616D653D22E5ADA6E4BC9AE7AB8BE9A1B9E5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C656E644576656E742069643D22456E644576656E7422206E616D653D22E7BB93E69D9F223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D312220736F757263655265663D2253746172744576656E7422207461726765745265663D225374617274557365724E6F6465223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D322220736F757263655265663D225374617274557365724E6F646522207461726765745265663D2241637469766974795F73656372657461726961745F726576696577223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D332220736F757263655265663D2241637469766974795F73656372657461726961745F72657669657722207461726765745265663D2241637469766974795F6578706572745F726576696577223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D342220736F757263655265663D2241637469766974795F6578706572745F72657669657722207461726765745265663D2241637469766974795F636F756E63696C5F617070726F7665223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D352220736F757263655265663D2241637469766974795F636F756E63696C5F617070726F766522207461726765745265663D22456E644576656E74223E3C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F72657365617263685F746F7069635F617070726F7665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2272657365617263685F746F7069635F617070726F7665222069643D2242504D4E506C616E655F72657365617263685F746F7069635F617070726F7665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2253746172744576656E74222069643D2242504D4E53686170655F53746172744576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D22302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D225374617274557365724E6F6465222069643D2242504D4E53686170655F5374617274557365724E6F6465223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D2238302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F73656372657461726961745F726576696577222069643D2242504D4E53686170655F41637469766974795F73656372657461726961745F726576696577223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223233302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F6578706572745F726576696577222069643D2242504D4E53686170655F41637469766974795F6578706572745F726576696577223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223338302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F636F756E63696C5F617070726F7665222069643D2242504D4E53686170655F41637469766974795F636F756E63696C5F617070726F7665223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223533302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22456E644576656E74222069643D2242504D4E53686170655F456E644576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D223638302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D31222069643D2242504D4E456467655F73657175656E6365466C6F772D31223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D2238302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D32222069643D2242504D4E456467655F73657175656E6365466C6F772D32223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223138302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D33222069643D2242504D4E456467655F73657175656E6365466C6F772D33223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223333302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223338302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D34222069643D2242504D4E456467655F73657175656E6365466C6F772D34223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223438302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D35222069643D2242504D4E456467655F73657175656E6365466C6F772D35223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223633302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223638302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E0A', '0'); |
| | | INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES ('5790a94a-bb1d-11f1-81f2-00155dd68500', '1', 'research_topic_approve.research_topic_approve.png', '575d6448-bb1d-11f1-81f2-00155dd68500', X'89504E470D0A1A0A0000000D49484452000002D0000000460806000000E5F7A3EB00000F0B49444154785EED9DDF6F1CD515C78720553CF01F543C41FF8F228178F0036AA5F53A1B0558EF5AB1218E9008204544B56B5E6A5521522BAAF605252A95554B019BE0242436C1049B0684D462A70921C64013B3D826218E7062273BBDC7F24897B3637BF6C799BDF7F8FB913E32B977E6CE64EFD7277787D9D92000751186E12F666666FE393939B9323A3A1A9E3E7D1AA6AC79DDCBE3E3E3D7C6C6C69EE4F3E32BC855F345AEA084C815945063AE80724CD11834A10D4BA552B8BCBC1CDEB97307A62CBDEEF4FA9F3D7BF64753485AF81CF90872D57C912B2821720525D4982BA01C7AC74DA1E56186E93B3737B7600AC7793E473E825CB92372052544AEA0849A72059443FFBB0AEFB8DD90E6C1148EDB7C8E7C04B97247E40A4A885C410935E50A2887EE3DE20186CD93E683CF918F20576E895C4109912B28A1965C01E5242D1CB76ECC85339FBC114E9FF9FD9AF4DFD4C6B783F5A9A57020576E895C2157122257C895845A72059493A4702C5DBF1A4E9D3A18FEFBDD177F26B5511FDF1ED6AE96C2815CB92572855C49885C2157126AC915504E92C2F1EDF47045D188FCDFF43B15DBC3DAD55238902BB744AE902B09912BE44A422DB902CA495238FEFBFE1F2A0A4624F5F1ED61ED6A291CC8955B2257C89584C8157225A1965C01E524291C53A77B2A0A4624F5F1ED61ED6A291CC8955B2257C89584C8157225A1965C01E5A070B8A596C2815CB92572855C49885C2157126AC915504E92C2419F36E6052392FAF8F6B076B5140EE4CA2D912BE44A42E40AB992504BAE807292148ECB1FFDB9A26044521FDF1ED6AE96C2815CB92572855C49885C2157126AC915504E92C2B178F53FE1D47BBFAB281AD4467D7C7B58BB5A0A0772E596C81572252172855C49A825574039490A07F9D5A7472B0A07B5F1ED607D6A291CC8955B2257C89584C8157225A1965C252593C93C92CD665F340EB7B5B59D377E6B0CD77F9EA776EAA7EDF8BEE28461B8637272F2B7478F1E7DAFB7B777E1E5975F5EEEEAEA2AD309767676AEEEDFBFFFA669FBB2AFAFEF8FF97CFE21BEBF6612158EDBB7C3CB137FA9281CD4467D15DBC39AD55238902BB744AE902B09912BE44A422DB9DA0CB318BEDFAC410B3B77EE9C5E5F2C27727DFB02EDCFC76C2866E1FCC0C99327FF76F0E0C19562B118BEFEFAEBE1C71F7F1C5EB972255C5C5C0C09FA497FA676EA2F140AF7BABBBB673A3A3A9EE0E36964ABC241DFB0F4C5477FAA281A91D4876F616A9C5A0A0772E596C81572252172855C49A825571B6116C02D66217C812F8EAB717D21DDC2C76E086641FC5C5F5FDFF2F3CF3F1F4E4E4E86F7EEDD5B5B306F056D47DBEFDBB76FF5D9679FFD2C9BCD3ECCC7D6C48685C3BCA39EBB3C167E7EF24045B1E0D236B42DDE85D7AF96C2815CB92572855C49885C2157126AC915A7A7A7678759F8F6F3C5F033CF3C131E3E7C381C1F1F8FBDC04BEDD44FDBF17D693C1A971FAB26CC31EF3B75EAD49B7BF6EC09474646C2BB77EFFE7C859C10DA8FF637277CCB9CE0E3FC385A882B1C5BBDDBDE48BC0BAF5F2D8503B9724BE4AA52E4AA7E91AB4A91ABFAD5922B9B4C26F360369B7DD75EFC160A85706868285C5959E14BD058683BDA9EF6B3C7A171697C7ECCAA30E3DF77ECD8B17F75757585172F5EE4C7AE091AA7582CFE94CBE50AFC781A882B1C49DE6D6F24EDCBC783C9D55238902BB744AEE245AEEA13B98A17B9AA4F2DB98AA02BC466A17BDC5EF41E3A74285C5A5AE24BCE44D07EB43FBB1A7DBCAE2BD174E5B9B3B3332C954AFC787541E3E5F3F9A5D6D6D6C7F8317D27AE70F06250AD7C3C985C2D8503B9724BE46A63F97830B9C8D5C6F2F16072B5E42AC2BE6DC3FC773838381896CB65BED4AC0ADA9FC6A1F1ACB1FBF9B113313131F11C2D9E1B75E59963C62D3FF5D453D79BF2181141E20A076C9E5A0A0772E596C8159410B982126AC9156116B62DF695625AF436121A8F5D89AEEE8385668C075E7DF5D565BA675992A1A1A1EBB95CEE243FBECFA070B8A596C2815CB92572052544AEA0845A72458F9AB39FB641B75DD47BE59943E3D9B773D0D339AA7AC4DD891327FE4A4FDBA8F5038349A1F18BC5E27C6B6BEBA3FC1C7C0585C32DB5140EE4CA2D912B2821720525D4922BB3A02D440B5BFAE05FADF73C6F058DCB3E5898EC337B66DF1DAFBCF2CA0A3D7A2E0DCE9D3B77C39CDC87FC3C7C0585C32DB5140EE4CA2D912B2821720525D4922BFB4B52868787F972B2A1D0F8F655687E2EB14C4C4CFCA6A3A323F1739EEB858EB36BD7AE1B994CE697FC5C5CC2BC88EF1B7FCDDB39281C6EE97AE140AEFC14B98212225750420DB9CAE572BF8A16B4F4FC66FA7B4942E3DBCF89A6E3F373AAE0C89123A7E91B04D3A4B7B7772A9BCD76F1737189E845DC6AA25138DCD283C2815C792872052544AEA0841A7265DAF747DBBDF6DA6B7C1929021DC73AB7FDFC9C2AE8EBEB9B4FEBF68D883367CED065F963FC5C5CC27A11379D68140EB7F4A87020571E895C4109912B28A1865C993F0F45FDF44D826940C7B1CE69C83E9F585E7AE9A5E59999193E8E28972E5D9A3527F7093F17978899E0D88946E1704B0F0B0772E581C8159410B982126AC895F9F949D49ED61A958E639DCBD66BD4CECECEF20F3FFCC0C71165717171C99CDC557E2E2E1133B1DCB58946E1704B8F0B0772E5B0C8159410B982122AC9D542F4E7B4D6A8741CEB1CB65EA3EEDEBD3B5C5D5DE5E388628E7733E605F352140EB7E4F3E3ABC8955BF2F9F155E4CA2DF9FCF82A72E5967C7E7C37AD352A1DC73AEE6DBE5EAE60CF9E3DAB69ADEE23E6E7E7BF6C4BB2BA6F227C022DDF6FC3FFBA72568FDF7923570E8B5C4109912B28A1865C999F57A3F6B4D6A8555F817EE185176EA6757F49C4850B173E6D4B727F4913D96C626D5C2F1CE614636D54BF6B7A58389A92AB20664E492DFD8D16B9923188994332ADFE668B5CD5661033A7A42FFDD26AC8559B0FF7401F3870E08BB49FC2F1D65B6F0DB7F9F3148E8A89B549BB70546B10F34B6BB7D5DBEF9A1E158EA6E62A889943BBCDF7FE468B5CC918C4CC99DD26DDDF6C91ABDA0C62E6D06E73BD5F5A0DB96AF3E1291CBDBDBD7F4CFB39D07BF7EE1DF1E039D01B4EAC4DDA85A35A83985F5ABBADDE7ED7F4A0703891AB20660EED36DFFB1B2D722563103367769B747FB345AE6A33889943BBCDF57E6935E4AACD87E740E7F3F9878AC5E2BD14BF89F03B7362F3AE7F136152D22E1CD51AC4FCD2DA6DF5F6BBA6EB852329D2B90A62E6D06EF3BDBFD122573206317366B749F7375BE4AA36839839B4DB5CEF975643AE9AF14D844F3FFD74393A66A26F2224BABBBBBF4AEB368E818181BF9B93FB909F83AFA45D38AA3588F9A5B5DBEAED774D0D858390CE55103387769BEFFD8D16B99231889933BB4DBABFD92257B519C4CCA1DDE67ABFB45A72B573E74EFAD2BDB505EDF0F0305F4E36141A3F3A161D979FCB867474743CB16FDFBED5BB77EFF2311B8A19FF5B7372975B5B5B1FE5E7E02B69178E6A0D627E69EDB67AFB5D534BE190CE55103387769BEFFD8D16B99231889933BB4DBABFD92257B519C4CCA1DDE67ABFB45A7265D68B8568515B2814C2A5A525BEAC6C08346E7B7BFBBDE858745C7E2E9BB277EFDECF464646CA7CE00652EEEFEF7FC39CD8083FB6CFA45D38AA3588F9A5B5DBEAED774D2D85433A5741CC1CDA6DBEF7375AE44AC62066CEEC36E9FE668B5CD566103387769BEBFDD26AC9552693B9DFBE0A7DE8D0A1B05C6EEC3295C6A371EDABCF745C7E2E9B627678249FCF2F5DBC78918FDF103EF8E08323E6E4E6E838FCD83E9376E1A856738AB136AADF35B5140EE95C0531734A6AE96FB4C8958C41CC1C9269F5375BE4AA36839839257DE997564BAE08B36E6CB1AE0C878383837C795917349E3D3E1D8F9F4322CCCAFBF1F6F6F69F4AA5123F465DCCCECEBE634EEA5A6B6BEB63FC98BE9376E1809BABA57020576E895C4109912B28A1965C4598B569BF7585786DD15BEF9568DA9FC6A1F1ACB1FBF9B1AB2297CB15F2F9FCCD465D895EBFF24CDF28D3CE8FA501140EB7D45238902BB744AEA084C81594504BAE227A7A7A769835E471FB4A31DD7651EB3DD1B49F7DDBC6BAC7E938FCD85543578A77EFDE7D7D6868E87AAD1F2CA40F0CAEDFF3FC9DC62BCF11281C6EA9A57020576E895C4109912B28A1965CD964329907B3D9ECBBF6A2973E5868D6A9E1CACA0A5F82C642DBD1F6EC0383218D4BE3F363D68C19F0E15C2E77AA582CCE9F3B77EE46D2E7449BED4A0303036F9A93BA6C3C41E3F0B13581C2E1965A0A0772E596C8159410B982126AC91587AE10DBB77344D273A20F1F3EBCF64D8257AE5C09171717D7D6A3F493FE4CEDD46F3FE73992C66BC895E738E89173E620E3BB76EDFAD11CE4F3D1D1D1A94B972E7DB3B0B070CB9CDFD2F7DF7F3F333D3DFDE9DB6FBF3DD4DDDD7DC26CBB40DB6B7A54DD66A070B8A596C2E153AE6EDDBA154E4D4D552DEDC7C77255E42A7D912B7F40AEDC524BAE36C2AC315BECA773D4E2FAFEB57D60B05AE89B03CDC13AB3D9ECB0F979DE48CF74A613A19FE7D7DB3BB57CC360527C2A1CDB412D85C3A75CD13F2E41CC27CEB792F6E363B92A7295BEC8953F20576EA925579B418F9A336BCE42B50BE9F5ED0B553FAA0E341E9F0AC776504BE1F02957B8A2E30FC8955B2257E98B5CE9831E8F9CCD665FDCEC022FF56B7B8CB2F7F85438B6835A0A0772E596C8159410B982126AC915500E0A875B6A291CC8955B22575042E40A4AA825574039281C6EA9A57020576E895C4109912B28A1965C01E5A070B8A596C2E153AE704FA13F20576E895CA52F72058023F85438B6835A0A874FB9A27F5C82984FAD6F25EDC7C77255E42A7D912B7F40AEDC524BAE80727C2A1CDB412D85C3A75CE18A8E3F20576E895CA52F72058023F85438B6835A0A0772E596C8159410B982126AC915500E0A875B6A291CC8955B22575042E40A4AA825574039281C6EA9A57020576E895C4109912B28A1965C01E5A070B8A596C2E153AE704FA13F20576E895CA52F720580238C8E8E969797972B020CD3D7CCC33553386EF339F2119F7245FFB804319F5ADF4ADA8F8FE5A2C8557344AEFC01B972474DB902CA191F1FBF562A952A420CD3F7EBAFBF1E3085E33C9F231FF12957DAAFE82057CD11B9F207E4CA1D35E50A28676C6CECC9B367CFFE383737B7E0CB3B706D9AD77D6E7676F61FA6687C636CE173E423C855F345AEA084C815945063AEC03680C24AEFF88C778C6BF71FC154A5D79D5E7F554583FE3EEB7F2FE4AA3922575042E40A4AA8325700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036E1FF32BDF83D641CD66B0000000049454E44AE426082', '1'); |
| | | INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES ('558289c7-bb1d-11f1-81f2-00155dd68500', '1', 'source', NULL, X'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C646566696E6974696F6E7320786D6C6E733D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C2220786D6C6E733A7873693D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612D696E7374616E63652220786D6C6E733A7873643D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D612220786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220786D6C6E733A62706D6E64693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F44492220786D6C6E733A6F6D6764633D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44432220786D6C6E733A6F6D6764693D22687474703A2F2F7777772E6F6D672E6F72672F737065632F44442F32303130303532342F44492220747970654C616E67756167653D22687474703A2F2F7777772E77332E6F72672F323030312F584D4C536368656D61222065787072657373696F6E4C616E67756167653D22687474703A2F2F7777772E77332E6F72672F313939392F585061746822207461726765744E616D6573706163653D22687474703A2F2F7777772E6F6D672E6F72672F737065632F42504D4E2F32303130303532342F4D4F44454C223E0A20203C70726F636573732069643D2272657365617263685F746F7069635F617070726F766522206E616D653D22E8AFBEE9A298E7AB8BE9A1B9E5AEA1E689B92220697345786563757461626C653D2274727565223E0A202020203C73746172744576656E742069643D2253746172744576656E7422206E616D653D22E5BC80E5A78B223E3C2F73746172744576656E743E0A202020203C757365725461736B2069643D225374617274557365724E6F646522206E616D653D22E58F91E8B5B7E4BABA223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B33365D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68F90E4BAA42220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2266616C7365222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2266616C7365222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2266616C7365222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2266616C7365222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2266616C7365222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B325D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F73656372657461726961745F72657669657722206E616D653D22E7A798E4B9A6E5A484E5BDA2E5BC8FE5AEA1E69FA5223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F6578706572745F72657669657722206E616D653D22E4B893E5AEB6E8AF84E5AEA1223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C757365725461736B2069643D2241637469766974795F636F756E63696C5F617070726F766522206E616D653D22E5ADA6E4BC9AE7AB8BE9A1B9E5AEA1E689B9223E0A2020202020203C657874656E73696F6E456C656D656E74733E0A20202020202020203C666C6F7761626C653A617070726F76655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A617070726F7665547970653E0A20202020202020203C666C6F7761626C653A63616E646964617465537472617465677920786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31305D5D3E3C2F666C6F7761626C653A63616E64696461746553747261746567793E0A20202020202020203C666C6F7761626C653A63616E646964617465506172616D20786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A63616E646964617465506172616D3E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E9809AE8BF872220656E61626C653D2274727565222069643D2231223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E68B92E7BB9D2220656E61626C653D2274727565222069643D2232223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E8BDACE58A9E2220656E61626C653D2274727565222069643D2233223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E5A794E6B4BE2220656E61626C653D2274727565222069643D2234223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E58AA0E7ADBE2220656E61626C653D2274727565222069643D2235223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A627574746F6E7353657474696E6720786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E2220646973706C61794E616D653D22E98080E59B9E2220656E61626C653D2274727565222069643D2236223E3C2F666C6F7761626C653A627574746F6E7353657474696E673E0A20202020202020203C666C6F7761626C653A617070726F76654D6574686F6420786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B345D5D3E3C2F666C6F7761626C653A617070726F76654D6574686F643E0A20202020202020203C666C6F7761626C653A72656A65637448616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A72656A65637448616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E53746172745573657248616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E53746172745573657248616E646C6572547970653E0A20202020202020203C666C6F7761626C653A61737369676E456D70747948616E646C65725479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B315D5D3E3C2F666C6F7761626C653A61737369676E456D70747948616E646C6572547970653E0A20202020202020203C666C6F7761626C653A7369676E456E61626C6520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A7369676E456E61626C653E0A20202020202020203C666C6F7761626C653A726561736F6E5265717569726520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B66616C73655D5D3E3C2F666C6F7761626C653A726561736F6E526571756972653E0A20202020202020203C666C6F7761626C653A6E6F64655479706520786D6C6E733A666C6F7761626C653D22687474703A2F2F666C6F7761626C652E6F72672F62706D6E223E3C215B43444154415B31315D5D3E3C2F666C6F7761626C653A6E6F6465547970653E0A2020202020203C2F657874656E73696F6E456C656D656E74733E0A2020202020203C6D756C7469496E7374616E63654C6F6F7043686172616374657269737469637320697353657175656E7469616C3D22747275652220666C6F7761626C653A636F6C6C656374696F6E3D22247B636F6C6C5F757365724C6973747D223E0A20202020202020203C6C6F6F7043617264696E616C6974793E313C2F6C6F6F7043617264696E616C6974793E0A20202020202020203C636F6D706C6574696F6E436F6E646974696F6E3E247B206E724F66436F6D706C65746564496E7374616E636573202667743B3D206E724F66496E7374616E636573207D3C2F636F6D706C6574696F6E436F6E646974696F6E3E0A2020202020203C2F6D756C7469496E7374616E63654C6F6F704368617261637465726973746963733E0A202020203C2F757365725461736B3E0A202020203C656E644576656E742069643D22456E644576656E7422206E616D653D22E7BB93E69D9F223E3C2F656E644576656E743E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D312220736F757263655265663D2253746172744576656E7422207461726765745265663D225374617274557365724E6F6465223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D322220736F757263655265663D225374617274557365724E6F646522207461726765745265663D2241637469766974795F73656372657461726961745F726576696577223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D332220736F757263655265663D2241637469766974795F73656372657461726961745F72657669657722207461726765745265663D2241637469766974795F6578706572745F726576696577223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D342220736F757263655265663D2241637469766974795F6578706572745F72657669657722207461726765745265663D2241637469766974795F636F756E63696C5F617070726F7665223E3C2F73657175656E6365466C6F773E0A202020203C73657175656E6365466C6F772069643D2273657175656E6365466C6F772D352220736F757263655265663D2241637469766974795F636F756E63696C5F617070726F766522207461726765745265663D22456E644576656E74223E3C2F73657175656E6365466C6F773E0A20203C2F70726F636573733E0A20203C62706D6E64693A42504D4E4469616772616D2069643D2242504D4E4469616772616D5F72657365617263685F746F7069635F617070726F7665223E0A202020203C62706D6E64693A42504D4E506C616E652062706D6E456C656D656E743D2272657365617263685F746F7069635F617070726F7665222069643D2242504D4E506C616E655F72657365617263685F746F7069635F617070726F7665223E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2253746172744576656E74222069643D2242504D4E53686170655F53746172744576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D22302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D225374617274557365724E6F6465222069643D2242504D4E53686170655F5374617274557365724E6F6465223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D2238302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F73656372657461726961745F726576696577222069643D2242504D4E53686170655F41637469766974795F73656372657461726961745F726576696577223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223233302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F6578706572745F726576696577222069643D2242504D4E53686170655F41637469766974795F6578706572745F726576696577223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223338302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D2241637469766974795F636F756E63696C5F617070726F7665222069643D2242504D4E53686170655F41637469766974795F636F756E63696C5F617070726F7665223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2236302E30222077696474683D223130302E302220783D223533302E302220793D22302E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E53686170652062706D6E456C656D656E743D22456E644576656E74222069643D2242504D4E53686170655F456E644576656E74223E0A20202020202020203C6F6D6764633A426F756E6473206865696768743D2233302E30222077696474683D2233302E302220783D223638302E302220793D2231352E30223E3C2F6F6D6764633A426F756E64733E0A2020202020203C2F62706D6E64693A42504D4E53686170653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D31222069643D2242504D4E456467655F73657175656E6365466C6F772D31223E0A20202020202020203C6F6D6764693A776179706F696E7420783D2233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D2238302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D32222069643D2242504D4E456467655F73657175656E6365466C6F772D32223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223138302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223233302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D33222069643D2242504D4E456467655F73657175656E6365466C6F772D33223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223333302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223338302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D34222069643D2242504D4E456467655F73657175656E6365466C6F772D34223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223438302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223533302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A2020202020203C62706D6E64693A42504D4E456467652062706D6E456C656D656E743D2273657175656E6365466C6F772D35222069643D2242504D4E456467655F73657175656E6365466C6F772D35223E0A20202020202020203C6F6D6764693A776179706F696E7420783D223633302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A20202020202020203C6F6D6764693A776179706F696E7420783D223638302E302220793D2233302E30223E3C2F6F6D6764693A776179706F696E743E0A2020202020203C2F62706D6E64693A42504D4E456467653E0A202020203C2F62706D6E64693A42504D4E506C616E653E0A20203C2F62706D6E64693A42504D4E4469616772616D3E0A3C2F646566696E6974696F6E733E0A', NULL); |
| | | INSERT INTO `act_re_model` (`ID_`, `REV_`, `NAME_`, `KEY_`, `CATEGORY_`, `CREATE_TIME_`, `LAST_UPDATE_TIME_`, `VERSION_`, `META_INFO_`, `DEPLOYMENT_ID_`, `EDITOR_SOURCE_VALUE_ID_`, `EDITOR_SOURCE_EXTRA_VALUE_ID_`, `TENANT_ID_`) VALUES ('557c2126-bb1d-11f1-81f2-00155dd68500','3','课é¢ç«é¡¹å®¡æ¹','research_topic_approve','research_topic_approve','2026-09-28 17:16:48.781','2026-09-28 17:16:52.482','1','{"allowCancelRunningProcess":null,"allowWithdrawTask":null,"autoApprovalType":null,"description":"课é¢ç³æ¥ä¸çº§å®¡æ¹ï¼ç§ä¹¦å¤å½¢å¼å®¡æ¥âä¸å®¶è¯å®¡âå¦ä¼ç«é¡¹å®¡æ¹ï¼","formCustomCreatePath":"/research/application/index","formCustomViewPath":"/research/application/detail/approve/index.vue","formId":null,"formType":20,"icon":null,"managerUserIds":[1],"printTemplateSetting":null,"processAfterTriggerSetting":null,"processBeforeTriggerSetting":null,"processIdRule":null,"sort":1790587008761,"startDeptIds":null,"startUserIds":null,"summarySetting":null,"taskAfterTriggerSetting":null,"taskBeforeTriggerSetting":null,"titleSetting":null,"type":10,"visible":true}','575d6448-bb1d-11f1-81f2-00155dd68500','558289c7-bb1d-11f1-81f2-00155dd68500',NULL,''); |
| | | INSERT INTO `bpm_process_definition_info` (`id`, `process_definition_id`, `model_id`, `model_type`, `category`, `icon`, `description`, `form_type`, `form_id`, `form_conf`, `form_fields`, `form_custom_create_path`, `form_custom_view_path`, `simple_model`, `visible`, `sort`, `start_user_ids`, `start_dept_ids`, `manager_user_ids`, `allow_cancel_running_process`, `allow_withdraw_task`, `process_id_rule`, `auto_approval_type`, `title_setting`, `summary_setting`, `process_before_trigger_setting`, `process_after_trigger_setting`, `task_before_trigger_setting`, `task_after_trigger_setting`, `print_template_setting`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ('41', 'research_topic_approve:1:57953d2b-bb1d-11f1-81f2-00155dd68500', '557c2126-bb1d-11f1-81f2-00155dd68500', '10', 'research_topic_approve', NULL, '课é¢ç³æ¥ä¸çº§å®¡æ¹ï¼ç§ä¹¦å¤å½¢å¼å®¡æ¥âä¸å®¶è¯å®¡âå¦ä¼ç«é¡¹å®¡æ¹ï¼', '20', NULL, NULL, NULL, '/research/application/index', '/research/application/detail/approve/index.vue', NULL, X'01', '1790587008761', '', NULL, '1', X'01', X'01', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '1', '2026-09-28 17:16:52', '1', '2026-09-28 17:16:52', X'00'); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.omg.org/spec/BPMN/20100524/MODEL"> |
| | | <process id="ums_membership_approve" name="å
¥ä¼å®¡æ¹" isExecutable="true"> |
| | | <startEvent id="StartEvent" name="å¼å§"></startEvent> |
| | | <userTask id="StartUserNode" name="å起人"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[36]]></flowable:candidateStrategy> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æäº¤" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="false" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="false" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="false" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="false" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="false" id="6"></flowable:buttonsSetting> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[2]]></flowable:assignStartUserHandlerType> |
| | | </extensionElements> |
| | | </userTask> |
| | | <userTask id="Activity_secretariat_audit" name="ç§ä¹¦å¤å审"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[10]]></flowable:candidateStrategy> |
| | | <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éè¿" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="true" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="true" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="true" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="true" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="true" id="6"></flowable:buttonsSetting> |
| | | <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod> |
| | | <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType> |
| | | <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType> |
| | | <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable> |
| | | <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire> |
| | | <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType> |
| | | </extensionElements> |
| | | <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}"> |
| | | <loopCardinality>1</loopCardinality> |
| | | <completionCondition>${ nrOfCompletedInstances >= nrOfInstances }</completionCondition> |
| | | </multiInstanceLoopCharacteristics> |
| | | </userTask> |
| | | <userTask id="Activity_council_review" name="çäºä¼å®¡è®®"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[10]]></flowable:candidateStrategy> |
| | | <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éè¿" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="true" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="true" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="true" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="true" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="true" id="6"></flowable:buttonsSetting> |
| | | <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod> |
| | | <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType> |
| | | <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType> |
| | | <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable> |
| | | <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire> |
| | | <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType> |
| | | </extensionElements> |
| | | <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}"> |
| | | <loopCardinality>1</loopCardinality> |
| | | <completionCondition>${ nrOfCompletedInstances >= nrOfInstances }</completionCondition> |
| | | </multiInstanceLoopCharacteristics> |
| | | </userTask> |
| | | <endEvent id="EndEvent" name="ç»æ"></endEvent> |
| | | <sequenceFlow id="sequenceFlow-1" sourceRef="StartEvent" targetRef="StartUserNode"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-2" sourceRef="StartUserNode" targetRef="Activity_secretariat_audit"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-3" sourceRef="Activity_secretariat_audit" targetRef="Activity_council_review"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-4" sourceRef="Activity_council_review" targetRef="EndEvent"></sequenceFlow> |
| | | </process> |
| | | <bpmndi:BPMNDiagram id="BPMNDiagram_ums_membership_approve"> |
| | | <bpmndi:BPMNPlane bpmnElement="ums_membership_approve" id="BPMNPlane_ums_membership_approve"> |
| | | <bpmndi:BPMNShape bpmnElement="StartEvent" id="BPMNShape_StartEvent"> |
| | | <omgdc:Bounds height="30.0" width="30.0" x="0.0" y="15.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="StartUserNode" id="BPMNShape_StartUserNode"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="80.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="Activity_secretariat_audit" id="BPMNShape_Activity_secretariat_audit"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="230.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="Activity_council_review" id="BPMNShape_Activity_council_review"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="380.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="EndEvent" id="BPMNShape_EndEvent"> |
| | | <omgdc:Bounds height="30.0" width="30.0" x="530.0" y="15.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-1" id="BPMNEdge_sequenceFlow-1"> |
| | | <omgdi:waypoint x="30.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="80.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-2" id="BPMNEdge_sequenceFlow-2"> |
| | | <omgdi:waypoint x="180.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="230.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-3" id="BPMNEdge_sequenceFlow-3"> |
| | | <omgdi:waypoint x="330.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="380.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-4" id="BPMNEdge_sequenceFlow-4"> |
| | | <omgdi:waypoint x="480.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="530.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | </bpmndi:BPMNPlane> |
| | | </bpmndi:BPMNDiagram> |
| | | </definitions> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.omg.org/spec/BPMN/20100524/MODEL"> |
| | | <process id="archive_borrow_approve" name="æ¡£æ¡åé
审æ¹" isExecutable="true"> |
| | | <startEvent id="StartEvent" name="å¼å§"></startEvent> |
| | | <userTask id="StartUserNode" name="å起人"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[36]]></flowable:candidateStrategy> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æäº¤" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="false" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="false" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="false" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="false" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="false" id="6"></flowable:buttonsSetting> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[2]]></flowable:assignStartUserHandlerType> |
| | | </extensionElements> |
| | | </userTask> |
| | | <userTask id="Activity_archive_admin_review" name="æ¡£æ¡ç®¡çåå®¡æ ¸"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[10]]></flowable:candidateStrategy> |
| | | <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éè¿" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="true" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="true" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="true" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="true" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="true" id="6"></flowable:buttonsSetting> |
| | | <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod> |
| | | <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType> |
| | | <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType> |
| | | <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable> |
| | | <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire> |
| | | <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType> |
| | | </extensionElements> |
| | | <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}"> |
| | | <loopCardinality>1</loopCardinality> |
| | | <completionCondition>${ nrOfCompletedInstances >= nrOfInstances }</completionCondition> |
| | | </multiInstanceLoopCharacteristics> |
| | | </userTask> |
| | | <userTask id="Activity_leader_approve" name="å管é¢å¯¼å®¡æ¹"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[10]]></flowable:candidateStrategy> |
| | | <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éè¿" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="true" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="true" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="true" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="true" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="true" id="6"></flowable:buttonsSetting> |
| | | <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod> |
| | | <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType> |
| | | <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType> |
| | | <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable> |
| | | <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire> |
| | | <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType> |
| | | </extensionElements> |
| | | <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}"> |
| | | <loopCardinality>1</loopCardinality> |
| | | <completionCondition>${ nrOfCompletedInstances >= nrOfInstances }</completionCondition> |
| | | </multiInstanceLoopCharacteristics> |
| | | </userTask> |
| | | <endEvent id="EndEvent" name="ç»æ"></endEvent> |
| | | <sequenceFlow id="sequenceFlow-1" sourceRef="StartEvent" targetRef="StartUserNode"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-2" sourceRef="StartUserNode" targetRef="Activity_archive_admin_review"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-3" sourceRef="Activity_archive_admin_review" targetRef="Activity_leader_approve"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-4" sourceRef="Activity_leader_approve" targetRef="EndEvent"></sequenceFlow> |
| | | </process> |
| | | <bpmndi:BPMNDiagram id="BPMNDiagram_archive_borrow_approve"> |
| | | <bpmndi:BPMNPlane bpmnElement="archive_borrow_approve" id="BPMNPlane_archive_borrow_approve"> |
| | | <bpmndi:BPMNShape bpmnElement="StartEvent" id="BPMNShape_StartEvent"> |
| | | <omgdc:Bounds height="30.0" width="30.0" x="0.0" y="15.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="StartUserNode" id="BPMNShape_StartUserNode"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="80.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="Activity_archive_admin_review" id="BPMNShape_Activity_archive_admin_review"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="230.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="Activity_leader_approve" id="BPMNShape_Activity_leader_approve"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="380.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="EndEvent" id="BPMNShape_EndEvent"> |
| | | <omgdc:Bounds height="30.0" width="30.0" x="530.0" y="15.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-1" id="BPMNEdge_sequenceFlow-1"> |
| | | <omgdi:waypoint x="30.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="80.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-2" id="BPMNEdge_sequenceFlow-2"> |
| | | <omgdi:waypoint x="180.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="230.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-3" id="BPMNEdge_sequenceFlow-3"> |
| | | <omgdi:waypoint x="330.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="380.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-4" id="BPMNEdge_sequenceFlow-4"> |
| | | <omgdi:waypoint x="480.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="530.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | </bpmndi:BPMNPlane> |
| | | </bpmndi:BPMNDiagram> |
| | | </definitions> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ========================================= |
| | | -- æ¡£æ¡ç®¡ç模åï¼yudao-module-archiveï¼ä¸æ |
| | | -- 建表 + åå
¸æ°æ® + BPM åç±» + èå + 䏿¹å½æ¡£æé®æé |
| | | -- è¦çéæ±ï¼1.书æ¶(å类管ç) 2.ææ¡£ç®¡ç 3.åé
ç»è®° 4.å½è¿ç»è®° 5.æ¡£æ¡ç»è®¡ + 课é¢/ä¼å/è´¢å¡å½æ¡£èå¨ |
| | | -- äºæï¼æ¡£æ¡éæ¯ãé¾æç½æ¬¾ï¼ä¸å¨æ¤èæ¬å
|
| | | -- ========================================= |
| | | |
| | | -- ----- 1. æ¡£æ¡å类表ï¼ä¹¦æ¶/åç±»æ ï¼åå±ï¼ ----- |
| | | DROP TABLE IF EXISTS `archive_category`; |
| | | CREATE TABLE `archive_category` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `parent_id` bigint NOT NULL DEFAULT '0' COMMENT 'ç¶åç±» IDï¼0=顶级', |
| | | `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'åç±»åç§°', |
| | | `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'åç±»ç¼ç ï¼å¯ä¸ï¼member/research/meeting/finance/document/partyï¼', |
| | | `sort` int NOT NULL DEFAULT '0' COMMENT 'æ¾ç¤ºæåº', |
| | | `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å类说æ', |
| | | `default_secret_level` tinyint NOT NULL DEFAULT '1' COMMENT '该åç±»ä¸æ¡£æ¡é»è®¤å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯', |
| | | `status` tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0-å¯ç¨ 1-åç¨', |
| | | `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_code` (`code`) USING BTREE, |
| | | KEY `idx_parent_id` (`parent_id`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='æ¡£æ¡-åç±»'; |
| | | |
| | | -- ----- 2. æ¡£æ¡ä¸»è¡¨ ----- |
| | | DROP TABLE IF EXISTS `archive_document`; |
| | | CREATE TABLE `archive_document` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æ¡£æ¡ç¼å· DA+yyyyMMdd+6使µæ°´', |
| | | `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æ¡£æ¡æ é¢', |
| | | `category_id` bigint NOT NULL COMMENT 'æ¡£æ¡åç±» ID', |
| | | `secret_level` tinyint NOT NULL DEFAULT '1' COMMENT 'å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯', |
| | | `carrier_type` tinyint NOT NULL DEFAULT '3' COMMENT 'è½½ä½ï¼1-çµå 2-å®ä½ 3-çµå+å®ä½', |
| | | `shelf_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å®ä½-书æ¶å·', |
| | | `layer_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å®ä½-å±å·', |
| | | `column_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å®ä½-åå·', |
| | | `box_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å®ä½-åå·/æ¡£æ¡çå·', |
| | | `store_place` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å®ä½åæ¾ä½ç½®æè¿°ï¼å¦ 3å·åºæ¿Aæ¶2å±ï¼', |
| | | `source_type` tinyint NOT NULL DEFAULT '1' COMMENT 'æ¥æºï¼1-æå·¥ 2-è¯¾é¢ 3-ä¼å 4-è´¢å¡', |
| | | `source_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ¥æºåå·ï¼ç«é¡¹ç¼å·/ä¼åç¼å·/æ¥éåå·ï¼', |
| | | `source_id` bigint DEFAULT NULL COMMENT 'æ¥æºåæ® ID', |
| | | `source_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ¥æºåæ®æ é¢ï¼åä½å¿«ç
§ï¼ä¾¿äºæ£ç´¢ï¼', |
| | | `archive_date` date DEFAULT NULL COMMENT '彿¡£æ¥æ', |
| | | `archivist_user_id` bigint DEFAULT NULL COMMENT '彿¡£äººç¨æ· ID', |
| | | `status` tinyint NOT NULL DEFAULT '10' COMMENT 'æ¡£æ¡ç¶æï¼10-å¨åº 20-ååºä¸', |
| | | `summary` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æè¦', |
| | | `tags` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å
³é®è¯ï¼è±æéå·åéï¼æ£ç´¢ç¨ï¼', |
| | | `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_no` (`no`) USING BTREE, |
| | | KEY `idx_category_id` (`category_id`) USING BTREE, |
| | | KEY `idx_secret_level` (`secret_level`) USING BTREE, |
| | | KEY `idx_status` (`status`) USING BTREE, |
| | | KEY `idx_source` (`source_type`,`source_id`) USING BTREE, |
| | | KEY `idx_archive_date` (`archive_date`) USING BTREE, |
| | | KEY `idx_title` (`title`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='æ¡£æ¡-æ¡£æ¡ä¸»è¡¨'; |
| | | |
| | | -- ----- 3. åé
å表ï¼åé
+ å½è¿åä¸ï¼ ----- |
| | | DROP TABLE IF EXISTS `archive_borrow`; |
| | | CREATE TABLE `archive_borrow` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'åé
åå· JY+yyyyMMdd+6使µæ°´', |
| | | `document_id` bigint NOT NULL COMMENT 'æ¡£æ¡ ID', |
| | | `document_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æ¡£æ¡ç¼å·ï¼å¿«ç
§ï¼', |
| | | `document_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æ¡£æ¡æ é¢ï¼å¿«ç
§ï¼', |
| | | `borrower_user_id` bigint DEFAULT NULL COMMENT 'åé
äººç¨æ· ID', |
| | | `borrower_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'åé
人å§å', |
| | | `borrower_dept` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'åé
人é¨é¨', |
| | | `borrower_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'åé
人èç³»çµè¯', |
| | | `borrow_date` date NOT NULL COMMENT 'åé
æ¥æ', |
| | | `borrow_purpose` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'åé
ç®ç', |
| | | `return_deadline` date NOT NULL COMMENT 'å½è¿æéï¼é¾æå®æ¶è®¡ç®åºåï¼', |
| | | `status` tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0-è稿 15-审æ¹ä¸ 20-ååºä¸ 30-å·²å½è¿ 35-已驳å', |
| | | `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'BPM æµç¨å®ä¾ ID', |
| | | `approve_time` datetime DEFAULT NULL COMMENT '审æ¹éè¿ï¼å®é
ååºï¼æ¶é´', |
| | | `return_time` datetime DEFAULT NULL COMMENT 'å®é
å½è¿æ¶é´', |
| | | `return_confirm_user_id` bigint DEFAULT NULL COMMENT 'å½è¿ç¡®è®¤äººç¨æ· ID', |
| | | `return_remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å½è¿å¤æ³¨', |
| | | `reject_reason` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '驳ååå ï¼BPM ååï¼', |
| | | `reject_time` datetime DEFAULT NULL COMMENT '驳忶é´', |
| | | `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_no` (`no`) USING BTREE, |
| | | KEY `idx_document_id` (`document_id`) USING BTREE, |
| | | KEY `idx_status` (`status`) USING BTREE, |
| | | KEY `idx_return_deadline` (`return_deadline`) USING BTREE, |
| | | KEY `idx_borrower_user_id` (`borrower_user_id`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='æ¡£æ¡-åé
å'; |
| | | |
| | | -- ----- 4. åå§åç±»ï¼6 æ¡ï¼è´¢å¡åç±»é»è®¤å¯çº§=ä¿å¯ï¼ ----- |
| | | DELETE FROM `archive_category` WHERE `code` IN ('member','research','meeting','finance','document','party'); |
| | | INSERT INTO `archive_category` (`id`,`parent_id`,`name`,`code`,`sort`,`description`,`default_secret_level`,`status`,`remark`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) |
| | | VALUES (1, 0, 'ä¼åæ¡£æ¡', 'member', 1, 'ä¼åå
¥ä¼ææãèµè´¨è¯æç', 2, 0, '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO `archive_category` (`id`,`parent_id`,`name`,`code`,`sort`,`description`,`default_secret_level`,`status`,`remark`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) |
| | | VALUES (2, 0, 'è¯¾é¢æ¡£æ¡', 'research', 2, '课é¢ç³æ¥ä¹¦ãç«é¡¹æ¹å¤ãç»é¡¹ææç', 2, 0, '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO `archive_category` (`id`,`parent_id`,`name`,`code`,`sort`,`description`,`default_secret_level`,`status`,`remark`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) |
| | | VALUES (3, 0, 'ä¼è®®æ¡£æ¡', 'meeting', 3, 'å¦ä¼æä»¶ãä¼è®®çºªè¦ç', 2, 0, '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO `archive_category` (`id`,`parent_id`,`name`,`code`,`sort`,`description`,`default_secret_level`,`status`,`remark`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) |
| | | VALUES (4, 0, 'è´¢å¡æ¡£æ¡', 'finance', 4, 'æ¥éåè¯ãå票çè´¢å¡åæ®', 3, 0, 'è´¢å¡æ¡£æ¡é»è®¤å¯çº§ä¸ºãä¿å¯ãï¼é archive:document:sensitive æéæ¥ç', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO `archive_category` (`id`,`parent_id`,`name`,`code`,`sort`,`description`,`default_secret_level`,`status`,`remark`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) |
| | | VALUES (5, 0, 'æä¹¦æ¡£æ¡', 'document', 5, 'è°ç æ¥åã妿¯è®ºæãåååè®®ç', 2, 0, '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO `archive_category` (`id`,`parent_id`,`name`,`code`,`sort`,`description`,`default_secret_level`,`status`,`remark`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) |
| | | VALUES (6, 0, 'å
建档æ¡', 'party', 6, 'å
建活å¨ãç»ç»å»ºè®¾çææ', 2, 0, '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ----- 5. åå
¸æ°æ® ----- |
| | | |
| | | -- archive_category_statusï¼æ¡£æ¡åç±»ç¶æï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'archive_category_status'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (82000, 'æ¡£æ¡åç±»ç¶æ', 'archive_category_status', 0, 'æ¡£æ¡åç±»å¯ç¨/åç¨', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'archive_category_status'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200001, 1, 'å¯ç¨', '0', 'archive_category_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200002, 2, 'åç¨', '1', 'archive_category_status', 0, 'info', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- archive_document_statusï¼æ¡£æ¡ç¶æï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'archive_document_status'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (82001, 'æ¡£æ¡ç¶æ', 'archive_document_status', 0, 'æ¡£æ¡å¨åº/ååºä¸', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'archive_document_status'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200101, 1, 'å¨åº', '10', 'archive_document_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200102, 2, 'ååºä¸', '20', 'archive_document_status', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- archive_secret_levelï¼æ¡£æ¡å¯çº§ï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'archive_secret_level'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (82002, 'æ¡£æ¡å¯çº§', 'archive_secret_level', 0, 'å
¬å¼/å
é¨/ä¿å¯ï¼ä¿å¯çº§é archive:document:sensitive æé', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'archive_secret_level'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200201, 1, 'å
¬å¼', '1', 'archive_secret_level', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200202, 2, 'å
é¨', '2', 'archive_secret_level', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200203, 3, 'ä¿å¯', '3', 'archive_secret_level', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- archive_carrier_typeï¼æ¡£æ¡è½½ä½ç±»åï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'archive_carrier_type'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (82003, 'æ¡£æ¡è½½ä½', 'archive_carrier_type', 0, 'çµå/å®ä½/çµå+å®ä½', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'archive_carrier_type'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200301, 1, 'çµå', '1', 'archive_carrier_type', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200302, 2, 'å®ä½', '2', 'archive_carrier_type', 0, 'info', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200303, 3, 'çµå+å®ä½', '3', 'archive_carrier_type', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- archive_source_typeï¼æ¡£æ¡æ¥æºç±»åï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'archive_source_type'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (82004, 'æ¡£æ¡æ¥æº', 'archive_source_type', 0, 'æå·¥å½å
¥/课é¢å½æ¡£/ä¼å彿¡£/è´¢å¡å½æ¡£', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'archive_source_type'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200401, 1, 'æå·¥å½å
¥', '1', 'archive_source_type', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200402, 2, '课é¢å½æ¡£', '2', 'archive_source_type', 0, 'primary', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200403, 3, 'ä¼å彿¡£', '3', 'archive_source_type', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200404, 4, 'è´¢å¡å½æ¡£', '4', 'archive_source_type', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- archive_borrow_statusï¼åé
åç¶æï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'archive_borrow_status'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (82005, 'æ¡£æ¡åé
ç¶æ', 'archive_borrow_status', 0, 'åé
å审æ¹ä¸å½è¿ç¶æ', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'archive_borrow_status'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200501, 1, 'è稿', '0', 'archive_borrow_status', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200502, 2, '审æ¹ä¸', '15', 'archive_borrow_status', 0, 'processing', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200503, 3, 'ååºä¸', '20', 'archive_borrow_status', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200504, 4, 'å·²å½è¿', '30', 'archive_borrow_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8200505, 5, '已驳å', '35', 'archive_borrow_status', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ----- 6. BPM åç±»ï¼æ¡£æ¡åé
审æ¹ï¼ä¸¤çº§å®¡æ¹ï¼ ----- |
| | | -- 注æï¼éå
é¨ç½² docs/sql/archive_borrow_approve.bpmnï¼è§è¯¥æä»¶å¤´é¨çé¨ç½²é¡ºåºè¯´æï¼ |
| | | DELETE FROM bpm_category WHERE `code` = 'archive_borrow_approve'; |
| | | INSERT INTO bpm_category (id, name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8003, 'æ¡£æ¡åé
审æ¹', 'archive_borrow_approve', 'æ¡£æ¡åé
两级审æ¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸âå管é¢å¯¼å®¡æ¹ï¼', 0, 3, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ----- 7. èå ----- |
| | | -- 注æï¼èå ID ä¸è¦ä¸ç°æèåå²çªï¼æ¡£æ¡ç®¡çå ç¨ 1075600~1075699ï¼ç°æ MAX=1075553ï¼ |
| | | DELETE FROM system_menu WHERE id BETWEEN 1075600 AND 1075699; |
| | | -- 顶级ç®å½ï¼type=1ï¼ï¼parent_id=0ï¼å¾æ ep:files |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075600, 'æ¡£æ¡ç®¡ç', '', 1, 82, 0, '/archive', 'ep:files', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æ¡£æ¡åç±»ï¼èåï¼type=2ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075601, 'æ¡£æ¡åç±»', '', 2, 1, 1075600, 'category', 'ep:collection', 'archive/category/index', 'ArchiveCategory', 0, b'1', b'1', b'0', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æ¡£æ¡ç®¡çï¼èåï¼type=2ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075602, 'æ¡£æ¡ç®¡ç', '', 2, 2, 1075600, 'document', 'ep:folder-opened', 'archive/document/index', 'ArchiveDocument', 0, b'1', b'1', b'0', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- åé
ç»è®°ï¼èåï¼type=2ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075603, 'åé
ç»è®°', '', 2, 3, 1075600, 'borrow', 'ep:document-copy', 'archive/borrow/index', 'ArchiveBorrow', 0, b'1', b'1', b'0', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æ¡£æ¡ç»è®¡ï¼èåï¼type=2ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075604, 'æ¡£æ¡ç»è®¡', '', 2, 4, 1075600, 'stat', 'ep:data-analysis', 'archive/stat/index', 'ArchiveStat', 0, b'1', b'1', b'0', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æéï¼type=3ï¼ââ æ¡£æ¡åç±» |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075610, 'æ¡£æ¡åç±»æ¥è¯¢', 'archive:category:query', 3, 1, 1075601, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075611, 'æ¡£æ¡åç±»å建', 'archive:category:create', 3, 2, 1075601, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075612, 'æ¡£æ¡åç±»æ´æ°', 'archive:category:update', 3, 3, 1075601, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075613, 'æ¡£æ¡åç±»å é¤', 'archive:category:delete', 3, 4, 1075601, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æé ââ æ¡£æ¡ç®¡ç |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075620, 'æ¡£æ¡æ¥è¯¢', 'archive:document:query', 3, 1, 1075602, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075621, 'æ¡£æ¡å建', 'archive:document:create', 3, 2, 1075602, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075622, 'æ¡£æ¡æ´æ°', 'archive:document:update', 3, 3, 1075602, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075623, 'æ¡£æ¡å é¤', 'archive:document:delete', 3, 4, 1075602, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075624, 'æ¡£æ¡å¯¼åº', 'archive:document:export', 3, 5, 1075602, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075625, 'ä¿å¯æ¡£æ¡æ¥ç', 'archive:document:sensitive', 3, 6, 1075602, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æé ââ åé
ç»è®° |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075630, 'åé
æ¥è¯¢', 'archive:borrow:query', 3, 1, 1075603, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075631, 'åé
ç»è®°', 'archive:borrow:create', 3, 2, 1075603, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075632, 'åé
ä¿®æ¹', 'archive:borrow:update', 3, 3, 1075603, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075633, 'åé
å é¤', 'archive:borrow:delete', 3, 4, 1075603, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075634, 'åé
æäº¤å®¡æ¹', 'archive:borrow:submit', 3, 5, 1075603, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075635, 'å½è¿ç»è®°', 'archive:borrow:return', 3, 6, 1075603, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æé ââ æ¡£æ¡ç»è®¡ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075640, 'æ¡£æ¡ç»è®¡æ¥è¯¢', 'archive:stat:query', 3, 1, 1075604, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ----- 8. 䏿¹æ¨¡å彿¡£æé®æéï¼é
å彿¡£èå¨ï¼ ----- |
| | | -- 课é¢ç³æ¥ï¼ç¶èå 1075512ï¼ãä¼åå表ï¼ç¶èå 1075492ï¼ï¼è´¢å¡å½æ¡£å¤ç¨æ¢æ finance:reimbursement:archive(1075424) |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075536, '课é¢ç³æ¥å½æ¡£', 'research:application:archive', 3, 7, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075504, 'ä¼å彿¡£', 'ums:member:archive', 3, 4, 1075492, '1', NOW(), '1', NOW(), b'0'); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===================================================== |
| | | -- æ¡£æ¡ç®¡ç模å - æ¥æºæ¨¡åå¢éèæ¬ï¼è·¨æ¨¡åæ¹è¡¨ï¼ |
| | | -- |
| | | -- èæ¯ï¼æ¡£æ¡æ¨¡åæ¯æã课é¢ç³æ¥ä¹¦ / ä¼å / è´¢å¡æ¥éåãææ¥æºåæ®æå¨å½æ¡£ã |
| | | -- ä¸å¼ æ¥æºè¡¨åå ä¸å `archive_document_id`ï¼æå archive_document.idï¼ï¼ |
| | | -- â ä½ä¸ºã已彿¡£ãç硬æ è®°ï¼åè¡¨é¡µæ®æ¤æ¾ç¤ºå·²å½æ¡£å¹¶è·³è½¬æ¡£æ¡ï¼ |
| | | -- â¡ å½æ¡£é夿 ¡éªçå
åºï¼archive_document 侧妿 source_type+source_id å¯ä¸æ§æ ¡éªï¼ã |
| | | -- åå¯ç©ºï¼ä¸å½±åæ¢æä¸å¡æ°æ®ã |
| | | -- |
| | | -- æ§è¡åºï¼èæ¬ç¨ DATABASE() å¤å®ï¼ä¸åºåæ å
³ï¼æ
å¯å¯¹ä»»æç®æ åºæ§è¡ã |
| | | -- 2026-09-29 å·²å¨ application-local.yaml æåç mom-jssm æ§è¡å¹¶æ ¸å¯¹éè¿ï¼ |
| | | -- å
¶ä½ç¯å¢ï¼dev/test æå ruoyi-vue-proï¼yzfx/wtxc/zsjc/chdl/kyzn æååèª mom-* åºï¼æéå¦è·ã |
| | | -- æ¬èæ¬å¹çï¼å¯è¿ç»é夿§è¡ã |
| | | -- åç½®ï¼éå
æ§è¡ archive_module.sql 建 `archive_document` 表ã |
| | | -- 注æï¼æ¬èæ¬ä¸å« tenant_idï¼é¡¹ç®ä¸ä½¿ç¨å¤ç§æ·æ¨¡å¼ï¼ï¼ALTER TABLE ADD COLUMN 䏿¯æ |
| | | -- IF NOT EXISTSï¼ç»ä¸ç¨ information_schema å卿§å®å«ã |
| | | -- ===================================================== |
| | | |
| | | -- ----- 1. research_application æ°å¢ archive_document_id ----- |
| | | SET @c = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'research_application' AND column_name = 'archive_document_id'); |
| | | SET @sql = IF(@c = 0, |
| | | 'ALTER TABLE research_application ADD COLUMN archive_document_id bigint DEFAULT NULL COMMENT ''彿¡£çæçæ¡£æ¡ IDï¼archive_document.idï¼å½æ¡£èå¨ååï¼'' AFTER notice_id', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; |
| | | |
| | | -- ----- 2. ums_member æ°å¢ archive_document_id ----- |
| | | SET @c = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'ums_member' AND column_name = 'archive_document_id'); |
| | | SET @sql = IF(@c = 0, |
| | | 'ALTER TABLE ums_member ADD COLUMN archive_document_id bigint DEFAULT NULL COMMENT ''彿¡£çæçæ¡£æ¡ IDï¼archive_document.idï¼å½æ¡£èå¨ååï¼'' AFTER status', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; |
| | | |
| | | -- ----- 3. finance_reimbursement æ°å¢ archive_document_id ----- |
| | | SET @c = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'finance_reimbursement' AND column_name = 'archive_document_id'); |
| | | SET @sql = IF(@c = 0, |
| | | 'ALTER TABLE finance_reimbursement ADD COLUMN archive_document_id bigint DEFAULT NULL COMMENT ''彿¡£çæçæ¡£æ¡ IDï¼archive_document.idï¼å½æ¡£èå¨ååï¼'' AFTER archive_time', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.omg.org/spec/BPMN/20100524/MODEL"> |
| | | <process id="finance_reimbursement_approve" name="æ¥é审æ¹" isExecutable="true"> |
| | | <startEvent id="StartEvent" name="å¼å§"></startEvent> |
| | | <userTask id="StartUserNode" name="å起人"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[36]]></flowable:candidateStrategy> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æäº¤" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="false" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="false" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="false" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="false" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="false" id="6"></flowable:buttonsSetting> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[2]]></flowable:assignStartUserHandlerType> |
| | | </extensionElements> |
| | | </userTask> |
| | | <userTask id="Activity_finance_review" name="è´¢å¡å®¡æ ¸"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[10]]></flowable:candidateStrategy> |
| | | <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éè¿" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="true" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="true" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="true" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="true" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="true" id="6"></flowable:buttonsSetting> |
| | | <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod> |
| | | <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType> |
| | | <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType> |
| | | <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable> |
| | | <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire> |
| | | <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType> |
| | | </extensionElements> |
| | | <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}"> |
| | | <loopCardinality>1</loopCardinality> |
| | | <completionCondition>${ nrOfCompletedInstances >= nrOfInstances }</completionCondition> |
| | | </multiInstanceLoopCharacteristics> |
| | | </userTask> |
| | | <userTask id="Activity_finance_approve" name="è´¢å¡ä¸»ç®¡å®¡æ¹"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[10]]></flowable:candidateStrategy> |
| | | <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éè¿" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="true" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="true" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="true" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="true" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="true" id="6"></flowable:buttonsSetting> |
| | | <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod> |
| | | <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType> |
| | | <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType> |
| | | <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable> |
| | | <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire> |
| | | <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType> |
| | | </extensionElements> |
| | | <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}"> |
| | | <loopCardinality>1</loopCardinality> |
| | | <completionCondition>${ nrOfCompletedInstances >= nrOfInstances }</completionCondition> |
| | | </multiInstanceLoopCharacteristics> |
| | | </userTask> |
| | | <endEvent id="EndEvent" name="ç»æ"></endEvent> |
| | | <sequenceFlow id="sequenceFlow-1" sourceRef="StartEvent" targetRef="StartUserNode"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-2" sourceRef="StartUserNode" targetRef="Activity_finance_review"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-3" sourceRef="Activity_finance_review" targetRef="Activity_finance_approve"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-4" sourceRef="Activity_finance_approve" targetRef="EndEvent"></sequenceFlow> |
| | | </process> |
| | | <bpmndi:BPMNDiagram id="BPMNDiagram_finance_reimbursement_approve"> |
| | | <bpmndi:BPMNPlane bpmnElement="finance_reimbursement_approve" id="BPMNPlane_finance_reimbursement_approve"> |
| | | <bpmndi:BPMNShape bpmnElement="StartEvent" id="BPMNShape_StartEvent"> |
| | | <omgdc:Bounds height="30.0" width="30.0" x="0.0" y="15.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="StartUserNode" id="BPMNShape_StartUserNode"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="80.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="Activity_finance_review" id="BPMNShape_Activity_finance_review"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="230.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="Activity_finance_approve" id="BPMNShape_Activity_finance_approve"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="380.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="EndEvent" id="BPMNShape_EndEvent"> |
| | | <omgdc:Bounds height="30.0" width="30.0" x="530.0" y="15.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-1" id="BPMNEdge_sequenceFlow-1"> |
| | | <omgdi:waypoint x="30.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="80.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-2" id="BPMNEdge_sequenceFlow-2"> |
| | | <omgdi:waypoint x="180.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="230.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-3" id="BPMNEdge_sequenceFlow-3"> |
| | | <omgdi:waypoint x="330.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="380.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-4" id="BPMNEdge_sequenceFlow-4"> |
| | | <omgdi:waypoint x="480.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="530.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | </bpmndi:BPMNPlane> |
| | | </bpmndi:BPMNDiagram> |
| | | </definitions> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ===================================================== |
| | | -- 课é¢ç»è´¹æ¨ä»å¯¹æ¥è´¢å¡æ¥é - å¼ååºå¢éèæ¬ |
| | | -- |
| | | -- èæ¯ï¼æ¯æ¡ `research_fund_record` æ¨æ¬¾è®°å½æ¹ä¸ºèªå¨çæå¹¶æäº¤ä¸å¼ è´¢å¡æ¥éå |
| | | -- ï¼finance_reimbursementï¼1:1ãéé¢ä¸è´ï¼ï¼è´¢å¡å®¡æ¹ç»æç± |
| | | -- ResearchFundStatusListener å忬å°è´¦ç¶æã |
| | | -- |
| | | -- æ§è¡åºï¼èæ¬ç¨ DATABASE() å¤å®ï¼ä¸åºåæ å
³ï¼æ
å¯å¯¹ä»»æç®æ åºæ§è¡ã |
| | | -- 2026-09-29 å·²å¨ application-local.yaml æåç mom-jssm æ§è¡å¹¶æ ¸å¯¹éè¿ï¼ |
| | | -- å
¶ä½ç¯å¢ï¼dev/test æå ruoyi-vue-proï¼yzfx/wtxc/zsjc/chdl/kyzn æååèª mom-* åºï¼æéå¦è·ã |
| | | -- æ¬èæ¬å¹çï¼å¯é夿§è¡ã |
| | | -- å
容ï¼â research_fund_record æ°å¢ 4 å + status æ³¨éæ´æ° + ç´¢å¼ |
| | | -- â¡ system_dict_data ç research_fund_status è¡¥ãæ¥é审æ¹ä¸/已驳åã |
| | | -- 注æï¼æ¬èæ¬ä¸å« tenant_idï¼é¡¹ç®ä¸ä½¿ç¨å¤ç§æ·æ¨¡å¼ï¼ã |
| | | -- ===================================================== |
| | | |
| | | -- ----- 1. research_fund_record æ°å¢ 4 åï¼ALTER TABLE ADD COLUMN 䏿¯æ IF NOT EXISTSï¼ç¨ information_schema å®å«ï¼ ----- |
| | | |
| | | SET @c = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND column_name = 'reimbursement_id'); |
| | | SET @sql = IF(@c = 0, |
| | | 'ALTER TABLE research_fund_record ADD COLUMN reimbursement_id bigint DEFAULT NULL COMMENT ''å
³èè´¢å¡æ¥éå IDï¼finance_reimbursement.idï¼'' AFTER status', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; |
| | | |
| | | SET @c = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND column_name = 'reimbursement_no'); |
| | | SET @sql = IF(@c = 0, |
| | | 'ALTER TABLE research_fund_record ADD COLUMN reimbursement_no varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '''' COMMENT ''å
³èè´¢å¡æ¥éåå·'' AFTER reimbursement_id', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; |
| | | |
| | | SET @c = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND column_name = 'reject_reason'); |
| | | SET @sql = IF(@c = 0, |
| | | 'ALTER TABLE research_fund_record ADD COLUMN reject_reason varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '''' COMMENT ''æ¥é驳ååå ï¼BPM ååï¼'' AFTER reimbursement_no', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; |
| | | |
| | | SET @c = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND column_name = 'reject_time'); |
| | | SET @sql = IF(@c = 0, |
| | | 'ALTER TABLE research_fund_record ADD COLUMN reject_time datetime DEFAULT NULL COMMENT ''æ¥é驳忶é´'' AFTER reject_reason', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; |
| | | |
| | | -- status åæ³¨éæ´æ°ä¸ºã0-å¾
æ¨ä» 15-æ¥é审æ¹ä¸ 20-å·²æ¨ä» 30-已驳åã |
| | | ALTER TABLE research_fund_record |
| | | MODIFY COLUMN status tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0-å¾
æ¨ä» 15-æ¥é审æ¹ä¸ 20-å·²æ¨ä» 30-已驳å'; |
| | | |
| | | -- ææ¥éåå·åæ¥å°è´¦çç´¢å¼ |
| | | SET @c = (SELECT COUNT(*) FROM information_schema.statistics |
| | | WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND index_name = 'idx_reimbursement_id'); |
| | | SET @sql = IF(@c = 0, |
| | | 'ALTER TABLE research_fund_record ADD INDEX idx_reimbursement_id (reimbursement_id) USING BTREE', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; |
| | | |
| | | -- ----- 2. åå
¸ research_fund_status è¡¥ 2 æ¡ + æåºè°æ´ + ç±»å夿³¨ ----- |
| | | |
| | | UPDATE system_dict_type SET remark = '课é¢ç»è´¹å¾
æ¨ä»/æ¥é审æ¹ä¸/å·²æ¨ä»/已驳å', update_time = NOW() |
| | | WHERE `type` = 'research_fund_status'; |
| | | |
| | | -- å
å åæï¼ä¿è¯å¹çï¼å research_module.sql çåæ³ï¼ |
| | | DELETE FROM system_dict_data WHERE dict_type = 'research_fund_status'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100401, 1, 'å¾
æ¨ä»', '0', 'research_fund_status', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100403, 2, 'æ¥é审æ¹ä¸', '15', 'research_fund_status', 0, 'processing', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100402, 3, 'å·²æ¨ä»', '20', 'research_fund_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100404, 4, '已驳å', '30', 'research_fund_status', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ========================================= |
| | | -- 课é¢ç®¡ç模åï¼yudao-module-researchï¼ä¸æ |
| | | -- 建表 + åå
¸æ°æ® + BPM åç±» + èå |
| | | -- è¦çéæ±ï¼1.è¯¾é¢æååå¸ 2.课é¢å¨çº¿ç³æ¥ 3.课é¢è¯å®¡æµç¨ 4.ç«é¡¹å®¡æ¹ 5.ç»è´¹æ¨ä» |
| | | -- äºæï¼ç»é¡¹éªæ¶/ç»é¡¹è¯ä¹¦ãææå½æ¡£ç¥è¯åºï¼ä¸å¨æ¤èæ¬å
|
| | | -- ========================================= |
| | | |
| | | -- ----- 1. è¯¾é¢æå表 ----- |
| | | DROP TABLE IF EXISTS `research_guideline`; |
| | | CREATE TABLE `research_guideline` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æåç¼å·', |
| | | `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æååç§°', |
| | | `category` tinyint NOT NULL COMMENT '课é¢ç±»å«ï¼1-éç¹è¯¾é¢ 2-ä¸è¬è¯¾é¢', |
| | | `apply_start_time` datetime DEFAULT NULL COMMENT 'ç³æ¥å¼å§æ¶é´', |
| | | `apply_end_time` datetime DEFAULT NULL COMMENT 'ç³æ¥æªæ¢æ¶é´', |
| | | `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'æåæ£æ', |
| | | `publish_status` tinyint NOT NULL DEFAULT '0' COMMENT 'åå¸ç¶æï¼0-è稿 20-å·²åå¸ 30-å·²æªæ¢', |
| | | `publish_time` datetime DEFAULT NULL COMMENT 'å叿¶é´', |
| | | `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_no` (`no`) USING BTREE, |
| | | KEY `idx_category` (`category`) USING BTREE, |
| | | KEY `idx_publish_status` (`publish_status`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课é¢-æå'; |
| | | |
| | | -- ----- 2. 课é¢ç³æ¥ä¹¦è¡¨ ----- |
| | | DROP TABLE IF EXISTS `research_application`; |
| | | CREATE TABLE `research_application` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ç³æ¥ç¼å·', |
| | | `guideline_id` bigint NOT NULL COMMENT 'æå±è¯¾é¢æå ID', |
| | | `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '课é¢åç§°', |
| | | `category` tinyint NOT NULL COMMENT '课é¢ç±»å«ï¼1-éç¹è¯¾é¢ 2-ä¸è¬è¯¾é¢ï¼åä½èªæåï¼', |
| | | `member_id` bigint DEFAULT NULL COMMENT 'ç³æ¥ä¼å IDï¼å
³è ums_memberï¼', |
| | | `applicant_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ç³æ¥äººå§å/åä½åç§°', |
| | | `applicant_user_id` bigint DEFAULT NULL COMMENT 'ç³æ¥ç»å½ç¨æ· ID', |
| | | `work_unit` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å·¥ä½åä½', |
| | | `job_title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'èç§°', |
| | | `contact_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'èç³»çµè¯', |
| | | `contact_email` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'èç³»é®ç®±', |
| | | `team_members` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '课é¢ç»æåï¼æ¯è¡ä¸æ¡ï¼å§å|åä½|èç§°ï¼', |
| | | `budget_amount` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT 'ç³è¯·ç»è´¹ï¼å
ï¼', |
| | | `plan_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'ç³æ¥ä¹¦æ£æï¼ç ç©¶èæ¯/ç®æ /æ¹æ¡/颿ææï¼', |
| | | `status` tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0-è稿 15-审æ¹ä¸ 20-å·²ç«é¡¹ 35-已驳å', |
| | | `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'BPM æµç¨å®ä¾ ID', |
| | | `review_avg_score` decimal(6,2) DEFAULT NULL COMMENT 'ä¸å®¶è¯å®¡å æååï¼åç«¯æ±æ»ï¼', |
| | | `review_pass` tinyint DEFAULT NULL COMMENT 'è¯å®¡ç»è®ºï¼0-æªéè¿ 1-æ¨èç«é¡¹ï¼åç«¯æ±æ»ï¼', |
| | | `research_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ç«é¡¹ç¼å·ï¼å®¡æ¹éè¿åçæï¼', |
| | | `approve_time` datetime DEFAULT NULL COMMENT 'ç«é¡¹æ¶é´', |
| | | `notice_id` bigint DEFAULT NULL COMMENT 'å·²åå¸çç«é¡¹éç¥å
Œ ID', |
| | | `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_no` (`no`) USING BTREE, |
| | | KEY `idx_guideline_id` (`guideline_id`) USING BTREE, |
| | | KEY `idx_member_id` (`member_id`) USING BTREE, |
| | | KEY `idx_status` (`status`) USING BTREE, |
| | | KEY `idx_applicant_user_id` (`applicant_user_id`) USING BTREE, |
| | | KEY `idx_research_no` (`research_no`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课é¢-ç³æ¥ä¹¦'; |
| | | |
| | | -- ----- 3. ä¸å®¶è¯å®¡æç»è¡¨ï¼ä¸ä¸»åæå¤è¡ï¼æ¯è¡ä¸ä½ä¸å®¶ï¼ ----- |
| | | DROP TABLE IF EXISTS `research_topic_review`; |
| | | CREATE TABLE `research_topic_review` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `application_id` bigint NOT NULL COMMENT '课é¢ç³æ¥ä¹¦ ID', |
| | | `evaluator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ä¸å®¶å§å', |
| | | `evaluator_unit` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ä¸å®¶æå¨åä½', |
| | | `evaluator_title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ä¸å®¶èç§°', |
| | | `topic_score` decimal(6,2) NOT NULL DEFAULT '0.00' COMMENT 'éé¢ä»·å¼ä¸æä¹å¾åï¼æé0.3ï¼', |
| | | `plan_score` decimal(6,2) NOT NULL DEFAULT '0.00' COMMENT 'ç ç©¶æ¹æ¡å¯è¡æ§å¾åï¼æé0.3ï¼', |
| | | `team_score` decimal(6,2) NOT NULL DEFAULT '0.00' COMMENT 'å¢éä¸ç ç©¶åºç¡å¾åï¼æé0.2ï¼', |
| | | `result_score` decimal(6,2) NOT NULL DEFAULT '0.00' COMMENT '颿ææä¸æçå¾åï¼æé0.2ï¼', |
| | | `composite_score` decimal(6,2) DEFAULT NULL COMMENT 'å æå计å¾åï¼å端计ç®ï¼', |
| | | `ranking` int DEFAULT NULL COMMENT 'æ¬ç³æ¥åå
è¯åæåï¼å端计ç®ï¼', |
| | | `conclusion` tinyint DEFAULT NULL COMMENT 'è¯å®¡ç»è®ºï¼1-æ¨èç«é¡¹ 2-䏿¨èç«é¡¹', |
| | | `opinion` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'è¯å®¡æè§', |
| | | `review_time` datetime DEFAULT NULL COMMENT 'è¯å®¡æ¶é´', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_application_id` (`application_id`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课é¢-ä¸å®¶è¯å®¡æç»'; |
| | | |
| | | -- ----- 4. ç»è´¹æ¨ä»è®°å½è¡¨ ----- |
| | | DROP TABLE IF EXISTS `research_fund_record`; |
| | | CREATE TABLE `research_fund_record` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `application_id` bigint NOT NULL COMMENT '课é¢ç³æ¥ä¹¦ ID', |
| | | `batch_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'æ¨ä»æ¹æ¬¡ï¼å¦ï¼ç¬¬ä¸æï¼', |
| | | `amount` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT 'æ¨ä»éé¢ï¼å
ï¼', |
| | | `pay_date` date DEFAULT NULL COMMENT 'æ¨ä»æ¥æ', |
| | | `payee` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ¶æ¬¾åä½/è´¦æ·å', |
| | | `status` tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0-å¾
æ¨ä» 15-æ¥é审æ¹ä¸ 20-å·²æ¨ä» 30-已驳å', |
| | | `reimbursement_id` bigint DEFAULT NULL COMMENT 'å
³èè´¢å¡æ¥éå IDï¼finance_reimbursement.idï¼', |
| | | `reimbursement_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å
³èè´¢å¡æ¥éåå·', |
| | | `reject_reason` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ¥é驳ååå ï¼BPM ååï¼', |
| | | `reject_time` datetime DEFAULT NULL COMMENT 'æ¥é驳忶é´', |
| | | `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_application_id` (`application_id`) USING BTREE, |
| | | KEY `idx_reimbursement_id` (`reimbursement_id`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课é¢-ç»è´¹æ¨ä»è®°å½'; |
| | | |
| | | -- ----- 5. åå
¸æ°æ® ----- |
| | | |
| | | -- research_guideline_categoryï¼è¯¾é¢æåç±»å«ï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'research_guideline_category'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (81000, 'è¯¾é¢æåç±»å«', 'research_guideline_category', 0, 'éç¹è¯¾é¢/ä¸è¬è¯¾é¢åç±»æ æ³¨', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'research_guideline_category'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100001, 1, 'éç¹è¯¾é¢', '1', 'research_guideline_category', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100002, 2, 'ä¸è¬è¯¾é¢', '2', 'research_guideline_category', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- research_guideline_statusï¼è¯¾é¢æååå¸ç¶æï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'research_guideline_status'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (81001, 'è¯¾é¢æåç¶æ', 'research_guideline_status', 0, 'è¯¾é¢æååå¸ç¶æ', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'research_guideline_status'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100101, 1, 'è稿', '0', 'research_guideline_status', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100102, 2, 'å·²åå¸', '20', 'research_guideline_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100103, 3, 'å·²æªæ¢', '30', 'research_guideline_status', 0, 'info', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- research_application_statusï¼è¯¾é¢ç³æ¥ä¹¦ç¶æï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'research_application_status'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (81002, '课é¢ç³æ¥ç¶æ', 'research_application_status', 0, '课é¢ç³æ¥ä¹¦å®¡æ¹ç¶æ', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'research_application_status'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100201, 1, 'è稿', '0', 'research_application_status', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100202, 2, '审æ¹ä¸', '15', 'research_application_status', 0, 'processing', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100203, 3, 'å·²ç«é¡¹', '20', 'research_application_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100204, 4, '已驳å', '35', 'research_application_status', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- research_review_conclusionï¼ä¸å®¶è¯å®¡ç»è®ºï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'research_review_conclusion'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (81003, 'ä¸å®¶è¯å®¡ç»è®º', 'research_review_conclusion', 0, 'ä¸å®¶è¯å®¡æ¨èç«é¡¹/䏿¨èç«é¡¹', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'research_review_conclusion'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100301, 1, 'æ¨èç«é¡¹', '1', 'research_review_conclusion', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100302, 2, '䏿¨èç«é¡¹', '2', 'research_review_conclusion', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- research_fund_statusï¼ç»è´¹æ¨ä»ç¶æï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'research_fund_status'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (81004, 'ç»è´¹æ¨ä»ç¶æ', 'research_fund_status', 0, '课é¢ç»è´¹å¾
æ¨ä»/æ¥é审æ¹ä¸/å·²æ¨ä»/已驳å', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'research_fund_status'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100401, 1, 'å¾
æ¨ä»', '0', 'research_fund_status', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100403, 2, 'æ¥é审æ¹ä¸', '15', 'research_fund_status', 0, 'processing', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100402, 3, 'å·²æ¨ä»', '20', 'research_fund_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8100404, 4, '已驳å', '30', 'research_fund_status', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ----- 6. BPM åç±» ----- |
| | | DELETE FROM bpm_category WHERE `code` = 'research_topic_approve'; |
| | | INSERT INTO bpm_category (id, name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8002, '课é¢ç«é¡¹å®¡æ¹', 'research_topic_approve', '课é¢ç³æ¥ä¸çº§å®¡æ¹ï¼ç§ä¹¦å¤å½¢å¼å®¡æ¥âä¸å®¶è¯å®¡âå¦ä¼ç«é¡¹å®¡æ¹ï¼', 0, 2, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ----- 7. èå ----- |
| | | -- 注æï¼èå ID ä¸è¦ä¸ç°æèåå²çªï¼è¯¾é¢ç®¡çå ç¨ 1075510~1075553ï¼ |
| | | -- 顶级ç®å½ï¼type=1ï¼ï¼parent_id=0ï¼å¾æ ep:notebook |
| | | DELETE FROM system_menu WHERE id BETWEEN 1075510 AND 1075559; |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075510, '课é¢ç®¡ç', '', 1, 81, 0, '/research', 'ep:notebook', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- è¯¾é¢æåï¼èåï¼type=2ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075511, 'è¯¾é¢æå', '', 2, 1, 1075510, 'guideline', 'ep:document', 'research/guideline/index', 'ResearchGuideline', 0, b'1', b'1', b'0', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 课é¢ç³æ¥ï¼èåï¼type=2ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075512, '课é¢ç³æ¥', '', 2, 2, 1075510, 'application', 'ep:edit-pen', 'research/application/index', 'ResearchApplication', 0, b'1', b'1', b'0', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æéï¼type=3ï¼ââ è¯¾é¢æå |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075520, 'è¯¾é¢æåæ¥è¯¢', 'research:guideline:query', 3, 1, 1075511, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075521, 'è¯¾é¢æåå建', 'research:guideline:create', 3, 2, 1075511, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075522, 'è¯¾é¢æåæ´æ°', 'research:guideline:update', 3, 3, 1075511, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075523, 'è¯¾é¢æåå é¤', 'research:guideline:delete', 3, 4, 1075511, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075524, 'è¯¾é¢æååå¸/æªæ¢', 'research:guideline:publish', 3, 5, 1075511, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æé ââ 课é¢ç³æ¥ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075530, '课é¢ç³æ¥æ¥è¯¢', 'research:application:query', 3, 1, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075531, '课é¢ç³æ¥å建', 'research:application:create', 3, 2, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075532, '课é¢ç³æ¥æ´æ°', 'research:application:update', 3, 3, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075533, '课é¢ç³æ¥å é¤', 'research:application:delete', 3, 4, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075534, '课é¢ç³æ¥æäº¤å®¡æ¹', 'research:application:submit', 3, 5, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075535, 'åå¸ç«é¡¹éç¥', 'research:application:notice', 3, 6, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æé ââ ä¸å®¶è¯å®¡æç» |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075540, 'ä¸å®¶è¯å®¡æ¥è¯¢', 'research:review:query', 3, 7, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075541, 'ä¸å®¶è¯å®¡å½å
¥', 'research:review:create', 3, 8, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075542, 'ä¸å®¶è¯å®¡ä¿®æ¹', 'research:review:update', 3, 9, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075543, 'ä¸å®¶è¯å®¡å é¤', 'research:review:delete', 3, 10, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æé ââ ç»è´¹æ¨ä» |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075550, 'ç»è´¹æ¨ä»æ¥è¯¢', 'research:fund:query', 3, 11, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075551, 'ç»è´¹æ¨ä»ç»è®°', 'research:fund:create', 3, 12, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075552, 'ç»è´¹æ¨ä»ä¿®æ¹', 'research:fund:update', 3, 13, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075553, 'ç»è´¹æ¨ä»å é¤', 'research:fund:delete', 3, 14, 1075512, '1', NOW(), '1', NOW(), b'0'); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.omg.org/spec/BPMN/20100524/MODEL"> |
| | | <process id="research_topic_approve" name="课é¢ç«é¡¹å®¡æ¹" isExecutable="true"> |
| | | <startEvent id="StartEvent" name="å¼å§"></startEvent> |
| | | <userTask id="StartUserNode" name="å起人"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[36]]></flowable:candidateStrategy> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æäº¤" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="false" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="false" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="false" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="false" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="false" id="6"></flowable:buttonsSetting> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[2]]></flowable:assignStartUserHandlerType> |
| | | </extensionElements> |
| | | </userTask> |
| | | <userTask id="Activity_secretariat_review" name="ç§ä¹¦å¤å½¢å¼å®¡æ¥"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[10]]></flowable:candidateStrategy> |
| | | <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éè¿" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="true" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="true" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="true" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="true" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="true" id="6"></flowable:buttonsSetting> |
| | | <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod> |
| | | <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType> |
| | | <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType> |
| | | <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable> |
| | | <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire> |
| | | <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType> |
| | | </extensionElements> |
| | | <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}"> |
| | | <loopCardinality>1</loopCardinality> |
| | | <completionCondition>${ nrOfCompletedInstances >= nrOfInstances }</completionCondition> |
| | | </multiInstanceLoopCharacteristics> |
| | | </userTask> |
| | | <userTask id="Activity_expert_review" name="ä¸å®¶è¯å®¡"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[10]]></flowable:candidateStrategy> |
| | | <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éè¿" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="true" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="true" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="true" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="true" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="true" id="6"></flowable:buttonsSetting> |
| | | <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod> |
| | | <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType> |
| | | <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType> |
| | | <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable> |
| | | <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire> |
| | | <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType> |
| | | </extensionElements> |
| | | <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}"> |
| | | <loopCardinality>1</loopCardinality> |
| | | <completionCondition>${ nrOfCompletedInstances >= nrOfInstances }</completionCondition> |
| | | </multiInstanceLoopCharacteristics> |
| | | </userTask> |
| | | <userTask id="Activity_council_approve" name="å¦ä¼ç«é¡¹å®¡æ¹"> |
| | | <extensionElements> |
| | | <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType> |
| | | <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[10]]></flowable:candidateStrategy> |
| | | <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éè¿" enable="true" id="1"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="æç»" enable="true" id="2"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转å" enable="true" id="3"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å§æ´¾" enable="true" id="4"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="å ç¾" enable="true" id="5"></flowable:buttonsSetting> |
| | | <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="éå" enable="true" id="6"></flowable:buttonsSetting> |
| | | <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod> |
| | | <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType> |
| | | <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType> |
| | | <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType> |
| | | <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable> |
| | | <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire> |
| | | <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType> |
| | | </extensionElements> |
| | | <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}"> |
| | | <loopCardinality>1</loopCardinality> |
| | | <completionCondition>${ nrOfCompletedInstances >= nrOfInstances }</completionCondition> |
| | | </multiInstanceLoopCharacteristics> |
| | | </userTask> |
| | | <endEvent id="EndEvent" name="ç»æ"></endEvent> |
| | | <sequenceFlow id="sequenceFlow-1" sourceRef="StartEvent" targetRef="StartUserNode"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-2" sourceRef="StartUserNode" targetRef="Activity_secretariat_review"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-3" sourceRef="Activity_secretariat_review" targetRef="Activity_expert_review"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-4" sourceRef="Activity_expert_review" targetRef="Activity_council_approve"></sequenceFlow> |
| | | <sequenceFlow id="sequenceFlow-5" sourceRef="Activity_council_approve" targetRef="EndEvent"></sequenceFlow> |
| | | </process> |
| | | <bpmndi:BPMNDiagram id="BPMNDiagram_research_topic_approve"> |
| | | <bpmndi:BPMNPlane bpmnElement="research_topic_approve" id="BPMNPlane_research_topic_approve"> |
| | | <bpmndi:BPMNShape bpmnElement="StartEvent" id="BPMNShape_StartEvent"> |
| | | <omgdc:Bounds height="30.0" width="30.0" x="0.0" y="15.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="StartUserNode" id="BPMNShape_StartUserNode"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="80.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="Activity_secretariat_review" id="BPMNShape_Activity_secretariat_review"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="230.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="Activity_expert_review" id="BPMNShape_Activity_expert_review"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="380.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="Activity_council_approve" id="BPMNShape_Activity_council_approve"> |
| | | <omgdc:Bounds height="60.0" width="100.0" x="530.0" y="0.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNShape bpmnElement="EndEvent" id="BPMNShape_EndEvent"> |
| | | <omgdc:Bounds height="30.0" width="30.0" x="680.0" y="15.0"></omgdc:Bounds> |
| | | </bpmndi:BPMNShape> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-1" id="BPMNEdge_sequenceFlow-1"> |
| | | <omgdi:waypoint x="30.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="80.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-2" id="BPMNEdge_sequenceFlow-2"> |
| | | <omgdi:waypoint x="180.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="230.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-3" id="BPMNEdge_sequenceFlow-3"> |
| | | <omgdi:waypoint x="330.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="380.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-4" id="BPMNEdge_sequenceFlow-4"> |
| | | <omgdi:waypoint x="480.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="530.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | <bpmndi:BPMNEdge bpmnElement="sequenceFlow-5" id="BPMNEdge_sequenceFlow-5"> |
| | | <omgdi:waypoint x="630.0" y="30.0"></omgdi:waypoint> |
| | | <omgdi:waypoint x="680.0" y="30.0"></omgdi:waypoint> |
| | | </bpmndi:BPMNEdge> |
| | | </bpmndi:BPMNPlane> |
| | | </bpmndi:BPMNDiagram> |
| | | </definitions> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ========================================= |
| | | -- UMS ä¼åç®¡çæ¨¡åï¼yudao-module-umsï¼ |
| | | -- 建表 + åå
¸æ°æ® + BPM åç±» + èå |
| | | -- ========================================= |
| | | |
| | | -- ----- 1. å
¥ä¼ç³è¯·å表 ----- |
| | | DROP TABLE IF EXISTS `ums_application`; |
| | | CREATE TABLE `ums_application` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ç³è¯·ç¼å·', |
| | | `member_type` tinyint NOT NULL COMMENT 'ä¼åç±»åï¼1-个人 2-åä½', |
| | | `applicant_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ç³è¯·äººå§åï¼ä¸ªäººï¼æåä½åç§°ï¼åä½ï¼', |
| | | `contact_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'èç³»çµè¯', |
| | | `contact_email` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'é®ç®±', |
| | | `legal_person` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ³å®ä»£è¡¨äººï¼åä½ä¸æï¼', |
| | | `organization_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ï¼åä½ä¸æï¼', |
| | | `research_direction` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ç ç©¶æ¹å', |
| | | `work_unit` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å·¥ä½åä½ï¼ä¸ªäººä¸æï¼', |
| | | `title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'èç§°ï¼ä¸ªäººä¸æï¼', |
| | | `member_grade` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ç³è¯·ç级', |
| | | `region_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å°åºç¼ç ', |
| | | `industry` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'è¡ä¸', |
| | | `status` tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0-è稿 15-审æ¹ä¸ 20-å·²éè¿ 35-已驳å', |
| | | `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'BPM æµç¨å®ä¾ ID', |
| | | `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_no` (`no`) USING BTREE, |
| | | KEY `idx_status` (`status`) USING BTREE, |
| | | KEY `idx_member_type` (`member_type`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¼å-å
¥ä¼ç³è¯·å'; |
| | | |
| | | -- ----- 2. ä¼å表 ----- |
| | | DROP TABLE IF EXISTS `ums_member`; |
| | | CREATE TABLE `ums_member` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ä¼åç¼å·', |
| | | `user_id` bigint DEFAULT NULL COMMENT 'å
³èç³»ç»ç¨æ· ID', |
| | | `application_id` bigint DEFAULT NULL COMMENT 'æ¥æºç³è¯·å ID', |
| | | `member_type` tinyint NOT NULL COMMENT 'ä¼åç±»åï¼1-个人 2-åä½', |
| | | `member_grade` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ä¼åç级', |
| | | `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'å§åï¼ä¸ªäººï¼æåä½åç§°ï¼åä½ï¼', |
| | | `contact_user` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'è系人ï¼åä½ç¨ï¼', |
| | | `contact_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'èç³»çµè¯', |
| | | `contact_email` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'é®ç®±', |
| | | `legal_person` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ³å®ä»£è¡¨äººï¼åä½ä¸æï¼', |
| | | `organization_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ', |
| | | `research_direction` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ç ç©¶æ¹å', |
| | | `work_unit` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å·¥ä½åä½ï¼ä¸ªäººä¸æï¼', |
| | | `title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'èç§°ï¼ä¸ªäººä¸æï¼', |
| | | `unit_intro` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'åä½ç®ä»ï¼åä½ä¸æï¼', |
| | | `region_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å°åºç¼ç ', |
| | | `industry` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'è¡ä¸', |
| | | `join_date` date DEFAULT NULL COMMENT 'å
¥ä¼æ¥æ', |
| | | `expire_date` date DEFAULT NULL COMMENT 'æææè³', |
| | | `status` tinyint NOT NULL DEFAULT '1' COMMENT 'ç¶æï¼1-æ£å¸¸ 0-æå', |
| | | `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_no` (`no`) USING BTREE, |
| | | KEY `idx_user_id` (`user_id`) USING BTREE, |
| | | KEY `idx_region_code` (`region_code`) USING BTREE, |
| | | KEY `idx_industry` (`industry`) USING BTREE |
| | | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¼å'; |
| | | |
| | | -- ----- 3. åå
¸æ°æ® ----- |
| | | |
| | | -- ums_application_statusï¼å
¥ä¼ç³è¯·ç¶æï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'ums_application_status'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (80001, 'å
¥ä¼ç³è¯·ç¶æ', 'ums_application_status', 0, 'å
¥ä¼ç³è¯·å®¡æ¹ç¶æ', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'ums_application_status'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000101, 1, 'è稿', '0', 'ums_application_status', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000102, 2, '审æ¹ä¸', '15', 'ums_application_status', 0, 'processing', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000103, 3, 'å·²éè¿', '20', 'ums_application_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000104, 4, '已驳å', '35', 'ums_application_status', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ums_member_typeï¼ä¼åç±»åï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'ums_member_type'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (80002, 'ä¼åç±»å', 'ums_member_type', 0, '个人ä¼å/åä½ä¼å', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'ums_member_type'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000201, 1, '个人ä¼å', '1', 'ums_member_type', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000202, 2, 'åä½ä¼å', '2', 'ums_member_type', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ums_member_statusï¼ä¼åç¶æï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'ums_member_status'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (80003, 'ä¼åç¶æ', 'ums_member_status', 0, 'ä¼åæ£å¸¸/æå', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'ums_member_status'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000301, 1, 'æ£å¸¸', '1', 'ums_member_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000302, 2, 'æå', '0', 'ums_member_status', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ums_personal_gradeï¼ä¸ªäººä¼åççº§ï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'ums_personal_grade'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (80004, '个人ä¼åç级', 'ums_personal_grade', 0, '个人ä¼å级å«', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'ums_personal_grade'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000401, 1, 'æ®éä¼å', '1', 'ums_personal_grade', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000402, 2, 'çäº', '2', 'ums_personal_grade', 0, 'processing', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000403, 3, '常å¡çäº', '3', 'ums_personal_grade', 0, 'processing', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000404, 4, 'å¯çäºé¿', '4', 'ums_personal_grade', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000405, 5, 'çäºé¿', '5', 'ums_personal_grade', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ums_unit_gradeï¼åä½ä¼åççº§ï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'ums_unit_grade'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (80005, 'åä½ä¼åç级', 'ums_unit_grade', 0, 'åä½ä¼å级å«', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'ums_unit_grade'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000501, 1, 'æ®éåä½', '1', 'ums_unit_grade', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000502, 2, 'çäºåä½', '2', 'ums_unit_grade', 0, 'processing', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000503, 3, 'å¯ä¼é¿åä½', '3', 'ums_unit_grade', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000504, 4, 'ä¼é¿åä½', '4', 'ums_unit_grade', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ums_industryï¼è¡ä¸ï¼ |
| | | DELETE FROM system_dict_type WHERE `type` = 'ums_industry'; |
| | | INSERT INTO system_dict_type (id, name, type, status, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (80006, 'ä¼åè¡ä¸', 'ums_industry', 0, 'å¦ä¼ä¼åæå±è¡ä¸', '1', NOW(), '1', NOW(), b'0'); |
| | | DELETE FROM system_dict_data WHERE dict_type = 'ums_industry'; |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000601, 1, 'æºè½å¶é ', '1', 'ums_industry', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000602, 2, 'æ°è½æº', '2', 'ums_industry', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000603, 3, 'çµåä¿¡æ¯', '3', 'ums_industry', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000604, 4, 'çç©å»è¯', '4', 'ums_industry', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000605, 5, 'æ°ææ', '5', 'ums_industry', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000606, 6, 'èè½ç¯ä¿', '6', 'ums_industry', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000607, 7, 'å¨è¯¢æå¡', '7', 'ums_industry', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8000608, 8, 'å
¶ä»', '8', 'ums_industry', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ----- 4. BPM åç±» ----- |
| | | DELETE FROM bpm_category WHERE `code` = 'ums_membership_approve'; |
| | | INSERT INTO bpm_category (id, name, code, description, status, sort, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8001, 'å
¥ä¼å®¡æ¹', 'ums_membership_approve', 'ä¼åå
¥ä¼ç³è¯·ä¸¤çº§å®¡æ¹ï¼ç§ä¹¦å¤å审âçäºä¼å®¡è®®ï¼', 0, 1, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ----- 5. èå ----- |
| | | -- 注æï¼èå ID ä¸è¦ä¸ç°æèåå²çª |
| | | -- 顶级ç®å½ï¼type=1ï¼ï¼parent_id=0ï¼å¾æ ep:user |
| | | DELETE FROM system_menu WHERE id BETWEEN 1075490 AND 1075503; |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075490, 'ä¼å管ç', '', 1, 80, 0, '/ums', 'ep:user', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- å
¥ä¼ç³è¯·ï¼èåï¼type=2ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075491, 'å
¥ä¼ç³è¯·', '', 2, 1, 1075490, 'application', 'ep:edit', 'ums/application/index', 'UmsApplication', 0, b'1', b'1', b'0', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ä¼å管çï¼èåï¼type=2ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075492, 'ä¼åå表', '', 2, 2, 1075490, 'member', 'ep:user-filled', 'ums/member/index', 'UmsMember', 0, b'1', b'1', b'0', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ä¼åé讯å½ï¼èåï¼type=2ï¼åªè¯»ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075493, 'ä¼åé讯å½', '', 2, 3, 1075490, 'directory', 'ep:notebook', 'ums/member/directory', 'UmsMemberDirectory', 0, b'1', b'1', b'0', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æéï¼type=3ï¼ââ å
¥ä¼ç³è¯· |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075494, 'å
¥ä¼ç³è¯·æ¥è¯¢', 'ums:application:query', 3, 1, 1075491, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075495, 'å
¥ä¼ç³è¯·å建', 'ums:application:create', 3, 2, 1075491, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075496, 'å
¥ä¼ç³è¯·æäº¤å®¡æ¹', 'ums:application:submit', 3, 3, 1075491, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075501, 'å
¥ä¼ç³è¯·æ´æ°', 'ums:application:update', 3, 4, 1075491, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075502, 'å
¥ä¼ç³è¯·å é¤', 'ums:application:delete', 3, 5, 1075491, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æé ââ ä¼å管ç |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075497, 'ä¼åæ¥è¯¢', 'ums:member:query', 3, 1, 1075492, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075498, 'ä¼åå建', 'ums:member:create', 3, 2, 1075492, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075499, 'ä¼åæ´æ°', 'ums:member:update', 3, 3, 1075492, '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075503, 'ä¼åå é¤', 'ums:member:delete', 3, 4, 1075492, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- æé®æé ââ é讯å½ï¼åªè¯»ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1075500, 'éè®¯å½æ¥è¯¢', 'ums:member:directory', 3, 1, 1075493, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ----- 6. é»è®¤é¨é¨ï¼ä¼åç³»ç»è´¦å·æå±é¨é¨ï¼ ----- |
| | | DELETE FROM system_dept WHERE id = 129; |
| | | INSERT INTO system_dept (id, name, parent_id, sort, leader_user_id, phone, email, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (129, 'å¦ä¼ä¼å', 0, 99, NULL, '', '', 0, '1', NOW(), '1', NOW(), b'0'); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # å¦ä¼ä¸å¡ç®¡çå¹³å° ææ ææ¯æ¹æ¡ |
| | | |
| | | > è¦çç³»ç»ï¼åååå
¬ãè´¢å¡æ¥éãä¼å管çãä¼ä¸å¾®ä¿¡ã课é¢ç®¡çãæ¡£æ¡ç®¡çãç³»ç»ç®¡ç |
| | | |
| | | | é¡¹ç® | å
容 | |
| | | |---|---| |
| | | | ææ¡£åç§° | å¦ä¼ä¸å¡ç®¡çå¹³å°ææ ææ¯æ¹æ¡ | |
| | | | ææ¡£ç±»å | ææ ææ¯æä»¶ï¼ææ¯æ¹æ¡ååï¼ | |
| | | | ç¼å¶æ¥æ | 2026-09-29 | |
| | | | çæ¬ | V1.0 | |
| | | | ææ äºº | ãææ åä½å
¨ç§°ã | |
| | | | ææ äºº | ãææ åä½å
¨ç§°ã | |
| | | |
| | | > 说æï¼æä¸ `ãã` 为å¾
å¡«å ä½å
容ï¼åä½åç§°ãåçãä»·æ ¼ãå·¥æçï¼ï¼ç±ææ 人å®ç¨¿æ¶æ¿æ¢ãæ¬ææè¿°å
¨é¨åè½ãææ¯ç»ä»¶ãæ°æ®æ¨¡åãæµç¨å®ä¹ãæéç¹ãåå
¸ç¼ç ï¼ååèªææ äººç°æç³»ç»çå®é
代ç ä¸è¿è¡åºï¼æ æ¨æµæ§æè¿°ã |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãé¡¹ç®æ¦è¿° |
| | | |
| | | ### 1.1 å»ºè®¾èæ¯ |
| | | |
| | | å¦ä¼ï¼åä¼ï¼æ¥å¸¸ä¸å¡é¿æä¾èµçº¿ä¸å°è´¦ä¸åæ£ç Excel è¡¨æ ¼è¿è½¬ï¼åå¨åç±»çªåºé®é¢ï¼ |
| | | |
| | | | åºå· | ç°ç¶é®é¢ | å
·ä½è¡¨ç° | |
| | | |---|---|---| |
| | | | 1 | ä¼åä¿¡æ¯åæ£ | å
¥ä¼ç³è¯·èµ°çº¸è´¨è¡¨åæé®ä»¶ï¼æ¹ååé 人工建表维æ¤ä¼ååå½ï¼ççº§ï¼æ®éä¼åï¼çäºï¼å¸¸å¡çäºï¼çäºé¿ï¼ä¸åä½ä¼åä¿¡æ¯é¾ä»¥ç»ä¸å½æ¡£ | |
| | | | 2 | 课é¢ç®¡çæé¾ | è¯¾é¢æååå¸ãç³æ¥ä¹¦æ¶éãä¸å®¶è¯å®¡æåãç«é¡¹éç¥ãç»è´¹æ¨ä»åç¯èå离ï¼è¯å®¡åæ°ä¸ç«é¡¹ç»è®ºé äººå·¥æ±æ»ï¼è¿ç¨ä¸å¯è¿½æº¯ | |
| | | | 3 | è´¢å¡æ¥éæ çç | æ¥éåé 纸质ç²è´´å票æµè½¬ï¼å®¡æ¹å±çº§ä¸éé¢è§åé äººå·¥å¤æï¼æ¥éåè¯æ æ³ä¸æ¡£æ¡å
³è | |
| | | | 4 | æ¡£æ¡ä¸åé
å¤±æ§ | çº¸è´¨æ¡£æ¡æ çµåå°è´¦ï¼ååºé æå·¥ç»è®°ï¼é¾ææ 人æéï¼æææ¡£æ¡ï¼å¦è´¢å¡åè¯ï¼æ æéé离ï¼åå¨è¶ææ¥é
é£é© | |
| | | |
| | | åæ¶ï¼ç§»å¨ç«¯è§¦è¾¾è½å缺失ï¼éç¥åå¸ä¾èµéä¸è½¬åï¼ç»ç»äººå䏿µç¨çæéè¾¹ç䏿¸
ï¼æ ç»ä¸å®¡è®¡ã |
| | | |
| | | ### 1.2 å»ºè®¾ç®æ |
| | | |
| | | æ¬æ¹æ¡çå»ºè®¾ç®æ 为ï¼**以ç»ä¸å®¡æ¹å¼æä¸ç»ä¸æ¡£æ¡åºåº§ä¸ºæ ¸å¿ï¼æå»ºä¸ä½åãå¯è¿½æº¯ãææéè¾¹ççå¦ä¼ä¸å¡ç®¡çå¹³å°**ï¼å
·ä½å解为äºä¸ªå¯éªè¯ç®æ ï¼ |
| | | |
| | | 1. **ä¸å¡å¨çº¿å**ï¼ä¼åå
¥ä¼ã课é¢ç«é¡¹ãè´¢å¡æ¥éãæ¡£æ¡åé
åç±»æ ¸å¿ä¸å¡å
¨é¨çº¿ä¸æµè½¬ï¼æ¿ä»£çº¸è´¨å°è´¦ã |
| | | 2. **审æ¹ç»ä¸å**ï¼åç±»ä¸å¡å
±ç¨ä¸å¥å·¥ä½æµå¼æï¼å®¡æ¹è§åï¼å®¡æ¹äººãå±çº§ãä¼ç¾æ¹å¼ã驳åçç¥ï¼å¯é
ç½®ãå¯è¿½æº¯ï¼æ é为æ¯ç±»ä¸å¡åç¬å¼å审æ¹é»è¾ã |
| | | 3. **æ¡£æ¡éä¸å**ï¼è¯¾é¢ãä¼åãè´¢å¡ä¸ç±»ä¸å¡çææææä¸é®å½æ¡£è³ç»ä¸æ¡£æ¡åºï¼å½¢æ"ä¸å¡äº§çæ¡£æ¡ãæ¡£æ¡ååºæ£ç´¢"çéç¯ï¼æ¡£æ¡åé
走两级审æ¹å¹¶å®æ¶è®¡ç®é¾æã |
| | | 4. **æéç²¾ç»å**ï¼ä»¥ RBAC è§è²æé为åºç¡ï¼å å å¯çº§ç®¡æ§ä¸ç¬ç«æææéç¹ï¼å®ç°"å
¬å¼ï¼å
é¨ï¼ä¿å¯"ä¸çº§æ¡£æ¡çå¯è§æ§é离ï¼å¹¶å¯å®¡è®¡ã |
| | | 5. **触达移å¨å**ï¼åå©ä¼ä¸å¾®ä¿¡å°æ´»å¨ãéç¥ç´æ¥æ¨éè³æåï¼æåå¯å¨çº¿æ¥åãç¾å°ï¼å½¢æç§»å¨ç«¯ä¸å¡å
¥å£ã |
| | | |
| | | ### 1.3 建设èå´ä¸æ¨¡åæ»è§ |
| | | |
| | | æ¬æå»ºè®¾èå´å³æ¬æ¹æ¡çä¸å¤§åç³»ç»ï¼åä»¥ç°æèåæ ä¸ºä¸¥æ ¼ä¾æ®ï¼ |
| | | |
| | | | åºå· | åç³»ç» | èåè·¯å¾ | èå ID | äºçº§åè½é¡µ | å®ä½äºä¸å¡é¾ä¸çè§è² | |
| | | |---|---|---|---|---|---| |
| | | | 1 | åååå
¬ | `/bpm` | 1185 | æµç¨ç®¡çã审æ¹ä¸å¿ãéç¥å
¬åãOA åºç¨ | å
¨å¹³å°**审æ¹ä¸æµç¨åºåº§** | |
| | | | 2 | è´¢å¡æ¥é | `/finance` | 1075425 | æ¥éå | ç»è´¹æ¯åºç**ç³è¯·ä¸å®¡æ¹** | |
| | | | 3 | ä¼å管ç | `/ums` | 1075490 | å
¥ä¼ç³è¯·ãä¼åå表ãä¼åéè®¯å½ | å¦ä¼**主ä½ï¼äººï¼åä½ï¼**管ç | |
| | | | 4 | ä¼ä¸å¾®ä¿¡ | `/wxcp` | 6100000 | æ´»å¨ç®¡çãéç¥ç®¡ç | 对ä¼åï¼æåç**ç§»å¨è§¦è¾¾** | |
| | | | 5 | 课é¢ç®¡ç | `/research` | 1075510 | è¯¾é¢æåã课é¢ç³æ¥ï¼å«ä¸å®¶è¯å®¡ãç»è´¹æ¨ä»ï¼ | 妿¯ä¸å¡ç**主线æµç¨** | |
| | | | 6 | æ¡£æ¡ç®¡ç | `/archive` | 1075600 | æ¡£æ¡åç±»ãæ¡£æ¡ç®¡çãåé
ç»è®°ãæ¡£æ¡ç»è®¡ | å
¨å¹³å°ç**æ¡£æ¡å½éä¸åé
åºåº§** | |
| | | | 7 | ç³»ç»ç®¡ç | `/system` | 1 | ç¨æ·ãè§è²ãèåãé¨é¨ãå²ä½ãåå
¸ãç¼ç è§åã审计æ¥å¿ãæ¶æ¯ä¸å¿ãOAuth2ã䏿¹ç»å½ãæä»¶åå¨ãå°åºãå
¬å¸ä¿¡æ¯é
ç½® | å¹³å°**åºç¡æ¯æä¸æ²»ç** | |
| | | |
| | | **ä¸å¤§åç³»ç»ä¹é´çå
³ç³»ï¼ä¸å¥è¯æ¦æ¬ï¼**ï¼ä¼å管çæä¾"人"ã课é¢ç®¡çæä¾"äº"ãè´¢å¡æ¥éæä¾"é±"ï¼ä¸è
åå¨åååå
¬ç审æ¹å¼æä¸æµè½¬ï¼å¹¶å¨æ¶å£æ¶åæ¡£æ¡ç®¡çå½éå½¢æ"æ¡£æ¡"ï¼ä¼ä¸å¾®ä¿¡è´è´£æ"äº"ä¸"éç¥"æ¨éå°äººï¼ç³»ç»ç®¡ç为以ä¸å
¨é¨æä¾èº«ä»½ãæéãåå
¸ãç¼ç ä¸å®¡è®¡è½åã |
| | | |
| | | ### 1.4 æ¯è¯ä¸ç¼©ç¥è¯ |
| | | |
| | | | æ¯è¯ | 说æ | |
| | | |---|---| |
| | | | BPM | Business Process Managementï¼ä¸å¡æµç¨ç®¡çï¼æ¬æ¹æ¡æåºäº Flowable ç审æ¹å¼æ | |
| | | | BPMN 2.0 | ä¸å¡æµç¨å»ºæ¨¡ä¸æ 注æ åï¼æ¬æ¹æ¡çæµç¨å¾äº¤æ¢æ ¼å¼ | |
| | | | RBAC | åºäºè§è²çè®¿é®æ§å¶ï¼ç¨æ· â è§è² â èåï¼æéç¹ä¸å±æ¨¡å | |
| | | | å¯çº§ | æ¡£æ¡çææçº§å«ï¼åå
¬å¼ï¼1ï¼ï¼å
é¨ï¼2ï¼ï¼ä¿å¯ï¼3ï¼ä¸çº§ | |
| | | | åæ®å¿«ç
§ | ä¸å¡åæ®å¨æµè½¬æ¶å¯¹å
³è对象å
³é®å段çåä½åå¨ï¼é¿å
å ä¸»æ°æ®åæ´å¯¼è´åå²å¯è¯»æ§ä¸é | |
| | | | 彿¡£èå¨ | ä¸å¡åæ®å®¡æ¹å®æåï¼ä¸é®çæå¯¹åºæ¡£æ¡å¹¶åæ¥æºè¡¨ååæ¡£æ¡ ID çæºå¶ | |
| | | | 龿 | åé
åå¤äº"ååºä¸"ä¸å½è¿æéæ©äºå½åæ¥æçç¶æï¼å®æ¶è®¡ç®ï¼ä¸è½åºï¼ | |
| | | |
| | | --- |
| | | |
| | | ## äºãæ»ä½ææ¯æ¶æ |
| | | |
| | | ### 2.1 设计åå |
| | | |
| | | | åå | è½å°æ¹å¼ | |
| | | |---|---| |
| | | | **å¹³å°åãå¯å¤ç¨** | 审æ¹ãéä»¶ãç¼ç ãåå
¸ãæ¶æ¯äºç±»è½åæ½ä¸ºå¹³å°çº§å
Œ
±æå¡ï¼ä¸å¡æ¨¡ååªåç»åè°ç¨ï¼é¿å
éå¤å»ºè®¾ | |
| | | | **模ååãä½è¦å** | Maven 夿¨¡åæåï¼æ¨¡åé´éè¿ `-api` 忍¡åçæ¥å£éä¿¡ï¼ç¦æ¢è·¨æ¨¡åç´æ¥è®¿é®å¯¹æ¹ç Mapperï¼DO | |
| | | | **é
ç½®ä¼å
** | 审æ¹è§åãåæ®ç¶æãä¸å¡åç±»å以åå
¸ä¸æµç¨é
置驱å¨ï¼åå°æé
置渲æï¼åå°ç¡¬ç¼ç | |
| | | | **强ä¸è´ä¸å¹ç** | å
³é®ç¶æåæ´éç¨æ¡ä»¶æ´æ°ï¼`UPDATE ... WHERE status = ææå¼`ï¼ä¿è¯å¹¶åå®å
¨ï¼å½æ¡£ãæäº¤çåæä½ååå¹ççè·¯ | |
| | | | **æéåç½®** | æéæ ¡éªä¸æ²å°æ¥å£å±ï¼æ³¨è§£å¼ï¼ï¼æææ°æ®è¿æ»¤ä¸æ²å°æ¥è¯¢å±ï¼åéä¿é© | |
| | | | **å¯å®¡è®¡** | å
³é®æ¥å£è®°å½æä½æ¥å¿ï¼ç»å½è¡ä¸ºè®°å½ç»å½æ¥å¿ï¼åæ®æµè½¬ä¿ç宿´å®¡æ¹è®°å½ | |
| | | |
| | | ### 2.2 æ»ä½æ¶æ |
| | | |
| | | éç¨"åä½å¤æ¨¡å + åå端å离"æ¶æï¼é¨ç½²ä¸ºä¸ä¸ªå端æå¡å®ä¾ï¼å¯æéæ¨ªåæ©å±ä¸ºå¤å®ä¾ï¼ï¼å端为ç¬ç«éæèµæºã |
| | | |
| | | ``` |
| | | âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ |
| | | â æ¥å
¥å± æµè§å¨ï¼PCï¼ ä¼ä¸å¾®ä¿¡ï¼ç§»å¨ç«¯ï¼ ç¬¬ä¸æ¹ç³»ç»ï¼OpenAPIï¼â |
| | | ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââ |
| | | â HTTPS |
| | | ââââââââââââââââââââââââââââ´âââââââââââââââââââââââââââââââââââââââââââ |
| | | â ç½å
³ï¼æ¥å
¥ åå代çï¼Nginxï¼ Â· ç»ä¸é´æè¿æ»¤å¨ · è¯·æ±æ¥å¿ · è·¨åæ§å¶ â |
| | | ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââ |
| | | ââââââââââââââââââââââââââââ´âââââââââââââââââââââââââââââââââââââââââââ |
| | | â åºç¨å±ï¼ä¸å¡æ¨¡åï¼ â |
| | | â åååå
¬(bpm) â è´¢å¡æ¥é(finance) â ä¼å管ç(ums) â 课é¢ç®¡ç(research)â |
| | | â æ¡£æ¡ç®¡ç(archive) â ä¼ä¸å¾®ä¿¡(wxcp) â ç³»ç»ç®¡ç(system) â |
| | | ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââ |
| | | ââââââââââââââââââââââââââââ´âââââââââââââââââââââââââââââââââââââââââââ |
| | | â 平尿å¡å±ï¼frameworkï¼ â |
| | | â 工使µå¼æ(Flowable) â éä»¶ä¸å¿ â ç¼ç è§å â åå
¸ â æ¶æ¯éç¥ â |
| | | â ç»ä¸é´æ â ç»ä¸å¼å¸¸ä¸è¿åä½ â Excel 导å
¥å¯¼åº â æä½æ¥å¿ï¼è®¿é®æ¥å¿ â |
| | | ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââ |
| | | ââââââââââââââââââââââââââââ´âââââââââââââââââââââââââââââââââââââââââââ |
| | | â æ°æ®å± MySQL 8.4.8ï¼ä¸å¡ä¸æµç¨æ°æ®ï¼ · Redisï¼ç¼åï¼ä»¤çï¼ä¼è¯ï¼ â |
| | | â æ¬å°ï¼å¯¹è±¡åå¨ï¼éä»¶äºè¿å¶ï¼ â |
| | | âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ |
| | | ``` |
| | | |
| | | ### 2.3 ææ¯æ éå |
| | | |
| | | **å端** |
| | | |
| | | | åç±» | ç»ä»¶ | çæ¬ | éå说æ | |
| | | |---|---|---|---| |
| | | | è¯è¨ï¼è¿è¡æ¶ | Java | 25 | é¿ææ¯æçæ¬ï¼å
·å¤èæçº¿ç¨è½åï¼å©äºé«å¹¶å IO åºæ¯ | |
| | | | åºç¨æ¡æ¶ | Spring Boot | 4.1.0 | çææçãç»ä»¶é½å
¨ï¼ç¤¾åºä¸ä¼ä¸æ¯æå¨æé¿ | |
| | | | æå»º | Mavenï¼å¤æ¨¡åï¼ | 3.9+ | 模ååæåä¸ç»ä¸ä¾èµçæ¬ç®¡çï¼`yudao-dependencies` BOMï¼ | |
| | | | æä¹
å± | MyBatis-Plus | 3.5.16 | å
¼é¡¾ SQL 坿§æ§ä¸å表 CRUD æçï¼æ¯æé»è¾å é¤ãå页ãä¹è§é | |
| | | | 工使µå¼æ | Flowable | 8.0.0 | 宿´å®ç° BPMN 2.0ï¼æ¯æä¼ç¾ãæç¾ã便¬¡å®¡æ¹ãå ç¾è½¬æ´¾ãæµç¨å¾è½¨è¿¹ | |
| | | | æ°æ®åº | MySQL | 8.4.8 | 主å¤é¨ç½²ï¼ä¸å¡ä¸æµç¨æ°æ®ååºï¼ä¾¿äºäºå¡ä¸è´æ§ | |
| | | | ç¼å | Redis | 6.x+ | 令çãéªè¯ç ãåå
¸ä¸çç¹æ°æ®ç¼å | |
| | | | 对象åå¨ | æ¬å°ç£çï¼S3 å
¼å®¹ | â | éè¿ç»ä¸éä»¶ä¸å¿æ½è±¡ï¼åå¨é
ç½®å¯åæ¢ | |
| | | | æ¥å£ææ¡£ | SpringDoc OpenAPI | éæ¡æ¶ | ææ¨¡ååç»ï¼GroupedOpenApiï¼èªå¨çæå¨çº¿æ¥å£ææ¡£ | |
| | | |
| | | **å端** |
| | | |
| | | | åç±» | ç»ä»¶ | çæ¬ | éå说æ | |
| | | |---|---|---|---| |
| | | | åºç¡æ¡æ¶ | Vue | 3.5.35 | Composition APIï¼ç»åå¼é»è¾å¤ç¨ | |
| | | | èææ¶ | Vben Admin | 5.7.0 | æççä¸åå°æ¹æ¡ï¼å«æéãåå
¸ãå¸å±ã主é¢è½å | |
| | | | æå»ºå·¥å
· | Vite | 8.0.10 | å·å¯å¨ä¸çæ´æ°å¿«ï¼æå»ºäº§ç©æéåå
| |
| | | | è¯è¨ | TypeScript | 6.0.3 | å
¨éç±»å约æï¼`any` ç¦ç¨ï¼éä½è¿è¡æé误 | |
| | | | UI ç»ä»¶åº | Ant Design Vue | 4.2.6 | è¡¨æ ¼ã表åãå¼¹çªç»ä»¶å®å¤ï¼ç¬¦ååå°æä½ä¹ æ¯ | |
| | | | ç¶æç®¡ç | Pinia | 3.0.4 | è½»éãç±»åå好ï¼é
åæä¹
åæä»¶ä¿åç»å½æ | |
| | | | è·¯ç± | Vue Router | 5.1.0 | å¨æè·¯ç±ç±å端èå驱å¨ï¼æ éå端æå·¥ç»´æ¤è·¯ç±è¡¨ | |
| | | | æ ·å¼ | Tailwind CSS | 4.3.0 | åååæ ·å¼ï¼ç»ä¸é´è·ä¸è²æ¿ | |
| | | | å¾è¡¨ | ECharts | 6.1.0 | ç»è®¡çæ¿ç饼å¾ï¼æ±å¾ï¼è¶å¿å¾ | |
| | | | æµç¨è®¾è®¡å¨ | bpmn-js | 18.16.1 | å¨çº¿ç»å¶ BPMN 2.0 æµç¨å¾ | |
| | | | å¯ææ¬ | TinyMCE / Tiptap | 7.9 / 3.26 | éç¥ãå
¬åãæåæ£æç¼è¾ | |
| | | | å
管ç | pnpm | 11.0.9 | ä¾èµæå¹³åãå®è£
å¿«ãç£çå ç¨ä½ | |
| | | |
| | | ### 2.4 åºç¨æ¨¡ååå |
| | | |
| | | å端以 Maven 夿¨¡åç»ç»ï¼å
± **30 个模å**ï¼å«æ¡æ¶ä¸ä¾èµç®¡ç模åï¼ï¼ä¸å¡æ¨¡åä¸å¹³å°æ¨¡åè§£è¦ï¼ |
| | | |
| | | | ç±»å« | 模å | èè´£ | |
| | | |---|---|---| |
| | | | ä¾èµç®¡ç | `yudao-dependencies` | ç»ä¸ä¾èµçæ¬ï¼BOMï¼ï¼éå®ä¸ä¸æ¸¸ç»ä»¶çæ¬ | |
| | | | æ¡æ¶ | `yudao-framework` | ç»ä¸è¿åä½ãå¼å¸¸ãé´æãå®å
¨ãExcelãæ¥å¿ãMyBatis æ©å±ãRedis å°è£
ç | |
| | | | æå¡ä¸»ç¨åº | `yudao-server` | å¯ä¸å¯å¨æ¨¡åï¼èåå
¨é¨ä¸å¡æ¨¡åä¸é
ç½® | |
| | | | **æ¬æä¸å¤§åç³»ç»** | `yudao-module-bpm` | åååå
¬ï¼å·¥ä½æµå¼æä¸æµç¨è®¾è®¡ï¼å®¡æ¹ä¸å¿ | |
| | | | | `yudao-module-finance` (+`-api`) | è´¢å¡æ¥é | |
| | | | | `yudao-module-ums` | ä¼å管ç | |
| | | | | `yudao-module-research` | 课é¢ç®¡ç | |
| | | | | `yudao-module-archive` (+`-api`) | æ¡£æ¡ç®¡çä¸å½æ¡£èå¨å¯¹å¤æ¥å£ | |
| | | | | `yudao-module-wxcp` | ä¼ä¸å¾®ä¿¡ | |
| | | | | `yudao-module-system` | ç³»ç»ç®¡çï¼èº«ä»½ãæéãåå
¸ãéä»¶ãæ¶æ¯ã审计 | |
| | | | å¹³å°åºç¡ | `yudao-module-infra` | åºç¡è®¾æ½ï¼æä»¶ã代ç çæã宿¶ä»»å¡ãé
ç½®ãAPI æ¥å¿ | |
| | | | å
¶å®ä¸å¡ï¼æ¬æä¸å¨èå´ï¼ | `crm` / `erp` / `mes` / `mdm` / `hrm` / `srm` / `aftersales` / `bi` / `ai` / `im` / `member` / `qcreport` | å·¥åä¾§ä¸å¡ä¸å¹³å°å¢å¼ºè½åï¼ä¸æ¬æ¹æ¡ä¸å¤§åç³»ç»å
±ç¨å䏿æ¯åºåº§ï¼å¯æéå¯ç¨ | |
| | | |
| | | > 模åååçä»·å¼ï¼æ¬æä¸å¤§åç³»ç»å¯ç¬ç«ç¼è¯ãç¬ç«æµè¯ãç¬ç«å级ï¼åç»å¦éæ©å±ï¼å¦æ°å¢éè´ãç产类ä¸å¡ï¼ï¼å¤ç¨åä¸å¥å®¡æ¹ãéä»¶ãæ¡£æ¡è½åå³å¯ï¼æ ééæã |
| | | |
| | | ### 2.5 æ°æ®æ¶æ |
| | | |
| | | å½åè¿è¡åºå
± **430 å¼ è¡¨**ï¼æä¸å¡åååå¦ä¸ï¼è鿬æç¸å
³é¨åï¼ï¼ |
| | | |
| | | | ä¸å¡å | 表åç¼ï¼æ°é | æ¬æç¸å
³è¡¨ | 说æ | |
| | | |---|---|---|---| |
| | | | ç³»ç»æ²»ç | `system_*` | `system_users`ã`system_role`ã`system_menu`ã`system_dict_type`ã`system_dict_data`ã`system_dept`ã`system_post`ã`system_storage_blob`ã`system_storage_attachment`ã`system_oauth2_client` ç | 身份ãæéãåå
¸ãéä»¶å
æ°æ® | |
| | | | 工使µ | `bpm_*` + `act_*` | `bpm_category`ã`bpm_process_definition_info`ã`act_re_procdef`ã`act_ru_task`ã`act_hi_taskinst` ç | æµç¨é
ç½®ä¸ Flowable è¿è¡ï¼å岿°æ® | |
| | | | åååå
¬ | `bpm_oa_*` | `bpm_oa_notice`ã`bpm_oa_leave` | éç¥å
¬åã请å | |
| | | | è´¢å¡æ¥é | `finance_*` | `finance_reimbursement`ï¼è´¢å¡-æ¥éåï¼ã`finance_reimbursement_item`ï¼è´¢å¡-æ¥éæç»ï¼ | 主表 + æç»è¡¨ï¼ä¸åå¤è¡è´¹ç¨ | |
| | | | ä¼å管ç | `ums_*` | `ums_application`ï¼ä¼å-å
¥ä¼ç³è¯·åï¼ã`ums_member`ï¼ä¼åï¼ | ç³è¯·åä¸ä¼åæ¡£æ¡å离ï¼ç³è¯·éè¿åæçæä¼å | |
| | | | 课é¢ç®¡ç | `research_*` | `research_guideline`ï¼è¯¾é¢-æåï¼ã`research_application`ï¼è¯¾é¢-ç³æ¥ä¹¦ï¼ã`research_topic_review`ï¼è¯¾é¢-ä¸å®¶è¯å®¡æç»ï¼ã`research_fund_record`ï¼è¯¾é¢-ç»è´¹æ¨ä»è®°å½ï¼ | æå â ç³æ¥ â è¯å®¡ â ç«é¡¹ â ç»è´¹ å
¨é¾è·¯çç | |
| | | | ä¼ä¸å¾®ä¿¡ | `wxcp_*` | `wxcp_activity`ï¼ä¼ä¸å¾®ä¿¡æ´»å¨ï¼ã`wxcp_activity_signup`ï¼ä¼ä¸å¾®ä¿¡æ´»å¨æ¥åè®°å½ï¼ã`wxcp_notice`ï¼ä¼ä¸å¾®ä¿¡éç¥ï¼ | æ´»å¨ä¸éç¥åå
¶æ¥åæç» | |
| | | | æ¡£æ¡ç®¡ç | `archive_*` | `archive_category`ï¼æ¡£æ¡-åç±»ï¼ã`archive_document`ï¼æ¡£æ¡-æ¡£æ¡ä¸»è¡¨ï¼ã`archive_borrow`ï¼æ¡£æ¡-åé
åï¼ | åç±»æ + æ¡£æ¡ä¸»è¡¨ + åé
åï¼åé
ä¸å½è¿åä¸ | |
| | | |
| | | **æ°æ®å»ºæ¨¡è¦ç¹**ï¼ |
| | | |
| | | 1. **主表 + æç»è¡¨**ï¼æ¥éåï¼`finance_reimbursement`ï¼ä¸æ¥éæç»ï¼`finance_reimbursement_item`ï¼åç¦»ï¼æ¯æä¸åå¤è¡è´¹ç¨é¡¹ä¸èªå¨å计éé¢ã |
| | | 2. **ç³è¯·ä¸ç»æå离**ï¼å
¥ä¼ç³è¯·ï¼`ums_application`ï¼ä¸ä¼åï¼`ums_member`ï¼å离ï¼å®¡æ¹éè¿åæè½ä¼åï¼é¿å
"æªæ¹åçç³è¯·äºº"污æä¼ååºã |
| | | 3. **å¿«ç
§åä½**ï¼åé
åä¸åä½åå¨ `document_no`ã`document_title`ï¼æ¡£æ¡ç¼å·ä¸æ é¢ï¼ï¼å³ä½¿æ¡£æ¡æ¹åï¼åå²åé
è®°å½ä»ä¿æå½æ¶çä¸å¡è¯ä¹ã |
| | | 4. **éä»¶ä¸è½å**ï¼ä»»ä½ä¸å¡è¡¨åä¸è®¾ç½® `file_url`ï¼`file_urls` çæä»¶å°ååï¼æä»¶ä¸ä¸å¡çå
³èç»ä¸éè¿ä¸é´è¡¨ `system_storage_attachment`ï¼`record_type` + `record_id` + `storage_blob_id`ï¼æ¿è½½ï¼æ¯æä¸ä¸ªåæ®å¤éä»¶ãå¤ç¨éåç±»ï¼ä¸åå¨ä»è´¨åæ¢ï¼æ¬å°ï¼å¯¹è±¡åå¨ï¼ä¸å½±åä¸å¡è¡¨ç»æã |
| | | 5. **é»è¾å é¤**ï¼å
¨è¡¨ç»ä¸ `deleted` æ è®°ï¼å岿°æ®å¯è¿½æº¯ã坿¢å¤ã |
| | | 6. **åç§æ·é¨ç½²**ï¼æ¡æ¶å
·å¤å¤ç§æ·é离è½åï¼æ¬æä¸å¡è¡¨æåç§æ·æ¨¡å¼é¨ç½²ï¼ä¿çæªæ¥ç§æ·éç¦»çæ©å±ç©ºé´ã |
| | | |
| | | ### 2.6 é¨ç½²æ¶æ |
| | | |
| | | | 屿¬¡ | é¨ç½²å½¢æ | 说æ | |
| | | |---|---|---| |
| | | | å端 | Nginx æç®¡éæèµæº | ä¸å端å离é¨ç½²ï¼å¯ç¬ç«åå¸ï¼åä¸ Nginx åå代ç `/admin-api` è³å端 | |
| | | | å端 | å个 Spring Boot æå¡å®ä¾ï¼å¯å¤å®ä¾æ¨ªåæ©å±ï¼ | æ ç¶æè®¾è®¡ï¼ä¼è¯ä¸ä»¤çç½®äº Redisï¼å¤å®ä¾å¯å
񄧮 | |
| | | | æ°æ®åº | MySQL 8.4.8 ä¸»å¤ | ä¸å¡è¡¨ä¸ Flowable æµç¨è¡¨ååºï¼ä¿è¯"ä¸å¡ç¶æ + æµç¨ç¶æ"å¨åä¸äºå¡å
ä¸è´ | |
| | | | ç¼å | Redis | 令çãéªè¯ç ãåå
¸ç¼å | |
| | | | åå¨ | æ¬å°ç£çæ S3 å
¼å®¹å¯¹è±¡åå¨ | ç»éä»¶ä¸å¿æ½è±¡ï¼é
ç½®åæ¢ï¼ä¸å¡ä»£ç æ æ | |
| | | | æä½ç³»ç» | å
¼å®¹ Windows Server ä¸ä¸»æµ Linux åè¡ç | å端 JVM 跨平å°ï¼å端为éæèµæº | |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãææ¯æ¶æä¸éæ |
| | | |
| | | æ¬ç« 说æä¸å¤§åç³»ç»å¹¶éä¸å¥ç¬ç«ç³»ç»ï¼èæ¯**å
±äº«å¹³å°è½åãå½¼æ¤æ°æ®è´¯é**çä¸ä¸ªæ´ä½ã以ä¸é项ç»åºå
±äº«æºå¶ä¸éææ¹å¼ã |
| | | |
| | | ### 3.1 ç»ä¸èº«ä»½è®¤è¯ä¸æéä½ç³» |
| | | |
| | | **认è¯**ï¼åºäº OAuth2 çä»¤çæºå¶ï¼æ¯æè´¦å·å¯ç ç»å½ã䏿¹ç»å½ï¼`system_social_client` / `system_social_user`ï¼ã令çä¸å·æ°ä»¤çç± Redis æ¿è½½ï¼æ¯æä»¤ç管çä¸å¼ºå¶ä¸çº¿ï¼`/system/oauth2/token`ï¼ã |
| | | |
| | | **ææ**ï¼éç¨"ç¨æ· â è§è² â èåï¼æéç¹"ä¸å± RBACï¼ |
| | | |
| | | - ç¨æ·å¯ç»å®å¤ä¸ªè§è²ï¼è§è²å¯ç»å®å¤ä¸ªèå䏿éç¹ï¼ |
| | | - æéç¹ä»¥å符串æ è¯ï¼å½¢å¦ `archive:borrow:submit`ï¼ï¼åç«¯ä»¥æ³¨è§£å¼æ ¡éªï¼`@PreAuthorize("@ss.hasPermission('...')")`ï¼åç½®æ¦æªï¼**æ æé峿ç»è°ç¨ï¼ä¸ä¾èµå端éèæé®**ï¼ |
| | | - å端ææéç¹æ§å¶æé®å¯è§æ§ï¼ä½ä¸ºä½éªä¼åèéå®å
¨è¾¹çã |
| | | |
| | | **æéç¹è§æ¨¡**ï¼æ¬æå
大ä¸å¡åç³»ç»å
±å®ä¹ **68 个æéç¹**ï¼è¦çå¢ãå ãæ¹ãæ¥ãæäº¤ã导åºã彿¡£ãæ¨éãå½è¿çå
¨é¨å¨ä½ï¼å®æ´æ¸
åè§éå½ Aï¼ãå
¶ä¸ `archive:document:sensitive` 为ç¬ç«ç**æææ¡£æ¡æ¥é
æé**ï¼ç¨äºå¯çº§ç®¡æ§ï¼è¯¦è§ 3.1.3ï¼ã |
| | | |
| | | **æ°æ®æé**ï¼æ¯ææé¨é¨ãæç¨æ·ç»´åº¦çæ°æ®èå´æ§å¶ï¼"æçæ°æ®"ç±»æ¥è¯¢éè¿äººåäº¤æ¥æ¥å£æ©å±å¯è§èå´ï¼ä¿è¯ç¦»å²äººåçåå²ä¸å¡æ°æ®å¯è¢«äº¤æ¥äººæ¥ç®¡ï¼ä¸å¡ä¸ä¸æã |
| | | |
| | | **3.1.3 å¯çº§ç®¡æ§ï¼æ¡£æ¡æææ°æ®é离ï¼** |
| | | |
| | | æ¡£æ¡å¯çº§åä¸çº§ï¼**å
¬å¼ï¼1ï¼ï¼å
é¨ï¼2ï¼ï¼ä¿å¯ï¼3ï¼**ã管æ§éå"两å¤è½ç¹ãç»ä¸å°è£
"çç¥ï¼é¿å
è¿æ»¤é»è¾æ£è½å¯¼è´æ¼ç½ï¼ |
| | | |
| | | | è½ç¹ | 管æ§è§å | |
| | | |---|---| |
| | | | 详æ
读å | 请æ±å¯çº§ä¸º"ä¿å¯"çæ¡£æ¡æ¶ï¼è¥å½åç¨æ·ä¸å
·å¤ `archive:document:sensitive` æéï¼ç´æ¥æç»å¹¶è¿åæç¡®æç¤ºï¼æå¼è系管çåå¼éæéï¼ | |
| | | | å表ï¼å¯¼åº | ç¨æ·ä¸å
·å¤è¯¥æéæ¶ï¼æ¥è¯¢æ¡ä»¶è¢«å¼ºå¶è¿½å "å¯çº§ä¸çäºä¿å¯"ï¼ä¿å¯æ¡£æ¡å¨å表ä¸å¯¼åºç»æä¸ä¸å¯è§ | |
| | | |
| | | å¤å®é»è¾ç±æå¡å±ç»ä¸å°è£
ï¼å¯çº§è¿æ»¤ä¸å¯çº§å¯è§æ§æ ¡éªä¸¤ä¸ªæ¹æ³ï¼ï¼**åç»ä»»ä½æ°å¢çæ¡£æ¡è¯»åå
¥å£é½å¿
须走åä¸å°è£
**ï¼ä»æºå¶ä¸æç»è¶æã |
| | | |
| | | **è´¢å¡æ¡£æ¡é»è®¤ä¿å¯**ï¼æ¡£æ¡åç±»ä¸"è´¢å¡æ¡£æ¡"åç±»çé»è®¤å¯çº§è¢«é¢ç½®ä¸º"ä¿å¯ï¼3ï¼"ï¼å æ¤ç±è´¢å¡æ¥é彿¡£çæçæ¡£æ¡èªå¨ç»§æ¿ä¿å¯çº§å«ï¼æ é人工设置ï¼ç¬¦åè´¢å¡åè¯çåè§è¦æ±ã |
| | | |
| | | ### 3.2 ç»ä¸å·¥ä½æµå¼æ |
| | | |
| | | **弿**ï¼Flowable 8.0.0ï¼å®æ´æ¯æ BPMN 2.0ã |
| | | |
| | | **æµç¨è®¾è®¡**ï¼éè¿"æµç¨æ¨¡å"页å¨çº¿ç»å¶æµç¨å¾ï¼bpmn-jsï¼ï¼æ¯æç¨æ·ä»»å¡ãæ¡ä»¶åæ¯ãå¹¶è¡ç½å
³ãä¼ç¾ï¼å¤äººåæ¶å®¡æ¹ï¼ãæç¾ï¼ä»»ä¸äººå®¡æ¹å³å¯ï¼ã便¬¡å®¡æ¹ï¼æé¡ºåºéä¸å®¡æ¹ï¼çèç¹æ¨¡å¼ï¼å®¡æ¹äººå¯é
置为æå®è§è²ãæå®é¨é¨ãæå®ç¨æ·ãç¨æ·ç»ãå起人èªéãä¸çº§ä¸»ç®¡ãè¿ç»å¤çº§ä¸»ç®¡ççç¥ã |
| | | |
| | | **é
å¥é
ç½®**ï¼åååå
¬âæµç¨ç®¡çä¸çå
个é
置页ï¼ï¼ |
| | | |
| | | | é
置项 | ä½ç¨ | |
| | | |---|---| |
| | | | æµç¨æ¨¡å | å¨çº¿ç»å¶ä¸åå¸ BPMN æµç¨å¾ | |
| | | | æµç¨è¡¨å | é
ç½®æµç¨ç»å®ç表åï¼æ¯æ"èªå®ä¹è¡¨å"ï¼å¨çº¿ææ½è®¾è®¡ï¼ä¸"ä¸å¡è¡¨å"ï¼ç´æ¥ç»å®ä¸å¡ç³»ç»é¡µé¢ï¼ä¸¤ç§æ¨¡å¼ | |
| | | | æµç¨åç±» | æä¸å¡åå½ç±»æµç¨ï¼å¦"课é¢ç«é¡¹å®¡æ¹""æ¡£æ¡åé
审æ¹"ï¼ï¼æ¯æåç¨ | |
| | | | ç¨æ·åç» | å°å®¡æ¹äººç»´æ¤ä¸ºé»è¾åç»ï¼å¦"æ¡£æ¡ç®¡çåç»""å管é¢å¯¼ç»"ï¼ï¼æµç¨ä¸æåç»æ´¾åä»»å¡ | |
| | | | æµç¨çå¬å¨ | éè¿ Java ç±»çå¬å¨å®ç°"æµç¨äºä»¶ â ä¸å¡åå"ï¼æ¯æ¬æ¹æ¡ä¸å¡éæçæ ¸å¿ææ¯ç¹ï¼è¯¦è§ä¸èï¼ | |
| | | | æµç¨è¡¨è¾¾å¼ | å®ä¹å¯å¤ç¨ç审æ¹äººè¡¨è¾¾å¼ä¸æ¡ä»¶è¡¨è¾¾å¼ | |
| | | |
| | | **ä¸å¡éä»¶é
ç½®**ï¼å¯é对å
·ä½æµç¨ä¸èç¹é
ç½®éä»¶ä¸ä¼ è¦æ±ï¼å®ç°"åªäºç¯èå¿
é¡»ä¸ä¼ ææ"çæµç¨çº§çº¦æã |
| | | |
| | | **审æ¹ä¸å¿**ï¼æä¾"æçå¾
å""æçå·²å""æåèµ·ç""æéæç"åç±»è§å¾ãæ¯ä¸ªä»»å¡æ¯æï¼åæã驳åãéåãå ç¾ã转派ãè¯è®ºãæ¥çæµç¨å¾ä¸æµè½¬è½¨è¿¹ã |
| | | |
| | | **æµç¨å®ä¾ä¸ä»»å¡ç®¡ç**ï¼é¢å管çåï¼å¯æ¥è¯¢è¿è¡ä¸ï¼å·²å®æå®ä¾ãå®ä½å½åèç¹ä¸å®¡æ¹äººãæ¥ç宿´å®¡æ¹è®°å½ä¸æµç¨è½¨è¿¹ãæ§è¡ç»æ¢ç干颿ä½ã |
| | | |
| | | **æµç¨è§æ¨¡**ï¼è¿è¡åºå·²é¨ç½² **39 æ¡æµç¨å®ä¹**ï¼å
¶ä¸æ¬æä¸å¡ç´æ¥ç¸å
³çåæ¡ä¸ºï¼ |
| | | |
| | | | æµç¨åç§° | æµç¨å®ä¹ Key | çæ¬ | 审æ¹å±çº§ | |
| | | |---|---|---|---| |
| | | | å
¥ä¼å®¡æ¹ | `ums_membership_approve` | 1 | æå
¥ä¼å®¡æ¹æµç¨é
ç½® | |
| | | | 课é¢ç«é¡¹å®¡æ¹ | `research_topic_approve` | 1 | å¤çº§å®¡æ¹ï¼ç³æ¥ä¹¦ä¸çº§æµè½¬ï¼ | |
| | | | æ¥éå®¡æ¹ | `finance_reimbursement_approve` | 1 | ææ¥éå®¡æ¹æµç¨é
ç½® | |
| | | | æ¡£æ¡åé
å®¡æ¹ | `archive_borrow_approve` | 1 | **两级**ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ | |
| | | |
| | | **ä¸å¡éææºå¶ï¼æµç¨çå¬å¨ååï¼**ï¼è¿æ¯æ¬æ¹æ¡çå
³é®ææ¯è®¾è®¡ãä¸å¡åæ®æäº¤å®¡æ¹æ¶ï¼éè¿æµç¨å®ä¾æ¥å£å建æµç¨å®ä¾å¹¶ä»¥ä¸å¡åæ® ID ä½ä¸º"ä¸å¡ Key"ï¼`businessKey`ï¼ï¼æµç¨ç¶æååæ¶ï¼ç±è¯¥ä¸å¡æ¨¡å注åç**ç¶æäºä»¶çå¬å¨**æ¥æ¶äºä»¶ï¼æ `businessKey` 忥ä¸å¡åæ®å¹¶ååç¶æãæºå¶ç¹ç¹ï¼ |
| | | |
| | | 1. **å¤çå¬å¨å¹¶è¡**ï¼ä¸åæµç¨ Key 注ååèªççå¬å¨ï¼äºä¸å¹²æ°ï¼å¦æ¥éçå¬å¨ä¸æ¡£æ¡åé
çå¬å¨è®¢é
ä¸åæµç¨ï¼ï¼ |
| | | 2. **忝容é**ï¼çå¬å¨å
é¨å¯¹"审æ¹éè¿""审æ¹é©³å""æ¤åï¼åæ¶"ä¸ç±»ç»æåå«å¤çï¼æ¯ç±»åæ¯ç¬ç«æè·å¼å¸¸ï¼å次åå失败ä¸å½±åå
¶ä»ä¸å¡ï¼ |
| | | 3. **å
è§£æµç¨å建å**ï¼æäº¤åå
è§£æå¯ç¨çæµç¨å®ä¹ï¼è¥æªé
ç½®åç´æ¥æç»å¹¶ç»åºå¯æä½çæç¤ºï¼æå¼å°"æµç¨å®ä¹"页é¢åå¸ï¼ï¼é¿å
äº§çæ æµç¨çå¤å¿èç¨¿ï¼ |
| | | 4. **é²éå¤ååºçå¹¶åæ§å¶**ï¼æ¡£æ¡åé
åºæ¯ï¼ï¼å®¡æ¹éè¿æ¶ä»¥**æ¡ä»¶æ´æ°**æ¹å¼å°æ¡£æ¡ç¶æç±"å¨åº"æ¹ä¸º"ååºä¸"ï¼`UPDATE ... WHERE id = ? AND status = 10`ï¼ãè¥æ¡£æ¡å·²è¢«å
¶ä»åé
åå ç¨ï¼æ´æ°å½±åè¡æ°ä¸º 0ï¼æ¤æ¶æåºæç¡®ä¸å¡å¼å¸¸å¹¶æ´ä½åæ»åé
åçç¶æååï¼**ä¿è¯ä¸ä¼åºç°"两份åé
ååæ¶ååºå䏿¡£æ¡"çèæ°æ®ï¼ä¸å¤±è´¥ä¿¡æ¯å¯¹ç¨æ·å¯è§**ï¼æç¤ºæ¡£æ¡å·²è¢«å ç¨åå ç¨çåé
åå·ï¼ã |
| | | |
| | | ### 3.3 ç»ä¸éä»¶ä¸å¿ |
| | | |
| | | ææä¸å¡éä»¶ç»ä¸èµ°ç³»ç»ç®¡ççéä»¶ä¸å¿ï¼**ä¸å¡è¡¨é¶æä»¶å段**ï¼ |
| | | |
| | | | æ¥éª¤ | æ¥å£ | 说æ | |
| | | |---|---|---| |
| | | | 1. ä¸ä¼ | `POST /system/storage-blob/upload` | ä¸ä¼ æä»¶å¾å°æä»¶ IDï¼`blobId`ï¼ | |
| | | | 2. ç»å® | `POST /system/storage-attachment/bind` | 以 `recordType`ï¼ä¸å¡æ è¯ï¼+ `recordId`ï¼åæ® IDï¼+ `blobId` 建ç«å
³è | |
| | | | 3. æ¥è¯¢ | `GET /system/storage-attachment/list` | æ `recordType` + `recordId` ååéä»¶å表 | |
| | | | 4. å é¤ | `DELETE /system/storage-attachment/delete` | è§£é¤å
³è | |
| | | |
| | | **recordType å½åè§è**ï¼`{模ååç¼}_{ä¸å¡è¡¨å}`ï¼æ¬æä½¿ç¨å¦ä¸ï¼ |
| | | |
| | | | ä¸å¡å¯¹è±¡ | recordType | |
| | | |---|---| |
| | | | æ¡£æ¡ | `archive_document` | |
| | | | è´¢å¡æ¥éåï¼åç¥¨ï¼ | `finance_reimbursement` | |
| | | | å
¥ä¼ç³è¯·ï¼å
¥ä¼ææï¼ | `ums_application` | |
| | | | ä¼åï¼ä¼åææï¼ | `ums_member` | |
| | | | è¯¾é¢æå | `research_guideline` | |
| | | | 课é¢ç³æ¥ä¹¦ | `research_application` | |
| | | | 课é¢ä¸å®¶è¯å®¡æç» | `research_topic_review` | |
| | | | 课é¢ç»è´¹æ¨ä»åè¯ | `research_fund_record` | |
| | | | ä¼ä¸å¾®ä¿¡æ´»å¨æ¥åææ | `wxcp_activity_signup` | |
| | | |
| | | 该æºå¶çä»·å¼ï¼ä¸æ¬¡æå
¥å
¨å±å¤ç¨ââå¤éä»¶ãå¤ç¨éãåå¨ä»è´¨å¯åæ¢ãæéå¯ç¬ç«æ§å¶ï¼ä¸ä¸å¡è¡¨ç»æä¸åæä»¶å卿¹å¼å½±åã |
| | | |
| | | ### 3.4 ç»ä¸ç¼ç è§å |
| | | |
| | | åæ®ç¼å·ç±ç³»ç»ç®¡çç"ç¼ç è§å"ç»ä¸çæï¼`/system/auto-code`ï¼ï¼éç¨"åç¼ + æ¥æ + æµæ°´å·"æ ¼å¼ï¼ä¿è¯å¯ä¸æ§ä¸ä¸å¡å¯è¯»æ§ãæ¬æååæ®ç¼å·åç¼å¦ä¸ï¼ |
| | | |
| | | | åæ® | åç¼ | ç¤ºä¾ | |
| | | |---|---|---| |
| | | | å
¥ä¼ç³è¯·å | `SQ` | `SQ20260928000001` | |
| | | | ä¼å | `HY` | `HY20260928000001` | |
| | | | è¯¾é¢æå | `GL` | `GL20260928000001` | |
| | | | 课é¢ç³æ¥ä¹¦ | `SB` | `SB20260928000001` | |
| | | | 课é¢ç«é¡¹ç¼å· | `LX` | `LX20260928000001` | |
| | | | è´¢å¡æ¥éå | `BX` | `BX20260928000001` | |
| | | | æ¡£æ¡ç¼å· | `DA` | `DA20260929000001` | |
| | | | æ¡£æ¡åé
åå· | `JY` | `JY20260929000001` | |
| | | |
| | | ### 3.5 ç»ä¸æ¶æ¯ä¸éç¥ |
| | | |
| | | 平尿ä¾ä¸æ¡è§¦è¾¾ééï¼æåºæ¯éæ©ï¼ |
| | | |
| | | | éé | æ¿è½½ä½ç½® | å
¸ååºæ¯ | |
| | | |---|---|---| |
| | | | ç«å
ä¿¡ | ç³»ç»ç®¡ç â æ¶æ¯ä¸å¿ â ç«å
信管ç | 审æ¹å¾
åæéãç³»ç»éç¥ | |
| | | | çä¿¡ | ç³»ç»ç®¡ç â æ¶æ¯ä¸å¿ â ç信管ç | éè¦èç¹æéï¼å¯å¯¹æ¥è¿è¥åééï¼ | |
| | | | é®ä»¶ | ç³»ç»ç®¡ç â æ¶æ¯ä¸å¿ â é®ç®±ç®¡ç | æ£å¼éç¥ãææåé | |
| | | | **ä¼ä¸å¾®ä¿¡æ¨é** | ä¼ä¸å¾®ä¿¡ â éç¥ç®¡çï¼æ´»å¨ç®¡ç | é¢åæåçæ´»å¨ä¸éç¥æ¨éï¼æ¯æ"å
¨åï¼æå®é¨é¨ï¼æå®æå"ä¸ç§èå´ | |
| | | |
| | | **ä¼ä¸å¾®ä¿¡ééè½å**ï¼ä»¥å®æ¹ä¼ä¸å¾®ä¿¡ SDK 对æ¥ï¼å®ç°ï¼ |
| | | |
| | | - **é讯å½åæ¥**ï¼å®æ¶æåä¼ä¸å¾®ä¿¡é¨é¨æ 䏿åå表ï¼`/wxcp/member/department/tree`ã`/wxcp/member/list`ï¼ï¼ä¾æ¨éæ¶éäººï¼ |
| | | - **æ¶æ¯æ¨é**ï¼æèå´æ¨ééç¥ææ´»å¨ï¼è¿åæ¨éç»æï¼æåï¼å¤±è´¥äººæ°ï¼ï¼ |
| | | - **åè°æ¥æ¶**ï¼æ¥æ¶ä¼ä¸å¾®ä¿¡ç URL éªè¯ä¸æ¶æ¯ï¼äºä»¶æ¨éï¼è¿å
¥åºç¨ãå
³æ³¨ãé讯å½åæ´ãææ¬æ¶æ¯ï¼ï¼æ¯æå å¯ç¾åæ ¡éªä¸æ¶æ¯è§£å¯åæ§ï¼ |
| | | - **æ¥åäºç»´ç **ï¼ä¸ºæ´»å¨çææ¥åäºç»´ç ï¼PNGï¼å¯ç´æ¥å±ç¤ºææå°ï¼ï¼äºç»´ç æåå¨çº¿æ¥åé¡µï¼æåæ«ç å³å¯æ¥åã |
| | | |
| | | ### 3.6 跨模å彿¡£èå¨ï¼æ¬æ¹æ¡æ ¸å¿äº®ç¹ï¼ |
| | | |
| | | **é®é¢**ï¼è¯¾é¢ç³æ¥ææãä¼åææãè´¢å¡åè¯å¤©ç¶äº§çäºåèªä¸å¡æ¨¡åï¼è¥æ å½éæºå¶ï¼å¿
ç¶å½¢æ"ä¸å¡ç³»ç»éæä¸ä»½ãæ¡£æ¡æéå¦ä¸ä»½ãæ£ç´¢æ¶ä¸¤è¾¹é½æ¾ä¸å°"çåè£å±é¢ã |
| | | |
| | | **è§£å³æè·¯**ï¼ç±æ¡£æ¡æ¨¡å坹夿´é²ä¸ç»æ 忥å£ï¼ä¸å¡æ¨¡åå¨åéçæ¶ç¹è°ç¨ï¼ä¸æ¬¡æ§å®æ"çææ¡£æ¡ + ç»å®éä»¶ + ååæ¥æºæ è®°"ã |
| | | |
| | | **æ¥å£è®¾è®¡**ï¼æ¡£æ¡æ¨¡åå¯¹å¤ RPC æ¥å£ï¼å
è·¯å¾ `archive/api/document`ï¼ï¼ |
| | | |
| | | | æ¥å£ | è¯ä¹ | |
| | | |---|---| |
| | | | ææ¥æºå½æ¡£ | å
¥å嫿¥æºç±»åãæ¥æºåæ® IDãæ¥æºåå·ãæ¥æºæ é¢ãç®æ æ¡£æ¡åç±»ç¼ç ãå¯çº§ãéä»¶ ID å表çï¼è¿åçæçæ¡£æ¡ ID | |
| | | | æ¯å¦å·²å½æ¡£ | ææ¥æºç±»å + æ¥æºåæ® ID æ¥è¯¢æ¯å¦å·²å½æ¡£ | |
| | | | ææ¥æºæ¥è¯¢æ¡£æ¡ | è¿å已彿¡£æ¡£æ¡çç¼å·ãæ é¢ãå¯çº§ãè½½ä½ãç¶æã彿¡£æ¥æç | |
| | | |
| | | **彿¡£å¹çä¿éï¼ä¸çº§é²æ¤ï¼**ï¼ |
| | | |
| | | 1. **ä¸å¡ä¾§çè·¯**ï¼å
æ"æ¥æºç±»å + æ¥æºåæ® ID"æ¥è¯¢æ¯å¦å·²å卿¡£æ¡ï¼å½ä¸åç´æ¥è¿åæ¢ææ¡£æ¡ IDï¼ä¸éå¤çæï¼ |
| | | 2. **æ¥æºè¡¨ååæ è®°**ï¼å½æ¡£æååï¼åæ¥æºä¸å¡è¡¨ååæ¡£æ¡ IDï¼`archive_document_id`ï¼ãåç«¯æ®æ¤æ¾ç¤º"已彿¡£"å¹¶éè彿¡£æé®ï¼ |
| | | 3. **éå¤å½æ¡£æ¦æª**ï¼è¥ç»è¿åä¸¤çº§é²æ¤éå¤å½æ¡£ï¼ä»ä¼æåºæç¡®å¼å¸¸ï¼æç¤ºæ¥æºåå·ä¸å·²çæçæ¡£æ¡ç¼å·ï¼ä¾¿äºç¨æ·ç´æ¥å®ä½å¹¶è·³è½¬ï¼ã |
| | | |
| | | **䏿¹å½æ¡£è卿ç»**ï¼ |
| | | |
| | | | æ¥æºæ¨¡å | è§¦åæ¡ä»¶ | ç®æ æ¡£æ¡åç±» | å¯çº§ | 带å
¥å
容 | æ¥æºè¡¨åå | |
| | | |---|---|---|---|---|---| |
| | | | 课é¢ç®¡ç | ç³æ¥ä¹¦ç¶æä¸º"å·²ç«é¡¹" | è¯¾é¢æ¡£æ¡ | å
é¨ï¼2ï¼ | ç«é¡¹ç¼å·ä½ä¸ºæ¥æºåå·ï¼ç³æ¥ä¹¦éä»¶éæ¡£å¸¦å
¥ | `research_application.archive_document_id` | |
| | | | ä¼å管ç | ä¼åç¶æä¸º"æ£å¸¸" | ä¼åæ¡£æ¡ | å
é¨ï¼2ï¼ | ä¼åç¼å·ä½ä¸ºæ¥æºåå·ï¼ä¼åææé档带å
¥ | `ums_member.archive_document_id` | |
| | | | è´¢å¡æ¥é | æ¥éåç¶æä¸º"å·²éè¿" | è´¢å¡æ¡£æ¡ | **ä¿å¯ï¼3ï¼** | æ¥éåå·ä½ä¸ºæ¥æºåå·ï¼å票éä»¶éæ¡£å¸¦å
¥ | `finance_reimbursement.archive_document_id` | |
| | | |
| | | **è´¢å¡åºæ¯çç¹æ®å¤çï¼å å èéæ¿æ¢ï¼**ï¼è´¢å¡æ¥éåæç"彿¡£"å¨ä½è´è´£å°æ¥éåèªèº«ç¶æç±"å·²éè¿"æ¹ä¸º"已彿¡£"å¹¶è®°å½å½æ¡£æ¶é´ï¼æ¬æ¹æ¡å¨æ¤åºç¡ä¸**追å **çæè´¢å¡æ¡£æ¡ã两è
åå
¥ä¸åæ°æ®è¡¨ãè¯ä¹æ£äº¤ï¼ä¸å¨åä¸äºå¡å
宿ââå³ï¼**彿¡£æå = æ¥éåç¶æå·²å½æ¡£ + è´¢å¡æ¡£æ¡å·²çæï¼äºè
è¦ä¹åæ¶æåï¼è¦ä¹åæ¶åæ»**ï¼ä¸ä¼åºç°"æ¥éå彿¡£äºä½æ¡£æ¡æ²¡çæ"çåæåã |
| | | |
| | | **彿¡£å¸¦æ¥çä¸å¡ä»·å¼**ï¼ |
| | | |
| | | - 彿¡£åçææè¿å
¥ç»ä¸çæ¡£æ¡æ£ç´¢ï¼ææ é¢ãå
³é®è¯ãæ¥æºåå·ãåç±»ãå¯çº§ãç¶æå¤ç»´æ£ç´¢ï¼ï¼ |
| | | - è´¢å¡ç±»æ¡£æ¡èªå¨è½å
¥"ä¿å¯"å¯çº§ï¼å¤©ç¶åæééç¦»ä¿æ¤ï¼ |
| | | - æ¡£æ¡å¯è¢«åé
并走两级审æ¹ï¼å½¢æ"彿¡£ â åé
â å½è¿"ç宿´éç¯ï¼ |
| | | - æ¡£æ¡ç»è®¡å¯å®æ¶åæ å类档æ¡çåé䏿µè½¬ã |
| | | |
| | | ### 3.7 模åé´æ°æ®æµæ»è§ |
| | | |
| | | ``` |
| | | ââââââââââââââââââââââââ |
| | | å
¥ä¼ç³è¯· ââ审æ¹âââ¶ â ä¼å管ç â |
| | | (ums_application) â (ums_member) â |
| | | ââââââââââââ¬ââââââââââââ |
| | | â 彿¡£ï¼ä¼åææï¼ |
| | | ââââââââââââ¼ââââââââââââ |
| | | è¯¾é¢æå âⶠ课é¢ç³æ¥ â â |
| | | ââ¶ ä¸å®¶è¯å®¡ ââ¶ ç«é¡¹ â æ¡£æ¡ç®¡ç â |
| | | (research_*) â (archive_document) â |
| | | â â â |
| | | â 彿¡£ï¼è¯¾é¢ææï¼â åç±»æ / æ¡£æ¡ä¸»è¡¨ â |
| | | âââââââââââââââ¶â åé
å / ç»è®¡ â |
| | | ââââââââââââ²ââââââââââââ |
| | | â 彿¡£ï¼è´¢å¡åè¯ â ä¿å¯ï¼ |
| | | ââââââââââââ´ââââââââââââ |
| | | æ¥éå ââ审æ¹âââ¶ â è´¢å¡æ¥é â |
| | | (finance_*) ââââââââââââââââââââââââ |
| | | |
| | | ââââââââââââââââââââââââââââââââââââââââ |
| | | â åååå
¬ï¼BPM 审æ¹å¼æï¼ â |
| | | â 为以ä¸åç±»ä¸å¡æä¾ç»ä¸çå®¡æ¹æµè½¬è½å â |
| | | â å
¥ä¼å®¡æ¹ / 课é¢ç«é¡¹å®¡æ¹ / æ¥éå®¡æ¹ / â |
| | | â æ¡£æ¡åé
å®¡æ¹ â |
| | | ââââââââââââââââââââââââââââââââââââââââ |
| | | |
| | | ââââââââââââââââââââââââââââââââââââââââ |
| | | â ä¼ä¸å¾®ä¿¡ï¼å°éç¥ / æ´»å¨æ¨éè³æå â |
| | | â ç³»ç»ç®¡çï¼èº«ä»½ / æé / åå
¸ / éä»¶ / â |
| | | â ç¼ç / æ¶æ¯ / å®¡è®¡ï¼æ¯æä»¥ä¸å
¨é¨ â |
| | | ââââââââââââââââââââââââââââââââââââââââ |
| | | ``` |
| | | |
| | | **åæ¡è´¯éé¾**ï¼å¯ç´æ¥ä½ä¸ºæ¼ç¤ºä¸éªæ¶ä¸»çº¿ï¼ |
| | | |
| | | | é¾è·¯ | æµè½¬è¿ç¨ | |
| | | |---|---| |
| | | | ä¼åé¾ | æäº¤å
¥ä¼ç³è¯· â BPM å
¥ä¼å®¡æ¹ â 审æ¹éè¿çæä¼å â ä¸é®å½æ¡£çæä¼åæ¡£æ¡ â åé
å®¡æ¹ â å½è¿ | |
| | | | 课é¢é¾ | åå¸è¯¾é¢æå â æäº¤è¯¾é¢ç³æ¥ä¹¦ â ç«é¡¹å®¡æ¹ï¼å¤çº§ï¼â ä¸å®¶è¯å®¡æå â ç«é¡¹ â ç»è´¹æ¨ä»ï¼å¯å
³èæ¥éï¼â åå¸ç«é¡¹éç¥ â ä¸é®å½æ¡£çæè¯¾é¢æ¡£æ¡ | |
| | | | è´¢å¡é¾ | å建æ¥éåï¼å«å¤æ¡æç»ä¸å票éä»¶ï¼â æäº¤æ¥éå®¡æ¹ â 审æ¹éè¿ â 彿¡£ï¼æ¥éåç¶æç½®"已彿¡£" + çæä¿å¯çº§è´¢å¡æ¡£æ¡ï¼ | |
| | | | è§¦è¾¾é¾ | å建ä¼ä¸å¾®ä¿¡æ´»å¨ï¼éç¥ â éæ©æ¨éèå´ï¼å
¨åï¼é¨é¨ï¼æåï¼â æ¨é â ä¼åæ«ç æ¥å â ç¾å° â æ¥çæ¥åç»è®¡ | |
| | | |
| | | ### 3.8 对å¤å¼æ¾æ¥å£è§è |
| | | |
| | | | è§è项 | å
容 | |
| | | |---|---| |
| | | | 飿 ¼ | RESTfulï¼ç»ä¸åç¼ `/admin-api` | |
| | | | æ¹æ³è¯ä¹ | `GET` æ¥è¯¢ã`POST` æ°å¢ã`PUT` æ´æ°ã`DELETE` å é¤ | |
| | | | ç»ä¸è¿åä½ | `{ "code": 0, "data": ..., "msg": "..." }`ï¼`code = 0` 表示æåï¼é 0 为ä¸å¡é误ç å¹¶éå¯è¯»æç¤º | |
| | | | å页 | ç»ä¸ `pageNo` / `pageSize` å
¥åï¼è¿å `list` + `total` | |
| | | | é´æ | 请æ±å¤´æºå¸¦ `Authorization: Bearer <token>` | |
| | | | æ¥å£ææ¡£ | ææ¨¡ååç»èªå¨çæ OpenAPI ææ¡£ï¼å¯å¨çº¿è°è¯ | |
| | | | é误æç¤º | éµå¾ª"å
·ä½ç»´åº¦ + åæ¹å®é
å¼ + 坿§è¡å¨ä½"ååï¼ç¦æ¢ç¬¼ç»æç¤ºï¼ä¾¿äºè¿ç»´ä¸ç¨æ·èªå©æé | |
| | | |
| | | ### 3.9 éææ¸
åæ±æ» |
| | | |
| | | | éæå¯¹è±¡ | éææ¹å¼ | 说æ | |
| | | |---|---|---| |
| | | | ä¼ä¸å¾®ä¿¡ | 宿¹ SDKï¼æå¡ç«¯ API + åè°ï¼ | é讯å½åæ¥ãæ¶æ¯æ¨éãæ´»å¨æ¥åäºç»´ç ãåè°æ¥æ¶ | |
| | | | çä¿¡æå¡å | å¯é
ç½®çä¿¡éé | çä¿¡éç¥ï¼æ¥å£é¢çï¼æéå¼éï¼ | |
| | | | é®ä»¶æå¡å¨ | SMTP | é®ä»¶éç¥ | |
| | | | 对象åå¨ | æ¬å°ï¼S3 å
¼å®¹ | éä»¶äºè¿å¶åå¨ï¼é
ç½®åæ¢ | |
| | | | ç»ä¸èº«ä»½ï¼å¯éï¼ | OAuth2 / 䏿¹ç»å½ | å¯å¯¹æ¥æ¢æè´¦å·ä½ç³»å®ç°åç¹ç»å½ | |
| | | | 弿¾è½å | OpenAPI + API å¯é¥ç®¡ç | ä¾ç¬¬ä¸æ¹ç³»ç»ææéè°ç¨å¹³å°æ¥å£ | |
| | | |
| | | --- |
| | | |
| | | ## åãåè½æ¹æ¡ |
| | | |
| | | 以ä¸é个åç³»ç»ç»åºåè½æ¸
åãæ¯èå
å«ï¼æ¨¡åå®ä½ãåè½æ¸
åãå
³é®æ°æ®é¡¹ä¸ç¶ææºãä¸å
¶ä»æ¨¡åçååå
³ç³»ã |
| | | |
| | | ### 4.1 åååå
¬ï¼`/bpm`ï¼ |
| | | |
| | | #### 4.1.1 模åå®ä½ |
| | | |
| | | å
¨å¹³å°ç**审æ¹ä¸æµç¨åºåº§**ãå®ä¸æ¿è½½å
·ä½ä¸å¡æ°æ®ï¼èæ¯ä¸ºè´¢å¡æ¥éãä¼å管çã课é¢ç®¡çãæ¡£æ¡åé
çä¸å¡æä¾"å¯é
ç½®ãå¯è¿½æº¯ãå¯å¹²é¢"çæµç¨æµè½¬è½åï¼å¹¶æä¾éç¥å
¬åä¸è½»é OA åºç¨ã |
| | | |
| | | #### 4.1.2 åè½æ¸
å |
| | | |
| | | **ï¼1ï¼æµç¨ç®¡ç** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | æµç¨æ¨¡å | å¨çº¿å¯è§åç»å¶ BPMN 2.0 æµç¨å¾å¹¶åå¸ï¼æ¯æç¨æ·ä»»å¡ãæ¡ä»¶åæ¯ãå¹¶è¡ç½å
³ï¼æ¯æä¼ç¾ï¼å¤äººåæ¶å®¡æ¹ï¼ãæç¾ï¼ä»»ä¸äººå®¡æ¹ï¼ã便¬¡å®¡æ¹ï¼æé¡ºåºéä¸å®¡æ¹ï¼çå¤äººå®¡æ¹æ¨¡å¼ | |
| | | | æµç¨è¡¨å | é
ç½®æµç¨ç»å®ç表åï¼æ¯æä¸¤ç§æ¨¡å¼ï¼â èªå®ä¹è¡¨åââå¨çº¿ææ½è®¾è®¡åæ®µï¼æ éå¼åï¼â¡ ä¸å¡è¡¨åââç´æ¥ç»å®ä¸å¡ç³»ç»æ¢æé¡µé¢ï¼ä¸å¡æ°æ®ä¸æµç¨æ°æ®åå±å±ç¤º | |
| | | | æµç¨åç±» | æä¸å¡å对æµç¨å½ç±»ï¼å¦"å
¥ä¼å®¡æ¹""课é¢ç«é¡¹å®¡æ¹""æ¥é审æ¹""æ¡£æ¡åé
审æ¹"ï¼ï¼æ¯æå¯ç¨ï¼åç¨ | |
| | | | ç¨æ·åç» | å°å®¡æ¹äººç»´æ¤ä¸ºé»è¾åç»ï¼æµç¨ä¸æåç»æ´¾åä»»å¡ï¼äººåå卿¶åªéè°æ´åç»ï¼æ ééæ¡ä¿®æ¹æµç¨ | |
| | | | æµç¨çå¬å¨ | é
ç½®æµç¨äºä»¶çå¬å¨ï¼Java ç±»ï¼äºä»¶çå¬ï¼ï¼å®ç°æµç¨ç¶æååæ¶èªå¨ååä¸å¡åæ®ç¶æï¼æ¯ä¸å¡éæçæ ¸å¿æºå¶ | |
| | | | æµç¨è¡¨è¾¾å¼ | å®ä¹å¯å¤ç¨ç审æ¹äººè¡¨è¾¾å¼ä¸æ¡ä»¶è¡¨è¾¾å¼ | |
| | | | ä¸å¡éä»¶é
ç½® | é对æµç¨ä¸èç¹é
ç½®éä»¶ä¸ä¼ è¦æ±ï¼å®ç°"åªäºç¯èå¿
é¡»ä¸ä¼ ææ"çæµç¨çº§çº¦æ | |
| | | | æµç¨å®ä¾ | æ¥è¯¢è¿è¡ä¸ä¸å·²å®æçæµç¨å®ä¾ï¼æ¥çå½åèç¹ã审æ¹äººãæµè½¬è½¨è¿¹ä¸åå²è®°å½ï¼æ¯æç»æ¢ç管çå¹²é¢ | |
| | | | æµç¨ä»»å¡ | æ¥è¯¢å
¨é¨æµç¨ä»»å¡ï¼æ¯æå®¡æ¹ï¼åæï¼é©³åï¼éåï¼ãå ç¾ã转派ãæéçæä½ | |
| | | |
| | | **ï¼2ï¼å®¡æ¹ä¸å¿** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | æçå¾
å | ååºå½åç¨æ·å¾
å¤ççä»»å¡ï¼å¯ç´æ¥å®¡æ¹ï¼æ¯ææ¹éæä½ | |
| | | | æçå·²å | ååºå½åç¨æ·å·²å¤ççä»»å¡ï¼å¯å溯æ¥çå®¡æ¹æè§ä¸èæ¶ | |
| | | | æåèµ·ç | ååºå½åç¨æ·åèµ·çæµç¨ï¼å¯è·è¸ªè¿åº¦ãæ¤åæªå®ææµç¨ | |
| | | | æéæç | ååºæéç»å½åç¨æ·çæµç¨ï¼å¯æ¥é
ä½ä¸åä¸å®¡æ¹ | |
| | | | æµç¨è¯¦æ
| å±ç¤ºä¸å¡è¡¨åå
容 + æµç¨å¾è½¨è¿¹ + éèç¹å®¡æ¹è®°å½ï¼å®¡æ¹äººãæ¶é´ãæè§ãç»æï¼ | |
| | | |
| | | **ï¼3ï¼éç¥å
Œ** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | å
¬å管ç | å
¬åçå建ãç¼è¾ãåå¸ãæ¤åï¼æ¯æå¯ææ¬æ£æä¸éä»¶ | |
| | | | é
è¯»åæ§ | è®°å½å
¬åçé
读æ
åµï¼ä¾¿äºç¡®è®¤å
³é®éç¥å·²è§¦è¾¾ | |
| | | |
| | | **ï¼4ï¼OA åºç¨** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | 请åç³è¯· | æä¾é¨é¨è¯·åç³è¯·ä¸å®¡æ¹çæ å示ä¾ï¼éªè¯æµç¨å¼æçéç¨æ§ï¼å¯ä½ä¸ºå
¶å®è½»é OA åæ®çæ¨¡æ¿ | |
| | | |
| | | **ï¼5ï¼æºè½è½åå
¥å£** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | 大模å API å¯é¥ç®¡ç | ç»´æ¤å¤§æ¨¡åæå¡åçæ¥å
¥å¯é¥ | |
| | | | 模å管ç | ç»´æ¤å¯ç¨çå¤§æ¨¡åæ¸
åä¸åæ°é
ç½® | |
| | | | ç¥è¯åºç®¡ç | æå»ºä¸å¡ç¥è¯åºï¼ç¨äºæºè½é®ç䏿æ¬è¾
å©çæ | |
| | | |
| | | > 说æï¼ä¸è¿°æºè½è½å为平å°å¢å¼ºé¡¹ï¼å¯æææ äººè¦æ±å¯ç¨æå
³éï¼ä¸å½±åä¸å¤§åç³»ç»çæ ¸å¿ä¸å¡åè½ã |
| | | |
| | | #### 4.1.3 å
³é®è®¾è®¡ |
| | | |
| | | | è®¾è®¡ç¹ | 说æ | |
| | | |---|---| |
| | | | 表å忍¡ | èªå®ä¹è¡¨åéåç®å审æ¹ï¼å¦è¯·åï¼ï¼ä¸å¡è¡¨åéå夿ä¸å¡ï¼å¦æ¥éåãç³æ¥ä¹¦ï¼ï¼ç´æ¥å¤ç¨ä¸å¡é¡µé¢ï¼é¿å
éå¤å¼å表å | |
| | | | 审æ¹äººçç¥ | æ¯æè§è²ãé¨é¨ãç¨æ·ãç¨æ·ç»ãå起人èªéãä¸çº§ä¸»ç®¡ãè¿ç»å¤çº§ä¸»ç®¡ä¸ç±»çç¥ï¼è¦çå¦ä¼å¸¸è§å®¡æ¹å
³ç³» | |
| | | | ç»æåå | æµç¨ç»æéè¿çå¬å¨ååä¸å¡åæ®ï¼ä¸å¡æ¨¡åæ é轮询ï¼ç¶æå®æ¶ä¸è´ | |
| | | | æµç¨å¯å¹²é¢ | 管çå坿¥çå
¨é¨å®ä¾ä¸ä»»å¡ï¼å¿
è¦æ¶ç»æ¢æµç¨ï¼é¿å
æµç¨å¡æ»å¯¼è´ä¸å¡åæ» | |
| | | |
| | | #### 4.1.4 ä¸å
¶ä»æ¨¡åçåå |
| | | |
| | | åååå
¬æ¯"被ä¾èµæ¹"ï¼è´¢å¡æ¥éãä¼å管çã课é¢ç®¡çãæ¡£æ¡åé
å卿¤ç»è®°æµç¨å®ä¹å¹¶å¤ç¨å
¶å®¡æ¹è½åãå·²é¨ç½²çç¸å
³æµç¨å®ä¹è§ 3.2 èã |
| | | |
| | | --- |
| | | |
| | | ### 4.2 è´¢å¡æ¥éï¼`/finance`ï¼ |
| | | |
| | | #### 4.2.1 模åå®ä½ |
| | | |
| | | å¦ä¼ç»è´¹æ¯åºç**ç³è¯·ã审æ¹ä¸å½æ¡£**éç¯ãè§£å³çº¸è´¨æ¥é"审æ¹å±çº§é äººå·¥å¤æãåç¥¨æ æ³å
³èãåè¯æ æ³å½æ¡£"çé®é¢ã |
| | | |
| | | #### 4.2.2 åè½æ¸
å |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | æ¥éåæ°å¢ | å½å
¥æ¥éæ é¢ãç³è¯·æ¥æãæ¥éäºç±ï¼æ·»å 夿¡æ¥éæç»ï¼è´¹ç¨ç±»åãéé¢ãåçæ¥æã说æï¼ï¼ç³»ç»èªå¨å计æ¥éæ»éé¢ | |
| | | | æ¥éæç» | ä¸åå¤è¡è´¹ç¨é¡¹ï¼è´¹ç¨ç±»åç±åå
¸é©±å¨ï¼å·®æ
ãåå
¬ãæå¾
ã交éãå
¶ä» | |
| | | | å票éä»¶ä¸ä¼ | éè¿ç»ä¸éä»¶ä¸å¿ä¸ä¼ å票影åï¼æ¯æå¤å¼ ï¼å表ä¸è¯¦æ
æ¾ç¤º"æ¯å¦ä¸ä¼ å票"æ è¯ | |
| | | | æ¥éåç¼è¾ | ä¿®æ¹åæ®ä¸æç»ï¼æç¶æçº¦æå¯ç¼è¾èå´ï¼å®¡æ¹ä¸ï¼å·²éè¿ï¼å·²å½æ¡£ä¸å
许ç¼è¾ï¼ | |
| | | | æ¥éåå é¤ | æç¶æçº¦æå¯å é¤èå´ï¼é¿å
å·²æµè½¬åæ®è¢«è¯¯å | |
| | | | å页æ¥è¯¢ä¸æ£ç´¢ | ææ¥éåå·ãæ é¢ãç¶æãç³è¯·äººãç³è¯·æ¥æåºé´æ£ç´¢ï¼å页å±ç¤º | |
| | | | Excel å¯¼åº | æå½åæ£ç´¢æ¡ä»¶å¯¼åºæ¥éåæç»ï¼å段å«åå·ãæ é¢ãéé¢ãç¶æãç³è¯·äººãç³è¯·æ¥æã彿¡£æ¶é´çï¼å¯¼åºå¨ä½è®°å½æä½æ¥å¿ | |
| | | | æäº¤å®¡æ¹ | éæ©å¯ç¨çæ¥éå®¡æ¹æµç¨å¹¶æäº¤ï¼æµç¨å®ä¾å建ååæ®è¿å
¥"审æ¹ä¸" | |
| | | | 审æ¹ç»æåå | 审æ¹éè¿ â "å·²éè¿"ï¼å®¡æ¹é©³å â "已驳å"ï¼è®°å½é©³ååå ï¼ï¼æ¤å â åå°"è稿" | |
| | | | 彿¡£ | 对"å·²éè¿"çæ¥éåæ§è¡å½æ¡£ï¼**æ¥éåç¶æç½®"已彿¡£"å¹¶è®°å½å½æ¡£æ¶é´**ï¼åæ¶**çæä¿å¯çº§è´¢å¡æ¡£æ¡**å¹¶æå票éä»¶éæ¡£å¸¦å
¥ï¼æååæç¤º"已彿¡£å¹¶çææ¡£æ¡ãæ¡£æ¡ç¼å·ã" | |
| | | |
| | | #### 4.2.3 å
³é®æ°æ®é¡¹ä¸ç¶ææº |
| | | |
| | | **å
³é®æ°æ®é¡¹**ï¼æ¥éåå·ãæ¥éæ é¢ãæ¥éæ»éé¢ãç¶æãç³è¯·äººãç³è¯·æ¥æãæµç¨å®ä¾ IDã彿¡£æ¶é´ã彿¡£çæçæ¡£æ¡ IDã夿³¨ãæ¥éæç»å表ãå票éä»¶å表ã |
| | | |
| | | **ç¶ææº**ï¼ |
| | | |
| | | ``` |
| | | è稿(0) ââæäº¤å®¡æ¹ââⶠ审æ¹ä¸(15) |
| | | â² âââ 审æ¹éè¿ âââ¶ å·²éè¿(20) ââ彿¡£âââ¶ å·²å½æ¡£(40) |
| | | â âââ 审æ¹é©³å ââⶠ已驳å(35)ï¼å¯ä¿®æ¹åéæ°æäº¤ï¼ |
| | | âââæ¤åâââââââââââââââ |
| | | ``` |
| | | |
| | | | ç¶æå¼ | åç§° | 坿§è¡å¨ä½ | |
| | | |---|---|---| |
| | | | 0 | è稿 | ç¼è¾ãå é¤ãæäº¤å®¡æ¹ | |
| | | | 15 | 审æ¹ä¸ | æ¤åãæ¥ç审æ¹è¿åº¦ | |
| | | | 20 | å·²éè¿ | 彿¡£ãæ¥çãå¯¼åº | |
| | | | 35 | 已驳å | ç¼è¾ãå é¤ãéæ°æäº¤ | |
| | | | 40 | 已彿¡£ | æ¥çã导åºï¼ä¸å¯åä¿®æ¹ï¼ | |
| | | |
| | | #### 4.2.4 ä¸å
¶ä»æ¨¡åçåå |
| | | |
| | | | åå对象 | ååå
容 | |
| | | |---|---| |
| | | | åååå
¬ | å¤ç¨æ¥éå®¡æ¹æµç¨å¼æï¼å®¡æ¹ç»æç»çå¬å¨åååæ®ç¶æ | |
| | | | æ¡£æ¡ç®¡ç | 彿¡£æ¶çæä¿å¯çº§è´¢å¡æ¡£æ¡ï¼å¹¶åæ¥éåååæ¡£æ¡ ID | |
| | | | ç³»ç»ç®¡ç | ç³è¯·äººåèªèº«ä»½ä½ç³»ï¼å票éä»¶èµ°ç»ä¸éä»¶ä¸å¿ï¼éé¢ä¸åæ®è®°å½æä½æ¥å¿ | |
| | | | 课é¢ç®¡ç | 课é¢ç»è´¹æ¨ä»å¯å
³èæ¥éæµç¨ï¼å½¢æ"æ¨ä»ç³è¯· â æ¥é审æ¹"çæ¯åºåè¯é¾ | |
| | | |
| | | --- |
| | | |
| | | ### 4.3 ä¼å管çï¼`/ums`ï¼ |
| | | |
| | | #### 4.3.1 模åå®ä½ |
| | | |
| | | å¦ä¼ä¸»ä½ï¼ä¸ªäººä¼åä¸åä½ä¼åï¼ç**å
¨çå½å¨æç®¡ç**ï¼ä»å
¥ä¼ç³è¯·ã审æ¹ã建档å°åå½ä¸é讯å½ç»´æ¤ã |
| | | |
| | | #### 4.3.2 åè½æ¸
å |
| | | |
| | | **ï¼1ï¼å
¥ä¼ç³è¯·** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | å
¥ä¼ç³è¯·æ°å¢ | æä¼åç±»åï¼ä¸ªäººä¼åï¼åä½ä¼åï¼å¨æå½å
¥ä¸ååæ®µç»å | |
| | | | å·®å¼ååæ®µ | 个人ä¼åï¼å§åãå·¥ä½åä½ãèç§°ãç ç©¶æ¹åï¼åä½ä¼åï¼åä½åç§°ãæ³å®ä»£è¡¨äººãç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ãåä½ç®ä»ãè系人 | |
| | | | å
Œ
±å段 | èç³»çµè¯ãé®ç®±ãç³è¯·ç级ãæå±å°åºãæå±è¡ä¸ãç³è¯·è¯´æ | |
| | | | ç³è¯·ææä¸ä¼ | éè¿ç»ä¸éä»¶ä¸å¿ä¸ä¼ å
¥ä¼ææï¼å¦åä½è¥ä¸æ§ç
§ã个人èµè´¨è¯æï¼ï¼æ¯æå¤éä»¶ | |
| | | | ç¼è¾ä¸å é¤ | æç¶æçº¦æï¼å®¡æ¹ä¸ä¸å¯ç¼è¾ï¼å·²éè¿ä¸å¯å é¤ï¼ | |
| | | | å页æ£ç´¢ | æç³è¯·ç¼å·ãç³è¯·äººï¼åä½åç§°ãä¼åç±»åãç¶æãç³è¯·æ¶é´æ£ç´¢ | |
| | | | æäº¤å®¡æ¹ | éæ©å
¥ä¼å®¡æ¹æµç¨å¹¶æäº¤ï¼è¿å
¥"审æ¹ä¸" | |
| | | | 审æ¹ç»æåå | 审æ¹éè¿ â "å·²éè¿"å¹¶çæä¼åï¼é©³å â "已驳å"ï¼è®°å½åå ï¼ï¼æ¤å â å"è稿" | |
| | | |
| | | **ï¼2ï¼ä¼åå表** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | ä¼å建档 | å
¥ä¼ç³è¯·å®¡æ¹éè¿åèªå¨çæä¼åæ¡£æ¡ï¼è®°å½ä¼åç¼å·ãä¼åç±»åãä¼åç级ãå
¥ä¼æ¥æãæææè³ | |
| | | | ä¼åç级 | 个人ä¼åççº§ï¼æ®éä¼åãçäºã常å¡çäºãå¯çäºé¿ãçäºé¿ï¼åä½ä¼åççº§ï¼æ®éåä½ãçäºåä½ãå¯ä¼é¿åä½ãä¼é¿åä½ | |
| | | | ä¼åç¶æ | æ£å¸¸ãæå | |
| | | | ä¼åä¿¡æ¯ç»´æ¤ | ç»´æ¤èç³»æ¹å¼ãç ç©¶æ¹åãåä½ç®ä»ã夿³¨çï¼ä¼åææé件管ç | |
| | | | å页æ£ç´¢ | æä¼åç¼å·ãå§åï¼åä½åç§°ãä¼åç±»åãç级ãç¶æãæå±å°åºãæå±è¡ä¸æ£ç´¢ | |
| | | | å
³èç³»ç»è´¦å· | ä¼åå¯å
³èå¹³å°ç¨æ·è´¦å·ï¼ä¼åç»å½å坿¥çèªèº«ä¿¡æ¯ | |
| | | | 彿¡£ | 对"æ£å¸¸"ç¶æçä¼åä¸é®å½æ¡£ï¼çæä¼åæ¡£æ¡å¹¶å°ä¼åææé档带å
¥ï¼å·²å½æ¡£åæé®éèï¼é¿å
éå¤å½æ¡£ | |
| | | |
| | | **ï¼3ï¼ä¼åé讯å½** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | é讯å½è§å¾ | 以é讯å½å½¢å¼å±ç¤ºä¼ååå½ï¼ä¾¿äºå
鍿¥é
ä¸èç» | |
| | | | å级æ¥è¯¢ | æä¼åç±»åãç级ãå°åºãè¡ä¸çé | |
| | | | èç³»æ¹å¼å±ç¤º | å±ç¤ºèç³»çµè¯ãé®ç®±ãå·¥ä½åä½çï¼åè§è²æéæ§å¶ï¼ | |
| | | |
| | | #### 4.3.3 å
³é®æ°æ®é¡¹ä¸ç¶ææº |
| | | |
| | | **å
¥ä¼ç³è¯·ç¶æ**ï¼è稿(0) â 审æ¹ä¸(15) â å·²éè¿(20) / 已驳å(35)ã |
| | | |
| | | **ä¼åç¶æ**ï¼æ£å¸¸(1) / æå(0)ã |
| | | |
| | | **å
³é®æ°æ®é¡¹**ï¼ç³è¯·ç¼å·ãä¼åç±»åãç³è¯·äººï¼åä½åç§°ãèç³»çµè¯ãé®ç®±ãæ³å®ä»£è¡¨äººãç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ãç ç©¶æ¹åãå·¥ä½åä½ãèç§°ãç³è¯·ç级ãå°åºç¼ç ãè¡ä¸ãç¶æãæµç¨å®ä¾ IDãå建人ãéä»¶å表ï¼ä¼å侧妿ä¼åç¼å·ãå
³èç¨æ· IDãæ¥æºç³è¯·å IDãä¼åç级ãå
¥ä¼æ¥æãæææè³ã彿¡£çæçæ¡£æ¡ IDã |
| | | |
| | | #### 4.3.4 ä¸å
¶ä»æ¨¡åçåå |
| | | |
| | | | åå对象 | ååå
容 | |
| | | |---|---| |
| | | | åååå
¬ | å¤ç¨å
¥ä¼å®¡æ¹æµç¨ï¼å®¡æ¹éè¿è§¦å建ä¼åé»è¾ | |
| | | | æ¡£æ¡ç®¡ç | ä¼åä¸é®å½æ¡£çæä¼åæ¡£æ¡ï¼ä¼åæææä¸ºå¯åé
çæ¡£æ¡èµäº§ | |
| | | | 课é¢ç®¡ç | ä¼åæ¯è¯¾é¢ç³æ¥ç主ä½ï¼ç³æ¥ä¹¦å
³èä¼å IDï¼ | |
| | | | ä¼ä¸å¾®ä¿¡ | ä¼åï¼æåå¯éè¿ä¼ä¸å¾®ä¿¡æ¥æ¶æ´»å¨ä¸éç¥ | |
| | | | ç³»ç»ç®¡ç | ä¼åå¯å
³èå¹³å°ç¨æ·è´¦å·ï¼å¤ç¨ç»ä¸èº«ä»½ä¸æéä½ç³» | |
| | | |
| | | --- |
| | | |
| | | ### 4.4 ä¼ä¸å¾®ä¿¡ï¼`/wxcp`ï¼ |
| | | |
| | | #### 4.4.1 模åå®ä½ |
| | | |
| | | é¢åæåç**ç§»å¨ç«¯è§¦è¾¾ä¸æ´»å¨ç»ç»**è½åãæéä¼ä¸å¾®ä¿¡ï¼å®ç°"éç¥ä¸æ´»å¨ä¸é®æ¨éè³ææºãæåæ«ç æ¥åãç°åºæ«ç ç¾å°"ï¼æ¿ä»£éä¸è½¬åã |
| | | |
| | | #### 4.4.2 åè½æ¸
å |
| | | |
| | | **ï¼1ï¼æ´»å¨ç®¡ç** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | æ´»å¨æ°å¢ä¸ç¼è¾ | å½å
¥æ´»å¨æ é¢ã详æ
ï¼å¯ææ¬ï¼ãå°é¢å¾ãæ´»å¨å°ç¹ãæ´»å¨èµ·æ¢æ¶é´ãæ¥åèµ·æ¢æ¶é´ãæ¥å人æ°ä¸éï¼0 表示ä¸éï¼ã夿³¨ | |
| | | | æ´»å¨åå¸ | è稿 â å·²åå¸ï¼è¿å
¥å¯æ¥åç¶æ | |
| | | | æ´»å¨ç»æï¼åæ¶ | æ´»å¨ç»æåç½®"å·²ç»æ"ï¼å¼å¸¸æ
åµå¯åæ¶ï¼ç½®"已忶" | |
| | | | æ´»å¨å é¤ | å é¤ä¸åéè¦çæ´»å¨ | |
| | | | æ¨éè³ä¼ä¸å¾®ä¿¡ | å°æ´»å¨æ¨éç»ä¼ä¸å¾®ä¿¡æåï¼æ¯æä¸ç§æ¨éèå´ï¼å
¨åãæå®é¨é¨ãæå®æåï¼è¿åæ¨éç»æï¼æåï¼å¤±è´¥äººæ°ï¼ï¼æ¯æè¦çæ´»å¨ä¸å·²é
ç½®çæ¨éèå´ | |
| | | | æ¥åäºç»´ç | çææ´»å¨æ¥åäºç»´ç ï¼PNG å¾çï¼å¯ç´æ¥å±ç¤ºææå°ï¼ï¼æåæ«ç è¿å
¥å¨çº¿æ¥å页 | |
| | | | æ¥å页å°å | è¿åæ¥å页龿¥ï¼ä¾¿äºå端èªè¡çæäºç»´ç æå¤å¶å享 | |
| | | | æ¥åè®°å½ç®¡ç | å页æ¥è¯¢æ¥åè®°å½ï¼å«æ´»å¨æ é¢ãæ¥å人ãç¶æï¼ï¼æ¯æåæ¶æ¥å | |
| | | | æ¥åç¾å° | 对æ¥åè®°å½æ§è¡ç¾å°ï¼ç¶æç½®"å·²ç¾å°" | |
| | | | æ¥åæææ¥ç | æ¥çææ¡æ¥åè®°å½ä¸ä¼ çå¾çï¼éä»¶ | |
| | | | æ¥åç»è®¡ | ç»è®¡æ¥åæ»æ°ãç¶æåå¸ãæé¨é¨åå¸ãææ¥æè¶å¿ãç¾å°ç | |
| | | |
| | | **ï¼2ï¼éç¥ç®¡ç** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | éç¥æ°å¢ä¸ç¼è¾ | å½å
¥éç¥æ é¢ãæ£æï¼å¯ææ¬ï¼ã夿³¨ | |
| | | | éç¥åå¸ | è稿 â å·²åå¸ | |
| | | | éç¥æ¤å | å·²åå¸éç¥å¯æ¤åï¼ç½®"å·²æ¤å" | |
| | | | éç¥å é¤ | å é¤éç¥ | |
| | | | æ¨éè³ä¼ä¸å¾®ä¿¡ | åæ´»å¨æ¨éï¼æ¯æå
¨åï¼æå®é¨é¨ï¼æå®æåä¸ç§èå´ï¼è¿åæ¨éç»æ | |
| | | |
| | | **ï¼3ï¼é讯å½ä¸åè°ï¼æ¯æè½åï¼** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | é¨é¨æ æ¥è¯¢ | 宿¶è·åä¼ä¸å¾®ä¿¡é¨é¨æ ï¼ä¾æ¨ééäººä½¿ç¨ | |
| | | | é¨é¨å¹³éºå表 | æä¾å·²æå¹³çé¨é¨å表ï¼ä¾¿äºåç«¯ä¸æéæ© | |
| | | | æåå表æ¥è¯¢ | æé¨é¨è·åæåå表ï¼å¯éæ¯å¦å
å«åé¨é¨æå | |
| | | | åè° URL éªè¯ | ååºä¼ä¸å¾®ä¿¡ç URL æææ§éªè¯ï¼ç¾åæ ¡éª + å å¯ä¸²è§£å¯åæ¾ï¼ | |
| | | | æ¶æ¯ï¼äºä»¶æ¥æ¶ | æ¥æ¶å¹¶è§£å¯ä¼ä¸å¾®ä¿¡æ¨éçæ¶æ¯ä¸äºä»¶ï¼è¿å
¥åºç¨ãå
³æ³¨ãé讯å½åæ´ãææ¬æ¶æ¯ï¼ï¼æç±»åè·¯ç±å¤çå¹¶åæ§ | |
| | | |
| | | #### 4.4.3 å
³é®æ°æ®é¡¹ä¸ç¶ææº |
| | | |
| | | **æ´»å¨ç¶æ**ï¼è稿(0) â å·²åå¸(1) â å·²ç»æ(2)ï¼å¼å¸¸å¯ç½® 已忶(3)ã |
| | | |
| | | **éç¥ç¶æ**ï¼è稿(0) â å·²åå¸(1) â å·²æ¤å(2)ã |
| | | |
| | | **æ¥åç¶æ**ï¼å·²æ¥å(0) / 已忶(1) / å·²ç¾å°(2)ã |
| | | |
| | | **æ¨éèå´**ï¼å
¨å(0) / æå®é¨é¨(1) / æå®æå(2)ã |
| | | |
| | | **å
³é®æ°æ®é¡¹**ï¼æ´»å¨ââæ é¢ã详æ
ãå°é¢å¾ãå°ç¹ãæ´»å¨èµ·æ¢æ¶é´ãæ¥åèµ·æ¢æ¶é´ãæ¥åä¸éãå·²æ¥å人æ°ãç¶æãæ¨éèå´ãæ¨éç®æ ãæ¨éç¶æãæè¿æ¨éæ¶é´ï¼éç¥ââæ é¢ãæ£æãç¶æãæ¨éèå´ãæ¨éç®æ ãæ¨éç¶æãæè¿æ¨éæ¶é´ï¼æ¥åè®°å½ââæ´»å¨ IDãæ¥å人ãç¶æãæäº¤ææã |
| | | |
| | | #### 4.4.4 ä¸å
¶ä»æ¨¡åçåå |
| | | |
| | | | åå对象 | ååå
容 | |
| | | |---|---| |
| | | | ç³»ç»ç®¡ç | æ¨éè®°å½å¹¶å
¥ç»ä¸æ¶æ¯ä½ç³»ï¼éä»¶ç»ç»ä¸éä»¶ä¸å¿åå¨ | |
| | | | ä¼å管ç | ä¼åæ´»å¨æ¥åå¯åæµä¸ºä¼åæ´»è·åº¦æ°æ® | |
| | | | æ¡£æ¡ç®¡ç | æ´»å¨éç¥ãæ¥åææå¯ä½ä¸ºæä¹¦æ¡£æ¡æå·¥å½å
¥å½éï¼æ¬æä¸ºæå·¥ï¼ä¸å«èªå¨å½æ¡£ï¼ | |
| | | |
| | | --- |
| | | |
| | | ### 4.5 课é¢ç®¡çï¼`/research`ï¼ |
| | | |
| | | #### 4.5.1 模åå®ä½ |
| | | |
| | | å¦ä¼å¦æ¯ä¸å¡ç**主线æµç¨**ï¼æååå¸ â 课é¢ç³æ¥ â ä¸å®¶è¯å®¡ â ç«é¡¹ â ç»è´¹æ¨ä» â ç«é¡¹éç¥ï¼å
¨é¾è·¯ççãå¯è¿½æº¯ã |
| | | |
| | | #### 4.5.2 åè½æ¸
å |
| | | |
| | | **ï¼1ï¼è¯¾é¢æå** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | æåæ°å¢ä¸ç¼è¾ | å½å
¥æåç¼å·ãæååç§°ã课é¢ç±»å«ï¼éç¹è¯¾é¢ï¼ä¸è¬è¯¾é¢ï¼ãç³æ¥å¼å§ä¸æªæ¢æ¶é´ãæåæ£æï¼å¯ææ¬ï¼ã夿³¨ | |
| | | | æåéä»¶ | ä¸ä¼ æåæä»¶ï¼å¦ç³æ¥æ¨¡æ¿ãè¯å®¡æ åï¼ï¼æ¯æå¤éä»¶ | |
| | | | æååå¸ | è稿 â å·²åå¸ï¼è¿å
¥å¯ç³æ¥ç¶æ | |
| | | | æåæªæ¢ | å·²åå¸ â å·²æªæ¢ï¼åæ¢æ¥åç³æ¥ | |
| | | | å·²å叿åå表 | æä¾å·²å叿忏
åï¼ä¾ç³æ¥æ¶éæ©æå±æåï¼é¿å
æå·¥è¾å
¥éæ¼ | |
| | | | æåå é¤ | å é¤ä¸åéè¦çæå | |
| | | |
| | | **ï¼2ï¼è¯¾é¢ç³æ¥** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | ç³æ¥ä¹¦æ°å¢ | å½å
¥æå±è¯¾é¢æåã课é¢åç§°ã课é¢ç±»å«ãç³æ¥äººä¿¡æ¯ï¼å§åï¼åä½åç§°ãå·¥ä½åä½ãèç§°ãèç³»çµè¯ãèç³»é®ç®±ï¼ã课é¢ç»æåãç³è¯·ç»è´¹ãç³æ¥ä¹¦æ£æï¼ç³æ¥äººå¯å
³èä¼å | |
| | | | ç³æ¥ä¹¦éä»¶ | ä¸ä¼ ç³æ¥ä¹¦æ£ææä»¶ä¸æ¯æææï¼æ¯æå¤éä»¶ | |
| | | | ç³æ¥ä¹¦ç¼è¾ï¼å é¤ | æç¶æçº¦æï¼å®¡æ¹ä¸ä¸å¯ç¼è¾ï¼å·²ç«é¡¹ä¸å¯å é¤ï¼ | |
| | | | å页æ£ç´¢ | æç³æ¥ç¼å·ã课é¢åç§°ãæå±æåãç±»å«ãç¶æãç³æ¥æ¶é´æ£ç´¢ | |
| | | | æäº¤å®¡æ¹ | éæ©è¯¾é¢ç«é¡¹å®¡æ¹æµç¨å¹¶æäº¤ï¼è¿å
¥"审æ¹ä¸" | |
| | | | ç«é¡¹å®¡æ¹ | éè¿ BPM å¤çº§å®¡æ¹æµè½¬ï¼å®¡æ¹éè¿ â "å·²ç«é¡¹"å¹¶çæç«é¡¹ç¼å·ãè®°å½ç«é¡¹æ¶é´ï¼é©³å â "已驳å"ï¼è®°å½åå ï¼ | |
| | | | ä¸å®¶è¯å®¡æç» | 为æè¯¾é¢ç³æ¥ä¹¦å½å
¥å¤åä¸å®¶çè¯å®¡æç»ï¼è¯å®¡ä¸å®¶ãè¯åãè¯å®¡æè§ãè¯å®¡ç»è®ºï¼æ¨èç«é¡¹ï¼ä¸æ¨èç«é¡¹ï¼ï¼ç³»ç»è®¡ç®å æå¹³ååå¹¶ååç³æ¥ä¹¦ | |
| | | | ç«é¡¹éç¥åå¸ | ç«é¡¹ååå¸ç«é¡¹éç¥ï¼çæéç¥å
¬åå¹¶è®°å½éç¥ IDï¼ï¼å®ç°ç»æå¯¹å¤åå¸ | |
| | | | ç»è´¹æ¨ä»ç»è®° | 为已ç«é¡¹è¯¾é¢ç»è®°ç»è´¹æ¨ä»è®°å½ï¼æ¨ä»éé¢ãæ¨ä»æ¥æãæ¨ä»è¯´æãåè¯éä»¶ï¼æ¨ä»ç¶æè·è¸ª | |
| | | | 彿¡£ | 对"å·²ç«é¡¹"çç³æ¥åä¸é®å½æ¡£ï¼çæè¯¾é¢æ¡£æ¡å¹¶å°ç³æ¥ä¹¦éä»¶éæ¡£å¸¦å
¥ | |
| | | |
| | | #### 4.5.3 å
³é®æ°æ®é¡¹ä¸ç¶ææº |
| | | |
| | | **æåç¶æ**ï¼è稿(0) â å·²åå¸(20) â å·²æªæ¢(30)ã |
| | | |
| | | **ç³æ¥ä¹¦ç¶æ**ï¼è稿(0) â 审æ¹ä¸(15) â å·²ç«é¡¹(20) / 已驳å(35)ã |
| | | |
| | | **ç»è´¹æ¨ä»ç¶æ**ï¼å¾
æ¨ä»(0) â æ¥é审æ¹ä¸(15) â å·²æ¨ä»(20) / 已驳å(30)ã |
| | | |
| | | **è¯å®¡ç»è®º**ï¼æ¨èç«é¡¹(1) / 䏿¨èç«é¡¹(2)ã |
| | | |
| | | **课é¢ç±»å«**ï¼éç¹è¯¾é¢(1) / ä¸è¬è¯¾é¢(2)ã |
| | | |
| | | **ç³æ¥ä¹¦å
³é®æ°æ®é¡¹**ï¼ç³æ¥ç¼å·ãæå±æåã课é¢åç§°ã课é¢ç±»å«ãç³æ¥ä¼åãç³æ¥äººåç§°ãå·¥ä½åä½ãèç§°ãèç³»çµè¯ãèç³»é®ç®±ã课é¢ç»æåãç³è¯·ç»è´¹ãç³æ¥ä¹¦æ£æãç¶æãæµç¨å®ä¾ IDãä¸å®¶è¯å®¡å æååãè¯å®¡ç»è®ºãç«é¡¹ç¼å·ãç«é¡¹æ¶é´ãç«é¡¹éç¥ IDã彿¡£çæçæ¡£æ¡ IDã夿³¨ãéä»¶å表ã |
| | | |
| | | #### 4.5.4 ä¸å
¶ä»æ¨¡åçåå |
| | | |
| | | | åå对象 | ååå
容 | |
| | | |---|---| |
| | | | åååå
¬ | ç«é¡¹å®¡æ¹å¤ç¨æµç¨å¼æï¼ç«é¡¹éç¥å¤ç¨éç¥å
¬åè½å | |
| | | | ä¼å管ç | ç³æ¥ä¹¦å
³èä¼åï¼å®ç°"ä¼å â 课é¢"å½å±æ¸
æ° | |
| | | | è´¢å¡æ¥é | ç»è´¹æ¨ä»å¯è¡æ¥æ¥éæµç¨ï¼å½¢æ"æ¨ä» â æ¥éæ¯åº"çèµéé¾éç¯ | |
| | | | æ¡£æ¡ç®¡ç | ç³æ¥ä¹¦ä¸é®å½æ¡£çæè¯¾é¢æ¡£æ¡ï¼è¯å®¡ä¸æ¨ä»åè¯å¯éä¹å½é | |
| | | | ç³»ç»ç®¡ç | éä»¶èµ°ç»ä¸éä»¶ä¸å¿ï¼ç¼å·ç±ç¼ç è§åçæ | |
| | | |
| | | --- |
| | | |
| | | ### 4.6 æ¡£æ¡ç®¡çï¼`/archive`ï¼ |
| | | |
| | | #### 4.6.1 模åå®ä½ |
| | | |
| | | å
¨å¹³å°ç**æ¡£æ¡å½éä¸åé
åºåº§**ãè¦ç"å类建æ â æ¡£æ¡ç»è®°ï¼å«å®ä½ä½ç½®ï¼â åé
å®¡æ¹ â å½è¿ç»è®° â ç»è®¡"å
¨æµç¨ï¼å¹¶å¯¹å¤æä¾å½æ¡£è卿¥å£ï¼è§ 3.6 èï¼ãæ¬æ¨¡åç´æ¥ååºææ éæ±ä¸ç"书æ¶ï¼å类管çï¼ãææ¡£ç®¡çãåé
ç»è®°ãå½è¿ç»è®°ãæ¡£æ¡ç»è®¡"äºé¡¹è½åã |
| | | |
| | | #### 4.6.2 åè½æ¸
å |
| | | |
| | | **ï¼1ï¼æ¡£æ¡åç±»ï¼ä¹¦æ¶ï¼å类管çï¼** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | åç±»æ ç»´æ¤ | æ¯æå¤çº§åç±»ï¼ç¶åç±» â ååç±»ï¼ï¼å®ç°åå±ååç书æ¶å¼ç»ç» | |
| | | | åå§åç±» | é¢ç½®å
ç±»ï¼ä¼åæ¡£æ¡ãè¯¾é¢æ¡£æ¡ãä¼è®®æ¡£æ¡ãè´¢å¡æ¡£æ¡ãæä¹¦æ¡£æ¡ãå
å»ºæ¡£æ¡ | |
| | | | åç±»ç¼ç | æ¯ä¸ªåç±»æå¯ä¸ç¼ç ï¼memberï¼researchï¼meetingï¼financeï¼documentï¼partyï¼ï¼å½æ¡£è卿ç¼ç å®ä½ç®æ åç±» | |
| | | | é»è®¤å¯çº§ | æ¯ä¸ªåç±»å¯è®¾ç½®é»è®¤å¯çº§ï¼æ°å»ºæ¡£æ¡æ¶èªå¨å¸¦åºï¼**è´¢å¡æ¡£æ¡åç±»é»è®¤å¯çº§ä¸º"ä¿å¯"** | |
| | | | æåºä¸è¯´æ | æ¯ææ¾ç¤ºæåºä¸å类说æï¼ä¾¿äºåå°æä¸å¡ä¹ æ¯æå | |
| | | | å¯ç¨ï¼åç¨ | åç¨åç±»åä¸åå
许æ°å»ºæ¡£æ¡ï¼å岿¡£æ¡ä¿ç | |
| | | | åç±»å é¤çº¦æ | åå¨ååç±»æå·²ææ¡£æ¡çåç±»ä¸å
许å é¤ï¼é²æ¢å¤å¿æ°æ® | |
| | | |
| | | **ï¼2ï¼æ¡£æ¡ç®¡ç** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | æ¡£æ¡ç»è®° | å½å
¥æ¡£æ¡æ é¢ãæå±åç±»ãå¯çº§ãè½½ä½ç±»åãæè¦ãå
³é®è¯ã彿¡£æ¥æã彿¡£äººã夿³¨ | |
| | | | çµå + å®ä½åè½½ä½ | è½½ä½ç±»åæ¯æ"çµåï¼å®ä½ï¼çµå+å®ä½"ä¸éï¼æ¯æ¡æ¡£æ¡æ¢å¯æçµåéä»¶ï¼ä¹å¯ç»è®°å®ä½åæ¾ä½ç½® | |
| | | | å®ä½åæ¾ä½ç½® | ç»è®°ä¹¦æ¶å·ãå±å·ãåå·ãåå·ï¼æ¡£æ¡çå·ï¼ä»¥åä½ç½®æè¿°ï¼å¦"3 å·åºæ¿ A æ¶ 2 å±"ï¼ï¼å®ç°çº¸è´¨æ¡£æ¡ç精确æ£ç´¢ | |
| | | | çµåéä»¶ | éè¿ç»ä¸éä»¶ä¸å¿ä¸ä¼ çµåæä»¶ï¼æ¯æå¤éä»¶ | |
| | | | æ¥æºæ è¯ | è®°å½æ¥æºç±»åï¼æå·¥å½å
¥ï¼è¯¾é¢å½æ¡£ï¼ä¼å彿¡£ï¼è´¢å¡å½æ¡£ï¼ãæ¥æºåå·ãæ¥æºåæ® ID 䏿¥æºæ é¢å¿«ç
§ï¼å®ç°"仿¡£æ¡åæ¥ä¸å¡åæ®" | |
| | | | å¤ç»´æ£ç´¢ | ææ é¢ãå
³é®è¯ãæ¥æºåå·ãåç±»ãå¯çº§ãç¶æã彿¡£æ¥ææ£ç´¢ | |
| | | | ç¼è¾çº¦æ | æ¡£æ¡å¤äº"ååºä¸"æ¶ç¦æ¢ä¿®æ¹ï¼é²æ¢ååºæé´ä¿¡æ¯è¢«æ¹å¨ | |
| | | | å é¤çº¦æ | æ¡£æ¡å¤äº"ååºä¸"æå卿ªå½è¿åé
åæ¶ç¦æ¢å é¤ | |
| | | | å¯¼åº | ææ£ç´¢æ¡ä»¶å¯¼åºæ¡£æ¡æ¸
åï¼å¯¼åºå¨ä½è®°å½æä½æ¥å¿ | |
| | | | å¯çº§ç®¡æ§ | ä¿å¯çº§æ¡£æ¡å¯¹æ `archive:document:sensitive` æéçç¨æ·å¨è¯¦æ
ãå表ã导åºä¸å¤åä¸å¯è§ï¼è§ 3.1.3ï¼ | |
| | | |
| | | **ï¼3ï¼åé
ç»è®°** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | åé
åç»è®° | è®°å½åé
人ï¼å§åãé¨é¨ãèç³»çµè¯ï¼ãåé
æ¥æãåé
ç®çãå½è¿æéï¼æ¡£æ¡ç¼å·ä¸æ é¢ä»¥å¿«ç
§æ¹å¼åä½åå¨ | |
| | | | åé
åç¼è¾ï¼å é¤ | ä»
"è稿ï¼å·²é©³å"å¯ç¼è¾ï¼ä»
"è稿"å¯å é¤ | |
| | | | æäº¤å®¡æ¹ | éæ©æ¡£æ¡åé
å®¡æ¹æµç¨å¹¶æäº¤ï¼**两级审æ¹**ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ï¼ | |
| | | | å¯ä¸æ§æ ¡éª | å䏿¡£æ¡è¥å·²åå¨"审æ¹ä¸"æ"ååºä¸"çåé
åï¼æäº¤æ¶ç´æ¥æç»å¹¶æç¤ºå·²åå¨çåé
åå·ï¼ä»æºå¤´é¿å
éå¤ååº | |
| | | | 审æ¹éè¿ | åé
åç½®"ååºä¸"å¹¶è®°å½å®é
ååºæ¶é´ï¼**忶以æ¡ä»¶æ´æ°å°æ¡£æ¡ç½®"ååºä¸"**ï¼è¥æ¡£æ¡å·²è¢«å ç¨åæ¬æ¬¡å®¡æ¹åæ»å¹¶æç¤ºï¼è§ 3.2 èå¹¶åæ§å¶ï¼ | |
| | | | 审æ¹é©³å | åé
åç½®"已驳å"ï¼è®°å½é©³ååå 䏿¶é´ï¼æ¡£æ¡ç¶æä¿æ"å¨åº" | |
| | | | æ¤åï¼åæ¶ | åå°"è稿"ï¼å¯ä¿®æ¹åéæ°æäº¤ | |
| | | | 龿宿¶è®¡ç® | åé
åå¤äº"ååºä¸"ä¸å½è¿æéæ©äºå½åæ¥æå³ä¸ºé¾æï¼åè¡¨ä»¥çº¢è²æ ç¾æ¾ç¤º"龿 N 天"ï¼æ¯æåªç龿åã**龿卿¥è¯¢æ¶å®æ¶è®¡ç®ï¼ä¸åå
¥æ°æ®åºãä¸ä¾èµå®æ¶ä»»å¡ãä¸åéç«å
ä¿¡**ââé¿å
宿¶ä»»å¡å¤±è´¥å¯¼è´æé失çï¼ä¹é¿å
æ ç¨æ¶æ¯å 积 | |
| | | | 龿æ¸
å | æä¾ç¬ç«ç龿åé
å页æ¥è¯¢ï¼ä¾ç®¡çåéä¸å¬è¿ | |
| | | |
| | | **ï¼4ï¼å½è¿ç»è®°** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | å½è¿ç¡®è®¤ | 对"ååºä¸"çåé
åæ§è¡å½è¿ç»è®°ï¼è®°å½å®é
å½è¿æ¶é´ãå½è¿ç¡®è®¤äººãå½è¿å¤æ³¨ | |
| | | | ç¶æèå¨ | åé
åç½®"å·²å½è¿"ï¼**忶以æ¡ä»¶æ´æ°å°æ¡£æ¡ç½®å"å¨åº"**ï¼æ¡£æ¡æ¢å¤å¯å | |
| | | | å½è¿çº¦æ | ä»
"ååºä¸"çåé
åå¯ç»è®°å½è¿ï¼éå¤å½è¿è¢«æç»å¹¶ç»åºæç¡®æç¤º | |
| | | | éç¯ | å½è¿åæ¡£æ¡åå°"å¨åº"ï¼å¯å次被åé
ï¼å½¢æå®æ´æµè½¬éç¯ | |
| | | |
| | | **ï¼5ï¼æ¡£æ¡ç»è®¡** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | æ»éææ | æ»æ¡£æ¡æ°éãå¨åºæ°éãååºæ°éãååºä¸æ°éã龿æ°é | |
| | | | åç±»åå¸ | ææ¡£æ¡åç±»ç»è®¡æ°éï¼é¥¼å¾ï¼ | |
| | | | å¯çº§åå¸ | æå¯çº§ï¼å
¬å¼ï¼å
é¨ï¼ä¿å¯ï¼ç»è®¡æ°éï¼æ±å¾ï¼ | |
| | | | è½½ä½åå¸ | æè½½ä½ç±»åï¼çµåï¼å®ä½ï¼çµå+å®ä½ï¼ç»è®¡æ°é | |
| | | | 宿¶æ§ | ç»è®¡æ°æ®åèªå®é
æ¡£æ¡è¡¨ï¼ä¸åè¡¨æ°æ®ä¸è´ | |
| | | |
| | | #### 4.6.3 å
³é®æ°æ®é¡¹ä¸ç¶ææº |
| | | |
| | | **æ¡£æ¡ç¶æ**ï¼å¨åº(10) â ååºä¸(20)ã |
| | | - â ååºä¸ç**å¯ä¸å
¥å£**ï¼åé
å审æ¹éè¿ï¼ç»æµç¨çå¬å¨ååï¼ï¼ |
| | | - â å¨åºç**å¯ä¸å
¥å£**ï¼å½è¿ç»è®°ã |
| | | 该"åä¸å
¥å£"设计ä¿è¯æ¡£æ¡ç¶æä¸ä¼è¢«å
¶ä»è·¯å¾æå¤ç¯¡æ¹ã |
| | | |
| | | **åé
åç¶æ**ï¼ |
| | | |
| | | ``` |
| | | è稿(0) ââæäº¤ââⶠ审æ¹ä¸(15) |
| | | â² âââ 审æ¹éè¿ âââ¶ ååºä¸(20) ââå½è¿ç»è®°âââ¶ å·²å½è¿(30) |
| | | â âââ 审æ¹é©³å ââⶠ已驳å(35)ï¼å¯ä¿®æ¹åéæ°æäº¤ï¼ |
| | | âââæ¤åââââââââââââ |
| | | ``` |
| | | |
| | | **å¯çº§**ï¼å
¬å¼(1) / å
é¨(2) / ä¿å¯(3)ã |
| | | **è½½ä½ç±»å**ï¼çµå(1) / å®ä½(2) / çµå+å®ä½(3)ã |
| | | **æ¥æºç±»å**ï¼æå·¥å½å
¥(1) / 课é¢å½æ¡£(2) / ä¼å彿¡£(3) / è´¢å¡å½æ¡£(4)ã |
| | | **åç±»ç¶æ**ï¼å¯ç¨(0) / åç¨(1)ã |
| | | |
| | | **æ¡£æ¡ä¸»è¡¨å
³é®æ°æ®é¡¹**ï¼æ¡£æ¡ç¼å·ï¼`DA` + æ¥æ + æµæ°´ï¼ãæ é¢ãåç±»ãå¯çº§ãè½½ä½ç±»åã书æ¶å·ãå±å·ãåå·ãåå·ï¼æ¡£æ¡çå·ãåæ¾ä½ç½®æè¿°ãæ¥æºç±»åãæ¥æºåå·ãæ¥æºåæ® IDãæ¥æºæ é¢ã彿¡£æ¥æã彿¡£äººãç¶æãæè¦ãå
³é®è¯ã夿³¨ãçµåéä»¶ã |
| | | |
| | | **åé
åå
³é®æ°æ®é¡¹**ï¼åé
åå·ï¼`JY` + æ¥æ + æµæ°´ï¼ãæ¡£æ¡ IDãæ¡£æ¡ç¼å·ãæ¡£æ¡æ é¢ãåé
äººç¨æ· IDãåé
人å§åãé¨é¨ãèç³»çµè¯ãåé
æ¥æãåé
ç®çãå½è¿æéãç¶æãæµç¨å®ä¾ IDãå®é
ååºæ¶é´ãå®é
å½è¿æ¶é´ãå½è¿ç¡®è®¤äººãå½è¿å¤æ³¨ã驳ååå ã驳忶é´ã |
| | | |
| | | #### 4.6.4 ä¸å
¶ä»æ¨¡åçåå |
| | | |
| | | | åå对象 | ååå
容 | |
| | | |---|---| |
| | | | **课é¢ç®¡ç** | æ¥æ¶è¯¾é¢å½æ¡£è¯·æ±ï¼çæè¯¾é¢æ¡£æ¡ï¼å¯çº§ï¼å
é¨ï¼ï¼å¸¦å
¥ç³æ¥ä¹¦éä»¶ï¼å忥æºè¡¨æ¡£æ¡ ID | |
| | | | **ä¼å管ç** | æ¥æ¶ä¼å彿¡£è¯·æ±ï¼çæä¼åæ¡£æ¡ï¼å¯çº§ï¼å
é¨ï¼ï¼å¸¦å
¥ä¼åææï¼å忥æºè¡¨æ¡£æ¡ ID | |
| | | | **è´¢å¡æ¥é** | æ¥æ¶è´¢å¡å½æ¡£è¯·æ±ï¼çæè´¢å¡æ¡£æ¡ï¼å¯çº§ï¼**ä¿å¯**ï¼ï¼å¸¦å
¥å票éä»¶ï¼ä¸æ¥éå彿¡£å¨ä½åäºå¡æäº¤ | |
| | | | åååå
¬ | åé
审æ¹å¤ç¨æµç¨å¼æï¼ä¸¤çº§å®¡æ¹ï¼ï¼æµç¨ç»æç»çå¬å¨åååé
å䏿¡£æ¡ç¶æ | |
| | | | ç³»ç»ç®¡ç | éä»¶èµ°ç»ä¸éä»¶ä¸å¿ï¼æ¡£æ¡è¯»ååå¯çº§æéç¹çº¦æï¼æä½è®°å½å®¡è®¡æ¥å¿ | |
| | | |
| | | **æç¡®çè½åè¾¹ç**ï¼æ¬æ¹æ¡ä¸å«ä»¥ä¸å
容ï¼é¿å
éªæ¶äºè®®ï¼ï¼ |
| | | |
| | | | è¾¹ç项 | 说æ | |
| | | |---|---| |
| | | | ä¼è®®æ¡£æ¡ãå
å»ºæ¡£æ¡ | ç³»ç»å
æ 对åºçä¸å¡æ¥æºæ¨¡åï¼å类已é¢ç½®ï¼**ä»
æ¯ææå·¥å½å
¥**ï¼ä¸å«èªå¨å½æ¡£ | |
| | | | 龿æéæ¹å¼ | ä»
å¨é¡µé¢æ¥è¯¢æ¶å®æ¶è®¡ç®å¹¶é«äº®ï¼**ä¸å»ºç«å®æ¶ä»»å¡ãä¸åéç«å
ä¿¡** | |
| | | | 课é¢ç»é¡¹å½æ¡£ | 课é¢ç®¡çä¸å«ç»é¡¹åè½ï¼å½æ¡£é对"å·²ç«é¡¹"çç³æ¥å | |
| | | | ååæ¡£æ¡ | ä¸å¨æ¬æå½æ¡£èå¨èå´ | |
| | | | æ¡£æ¡éæ¯ãé¾æç½æ¬¾ | æ¬æä¸å«ï¼å¯ä½ä¸ºäºææ©å± | |
| | | |
| | | --- |
| | | |
| | | ### 4.7 ç³»ç»ç®¡çï¼`/system`ï¼ |
| | | |
| | | #### 4.7.1 模åå®ä½ |
| | | |
| | | å¹³å°ç**åºç¡æ¯æä¸æ²»çä¸å¿**ï¼ä¸ºå
¶ä½å
个åç³»ç»æä¾èº«ä»½ãæéãåå
¸ãç¼ç ãéä»¶ãæ¶æ¯ä¸å®¡è®¡è½åã |
| | | |
| | | #### 4.7.2 åè½æ¸
å |
| | | |
| | | **ï¼1ï¼ç»ç»ä¸èº«ä»½** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | ç¨æ·ç®¡ç | ç¨æ·çæ°å¢ãç¼è¾ãåç¨ãå é¤ï¼éç½®å¯ç ï¼åé
è§è²ï¼åé
é¨é¨ä¸å²ä½ | |
| | | | è§è²ç®¡ç | è§è²çæ°å¢ä¸æéåé
ï¼æ¯ææ°æ®èå´è®¾ç½®ï¼å
¨é¨ï¼æ¬é¨é¨å以ä¸ï¼æ¬é¨é¨ï¼ä»
æ¬äººï¼èªå®ä¹ï¼ | |
| | | | èå管ç | èå䏿鮿éçç»ä¸ç»´æ¤ï¼èå驱å¨å端路ç±ä¸ä¾§è¾¹æ ï¼æ°å¢åè½æ éå端æå·¥é
ç½®è·¯ç± | |
| | | | é¨é¨ç®¡ç | å¤çº§ç»ç»æ¶æç»´æ¤ | |
| | | | å²ä½ç®¡ç | å²ä½ç»´æ¤ï¼ä¾ç¨æ·å½å± | |
| | | | ç§æ·ç®¡ç | å¤ç§æ·è½åå
¥å£ï¼æ¬æä¸å¡æåç§æ·é¨ç½²ï¼ä¿çé离æ©å±è½åï¼ | |
| | | |
| | | **ï¼2ï¼é
ç½®ä¸æ°æ®** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | åå
¸ç®¡ç | åå
¸ç±»åä¸åå
¸é¡¹çç»ä¸ç»´æ¤ï¼åæ®ç¶æãå¯çº§ãè´¹ç¨ç±»åãä¼åç级çå
¨é¨æä¸¾ç±åå
¸é©±å¨ï¼åå°æåå
¸æ¸²æåä¸ä¸æï¼**æ¹åå
¸å³æ¹åå°å±ç°ï¼æ 鿹代ç ** | |
| | | | ç¼ç è§å | åæ®ç¼å·è§åç»´æ¤ï¼æ¯æåç±»åæ®ç"åç¼ + æ¥æ + æµæ°´"ç¼å· | |
| | | | å°åºç®¡ç | è¡æ¿åºåæ°æ®ç»´æ¤ï¼æ¯æä¼åä¸ä¸å¡çå°åºå½å± | |
| | | | å
¬å¸ä¿¡æ¯é
ç½® | åä½åç§°ãæ è¯çåºç¡ä¿¡æ¯é
ç½® | |
| | | |
| | | **ï¼3ï¼æä»¶ä¸æ¶æ¯** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | æä»¶åå¨ | éä»¶å
æ°æ®ä¸åå¨é
置管çï¼æ¯ææ¬å°ç£çä¸ S3 å
¼å®¹å¯¹è±¡åå¨åæ¢ | |
| | | | ç信管ç | çä¿¡éé䏿¨¡æ¿ç®¡ç | |
| | | | é®ç®±ç®¡ç | é®ä»¶è´¦å·ä¸æ¨¡æ¿ç®¡ç | |
| | | | ç«å
信管ç | ç«å
æ¶æ¯åé䏿¥è¯¢ï¼æ¯æå®¡æ¹å¾
åæé | |
| | | | éç¥å
¬å | é¢åå
é¨ç¨æ·çå
¬ååå¸ä¸é
è¯»åæ§ | |
| | | |
| | | **ï¼4ï¼å®å
¨ä¸å¼æ¾** |
| | | |
| | | | åè½é¡¹ | åè½è¯´æ | |
| | | |---|---| |
| | | | OAuth 2.0 â åºç¨ç®¡ç | ç»´æ¤æ¥å
¥ç客æ·ç«¯åºç¨ï¼å®¢æ·ç«¯ IDï¼å¯é¥ï¼åè°å°åï¼ï¼æ¯æåç¹ç»å½ä¸ç¬¬ä¸æ¹æ¥å
¥ | |
| | | | OAuth 2.0 â 令ç管ç | æ¥è¯¢å¨çº¿ä»¤çï¼æ¯æå¼ºå¶ä¸çº¿ | |
| | | | 䏿¹ç»å½ â 䏿¹åºç¨ | é
ç½®ç¬¬ä¸æ¹å¹³å°ç»å½ï¼å¦å¾®ä¿¡ãééçï¼ | |
| | | | 䏿¹ç»å½ â 䏿¹ç¨æ· | ç»´æ¤ä¸æ¹è´¦å·ä¸å¹³å°è´¦å·çç»å®å
³ç³» | |
| | | | 审计æ¥å¿ â æä½æ¥å¿ | è®°å½å
³é®åæä½ï¼å«å¯¼åºçææå¨ä½ï¼çæä½äººãæ¶é´ãæ¥å£ãåæ°æè¦ä¸ç»æ | |
| | | | 审计æ¥å¿ â ç»å½æ¥å¿ | è®°å½ç»å½è¡ä¸ºï¼è´¦å·ãIPãæ¶é´ãç»æï¼ï¼æ¯æå®å
¨å®¡è®¡ä¸å¼å¸¸ææ¥ | |
| | | |
| | | #### 4.7.3 ä¸å
¶ä»æ¨¡åçåå |
| | | |
| | | ç³»ç»ç®¡çæ¯**å
¨å¹³å°ç被ä¾èµæ¹**ï¼ææåç³»ç»çç»å½é´æãè忏²æãæéæ ¡éªãåå
¸ç¿»è¯ãåæ®ç¼å·ãéä»¶ååãæ¶æ¯åé䏿ä½ççï¼å建ç«å¨æ¬æ¨¡åä¹ä¸ãå
¶"èå + æéç¹ + åå
¸"ä¸å¼ é
置表ï¼å³å®äºå
¶ä½å
个åç³»ç»çå¯è§èå´ä¸å±ç°å½¢å¼ã |
| | | |
| | | --- |
| | | |
| | | ## äºãéå½ |
| | | |
| | | ### éå½ A æéç¹æ¸
åï¼å
大ä¸å¡åç³»ç»ï¼å
± 68 ä¸ªï¼ |
| | | |
| | | **è´¢å¡æ¥é** |
| | | |
| | | | æéç¹ | 说æ | |
| | | |---|---| |
| | | | `finance:reimbursement:create` | æ°å¢æ¥éå | |
| | | | `finance:reimbursement:update` | ä¿®æ¹æ¥éå | |
| | | | `finance:reimbursement:delete` | å 餿¥éå | |
| | | | `finance:reimbursement:query` | æ¥è¯¢æ¥éå | |
| | | | `finance:reimbursement:export` | å¯¼åºæ¥éå | |
| | | | `finance:reimbursement:update-status` | æäº¤æ¥é审æ¹ï¼ç¶ææµè½¬ï¼ | |
| | | | `finance:reimbursement:archive` | 彿¡£æ¥éåï¼å¹¶çæè´¢å¡æ¡£æ¡ï¼ | |
| | | |
| | | **ä¼å管ç** |
| | | |
| | | | æéç¹ | 说æ | |
| | | |---|---| |
| | | | `ums:application:create` | æ°å¢å
¥ä¼ç³è¯· | |
| | | | `ums:application:update` | ä¿®æ¹å
¥ä¼ç³è¯· | |
| | | | `ums:application:delete` | å é¤å
¥ä¼ç³è¯· | |
| | | | `ums:application:query` | æ¥è¯¢å
¥ä¼ç³è¯· | |
| | | | `ums:application:submit` | æäº¤å
¥ä¼å®¡æ¹ | |
| | | | `ums:member:create` | æ°å¢ä¼å | |
| | | | `ums:member:update` | ä¿®æ¹ä¼å | |
| | | | `ums:member:delete` | å é¤ä¼å | |
| | | | `ums:member:query` | æ¥è¯¢ä¼å | |
| | | | `ums:member:directory` | æ¥çä¼åéè®¯å½ | |
| | | | `ums:member:archive` | ä¼å彿¡£ï¼çæä¼åæ¡£æ¡ï¼ | |
| | | |
| | | **课é¢ç®¡ç** |
| | | |
| | | | æéç¹ | 说æ | |
| | | |---|---| |
| | | | `research:guideline:create` | æ°å¢è¯¾é¢æå | |
| | | | `research:guideline:update` | ä¿®æ¹è¯¾é¢æå | |
| | | | `research:guideline:delete` | å é¤è¯¾é¢æå | |
| | | | `research:guideline:query` | æ¥è¯¢è¯¾é¢æå | |
| | | | `research:guideline:publish` | åå¸ï¼æªæ¢è¯¾é¢æå | |
| | | | `research:application:create` | æ°å¢è¯¾é¢ç³æ¥ä¹¦ | |
| | | | `research:application:update` | ä¿®æ¹è¯¾é¢ç³æ¥ä¹¦ | |
| | | | `research:application:delete` | å é¤è¯¾é¢ç³æ¥ä¹¦ | |
| | | | `research:application:query` | æ¥è¯¢è¯¾é¢ç³æ¥ä¹¦ | |
| | | | `research:application:submit` | æäº¤è¯¾é¢ç«é¡¹å®¡æ¹ | |
| | | | `research:application:notice` | åå¸ç«é¡¹éç¥ | |
| | | | `research:application:archive` | 课é¢å½æ¡£ï¼çæè¯¾é¢æ¡£æ¡ï¼ | |
| | | | `research:review:create` | å½å
¥ä¸å®¶è¯å®¡æç» | |
| | | | `research:review:update` | ä¿®æ¹ä¸å®¶è¯å®¡æç» | |
| | | | `research:review:delete` | å é¤ä¸å®¶è¯å®¡æç» | |
| | | | `research:review:query` | æ¥è¯¢ä¸å®¶è¯å®¡æç» | |
| | | | `research:fund:create` | ç»è®°ç»è´¹æ¨ä» | |
| | | | `research:fund:update` | ä¿®æ¹ç»è´¹æ¨ä» | |
| | | | `research:fund:delete` | å é¤ç»è´¹æ¨ä» | |
| | | | `research:fund:query` | æ¥è¯¢ç»è´¹æ¨ä» | |
| | | |
| | | **æ¡£æ¡ç®¡ç** |
| | | |
| | | | æéç¹ | 说æ | |
| | | |---|---| |
| | | | `archive:category:create` | æ°å¢æ¡£æ¡åç±» | |
| | | | `archive:category:update` | ä¿®æ¹æ¡£æ¡åç±» | |
| | | | `archive:category:delete` | å 餿¡£æ¡åç±» | |
| | | | `archive:category:query` | æ¥è¯¢æ¡£æ¡åç±» | |
| | | | `archive:document:create` | æ°å¢æ¡£æ¡ | |
| | | | `archive:document:update` | ä¿®æ¹æ¡£æ¡ | |
| | | | `archive:document:delete` | å 餿¡£æ¡ | |
| | | | `archive:document:query` | æ¥è¯¢æ¡£æ¡ | |
| | | | `archive:document:export` | å¯¼åºæ¡£æ¡ | |
| | | | **`archive:document:sensitive`** | **æ¥çä¿å¯çº§æ¡£æ¡ï¼æææéç¹ï¼** | |
| | | | `archive:borrow:create` | ç»è®°åé
å | |
| | | | `archive:borrow:update` | ä¿®æ¹åé
å | |
| | | | `archive:borrow:delete` | å é¤åé
å | |
| | | | `archive:borrow:query` | æ¥è¯¢åé
å | |
| | | | `archive:borrow:submit` | æäº¤åé
å®¡æ¹ | |
| | | | `archive:borrow:return` | å½è¿ç»è®° | |
| | | | `archive:stat:query` | æ¥çæ¡£æ¡ç»è®¡ | |
| | | |
| | | **ä¼ä¸å¾®ä¿¡** |
| | | |
| | | | æéç¹ | 说æ | |
| | | |---|---| |
| | | | `wxcp:activity:create` | æ°å¢æ´»å¨ | |
| | | | `wxcp:activity:update` | ä¿®æ¹ï¼åå¸ï¼ç»æï¼åæ¶æ´»å¨ | |
| | | | `wxcp:activity:delete` | å 餿´»å¨ | |
| | | | `wxcp:activity:query` | æ¥è¯¢æ´»å¨ | |
| | | | `wxcp:activity:push` | æ¨éæ´»å¨è³ä¼ä¸å¾®ä¿¡ | |
| | | | `wxcp:signup:query` | æ¥è¯¢æ¥åè®°å½ | |
| | | | `wxcp:signup:update` | åæ¶æ¥åï¼æ¥åç¾å° | |
| | | | `wxcp:notice:create` | æ°å¢éç¥ | |
| | | | `wxcp:notice:update` | ä¿®æ¹ï¼åå¸ï¼æ¤åéç¥ | |
| | | | `wxcp:notice:delete` | å é¤éç¥ | |
| | | | `wxcp:notice:query` | æ¥è¯¢éç¥ | |
| | | | `wxcp:notice:push` | æ¨ééç¥è³ä¼ä¸å¾®ä¿¡ | |
| | | | `wxcp:member:query` | æ¥è¯¢ä¼ä¸å¾®ä¿¡é¨é¨ä¸æå | |
| | | |
| | | ### éå½ B ä¸å¡åå
¸æ¸
åï¼å
± 69 æ¡åå
¸é¡¹ï¼ |
| | | |
| | | | åå
¸ç±»å | ç¨é | åå
¸é¡¹ | |
| | | |---|---|---| |
| | | | `finance_reimbursement_status` | æ¥éåç¶æ | è稿(0)ã审æ¹ä¸(15)ãå·²éè¿(20)ã已驳å(35)ã已彿¡£(40) | |
| | | | `finance_expense_type` | è´¹ç¨ç±»å | å·®æ
(1)ãåå
¬(2)ãæå¾
(3)ã交é(4)ãå
¶ä»(5) | |
| | | | `ums_application_status` | å
¥ä¼ç³è¯·ç¶æ | è稿(0)ã审æ¹ä¸(15)ãå·²éè¿(20)ã已驳å(35) | |
| | | | `ums_member_type` | ä¼åç±»å | 个人ä¼å(1)ãåä½ä¼å(2) | |
| | | | `ums_member_status` | ä¼åç¶æ | æ£å¸¸(1)ãæå(0) | |
| | | | `ums_personal_grade` | 个人ä¼åç级 | æ®éä¼å(1)ãçäº(2)ã常å¡çäº(3)ãå¯çäºé¿(4)ãçäºé¿(5) | |
| | | | `ums_unit_grade` | åä½ä¼åç级 | æ®éåä½(1)ãçäºåä½(2)ãå¯ä¼é¿åä½(3)ãä¼é¿åä½(4) | |
| | | | `ums_industry` | æå±è¡ä¸ | æºè½å¶é ãæ°è½æºãçµåä¿¡æ¯ãçç©å»è¯ãæ°ææãèè½ç¯ä¿ãå¨è¯¢æå¡ãå
¶ä»ï¼1â8ï¼ | |
| | | | `research_guideline_category` | 课é¢ç±»å« | éç¹è¯¾é¢(1)ãä¸è¬è¯¾é¢(2) | |
| | | | `research_guideline_status` | æåç¶æ | è稿(0)ãå·²åå¸(20)ãå·²æªæ¢(30) | |
| | | | `research_application_status` | ç³æ¥ä¹¦ç¶æ | è稿(0)ã审æ¹ä¸(15)ãå·²ç«é¡¹(20)ã已驳å(35) | |
| | | | `research_review_conclusion` | è¯å®¡ç»è®º | æ¨èç«é¡¹(1)ã䏿¨èç«é¡¹(2) | |
| | | | `research_fund_status` | ç»è´¹æ¨ä»ç¶æ | å¾
æ¨ä»(0)ãæ¥é审æ¹ä¸(15)ãå·²æ¨ä»(20)ã已驳å(30) | |
| | | | `archive_category_status` | æ¡£æ¡åç±»ç¶æ | å¯ç¨(0)ãåç¨(1) | |
| | | | `archive_document_status` | æ¡£æ¡ç¶æ | å¨åº(10)ãååºä¸(20) | |
| | | | `archive_secret_level` | æ¡£æ¡å¯çº§ | å
¬å¼(1)ãå
é¨(2)ãä¿å¯(3) | |
| | | | `archive_carrier_type` | æ¡£æ¡è½½ä½ | çµå(1)ãå®ä½(2)ãçµå+å®ä½(3) | |
| | | | `archive_source_type` | æ¡£æ¡æ¥æº | æå·¥å½å
¥(1)ã课é¢å½æ¡£(2)ãä¼å彿¡£(3)ãè´¢å¡å½æ¡£(4) | |
| | | | `archive_borrow_status` | åé
åç¶æ | è稿(0)ã审æ¹ä¸(15)ãååºä¸(20)ãå·²å½è¿(30)ã已驳å(35) | |
| | | |
| | | ### éå½ C æµç¨å®ä¹æ¸
åï¼æ¬æä¸å¡ç¸å
³ï¼ |
| | | |
| | | | æµç¨åç§° | æµç¨å®ä¹ Key | çæ¬ | 说æ | |
| | | |---|---|---|---| |
| | | | å
¥ä¼å®¡æ¹ | `ums_membership_approve` | 1 | ä¼åå
¥ä¼ç³è¯·çå¤çº§å®¡æ¹ | |
| | | | 课é¢ç«é¡¹å®¡æ¹ | `research_topic_approve` | 1 | 课é¢ç³æ¥ä¹¦çå¤çº§ç«é¡¹å®¡æ¹ | |
| | | | æ¥éå®¡æ¹ | `finance_reimbursement_approve` | 1 | æ¥éåå®¡æ¹ | |
| | | | æ¡£æ¡åé
å®¡æ¹ | `archive_borrow_approve` | 1 | 两级审æ¹ï¼æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ | |
| | | |
| | | > è¿è¡åºå½åå
±é¨ç½² 39 æ¡æµç¨å®ä¹ï¼è¦çå
¥ä¼ã课é¢ãæ¥éãæ¡£æ¡åé
以åå·¥åä¾§éè´ãéå®ãä»å¨ã人äºçä¸å¡ï¼æ¬ææ¹æ¡æ¶åç为ä¸è¿°åæ¡ã |
| | | |
| | | ### éå½ D èåä¸æéæ å°ï¼æ¬æä¸å¤§åç³»ç»ï¼ |
| | | |
| | | | ä¸çº§èå | ID | è·¯å¾ | äºçº§åè½é¡µ | |
| | | |---|---|---|---| |
| | | | åååå
¬ | 1185 | `/bpm` | æµç¨ç®¡çï¼å«æµç¨æ¨¡åï¼è¡¨åï¼åç±»ï¼ç¨æ·åç»ï¼çå¬å¨ï¼è¡¨è¾¾å¼ï¼ä¸å¡éä»¶é
ç½®ï¼æµç¨å®ä¾ï¼æµç¨ä»»å¡ï¼ã审æ¹ä¸å¿ãéç¥å
¬åãOA åºç¨ | |
| | | | è´¢å¡æ¥é | 1075425 | `/finance` | æ¥éå | |
| | | | ä¼å管ç | 1075490 | `/ums` | å
¥ä¼ç³è¯·ãä¼åå表ãä¼åéè®¯å½ | |
| | | | ä¼ä¸å¾®ä¿¡ | 6100000 | `/wxcp` | æ´»å¨ç®¡çãéç¥ç®¡ç | |
| | | | 课é¢ç®¡ç | 1075510 | `/research` | è¯¾é¢æåã课é¢ç³æ¥ | |
| | | | æ¡£æ¡ç®¡ç | 1075600 | `/archive` | æ¡£æ¡åç±»ãæ¡£æ¡ç®¡çãåé
ç»è®°ãæ¡£æ¡ç»è®¡ | |
| | | | ç³»ç»ç®¡ç | 1 | `/system` | ç¨æ·ãè§è²ãèåãé¨é¨ãå²ä½ãåå
¸ãç¼ç è§åãç§æ·ã审计æ¥å¿ï¼æä½æ¥å¿ï¼ç»å½æ¥å¿ï¼ãæ¶æ¯ä¸å¿ï¼çä¿¡ï¼é®ç®±ï¼ç«å
ä¿¡ï¼éç¥å
¬åï¼ãOAuth 2.0ï¼åºç¨ç®¡çï¼ä»¤ç管çï¼ã䏿¹ç»å½ï¼ä¸æ¹åºç¨ï¼ä¸æ¹ç¨æ·ï¼ãæä»¶åå¨ãå°åºç®¡çãå
¬å¸ä¿¡æ¯é
ç½® | |
| | | |
| | | --- |
| | | |
| | | *ï¼ææ¡£å®ï¼* |
| | |
| | | <module>yudao-module-ums</module> |
| | | <!-- 课é¢ç®¡ç模å --> |
| | | <module>yudao-module-research</module> |
| | | <!-- æ¡£æ¡ç®¡ç模å --> |
| | | <module>yudao-module-archive</module> |
| | | <module>yudao-module-archive-api</module> |
| | | </modules> |
| | | |
| | | <name>${project.artifactId}</name> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao</artifactId> |
| | | <version>${revision}</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <artifactId>yudao-module-archive-api</artifactId> |
| | | <packaging>jar</packaging> |
| | | |
| | | <name>${project.artifactId}</name> |
| | | <description> |
| | | archive 模åä¸ï¼æ¡£æ¡å½æ¡£ç API æ¥å£å®ä¹ï¼ä¾å
¶ä»æ¨¡åå¼ç¨ |
| | | </description> |
| | | |
| | | <dependencies> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-common</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Swagger 注解 --> |
| | | <dependency> |
| | | <groupId>org.springdoc</groupId> |
| | | <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> |
| | | <scope>provided</scope> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.api.document; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentCreateReqDTO; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentRespDTO; |
| | | |
| | | /** |
| | | * æ¡£æ¡å½æ¡£ API æ¥å£ |
| | | * |
| | | * ä¾å
¶ä»æ¨¡åï¼è¯¾é¢/ä¼å/è´¢å¡ï¼ææ¥æºåæ®å½æ¡£ï¼çææ¡£æ¡æ¡ç®å¹¶å¸¦å
¥æ¥æºéä»¶ã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface ArchiveDocumentApi { |
| | | |
| | | String PREFIX = "/rpc-api/archive/document"; |
| | | |
| | | /** |
| | | * ææ¥æºåæ®å½æ¡£ï¼å¹çï¼å sourceType + sourceId 已彿¡£åè¿åæ¢ææ¡£æ¡ç¼å· |
| | | * |
| | | * @param reqDTO 彿¡£ä¿¡æ¯ |
| | | * @return æ¡£æ¡ç¼å· |
| | | */ |
| | | CommonResult<Long> archiveBySource(ArchiveDocumentCreateReqDTO reqDTO); |
| | | |
| | | /** |
| | | * å¤ææ¥æºåæ®æ¯å¦å·²å½æ¡£ |
| | | * |
| | | * @param sourceType æ¥æºç±»å |
| | | * @param sourceId æ¥æºåæ®ç¼å· |
| | | * @return æ¯å¦å·²å½æ¡£ |
| | | */ |
| | | CommonResult<Boolean> isArchived(Integer sourceType, Long sourceId); |
| | | |
| | | /** |
| | | * è·åæ¥æºåæ®çæ¡£æ¡ |
| | | * |
| | | * @param sourceType æ¥æºç±»å |
| | | * @param sourceId æ¥æºåæ®ç¼å· |
| | | * @return æ¡£æ¡ |
| | | */ |
| | | CommonResult<ArchiveDocumentRespDTO> getBySource(Integer sourceType, Long sourceId); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.api.document.dto; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "RPC æå¡ - æ¡£æ¡å½æ¡£ Request DTO") |
| | | @Data |
| | | public class ArchiveDocumentCreateReqDTO { |
| | | |
| | | @Schema(description = "æ¥æºç±»åï¼2-è¯¾é¢ 3-ä¼å 4-è´¢å¡", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") |
| | | @NotNull(message = "æ¥æºç±»åä¸è½ä¸ºç©º") |
| | | private Integer sourceType; |
| | | |
| | | @Schema(description = "æ¥æºåæ®ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | @NotNull(message = "æ¥æºåæ®ç¼å·ä¸è½ä¸ºç©º") |
| | | private Long sourceId; |
| | | |
| | | @Schema(description = "æ¥æºåå·ï¼è¯¾é¢ç«é¡¹ç¼å·/ä¼åç¼å·/æ¥éåå·ï¼", example = "LX20260929000001") |
| | | private String sourceNo; |
| | | |
| | | @Schema(description = "æ¥æºåæ®æ é¢", example = "XXææ¯ç 究课é¢") |
| | | private String sourceTitle; |
| | | |
| | | @Schema(description = "ç®æ æ¡£æ¡åç±»ç¼ç ï¼research/member/financeï¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "research") |
| | | @NotEmpty(message = "ç®æ æ¡£æ¡åç±»ç¼ç ä¸è½ä¸ºç©º") |
| | | private String categoryCode; |
| | | |
| | | @Schema(description = "æ¡£æ¡æ é¢ï¼ä¸ºç©ºæ¶åæ¥æºåæ®æ é¢") |
| | | private String title; |
| | | |
| | | @Schema(description = "å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯ï¼ä¸ºç©ºæ¶ååç±»é»è®¤å¯çº§") |
| | | private Integer secretLevel; |
| | | |
| | | @Schema(description = "æè¦") |
| | | private String summary; |
| | | |
| | | @Schema(description = "å
³é®è¯ï¼è±æéå·åé") |
| | | private String tags; |
| | | |
| | | @Schema(description = "æ¥æºéä»¶ BlobId å表") |
| | | private List<Long> blobIds; |
| | | |
| | | @Schema(description = "彿¡£æ¥æï¼ä¸ºç©ºæ¶åå½å¤©") |
| | | private LocalDate archiveDate; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.api.document.dto; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Schema(description = "RPC æå¡ - æ¡£æ¡ Response DTO") |
| | | @Data |
| | | public class ArchiveDocumentRespDTO { |
| | | |
| | | @Schema(description = "æ¡£æ¡ç¼å·", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¡£æ¡åå·", example = "DA20260929000001") |
| | | private String no; |
| | | |
| | | @Schema(description = "æ¡£æ¡æ é¢", example = "XXææ¯ç 究课é¢") |
| | | private String title; |
| | | |
| | | @Schema(description = "æ¡£æ¡åç±»ç¼å·", example = "2") |
| | | private Long categoryId; |
| | | |
| | | @Schema(description = "æ¡£æ¡åç±»åç§°", example = "è¯¾é¢æ¡£æ¡") |
| | | private String categoryName; |
| | | |
| | | @Schema(description = "å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯", example = "2") |
| | | private Integer secretLevel; |
| | | |
| | | @Schema(description = "è½½ä½ï¼1-çµå 2-å®ä½ 3-çµå+å®ä½", example = "3") |
| | | private Integer carrierType; |
| | | |
| | | @Schema(description = "æ¡£æ¡ç¶æï¼10-å¨åº 20-ååºä¸", example = "10") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "æ¥æºç±»åï¼1-æå·¥ 2-è¯¾é¢ 3-ä¼å 4-è´¢å¡", example = "2") |
| | | private Integer sourceType; |
| | | |
| | | @Schema(description = "æ¥æºåå·", example = "LX20260929000001") |
| | | private String sourceNo; |
| | | |
| | | @Schema(description = "æ¥æºåæ®ç¼å·", example = "1024") |
| | | private Long sourceId; |
| | | |
| | | @Schema(description = "彿¡£æ¥æ", example = "2026-09-29") |
| | | private LocalDate archiveDate; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao</artifactId> |
| | | <version>${revision}</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <artifactId>yudao-module-archive</artifactId> |
| | | <packaging>jar</packaging> |
| | | |
| | | <name>${project.artifactId}</name> |
| | | <description> |
| | | archive å
ä¸ï¼æ¡£æ¡ç®¡ç模åï¼å¦ä¼/åä¼åæ¡£æ¡ï¼ä¹¦æ¶åç±»ãææ¡£ç®¡çãåé
审æ¹ãå½è¿ç»è®°ãæ¡£æ¡ç»è®¡ï¼å¹¶ä¸è¯¾é¢/ä¼å/è´¢å¡æ¨¡å彿¡£èå¨ï¼ã |
| | | </description> |
| | | |
| | | <dependencies> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-module-system</artifactId> |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- BPM 工使µï¼æ¡£æ¡åé
æ¡£æ¡ç®¡çåå®¡æ ¸ â å管é¢å¯¼å®¡æ¹ 两级审æ¹ï¼ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-module-bpm</artifactId> |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- æ¡£æ¡ APIï¼ä¾è¯¾é¢/ä¼å/è´¢å¡æ¨¡åææ¥æºåæ®å½æ¡£ï¼ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-module-archive-api</artifactId> |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- Web ç¸å
³ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-spring-boot-starter-web</artifactId> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-spring-boot-starter-security</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- DB ç¸å
³ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-spring-boot-starter-mybatis</artifactId> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-spring-boot-starter-redis</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- å·¥å
·ç±»ç¸å
³ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-spring-boot-starter-excel</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Test æµè¯ç¸å
³ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-spring-boot-starter-test</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.api.document; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentCreateReqDTO; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentRespDTO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.category.ArchiveCategoryDO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.document.ArchiveDocumentDO; |
| | | import cn.iocoder.yudao.module.archive.service.category.ArchiveCategoryService; |
| | | import cn.iocoder.yudao.module.archive.service.document.ArchiveDocumentService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | /** |
| | | * æ¡£æ¡å½æ¡£ API å®ç°ç±» |
| | | * |
| | | * ä¾å
¶ä»æ¨¡åï¼è¯¾é¢/ä¼å/è´¢å¡ï¼ææ¥æºåæ®å½æ¡£ï¼çææ¡£æ¡æ¡ç®å¹¶å¸¦å
¥æ¥æºéä»¶ã |
| | | * 该å®ç°ä¸ºæ¬å° Bean è°ç¨ï¼æ {@code @PreAuthorize}ï¼ï¼æéç±è°ç¨æ¹ï¼æ¥æºæ¨¡åï¼ç彿¡£æé®æéç¹æ§å¶ã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @RestController |
| | | @RequestMapping(ArchiveDocumentApi.PREFIX) |
| | | @Validated |
| | | public class ArchiveDocumentApiImpl implements ArchiveDocumentApi { |
| | | |
| | | @Resource |
| | | private ArchiveDocumentService archiveDocumentService; |
| | | |
| | | @Resource |
| | | private ArchiveCategoryService archiveCategoryService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public CommonResult<Long> archiveBySource(ArchiveDocumentCreateReqDTO reqDTO) { |
| | | return success(archiveDocumentService.archiveBySource(reqDTO)); |
| | | } |
| | | |
| | | @Override |
| | | public CommonResult<Boolean> isArchived(Integer sourceType, Long sourceId) { |
| | | return success(archiveDocumentService.isArchived(sourceType, sourceId)); |
| | | } |
| | | |
| | | @Override |
| | | public CommonResult<ArchiveDocumentRespDTO> getBySource(Integer sourceType, Long sourceId) { |
| | | ArchiveDocumentDO document = archiveDocumentService.getBySource(sourceType, sourceId); |
| | | if (document == null) { |
| | | return success(null); |
| | | } |
| | | // è¡¥å
åç±»åç§°ï¼ä¾¿äºæ¥æºæ¨¡ååè¡¨é¡µç´æ¥å±ç¤º |
| | | ArchiveDocumentRespDTO respDTO = BeanUtils.toBean(document, ArchiveDocumentRespDTO.class); |
| | | ArchiveCategoryDO category = archiveCategoryService.getCategory(document.getCategoryId()); |
| | | if (category != null) { |
| | | respDTO.setCategoryName(category.getName()); |
| | | } |
| | | return success(respDTO); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.borrow; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowPageReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowRespVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowReturnReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowSaveReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.borrow.ArchiveBorrowDO; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveBorrowStatusEnum; |
| | | import cn.iocoder.yudao.module.archive.service.borrow.ArchiveBorrowService; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.temporal.ChronoUnit; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; |
| | | |
| | | @Tag(name = "管çåå° - æ¡£æ¡åé
") |
| | | @RestController |
| | | @RequestMapping("/archive/borrow") |
| | | @Validated |
| | | public class ArchiveBorrowController { |
| | | |
| | | @Resource |
| | | private ArchiveBorrowService borrowService; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建档æ¡åé
åï¼è稿ï¼") |
| | | @PreAuthorize("@ss.hasPermission('archive:borrow:create')") |
| | | public CommonResult<Long> createBorrow(@Valid @RequestBody ArchiveBorrowSaveReqVO createReqVO) { |
| | | return success(borrowService.createBorrow(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°æ¡£æ¡åé
åï¼ä»
è稿æå·²é©³åå¯ä¿®æ¹ï¼") |
| | | @PreAuthorize("@ss.hasPermission('archive:borrow:update')") |
| | | public CommonResult<Boolean> updateBorrow(@Valid @RequestBody ArchiveBorrowSaveReqVO updateReqVO) { |
| | | borrowService.updateBorrow(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å 餿¡£æ¡åé
åï¼ä»
è稿å¯å é¤ï¼") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('archive:borrow:delete')") |
| | | public CommonResult<Boolean> deleteBorrow(@RequestParam("id") Long id) { |
| | | borrowService.deleteBorrow(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾æ¡£æ¡åé
å") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('archive:borrow:query')") |
| | | public CommonResult<ArchiveBorrowRespVO> getBorrow(@RequestParam("id") Long id) { |
| | | return success(buildBorrowDetail(borrowService.getBorrow(id))); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "è·å¾æ¡£æ¡åé
åå页") |
| | | @PreAuthorize("@ss.hasPermission('archive:borrow:query')") |
| | | public CommonResult<PageResult<ArchiveBorrowRespVO>> getBorrowPage(@Valid ArchiveBorrowPageReqVO pageReqVO) { |
| | | PageResult<ArchiveBorrowDO> pageResult = borrowService.getBorrowPage(pageReqVO); |
| | | return success(new PageResult<>(buildBorrowDetailList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | @GetMapping("/overdue-page") |
| | | @Operation(summary = "è·å¾é¾ææªè¿åé
åå页ï¼ååºä¸ ä¸ å½è¿æéå·²è¿ï¼") |
| | | @PreAuthorize("@ss.hasPermission('archive:borrow:query')") |
| | | public CommonResult<PageResult<ArchiveBorrowRespVO>> getOverdueBorrowPage( |
| | | @Valid ArchiveBorrowPageReqVO pageReqVO) { |
| | | PageResult<ArchiveBorrowDO> pageResult = borrowService.getOverdueBorrowPage(pageReqVO); |
| | | return success(new PageResult<>(buildBorrowDetailList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | @PostMapping("/submit") |
| | | @Operation(summary = "æäº¤æ¡£æ¡åé
审æ¹") |
| | | @PreAuthorize("@ss.hasPermission('archive:borrow:submit')") |
| | | public CommonResult<Boolean> submitBorrow(@RequestParam("id") Long id, |
| | | @RequestParam(value = "processDefinitionKey", required = false) |
| | | String processDefinitionKey) { |
| | | borrowService.submitBorrow(id, processDefinitionKey); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·å¾æ¡£æ¡åé
审æ¹çæµç¨å®ä¹å表") |
| | | @PreAuthorize("@ss.hasPermission('archive:borrow:query')") |
| | | public CommonResult<List<Map<String, Object>>> getApproveProcessDefinitionList() { |
| | | return success(borrowService.getApproveProcessDefinitionList()); |
| | | } |
| | | |
| | | @PostMapping("/return") |
| | | @Operation(summary = "å½è¿ç»è®°ï¼ä»
ååºä¸å¯ç»è®°ï¼å½è¿åæ¡£æ¡åå°å¨åºï¼") |
| | | @PreAuthorize("@ss.hasPermission('archive:borrow:return')") |
| | | public CommonResult<Boolean> returnBorrow(@Valid @RequestBody ArchiveBorrowReturnReqVO returnReqVO) { |
| | | borrowService.returnBorrow(returnReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | // ==================== å
鍿¹æ³ ==================== |
| | | |
| | | private ArchiveBorrowRespVO buildBorrowDetail(ArchiveBorrowDO borrow) { |
| | | if (borrow == null) { |
| | | return null; |
| | | } |
| | | return buildBorrowDetailList(Collections.singletonList(borrow)).get(0); |
| | | } |
| | | |
| | | private List<ArchiveBorrowRespVO> buildBorrowDetailList(List<ArchiveBorrowDO> list) { |
| | | if (CollUtil.isEmpty(list)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | // 1. å½è¿ç¡®è®¤äººå§å |
| | | Map<Long, AdminUserRespDTO> confirmUserMap = adminUserApi.getUserMap( |
| | | convertSet(list, ArchiveBorrowDO::getReturnConfirmUserId)); |
| | | |
| | | // 2. æ¼æ¥ç»æï¼é¾æç¶æå®æ¶è®¡ç®ï¼ä¸è½åºï¼ |
| | | LocalDate today = LocalDate.now(); |
| | | return BeanUtils.toBean(list, ArchiveBorrowRespVO.class, vo -> { |
| | | findAndThen(confirmUserMap, vo.getReturnConfirmUserId(), |
| | | user -> vo.setReturnConfirmUserName(user.getNickname())); |
| | | boolean overdue = ArchiveBorrowStatusEnum.BORROWED.getStatus().equals(vo.getStatus()) |
| | | && vo.getReturnDeadline() != null && vo.getReturnDeadline().isBefore(today); |
| | | vo.setOverdue(overdue); |
| | | vo.setOverdueDays(overdue ? ChronoUnit.DAYS.between(vo.getReturnDeadline(), today) : 0L); |
| | | }); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.borrow.vo; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡åé
åå页 Request VO") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class ArchiveBorrowPageReqVO extends PageParam { |
| | | |
| | | @Schema(description = "åé
åå·", example = "JY20260929000001") |
| | | private String no; |
| | | |
| | | @Schema(description = "æ¡£æ¡ç¼å·", example = "DA20260929000001") |
| | | private String documentNo; |
| | | |
| | | @Schema(description = "æ¡£æ¡æ é¢", example = "2026年度å¦ä¼å·¥ä½æ»ç»") |
| | | private String documentTitle; |
| | | |
| | | @Schema(description = "åé
人å§å", example = "å¼ ä¸") |
| | | private String borrowerName; |
| | | |
| | | @Schema(description = "ç¶æï¼0-è稿 15-审æ¹ä¸ 20-ååºä¸ 30-å·²å½è¿ 35-已驳å", example = "20") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "åé
æ¥æ") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate[] borrowDate; |
| | | |
| | | @Schema(description = "å½è¿æé") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate[] returnDeadline; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.borrow.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡åé
å Response VO") |
| | | @Data |
| | | public class ArchiveBorrowRespVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1") |
| | | private Long id; |
| | | |
| | | @Schema(description = "åé
åå·", example = "JY20260929000001") |
| | | private String no; |
| | | |
| | | @Schema(description = "æ¡£æ¡ ID", example = "1") |
| | | private Long documentId; |
| | | |
| | | @Schema(description = "æ¡£æ¡ç¼å·ï¼å¿«ç
§ï¼", example = "DA20260929000001") |
| | | private String documentNo; |
| | | |
| | | @Schema(description = "æ¡£æ¡æ é¢ï¼å¿«ç
§ï¼", example = "2026年度å¦ä¼å·¥ä½æ»ç»") |
| | | private String documentTitle; |
| | | |
| | | @Schema(description = "åé
äººç¨æ· ID", example = "1") |
| | | private Long borrowerUserId; |
| | | |
| | | @Schema(description = "åé
人å§å", example = "å¼ ä¸") |
| | | private String borrowerName; |
| | | |
| | | @Schema(description = "åé
人é¨é¨", example = "ç§ä¹¦å¤") |
| | | private String borrowerDept; |
| | | |
| | | @Schema(description = "åé
人èç³»çµè¯", example = "13800138000") |
| | | private String borrowerPhone; |
| | | |
| | | @Schema(description = "åé
æ¥æ", example = "2026-09-29") |
| | | private LocalDate borrowDate; |
| | | |
| | | @Schema(description = "åé
ç®ç", example = "æ°å年度æ»ç»å¼ç¨å岿°æ®") |
| | | private String borrowPurpose; |
| | | |
| | | @Schema(description = "å½è¿æé", example = "2026-10-15") |
| | | private LocalDate returnDeadline; |
| | | |
| | | @Schema(description = "ç¶æï¼0-è稿 15-审æ¹ä¸ 20-ååºä¸ 30-å·²å½è¿ 35-已驳å", example = "20") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "æµç¨å®ä¾ç¼å·", example = "a1b2c3d4") |
| | | private String processInstanceId; |
| | | |
| | | @Schema(description = "审æ¹éè¿ï¼å®é
ååºï¼æ¶é´") |
| | | private LocalDateTime approveTime; |
| | | |
| | | @Schema(description = "å®é
å½è¿æ¶é´") |
| | | private LocalDateTime returnTime; |
| | | |
| | | @Schema(description = "å½è¿ç¡®è®¤äººç¨æ· ID", example = "1") |
| | | private Long returnConfirmUserId; |
| | | |
| | | @Schema(description = "å½è¿ç¡®è®¤äººå§å", example = "管çå") |
| | | private String returnConfirmUserName; |
| | | |
| | | @Schema(description = "å½è¿å¤æ³¨") |
| | | private String returnRemark; |
| | | |
| | | @Schema(description = "驳ååå ") |
| | | private String rejectReason; |
| | | |
| | | @Schema(description = "驳忶é´") |
| | | private LocalDateTime rejectTime; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "æ¯å¦é¾æï¼ååºä¸ ä¸ å½è¿æéå·²è¿ï¼å®æ¶è®¡ç®ï¼", example = "false") |
| | | private Boolean overdue; |
| | | |
| | | @Schema(description = "龿天æ°ï¼æªé¾æä¸º 0ï¼", example = "0") |
| | | private Long overdueDays; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.borrow.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡å½è¿ç»è®° Request VO") |
| | | @Data |
| | | public class ArchiveBorrowReturnReqVO { |
| | | |
| | | @Schema(description = "åé
åç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "åé
åç¼å·ä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "å½è¿å¤æ³¨", example = "æ¡£æ¡å®å¥½ï¼æ 缺æ") |
| | | private String returnRemark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.borrow.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡åé
åæ°å¢/ä¿®æ¹ Request VO") |
| | | @Data |
| | | public class ArchiveBorrowSaveReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¡£æ¡ ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "åé
æ¡£æ¡ä¸è½ä¸ºç©º") |
| | | private Long documentId; |
| | | |
| | | @Schema(description = "åé
äººç¨æ· ID", example = "1") |
| | | private Long borrowerUserId; |
| | | |
| | | @Schema(description = "åé
人å§å", requiredMode = Schema.RequiredMode.REQUIRED, example = "å¼ ä¸") |
| | | @NotEmpty(message = "åé
人å§åä¸è½ä¸ºç©º") |
| | | private String borrowerName; |
| | | |
| | | @Schema(description = "åé
人é¨é¨", example = "ç§ä¹¦å¤") |
| | | private String borrowerDept; |
| | | |
| | | @Schema(description = "åé
人èç³»çµè¯", example = "13800138000") |
| | | private String borrowerPhone; |
| | | |
| | | @Schema(description = "åé
æ¥æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "2026-09-29") |
| | | @NotNull(message = "åé
æ¥æä¸è½ä¸ºç©º") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate borrowDate; |
| | | |
| | | @Schema(description = "åé
ç®ç", example = "æ°å年度æ»ç»å¼ç¨å岿°æ®") |
| | | private String borrowPurpose; |
| | | |
| | | @Schema(description = "å½è¿æé", requiredMode = Schema.RequiredMode.REQUIRED, example = "2026-10-15") |
| | | @NotNull(message = "å½è¿æéä¸è½ä¸ºç©º") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate returnDeadline; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.category; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.category.vo.ArchiveCategoryListReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.category.vo.ArchiveCategoryRespVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.category.vo.ArchiveCategorySaveReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.category.ArchiveCategoryDO; |
| | | import cn.iocoder.yudao.module.archive.service.category.ArchiveCategoryService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | @Tag(name = "管çåå° - æ¡£æ¡åç±»") |
| | | @RestController |
| | | @RequestMapping("/archive/category") |
| | | @Validated |
| | | public class ArchiveCategoryController { |
| | | |
| | | /** 顶级åç±»çç¶åç±»ç¼å· */ |
| | | private static final Long ROOT_PARENT_ID = 0L; |
| | | |
| | | @Resource |
| | | private ArchiveCategoryService categoryService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建档æ¡åç±»") |
| | | @PreAuthorize("@ss.hasPermission('archive:category:create')") |
| | | public CommonResult<Long> createCategory(@Valid @RequestBody ArchiveCategorySaveReqVO createReqVO) { |
| | | return success(categoryService.createCategory(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°æ¡£æ¡åç±»") |
| | | @PreAuthorize("@ss.hasPermission('archive:category:update')") |
| | | public CommonResult<Boolean> updateCategory(@Valid @RequestBody ArchiveCategorySaveReqVO updateReqVO) { |
| | | categoryService.updateCategory(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å 餿¡£æ¡åç±»") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('archive:category:delete')") |
| | | public CommonResult<Boolean> deleteCategory(@RequestParam("id") Long id) { |
| | | categoryService.deleteCategory(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾æ¡£æ¡åç±»") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('archive:category:query')") |
| | | public CommonResult<ArchiveCategoryRespVO> getCategory(@RequestParam("id") Long id) { |
| | | ArchiveCategoryDO category = categoryService.getCategory(id); |
| | | return success(BeanUtils.toBean(category, ArchiveCategoryRespVO.class)); |
| | | } |
| | | |
| | | @GetMapping("/list") |
| | | @Operation(summary = "è·å¾æ¡£æ¡åç±»å表ï¼ä¸å页ï¼") |
| | | @PreAuthorize("@ss.hasPermission('archive:category:query')") |
| | | public CommonResult<List<ArchiveCategoryRespVO>> getCategoryList(@Valid ArchiveCategoryListReqVO reqVO) { |
| | | return success(BeanUtils.toBean(categoryService.getCategoryList(reqVO), ArchiveCategoryRespVO.class)); |
| | | } |
| | | |
| | | @GetMapping("/tree") |
| | | @Operation(summary = "è·å¾æ¡£æ¡åç±»æ ï¼ä¾å·¦æ å³è¡¨ä¸æ¡£æ¡åç±»ä¸æä½¿ç¨ï¼") |
| | | @PreAuthorize("@ss.hasPermission('archive:category:query')") |
| | | public CommonResult<List<ArchiveCategoryRespVO>> getCategoryTree() { |
| | | return success(buildTree(BeanUtils.toBean(categoryService.getCategoryList(), ArchiveCategoryRespVO.class))); |
| | | } |
| | | |
| | | // ==================== å
鍿¹æ³ ==================== |
| | | |
| | | private List<ArchiveCategoryRespVO> buildTree(List<ArchiveCategoryRespVO> categoryList) { |
| | | if (CollUtil.isEmpty(categoryList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | // 1. 建ç«ãç¼å· -> èç¹ãç´¢å¼ï¼å¹¶åå§å children |
| | | Map<Long, ArchiveCategoryRespVO> nodeMap = new LinkedHashMap<>(); |
| | | for (ArchiveCategoryRespVO category : categoryList) { |
| | | category.setChildren(new ArrayList<>()); |
| | | nodeMap.put(category.getId(), category); |
| | | } |
| | | // 2. æè½½åèç¹ï¼ç¶èç¹ä¸å卿¶è§ä¸ºé¡¶çº§ï¼é¿å
å类被éè |
| | | List<ArchiveCategoryRespVO> roots = new ArrayList<>(); |
| | | for (ArchiveCategoryRespVO category : categoryList) { |
| | | ArchiveCategoryRespVO parent = nodeMap.get(category.getParentId()); |
| | | if (parent == null || ROOT_PARENT_ID.equals(category.getParentId())) { |
| | | roots.add(category); |
| | | } else { |
| | | parent.getChildren().add(category); |
| | | } |
| | | } |
| | | return roots; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.category.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡åç±»å表 Request VO") |
| | | @Data |
| | | public class ArchiveCategoryListReqVO { |
| | | |
| | | @Schema(description = "åç±»åç§°ï¼æ¨¡ç³å¹é
ï¼", example = "课é¢") |
| | | private String name; |
| | | |
| | | @Schema(description = "ç¶æï¼0-å¯ç¨ 1-åç¨", example = "0") |
| | | private Integer status; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.category.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡åç±» Response VO") |
| | | @Data |
| | | public class ArchiveCategoryRespVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ç¶åç±» IDï¼0=顶级", example = "0") |
| | | private Long parentId; |
| | | |
| | | @Schema(description = "åç±»åç§°", example = "è¯¾é¢æ¡£æ¡") |
| | | private String name; |
| | | |
| | | @Schema(description = "åç±»ç¼ç ï¼å¯ä¸", example = "research") |
| | | private String code; |
| | | |
| | | @Schema(description = "æ¾ç¤ºæåº", example = "2") |
| | | private Integer sort; |
| | | |
| | | @Schema(description = "å类说æ", example = "课é¢ç«é¡¹ãç»é¡¹ãææææ") |
| | | private String description; |
| | | |
| | | @Schema(description = "该åç±»ä¸æ¡£æ¡é»è®¤å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯", example = "2") |
| | | private Integer defaultSecretLevel; |
| | | |
| | | @Schema(description = "ç¶æï¼0-å¯ç¨ 1-åç¨", example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | @Schema(description = "ååç±»") |
| | | private List<ArchiveCategoryRespVO> children; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.category.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡åç±»æ°å¢/ä¿®æ¹ Request VO") |
| | | @Data |
| | | public class ArchiveCategorySaveReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ç¶åç±» IDï¼0=顶级", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |
| | | @NotNull(message = "ç¶åç±»ä¸è½ä¸ºç©º") |
| | | private Long parentId; |
| | | |
| | | @Schema(description = "åç±»åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "è¯¾é¢æ¡£æ¡") |
| | | @NotEmpty(message = "åç±»åç§°ä¸è½ä¸ºç©º") |
| | | private String name; |
| | | |
| | | @Schema(description = "åç±»ç¼ç ï¼å¯ä¸", requiredMode = Schema.RequiredMode.REQUIRED, example = "research") |
| | | @NotEmpty(message = "åç±»ç¼ç ä¸è½ä¸ºç©º") |
| | | private String code; |
| | | |
| | | @Schema(description = "æ¾ç¤ºæåº", example = "2") |
| | | private Integer sort; |
| | | |
| | | @Schema(description = "å类说æ", example = "课é¢ç«é¡¹ãç»é¡¹ãææææ") |
| | | private String description; |
| | | |
| | | @Schema(description = "该åç±»ä¸æ¡£æ¡é»è®¤å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯", example = "2") |
| | | private Integer defaultSecretLevel; |
| | | |
| | | @Schema(description = "ç¶æï¼0-å¯ç¨ 1-åç¨", example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.document; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.document.vo.ArchiveDocumentPageReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.document.vo.ArchiveDocumentRespVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.document.vo.ArchiveDocumentSaveReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.category.ArchiveCategoryDO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.document.ArchiveDocumentDO; |
| | | import cn.iocoder.yudao.module.archive.service.category.ArchiveCategoryService; |
| | | import cn.iocoder.yudao.module.archive.service.document.ArchiveDocumentService; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.pojo.PageParam.PAGE_SIZE_NONE; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; |
| | | import static cn.iocoder.yudao.module.archive.service.document.ArchiveDocumentService.DOCUMENT_RECORD_TYPE; |
| | | |
| | | @Tag(name = "管çåå° - æ¡£æ¡") |
| | | @RestController |
| | | @RequestMapping("/archive/document") |
| | | @Validated |
| | | public class ArchiveDocumentController { |
| | | |
| | | @Resource |
| | | private ArchiveDocumentService documentService; |
| | | |
| | | @Resource |
| | | private ArchiveCategoryService categoryService; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | | |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建档æ¡") |
| | | @PreAuthorize("@ss.hasPermission('archive:document:create')") |
| | | public CommonResult<Long> createDocument(@Valid @RequestBody ArchiveDocumentSaveReqVO createReqVO) { |
| | | return success(documentService.createDocument(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°æ¡£æ¡ï¼ååºä¸çæ¡£æ¡ä¸å
许修æ¹ï¼") |
| | | @PreAuthorize("@ss.hasPermission('archive:document:update')") |
| | | public CommonResult<Boolean> updateDocument(@Valid @RequestBody ArchiveDocumentSaveReqVO updateReqVO) { |
| | | documentService.updateDocument(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å 餿¡£æ¡") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('archive:document:delete')") |
| | | public CommonResult<Boolean> deleteDocument(@RequestParam("id") Long id) { |
| | | documentService.deleteDocument(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾æ¡£æ¡ï¼ä¿å¯çº§æ¡£æ¡éè¦ archive:document:sensitive æéï¼") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('archive:document:query')") |
| | | public CommonResult<ArchiveDocumentRespVO> getDocument(@RequestParam("id") Long id) { |
| | | ArchiveDocumentDO document = documentService.getDocument(id); |
| | | return success(buildDocumentDetail(document)); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "è·å¾æ¡£æ¡åé¡µï¼æ æææ¡£æ¡æéæ¶èªå¨è¿æ»¤ä¿å¯æ¡£æ¡ï¼") |
| | | @PreAuthorize("@ss.hasPermission('archive:document:query')") |
| | | public CommonResult<PageResult<ArchiveDocumentRespVO>> getDocumentPage( |
| | | @Valid ArchiveDocumentPageReqVO pageReqVO) { |
| | | PageResult<ArchiveDocumentDO> pageResult = documentService.getDocumentPage(pageReqVO); |
| | | return success(new PageResult<>(buildDocumentDetailList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | @GetMapping("/export-excel") |
| | | @Operation(summary = "å¯¼åºæ¡£æ¡ Excel") |
| | | @PreAuthorize("@ss.hasPermission('archive:document:export')") |
| | | @ApiAccessLog(operateType = EXPORT) |
| | | public void exportDocumentExcel(@Valid ArchiveDocumentPageReqVO pageReqVO, |
| | | HttpServletResponse response) throws IOException { |
| | | pageReqVO.setPageSize(PAGE_SIZE_NONE); |
| | | List<ArchiveDocumentDO> list = documentService.getDocumentList(pageReqVO); |
| | | ExcelUtils.write(response, "æ¡£æ¡.xls", "æ°æ®", ArchiveDocumentRespVO.class, buildDocumentDetailList(list)); |
| | | } |
| | | |
| | | // ==================== å
鍿¹æ³ ==================== |
| | | |
| | | private ArchiveDocumentRespVO buildDocumentDetail(ArchiveDocumentDO document) { |
| | | if (document == null) { |
| | | return null; |
| | | } |
| | | return buildDocumentDetailList(Collections.singletonList(document)).get(0); |
| | | } |
| | | |
| | | private List<ArchiveDocumentRespVO> buildDocumentDetailList(List<ArchiveDocumentDO> list) { |
| | | if (CollUtil.isEmpty(list)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | // 1.1 åç±»åç§° |
| | | Set<Long> categoryIds = convertSet(list, ArchiveDocumentDO::getCategoryId); |
| | | Map<Long, ArchiveCategoryDO> categoryMap = categoryIds.isEmpty() ? Collections.emptyMap() |
| | | : categoryService.getCategoryList().stream() |
| | | .filter(category -> categoryIds.contains(category.getId())) |
| | | .collect(Collectors.toMap(ArchiveCategoryDO::getId, Function.identity(), (a, b) -> a)); |
| | | // 1.2 彿¡£äººå§å |
| | | Set<Long> archivistIds = convertSet(list, ArchiveDocumentDO::getArchivistUserId); |
| | | Map<Long, AdminUserRespDTO> archivistMap = adminUserApi.getUserMap(archivistIds); |
| | | // 1.3 éä»¶ |
| | | Map<Long, List<StorageBlobRespDTO>> attachmentMap = list.stream() |
| | | .collect(Collectors.toMap(ArchiveDocumentDO::getId, |
| | | document -> storageAttachmentApi.listAttachments(DOCUMENT_RECORD_TYPE, document.getId()))); |
| | | |
| | | // 2. æ¼æ¥ç»æ |
| | | return BeanUtils.toBean(list, ArchiveDocumentRespVO.class, vo -> { |
| | | ArchiveCategoryDO category = categoryMap.get(vo.getCategoryId()); |
| | | if (category != null) { |
| | | vo.setCategoryName(category.getName()); |
| | | } |
| | | findAndThen(archivistMap, vo.getArchivistUserId(), user -> vo.setArchivistName(user.getNickname())); |
| | | List<StorageBlobRespDTO> attachments = attachmentMap.getOrDefault(vo.getId(), Collections.emptyList()); |
| | | vo.setAttachmentList(attachments); |
| | | vo.setHasAttachment(CollUtil.isNotEmpty(attachments)); |
| | | }); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.document.vo; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡å页 Request VO") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | public class ArchiveDocumentPageReqVO extends PageParam { |
| | | |
| | | @Schema(description = "æ¡£æ¡ç¼å·", example = "DA20260929000001") |
| | | private String no; |
| | | |
| | | @Schema(description = "æ¡£æ¡æ é¢", example = "2026年度å¦ä¼å·¥ä½æ»ç»") |
| | | private String title; |
| | | |
| | | @Schema(description = "æ¡£æ¡åç±» ID", example = "1") |
| | | private Long categoryId; |
| | | |
| | | @Schema(description = "å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯", example = "2") |
| | | private Integer secretLevel; |
| | | |
| | | @Schema(description = "è½½ä½ï¼1-çµå 2-å®ä½ 3-çµå+å®ä½", example = "3") |
| | | private Integer carrierType; |
| | | |
| | | @Schema(description = "æ¥æºç±»åï¼1-æå·¥ 2-è¯¾é¢ 3-ä¼å 4-è´¢å¡", example = "2") |
| | | private Integer sourceType; |
| | | |
| | | @Schema(description = "æ¥æºåå·", example = "LX20260928000001") |
| | | private String sourceNo; |
| | | |
| | | @Schema(description = "å
³é®è¯ï¼æ¨¡ç³å¹é
tags åæ®µï¼", example = "工使»ç»") |
| | | private String tags; |
| | | |
| | | @Schema(description = "æ¡£æ¡ç¶æï¼10-å¨åº 20-ååºä¸", example = "10") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "彿¡£æ¥æ") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate[] archiveDate; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.document.vo; |
| | | |
| | | import cn.idev.excel.annotation.ExcelIgnoreUnannotated; |
| | | import cn.idev.excel.annotation.ExcelProperty; |
| | | import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; |
| | | import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; |
| | | import cn.iocoder.yudao.module.archive.enums.DictTypeConstants; |
| | | import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡ Response VO") |
| | | @Data |
| | | @ExcelIgnoreUnannotated |
| | | public class ArchiveDocumentRespVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¡£æ¡ç¼å·", example = "DA20260929000001") |
| | | @ExcelProperty("æ¡£æ¡ç¼å·") |
| | | private String no; |
| | | |
| | | @Schema(description = "æ¡£æ¡æ é¢", example = "2026年度å¦ä¼å·¥ä½æ»ç»") |
| | | @ExcelProperty("æ¡£æ¡æ é¢") |
| | | private String title; |
| | | |
| | | @Schema(description = "æ¡£æ¡åç±» ID", example = "1") |
| | | private Long categoryId; |
| | | |
| | | @Schema(description = "æ¡£æ¡åç±»åç§°", example = "æä¹¦æ¡£æ¡") |
| | | @ExcelProperty("æ¡£æ¡åç±»") |
| | | private String categoryName; |
| | | |
| | | @Schema(description = "å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯", example = "2") |
| | | @ExcelProperty(value = "å¯çº§", converter = DictConvert.class) |
| | | @DictFormat(DictTypeConstants.SECRET_LEVEL) |
| | | private Integer secretLevel; |
| | | |
| | | @Schema(description = "è½½ä½ï¼1-çµå 2-å®ä½ 3-çµå+å®ä½", example = "3") |
| | | @ExcelProperty(value = "è½½ä½", converter = DictConvert.class) |
| | | @DictFormat(DictTypeConstants.CARRIER_TYPE) |
| | | private Integer carrierType; |
| | | |
| | | @Schema(description = "å®ä½-书æ¶å·", example = "A") |
| | | @ExcelProperty("书æ¶å·") |
| | | private String shelfNo; |
| | | |
| | | @Schema(description = "å®ä½-å±å·", example = "2") |
| | | @ExcelProperty("å±å·") |
| | | private String layerNo; |
| | | |
| | | @Schema(description = "å®ä½-åå·", example = "3") |
| | | @ExcelProperty("åå·") |
| | | private String columnNo; |
| | | |
| | | @Schema(description = "å®ä½-åå·/æ¡£æ¡çå·", example = "B-03") |
| | | @ExcelProperty("åå·/æ¡£æ¡çå·") |
| | | private String boxNo; |
| | | |
| | | @Schema(description = "å®ä½åæ¾ä½ç½®æè¿°", example = "3å·åºæ¿Aæ¶2å±") |
| | | @ExcelProperty("åæ¾ä½ç½®") |
| | | private String storePlace; |
| | | |
| | | @Schema(description = "æ¥æºç±»åï¼1-æå·¥ 2-è¯¾é¢ 3-ä¼å 4-è´¢å¡", example = "1") |
| | | @ExcelProperty(value = "æ¥æºç±»å", converter = DictConvert.class) |
| | | @DictFormat(DictTypeConstants.SOURCE_TYPE) |
| | | private Integer sourceType; |
| | | |
| | | @Schema(description = "æ¥æºåå·", example = "LX20260929000001") |
| | | @ExcelProperty("æ¥æºåå·") |
| | | private String sourceNo; |
| | | |
| | | @Schema(description = "æ¥æºåæ® ID", example = "1024") |
| | | private Long sourceId; |
| | | |
| | | @Schema(description = "æ¥æºåæ®æ é¢ï¼åä½å¿«ç
§ï¼", example = "XXææ¯ç 究课é¢") |
| | | @ExcelProperty("æ¥æºåæ®æ é¢") |
| | | private String sourceTitle; |
| | | |
| | | @Schema(description = "彿¡£æ¥æ", example = "2026-09-29") |
| | | @ExcelProperty("彿¡£æ¥æ") |
| | | private LocalDate archiveDate; |
| | | |
| | | @Schema(description = "彿¡£äººç¨æ· ID", example = "1") |
| | | private Long archivistUserId; |
| | | |
| | | @Schema(description = "彿¡£äººå§å", example = "管çå") |
| | | @ExcelProperty("彿¡£äºº") |
| | | private String archivistName; |
| | | |
| | | @Schema(description = "æ¡£æ¡ç¶æï¼10-å¨åº 20-ååºä¸", example = "10") |
| | | @ExcelProperty(value = "æ¡£æ¡ç¶æ", converter = DictConvert.class) |
| | | @DictFormat(DictTypeConstants.DOCUMENT_STATUS) |
| | | private Integer status; |
| | | |
| | | @Schema(description = "æè¦") |
| | | @ExcelProperty("æè¦") |
| | | private String summary; |
| | | |
| | | @Schema(description = "å
³é®è¯ï¼è±æéå·åé", example = "工使»ç»,年度计å") |
| | | @ExcelProperty("å
³é®è¯") |
| | | private String tags; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | @Schema(description = "éä»¶å表") |
| | | private List<StorageBlobRespDTO> attachmentList; |
| | | |
| | | @Schema(description = "æ¯å¦æéä»¶") |
| | | private Boolean hasAttachment; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.document.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡æ°å¢/ä¿®æ¹ Request VO") |
| | | @Data |
| | | public class ArchiveDocumentSaveReqVO { |
| | | |
| | | @Schema(description = "ç¼å·", example = "1") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¡£æ¡æ é¢", requiredMode = Schema.RequiredMode.REQUIRED, example = "2026年度å¦ä¼å·¥ä½æ»ç»") |
| | | @NotEmpty(message = "æ¡£æ¡æ é¢ä¸è½ä¸ºç©º") |
| | | private String title; |
| | | |
| | | @Schema(description = "æ¡£æ¡åç±» ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "æ¡£æ¡åç±»ä¸è½ä¸ºç©º") |
| | | private Long categoryId; |
| | | |
| | | @Schema(description = "å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯ï¼ä¸ºç©ºæ¶ååç±»é»è®¤å¯çº§", example = "2") |
| | | private Integer secretLevel; |
| | | |
| | | @Schema(description = "è½½ä½ï¼1-çµå 2-å®ä½ 3-çµå+å®ä½ï¼ä¸ºç©ºæ¶åé»è®¤å¼ 3", example = "3") |
| | | private Integer carrierType; |
| | | |
| | | @Schema(description = "å®ä½-书æ¶å·", example = "A") |
| | | private String shelfNo; |
| | | |
| | | @Schema(description = "å®ä½-å±å·", example = "2") |
| | | private String layerNo; |
| | | |
| | | @Schema(description = "å®ä½-åå·", example = "3") |
| | | private String columnNo; |
| | | |
| | | @Schema(description = "å®ä½-åå·/æ¡£æ¡çå·", example = "B-03") |
| | | private String boxNo; |
| | | |
| | | @Schema(description = "å®ä½åæ¾ä½ç½®æè¿°", example = "3å·åºæ¿Aæ¶2å±") |
| | | private String storePlace; |
| | | |
| | | @Schema(description = "彿¡£æ¥æï¼ä¸ºç©ºæ¶åå½å¤©", example = "2026-09-29") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate archiveDate; |
| | | |
| | | @Schema(description = "æè¦", example = "2026年度å¦ä¼å·¥ä½æ»ç»åä¸ä¸å¹´åº¦è®¡å") |
| | | private String summary; |
| | | |
| | | @Schema(description = "å
³é®è¯ï¼è±æéå·åé", example = "工使»ç»,年度计å") |
| | | private String tags; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "éä»¶ BlobId å表") |
| | | private List<Long> blobIds; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.stat; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.stat.vo.ArchiveStatRespVO; |
| | | import cn.iocoder.yudao.module.archive.service.stat.ArchiveStatService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | @Tag(name = "管çåå° - æ¡£æ¡ç»è®¡") |
| | | @RestController |
| | | @RequestMapping("/archive/stat") |
| | | @Validated |
| | | public class ArchiveStatController { |
| | | |
| | | @Resource |
| | | private ArchiveStatService statService; |
| | | |
| | | @GetMapping("/overview") |
| | | @Operation(summary = "è·å¾æ¡£æ¡ç»è®¡æ»è§ï¼åé + æµè½¬ + åç±»/å¯çº§/è½½ä½åå¸ï¼") |
| | | @PreAuthorize("@ss.hasPermission('archive:stat:query')") |
| | | public CommonResult<ArchiveStatRespVO> getOverview() { |
| | | return success(statService.getOverview()); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.stat.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡ç»è®¡-åç±»åå¸") |
| | | @Data |
| | | public class ArchiveStatCategoryVO { |
| | | |
| | | @Schema(description = "åç±»ç¼å·", example = "2") |
| | | private Long categoryId; |
| | | |
| | | @Schema(description = "åç±»åç§°", example = "è¯¾é¢æ¡£æ¡") |
| | | private String name; |
| | | |
| | | @Schema(description = "æ¡£æ¡æ°é", example = "12") |
| | | private Long total; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.stat.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡ç»è®¡ Response VO") |
| | | @Data |
| | | public class ArchiveStatRespVO { |
| | | |
| | | @Schema(description = "æ¡£æ¡æ»æ°", example = "128") |
| | | private Long totalCount; |
| | | |
| | | @Schema(description = "å¨åºæ¡£æ¡æ°é", example = "120") |
| | | private Long inStockCount; |
| | | |
| | | @Schema(description = "ååºä¸æ¡£æ¡æ°é", example = "8") |
| | | private Long borrowedCount; |
| | | |
| | | @Schema(description = "ååºä¸åé
åæ°é", example = "8") |
| | | private Long borrowingCount; |
| | | |
| | | @Schema(description = "龿æªè¿åé
åæ°é", example = "2") |
| | | private Long overdueCount; |
| | | |
| | | @Schema(description = "æåç±»åå¸") |
| | | private List<ArchiveStatCategoryVO> byCategory; |
| | | |
| | | @Schema(description = "æå¯çº§åå¸") |
| | | private List<ArchiveStatValueVO> bySecretLevel; |
| | | |
| | | @Schema(description = "æè½½ä½åå¸") |
| | | private List<ArchiveStatValueVO> byCarrierType; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.controller.admin.stat.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - æ¡£æ¡ç»è®¡-æä¸¾å¼åå¸ï¼å¯çº§ / è½½ä½ï¼") |
| | | @Data |
| | | public class ArchiveStatValueVO { |
| | | |
| | | @Schema(description = "æä¸¾å¼", example = "3") |
| | | private Integer value; |
| | | |
| | | @Schema(description = "æä¸¾åç§°", example = "ä¿å¯") |
| | | private String name; |
| | | |
| | | @Schema(description = "æ¡£æ¡æ°é", example = "5") |
| | | private Long total; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.dal.dataobject.borrow; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * æ¡£æ¡-åé
å DOï¼åé
ç»è®° + å½è¿ç»è®°åä¸ï¼ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @TableName("archive_borrow") |
| | | @KeySequence("archive_borrow_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class ArchiveBorrowDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | /** åé
åå· JY+yyyyMMdd+6使µæ°´ */ |
| | | private String no; |
| | | |
| | | /** æ¡£æ¡ ID */ |
| | | private Long documentId; |
| | | |
| | | /** æ¡£æ¡ç¼å·ï¼å¿«ç
§ï¼ */ |
| | | private String documentNo; |
| | | |
| | | /** æ¡£æ¡æ é¢ï¼å¿«ç
§ï¼ */ |
| | | private String documentTitle; |
| | | |
| | | /** åé
äººç¨æ· ID */ |
| | | private Long borrowerUserId; |
| | | |
| | | /** åé
人å§å */ |
| | | private String borrowerName; |
| | | |
| | | /** åé
人é¨é¨ */ |
| | | private String borrowerDept; |
| | | |
| | | /** åé
人èç³»çµè¯ */ |
| | | private String borrowerPhone; |
| | | |
| | | /** åé
æ¥æ */ |
| | | private LocalDate borrowDate; |
| | | |
| | | /** åé
ç®ç */ |
| | | private String borrowPurpose; |
| | | |
| | | /** å½è¿æéï¼é¾æå®æ¶è®¡ç®åºåï¼ */ |
| | | private LocalDate returnDeadline; |
| | | |
| | | /** ç¶æï¼0-è稿 15-审æ¹ä¸ 20-ååºä¸ 30-å·²å½è¿ 35-已驳å */ |
| | | private Integer status; |
| | | |
| | | /** BPM æµç¨å®ä¾ ID */ |
| | | private String processInstanceId; |
| | | |
| | | /** 审æ¹éè¿ï¼å®é
ååºï¼æ¶é´ */ |
| | | private LocalDateTime approveTime; |
| | | |
| | | /** å®é
å½è¿æ¶é´ */ |
| | | private LocalDateTime returnTime; |
| | | |
| | | /** å½è¿ç¡®è®¤äººç¨æ· ID */ |
| | | private Long returnConfirmUserId; |
| | | |
| | | /** å½è¿å¤æ³¨ */ |
| | | private String returnRemark; |
| | | |
| | | /** 驳ååå ï¼BPM ååï¼ */ |
| | | private String rejectReason; |
| | | |
| | | /** é©³åæ¶é´ */ |
| | | private LocalDateTime rejectTime; |
| | | |
| | | /** 夿³¨ */ |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.dal.dataobject.category; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | /** |
| | | * æ¡£æ¡-åç±» DOï¼ä¹¦æ¶åç±»ï¼åå±ï¼ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @TableName("archive_category") |
| | | @KeySequence("archive_category_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class ArchiveCategoryDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | /** ç¶åç±» IDï¼0=顶级 */ |
| | | private Long parentId; |
| | | |
| | | /** åç±»åç§° */ |
| | | private String name; |
| | | |
| | | /** åç±»ç¼ç ï¼å¯ä¸ */ |
| | | private String code; |
| | | |
| | | /** æ¾ç¤ºæåº */ |
| | | private Integer sort; |
| | | |
| | | /** å类说æ */ |
| | | private String description; |
| | | |
| | | /** 该åç±»ä¸æ¡£æ¡é»è®¤å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯ */ |
| | | private Integer defaultSecretLevel; |
| | | |
| | | /** ç¶æï¼0-å¯ç¨ 1-åç¨ */ |
| | | private Integer status; |
| | | |
| | | /** 夿³¨ */ |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.dal.dataobject.document; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | /** |
| | | * æ¡£æ¡-æ¡£æ¡ä¸»è¡¨ DO |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @TableName("archive_document") |
| | | @KeySequence("archive_document_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class ArchiveDocumentDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | /** æ¡£æ¡ç¼å· DA+yyyyMMdd+6使µæ°´ */ |
| | | private String no; |
| | | |
| | | /** æ¡£æ¡æ é¢ */ |
| | | private String title; |
| | | |
| | | /** æ¡£æ¡åç±» ID */ |
| | | private Long categoryId; |
| | | |
| | | /** å¯çº§ï¼1-å
¬å¼ 2-å
é¨ 3-ä¿å¯ */ |
| | | private Integer secretLevel; |
| | | |
| | | /** è½½ä½ï¼1-çµå 2-å®ä½ 3-çµå+å®ä½ */ |
| | | private Integer carrierType; |
| | | |
| | | /** å®ä½-书æ¶å· */ |
| | | private String shelfNo; |
| | | |
| | | /** å®ä½-å±å· */ |
| | | private String layerNo; |
| | | |
| | | /** å®ä½-åå· */ |
| | | private String columnNo; |
| | | |
| | | /** å®ä½-åå·/æ¡£æ¡çå· */ |
| | | private String boxNo; |
| | | |
| | | /** å®ä½åæ¾ä½ç½®æè¿° */ |
| | | private String storePlace; |
| | | |
| | | /** æ¥æºç±»åï¼1-æå·¥ 2-è¯¾é¢ 3-ä¼å 4-è´¢å¡ */ |
| | | private Integer sourceType; |
| | | |
| | | /** æ¥æºåå· */ |
| | | private String sourceNo; |
| | | |
| | | /** æ¥æºåæ® ID */ |
| | | private Long sourceId; |
| | | |
| | | /** æ¥æºåæ®æ é¢ï¼åä½å¿«ç
§ï¼ */ |
| | | private String sourceTitle; |
| | | |
| | | /** 彿¡£æ¥æ */ |
| | | private LocalDate archiveDate; |
| | | |
| | | /** 彿¡£äººç¨æ· ID */ |
| | | private Long archivistUserId; |
| | | |
| | | /** æ¡£æ¡ç¶æï¼10-å¨åº 20-ååºä¸ */ |
| | | private Integer status; |
| | | |
| | | /** æè¦ */ |
| | | private String summary; |
| | | |
| | | /** å
³é®è¯ï¼è±æéå·åé */ |
| | | private String tags; |
| | | |
| | | /** 夿³¨ */ |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.dal.mysql.borrow; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowPageReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.borrow.ArchiveBorrowDO; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveBorrowStatusEnum; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface ArchiveBorrowMapper extends BaseMapperX<ArchiveBorrowDO> { |
| | | |
| | | /** åé
åå页æ¥è¯¢ */ |
| | | default PageResult<ArchiveBorrowDO> selectPage(ArchiveBorrowPageReqVO reqVO) { |
| | | return selectPage(reqVO, buildQuery(reqVO, false)); |
| | | } |
| | | |
| | | /** 龿åé
åå页æ¥è¯¢ï¼ååºä¸ ä¸ å½è¿æéå·²è¿ */ |
| | | default PageResult<ArchiveBorrowDO> selectOverduePage(ArchiveBorrowPageReqVO reqVO) { |
| | | return selectPage(reqVO, buildQuery(reqVO, true)); |
| | | } |
| | | |
| | | /** 龿åé
åå表ï¼ä¸å页ï¼ç»è®¡ä¸å¯¼åºç¨ï¼ */ |
| | | default List<ArchiveBorrowDO> selectOverdueList() { |
| | | return selectList(new LambdaQueryWrapperX<ArchiveBorrowDO>() |
| | | .eq(ArchiveBorrowDO::getStatus, ArchiveBorrowStatusEnum.BORROWED.getStatus()) |
| | | .lt(ArchiveBorrowDO::getReturnDeadline, LocalDate.now())); |
| | | } |
| | | |
| | | /** |
| | | * æå»ºåé
åæ¥è¯¢æ¡ä»¶ |
| | | * |
| | | * @param overdueOnly true=ä»
æ¥è¯¢é¾æï¼ååºä¸ ä¸ å½è¿æé < ä»å¤©ï¼ |
| | | */ |
| | | default LambdaQueryWrapperX<ArchiveBorrowDO> buildQuery(ArchiveBorrowPageReqVO reqVO, boolean overdueOnly) { |
| | | LambdaQueryWrapperX<ArchiveBorrowDO> query = new LambdaQueryWrapperX<ArchiveBorrowDO>() |
| | | .likeIfPresent(ArchiveBorrowDO::getNo, reqVO.getNo()) |
| | | .likeIfPresent(ArchiveBorrowDO::getDocumentNo, reqVO.getDocumentNo()) |
| | | .likeIfPresent(ArchiveBorrowDO::getDocumentTitle, reqVO.getDocumentTitle()) |
| | | .likeIfPresent(ArchiveBorrowDO::getBorrowerName, reqVO.getBorrowerName()) |
| | | .eqIfPresent(ArchiveBorrowDO::getStatus, reqVO.getStatus()) |
| | | .betweenIfPresent(ArchiveBorrowDO::getBorrowDate, reqVO.getBorrowDate()) |
| | | .betweenIfPresent(ArchiveBorrowDO::getReturnDeadline, reqVO.getReturnDeadline()) |
| | | .orderByDesc(ArchiveBorrowDO::getId); |
| | | if (overdueOnly) { |
| | | query.eq(ArchiveBorrowDO::getStatus, ArchiveBorrowStatusEnum.BORROWED.getStatus()) |
| | | .lt(ArchiveBorrowDO::getReturnDeadline, LocalDate.now()); |
| | | } |
| | | return query; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢æå®æ¡£æ¡å¤äºæªå½è¿ï¼å®¡æ¹ä¸ / ååºä¸ï¼ç¶æçåé
å |
| | | * ç¨äºãå䏿¡£æ¡å䏿¶é´åªè½æä¸æ¡æªå½è¿åé
åãçå¯ä¸æ§æ ¡éª |
| | | */ |
| | | default List<ArchiveBorrowDO> selectListByDocumentIdAndStatusIn(Long documentId, Collection<Integer> statuses) { |
| | | return selectList(new LambdaQueryWrapperX<ArchiveBorrowDO>() |
| | | .eq(ArchiveBorrowDO::getDocumentId, documentId) |
| | | .inIfPresent(ArchiveBorrowDO::getStatus, statuses)); |
| | | } |
| | | |
| | | /** æç¶æç»è®¡åé
åæ°é */ |
| | | default Long selectCountByStatus(Integer status) { |
| | | return selectCount(ArchiveBorrowDO::getStatus, status); |
| | | } |
| | | |
| | | /** ååºä¸åé
åæ°é */ |
| | | default Long selectBorrowingCount() { |
| | | return selectCountByStatus(ArchiveBorrowStatusEnum.BORROWED.getStatus()); |
| | | } |
| | | |
| | | /** 龿åé
åæ°é */ |
| | | default Long selectOverdueCount() { |
| | | return selectCount(new LambdaQueryWrapperX<ArchiveBorrowDO>() |
| | | .eq(ArchiveBorrowDO::getStatus, ArchiveBorrowStatusEnum.BORROWED.getStatus()) |
| | | .lt(ArchiveBorrowDO::getReturnDeadline, LocalDate.now())); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.dal.mysql.category; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.category.ArchiveCategoryDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface ArchiveCategoryMapper extends BaseMapperX<ArchiveCategoryDO> { |
| | | |
| | | /** ææåºå¼ + ç¼å·ååºåå
¨é¨åç±»ï¼ç¨äºæå»ºåç±»æ */ |
| | | default List<ArchiveCategoryDO> selectListOrdered() { |
| | | return selectList(new LambdaQueryWrapperX<ArchiveCategoryDO>() |
| | | .orderByAsc(ArchiveCategoryDO::getSort) |
| | | .orderByAsc(ArchiveCategoryDO::getId)); |
| | | } |
| | | |
| | | default List<ArchiveCategoryDO> selectListByParentId(Long parentId) { |
| | | return selectList(ArchiveCategoryDO::getParentId, parentId); |
| | | } |
| | | |
| | | default ArchiveCategoryDO selectByCode(String code) { |
| | | return selectOne(ArchiveCategoryDO::getCode, code); |
| | | } |
| | | |
| | | /** |
| | | * ç»è®¡å级ä¸åååç±»æ°éï¼æ ¡éªå¯ä¸æ§ç¨ï¼ |
| | | * |
| | | * @param excludeId éè¦æé¤çåç±» IDï¼æ´æ°åºæ¯ä¼ èªèº« IDï¼æ°å¢åºæ¯ä¼ nullï¼ |
| | | */ |
| | | default Long selectCountByName(String name, Long parentId, Long excludeId) { |
| | | return selectCount(new LambdaQueryWrapperX<ArchiveCategoryDO>() |
| | | .eq(ArchiveCategoryDO::getName, name) |
| | | .eq(ArchiveCategoryDO::getParentId, parentId) |
| | | .neIfPresent(ArchiveCategoryDO::getId, excludeId)); |
| | | } |
| | | |
| | | /** |
| | | * ç»è®¡ç¼ç é夿°éï¼æ ¡éªå¯ä¸æ§ç¨ï¼ |
| | | * |
| | | * @param excludeId éè¦æé¤çåç±» IDï¼æ´æ°åºæ¯ä¼ èªèº« IDï¼æ°å¢åºæ¯ä¼ nullï¼ |
| | | */ |
| | | default Long selectCountByCode(String code, Long excludeId) { |
| | | return selectCount(new LambdaQueryWrapperX<ArchiveCategoryDO>() |
| | | .eq(ArchiveCategoryDO::getCode, code) |
| | | .neIfPresent(ArchiveCategoryDO::getId, excludeId)); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.dal.mysql.document; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.document.vo.ArchiveDocumentPageReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.stat.vo.ArchiveStatCategoryVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.stat.vo.ArchiveStatValueVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.document.ArchiveDocumentDO; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveDocumentStatusEnum; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveSecretLevelEnum; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Select; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface ArchiveDocumentMapper extends BaseMapperX<ArchiveDocumentDO> { |
| | | |
| | | /** |
| | | * ææ¥æºåæ®æ¥è¯¢æ¡£æ¡ï¼å½æ¡£èå¨å¹ç夿ç¨ï¼ |
| | | */ |
| | | default ArchiveDocumentDO selectBySource(Integer sourceType, Long sourceId) { |
| | | return selectFirstOne(ArchiveDocumentDO::getSourceType, sourceType, |
| | | ArchiveDocumentDO::getSourceId, sourceId); |
| | | } |
| | | |
| | | /** åç±»ä¸æ¡£æ¡æ°éï¼åç±»å é¤å®å«ç¨ï¼ */ |
| | | default Long selectCountByCategoryId(Long categoryId) { |
| | | return selectCount(ArchiveDocumentDO::getCategoryId, categoryId); |
| | | } |
| | | |
| | | /** |
| | | * æ¡£æ¡å页æ¥è¯¢ |
| | | * |
| | | * @param excludeSensitive true=å½åç¨æ·æ æææ¡£æ¡æéï¼å¼ºå¶æé¤ãä¿å¯ãæ¡£æ¡ |
| | | */ |
| | | default PageResult<ArchiveDocumentDO> selectPage(ArchiveDocumentPageReqVO reqVO, boolean excludeSensitive) { |
| | | return selectPage(reqVO, buildQuery(reqVO, excludeSensitive)); |
| | | } |
| | | |
| | | /** |
| | | * æ¡£æ¡å表æ¥è¯¢ï¼å¯¼åºç¨ï¼ä¸åé¡µï¼ |
| | | * |
| | | * @param excludeSensitive true=å½åç¨æ·æ æææ¡£æ¡æéï¼å¼ºå¶æé¤ãä¿å¯ãæ¡£æ¡ |
| | | */ |
| | | default List<ArchiveDocumentDO> selectList(ArchiveDocumentPageReqVO reqVO, boolean excludeSensitive) { |
| | | return selectList(buildQuery(reqVO, excludeSensitive)); |
| | | } |
| | | |
| | | /** |
| | | * æå»ºæ¡£æ¡æ¥è¯¢æ¡ä»¶ãæææ¡£æ¡è¿æ»¤ç»ä¸èµ°æ¤æ¹æ³ï¼ç¦æ¢å¨å
¶å®å
¥å£é夿¼æ¥ã |
| | | */ |
| | | default LambdaQueryWrapperX<ArchiveDocumentDO> buildQuery(ArchiveDocumentPageReqVO reqVO, boolean excludeSensitive) { |
| | | LambdaQueryWrapperX<ArchiveDocumentDO> query = new LambdaQueryWrapperX<ArchiveDocumentDO>() |
| | | .likeIfPresent(ArchiveDocumentDO::getNo, reqVO.getNo()) |
| | | .likeIfPresent(ArchiveDocumentDO::getTitle, reqVO.getTitle()) |
| | | .eqIfPresent(ArchiveDocumentDO::getCategoryId, reqVO.getCategoryId()) |
| | | .eqIfPresent(ArchiveDocumentDO::getSecretLevel, reqVO.getSecretLevel()) |
| | | .eqIfPresent(ArchiveDocumentDO::getCarrierType, reqVO.getCarrierType()) |
| | | .eqIfPresent(ArchiveDocumentDO::getSourceType, reqVO.getSourceType()) |
| | | .likeIfPresent(ArchiveDocumentDO::getSourceNo, reqVO.getSourceNo()) |
| | | .likeIfPresent(ArchiveDocumentDO::getTags, reqVO.getTags()) |
| | | .eqIfPresent(ArchiveDocumentDO::getStatus, reqVO.getStatus()) |
| | | .betweenIfPresent(ArchiveDocumentDO::getArchiveDate, reqVO.getArchiveDate()) |
| | | .orderByDesc(ArchiveDocumentDO::getId); |
| | | if (excludeSensitive) { |
| | | query.ne(ArchiveDocumentDO::getSecretLevel, ArchiveSecretLevelEnum.SECRET.getLevel()); |
| | | } |
| | | return query; |
| | | } |
| | | |
| | | /** æ¡£æ¡æ»æ° */ |
| | | default Long selectTotalCount() { |
| | | return selectCount(); |
| | | } |
| | | |
| | | /** ææ¡£æ¡ç¶æç»è®¡æ°é */ |
| | | default Long selectCountByStatus(Integer status) { |
| | | return selectCount(ArchiveDocumentDO::getStatus, status); |
| | | } |
| | | |
| | | /** å¨åºæ¡£æ¡æ°é */ |
| | | default Long selectInStockCount() { |
| | | return selectCountByStatus(ArchiveDocumentStatusEnum.IN_STOCK.getStatus()); |
| | | } |
| | | |
| | | /** ååºä¸æ¡£æ¡æ°é */ |
| | | default Long selectBorrowedCount() { |
| | | return selectCountByStatus(ArchiveDocumentStatusEnum.BORROWED.getStatus()); |
| | | } |
| | | |
| | | /** |
| | | * æåç±»èåæ¡£æ¡æ°éï¼å« 0 æ¡çåç±»ï¼ä¾¿äºå端å±ç¤ºå
¨é¨åç±»ï¼ |
| | | */ |
| | | @Select("SELECT c.id AS categoryId, c.name AS name, COUNT(d.id) AS total " |
| | | + "FROM archive_category c LEFT JOIN archive_document d ON d.category_id = c.id AND d.deleted = 0 " |
| | | + "WHERE c.deleted = 0 GROUP BY c.id, c.name ORDER BY c.sort ASC, c.id ASC") |
| | | List<ArchiveStatCategoryVO> selectCountGroupByCategory(); |
| | | |
| | | /** æå¯çº§èåæ¡£æ¡æ°é */ |
| | | @Select("SELECT secret_level AS value, COUNT(id) AS total FROM archive_document WHERE deleted = 0 " |
| | | + "GROUP BY secret_level ORDER BY secret_level ASC") |
| | | List<ArchiveStatValueVO> selectCountGroupBySecretLevel(); |
| | | |
| | | /** æè½½ä½èåæ¡£æ¡æ°é */ |
| | | @Select("SELECT carrier_type AS value, COUNT(id) AS total FROM archive_document WHERE deleted = 0 " |
| | | + "GROUP BY carrier_type ORDER BY carrier_type ASC") |
| | | List<ArchiveStatValueVO> selectCountGroupByCarrierType(); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.dal.redis; |
| | | |
| | | import cn.hutool.core.date.DatePattern; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.data.redis.core.StringRedisTemplate; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.time.Duration; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * Archive ç¼å· Redis DAO |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Repository |
| | | public class ArchiveNoRedisDAO { |
| | | |
| | | /** |
| | | * æ¡£æ¡ç¼å· {@link cn.iocoder.yudao.module.archive.dal.dataobject.document.ArchiveDocumentDO} |
| | | */ |
| | | public static final String DOCUMENT_NO_PREFIX = "DA"; |
| | | |
| | | /** |
| | | * åé
åå· {@link cn.iocoder.yudao.module.archive.dal.dataobject.borrow.ArchiveBorrowDO} |
| | | */ |
| | | public static final String BORROW_NO_PREFIX = "JY"; |
| | | |
| | | @Resource |
| | | private StringRedisTemplate stringRedisTemplate; |
| | | |
| | | public String generate(String prefix) { |
| | | String noPrefix = prefix + DateUtil.format(LocalDateTime.now(), DatePattern.PURE_DATE_PATTERN); |
| | | String key = RedisKeyConstants.NO + noPrefix; |
| | | Long no = stringRedisTemplate.opsForValue().increment(key); |
| | | stringRedisTemplate.expire(key, Duration.ofDays(1L)); |
| | | return noPrefix + String.format("%06d", no); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.dal.redis; |
| | | |
| | | /** |
| | | * Archive Redis Key 常é |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface RedisKeyConstants { |
| | | |
| | | String NO = "archive:seq_no:"; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.enums; |
| | | |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * æ¡£æ¡åé
åç¶ææä¸¾ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum ArchiveBorrowStatusEnum { |
| | | |
| | | DRAFT(0, "è稿"), |
| | | APPROVING(15, "审æ¹ä¸"), |
| | | BORROWED(20, "ååºä¸"), |
| | | RETURNED(30, "å·²å½è¿"), |
| | | REJECTED(35, "已驳å"), |
| | | ; |
| | | |
| | | private final Integer status; |
| | | private final String name; |
| | | |
| | | public static ArchiveBorrowStatusEnum valueOf(Integer status) { |
| | | return ArrayUtil.firstMatch(e -> e.getStatus().equals(status), values()); |
| | | } |
| | | |
| | | /** æç¶æå¼å䏿åï¼æªå¹é
æ¶åéåå§å¼ï¼ä¾¿äºé误æç¤ºå¯è¯» */ |
| | | public static String nameOf(Integer status) { |
| | | ArchiveBorrowStatusEnum item = valueOf(status); |
| | | return item != null ? item.getName() : String.valueOf(status); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.enums; |
| | | |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * æ¡£æ¡è½½ä½ç±»åæä¸¾ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum ArchiveCarrierTypeEnum { |
| | | |
| | | ELECTRONIC(1, "çµå"), |
| | | PHYSICAL(2, "å®ä½"), |
| | | BOTH(3, "çµå+å®ä½"), |
| | | ; |
| | | |
| | | private final Integer type; |
| | | private final String name; |
| | | |
| | | public static ArchiveCarrierTypeEnum valueOf(Integer type) { |
| | | return ArrayUtil.firstMatch(e -> e.getType().equals(type), values()); |
| | | } |
| | | |
| | | /** æè½½ä½å¼å䏿åï¼æªå¹é
æ¶åéåå§å¼ï¼ä¾¿äºé误æç¤ºå¯è¯» */ |
| | | public static String nameOf(Integer type) { |
| | | ArchiveCarrierTypeEnum item = valueOf(type); |
| | | return item != null ? item.getName() : String.valueOf(type); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.enums; |
| | | |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * æ¡£æ¡åç±»ç¶ææä¸¾ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum ArchiveCategoryStatusEnum { |
| | | |
| | | ENABLE(0, "å¯ç¨"), |
| | | DISABLE(1, "åç¨"), |
| | | ; |
| | | |
| | | private final Integer status; |
| | | private final String name; |
| | | |
| | | public static ArchiveCategoryStatusEnum valueOf(Integer status) { |
| | | return ArrayUtil.firstMatch(e -> e.getStatus().equals(status), values()); |
| | | } |
| | | |
| | | /** æç¶æå¼å䏿åï¼æªå¹é
æ¶åéåå§å¼ï¼ä¾¿äºé误æç¤ºå¯è¯» */ |
| | | public static String nameOf(Integer status) { |
| | | ArchiveCategoryStatusEnum item = valueOf(status); |
| | | return item != null ? item.getName() : String.valueOf(status); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.enums; |
| | | |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * æ¡£æ¡ç¶ææä¸¾ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum ArchiveDocumentStatusEnum { |
| | | |
| | | IN_STOCK(10, "å¨åº"), |
| | | BORROWED(20, "ååºä¸"), |
| | | ; |
| | | |
| | | private final Integer status; |
| | | private final String name; |
| | | |
| | | public static ArchiveDocumentStatusEnum valueOf(Integer status) { |
| | | return ArrayUtil.firstMatch(e -> e.getStatus().equals(status), values()); |
| | | } |
| | | |
| | | /** æç¶æå¼å䏿åï¼æªå¹é
æ¶åéåå§å¼ï¼ä¾¿äºé误æç¤ºå¯è¯» */ |
| | | public static String nameOf(Integer status) { |
| | | ArchiveDocumentStatusEnum item = valueOf(status); |
| | | return item != null ? item.getName() : String.valueOf(status); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.enums; |
| | | |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * æ¡£æ¡å¯çº§æä¸¾ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum ArchiveSecretLevelEnum { |
| | | |
| | | PUBLIC(1, "å
¬å¼"), |
| | | INTERNAL(2, "å
é¨"), |
| | | SECRET(3, "ä¿å¯"), |
| | | ; |
| | | |
| | | private final Integer level; |
| | | private final String name; |
| | | |
| | | public static ArchiveSecretLevelEnum valueOf(Integer level) { |
| | | return ArrayUtil.firstMatch(e -> e.getLevel().equals(level), values()); |
| | | } |
| | | |
| | | /** æå¯çº§å¼å䏿åï¼æªå¹é
æ¶åéåå§å¼ï¼ä¾¿äºé误æç¤ºå¯è¯» */ |
| | | public static String nameOf(Integer level) { |
| | | ArchiveSecretLevelEnum item = valueOf(level); |
| | | return item != null ? item.getName() : String.valueOf(level); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.enums; |
| | | |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * æ¡£æ¡æ¥æºç±»åæä¸¾ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Getter |
| | | @AllArgsConstructor |
| | | public enum ArchiveSourceTypeEnum { |
| | | |
| | | MANUAL(1, "æå·¥å½å
¥"), |
| | | RESEARCH(2, "课é¢"), |
| | | MEMBER(3, "ä¼å"), |
| | | FINANCE(4, "è´¢å¡"), |
| | | ; |
| | | |
| | | private final Integer type; |
| | | private final String name; |
| | | |
| | | public static ArchiveSourceTypeEnum valueOf(Integer type) { |
| | | return ArrayUtil.firstMatch(e -> e.getType().equals(type), values()); |
| | | } |
| | | |
| | | /** ææ¥æºå¼å䏿åï¼æªå¹é
æ¶åéåå§å¼ï¼ä¾¿äºé误æç¤ºå¯è¯» */ |
| | | public static String nameOf(Integer type) { |
| | | ArchiveSourceTypeEnum item = valueOf(type); |
| | | return item != null ? item.getName() : String.valueOf(type); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.enums; |
| | | |
| | | /** |
| | | * Archive åå
¸ç±»å常é |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface DictTypeConstants { |
| | | |
| | | /** æ¡£æ¡åç±»ç¶æ */ |
| | | String CATEGORY_STATUS = "archive_category_status"; |
| | | |
| | | /** æ¡£æ¡ç¶æ */ |
| | | String DOCUMENT_STATUS = "archive_document_status"; |
| | | |
| | | /** æ¡£æ¡å¯çº§ */ |
| | | String SECRET_LEVEL = "archive_secret_level"; |
| | | |
| | | /** æ¡£æ¡è½½ä½ */ |
| | | String CARRIER_TYPE = "archive_carrier_type"; |
| | | |
| | | /** æ¡£æ¡æ¥æºç±»å */ |
| | | String SOURCE_TYPE = "archive_source_type"; |
| | | |
| | | /** åé
åç¶æ */ |
| | | String BORROW_STATUS = "archive_borrow_status"; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.enums; |
| | | |
| | | import cn.iocoder.yudao.framework.common.exception.ErrorCode; |
| | | |
| | | /** |
| | | * Archive é误ç 常é |
| | | * |
| | | * archive 模åï¼ä½¿ç¨ 1-030-110-000 段 |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface ErrorCodeConstants { |
| | | |
| | | // ========== æ¡£æ¡åç±» 1_030_110_000 ========== |
| | | ErrorCode CATEGORY_NOT_EXISTS = new ErrorCode(1_030_110_000, "æ¡£æ¡åç±»ä¸åå¨ï¼è¯·å·æ°é¡µé¢åéæ°éæ©æ¡£æ¡åç±»"); |
| | | ErrorCode CATEGORY_NAME_DUPLICATE = new ErrorCode(1_030_110_001, "ä¿å失败ï¼å级åç±»ä¸å·²åå¨å为ã{}ãçæ¡£æ¡åç±»ï¼è¯·æ´æ¢åç±»åç§°"); |
| | | ErrorCode CATEGORY_CODE_DUPLICATE = new ErrorCode(1_030_110_002, "ä¿å失败ï¼åç±»ç¼ç ({})已被åç±»ã{}ã使ç¨ï¼è¯·æ´æ¢åç±»ç¼ç "); |
| | | ErrorCode CATEGORY_HAS_CHILDREN = new ErrorCode(1_030_110_003, "å é¤å¤±è´¥ï¼æ¡£æ¡åç±»ã{}ãä¸è¿æ {} 个ååç±»ï¼è¯·å
å 餿è¿ç§»è¿äºååç±»ååå é¤"); |
| | | ErrorCode CATEGORY_HAS_DOCUMENT = new ErrorCode(1_030_110_004, "å é¤å¤±è´¥ï¼æ¡£æ¡åç±»ã{}ãä¸è¿æ {} æ¡æ¡£æ¡ï¼è¯·å
å°è¿äºæ¡£æ¡è¿ç§»å°å
¶ä»åç±»ååå é¤"); |
| | | ErrorCode CATEGORY_PARENT_INVALID = new ErrorCode(1_030_110_005, "ä¿å失败ï¼ä¸è½æåç±»ã{}ãçä¸çº§è®¾ç½®ä¸ºå®èªå·±æå
¶ååç±»ï¼è¯·éæ°éæ©ä¸çº§åç±»"); |
| | | ErrorCode CATEGORY_DISABLED = new ErrorCode(1_030_110_006, "ä¿åå¤±è´¥ï¼æéæ¡£æ¡åç±»ã{}ãå½åç¶æä¸ºãåç¨ãï¼è¯·éæ©å·²å¯ç¨çæ¡£æ¡åç±»"); |
| | | |
| | | // ========== æ¡£æ¡ 1_030_110_100 ========== |
| | | ErrorCode DOCUMENT_NOT_EXISTS = new ErrorCode(1_030_110_100, "æ¡£æ¡ä¸åå¨ï¼è¯·å·æ°é¡µé¢åéè¯"); |
| | | ErrorCode DOCUMENT_NO_EXISTS = new ErrorCode(1_030_110_101, "çææ¡£æ¡ç¼å·å¤±è´¥ï¼è¯·éæ°æäº¤"); |
| | | ErrorCode DOCUMENT_UPDATE_FAIL_BORROWED = new ErrorCode(1_030_110_102, "æ´æ°å¤±è´¥ï¼æ¡£æ¡ã{}ãå½åç¶æä¸ºãååºä¸ãï¼è¯·çå¾
å½è¿ååä¿®æ¹"); |
| | | ErrorCode DOCUMENT_DELETE_FAIL_STATUS = new ErrorCode(1_030_110_103, "å é¤å¤±è´¥ï¼æ¡£æ¡ã{}ãå½åç¶æä¸ºã{}ãæå卿ªå½è¿çåé
åï¼åªæãå¨åºã䏿 æªå½è¿åé
åçæ¡£æ¡æè½å é¤"); |
| | | ErrorCode DOCUMENT_SENSITIVE_NO_PERMISSION = new ErrorCode(1_030_110_104, "æ¥çå¤±è´¥ï¼æ¡£æ¡ã{}ã为ãä¿å¯ãçº§ï¼æ¨æ²¡æè®¿é®ä¿å¯æ¡£æ¡çæéï¼è¯·è系档æ¡ç®¡çåå¼éãarchive:document:sensitiveãæé"); |
| | | ErrorCode DOCUMENT_SOURCE_NOT_EXISTS = new ErrorCode(1_030_110_105, "彿¡£å¤±è´¥ï¼æ¥æºåæ®ï¼{}ï¼ä¸åå¨æå·²è¢«å é¤ï¼è¯·å·æ°å表åéè¯"); |
| | | ErrorCode DOCUMENT_SOURCE_CATEGORY_NOT_EXISTS = new ErrorCode(1_030_110_106, "彿¡£å¤±è´¥ï¼æ¡£æ¡åç±»ç¼ç ({})ä¸åå¨ï¼è¯·å
æ§è¡æ¡£æ¡æ¨¡ååå§åèæ¬åå»ºå¯¹åºæ¡£æ¡åç±»åéè¯"); |
| | | ErrorCode DOCUMENT_SOURCE_TYPE_UNSUPPORTED = new ErrorCode(1_030_110_107, "彿¡£å¤±è´¥ï¼ä¸æ¯æçæ¥æºç±»å({})ï¼è¯·ä½¿ç¨è¯¾é¢/ä¼å/è´¢å¡æ¨¡åå表页çã彿¡£ãå
¥å£"); |
| | | ErrorCode DOCUMENT_ARCHIVE_FAIL_SOURCE_STATUS = new ErrorCode(1_030_110_108, "彿¡£å¤±è´¥ï¼æ¥æºåæ®({})å½åç¶æä¸ºã{}ãï¼åªæå·²éè¿/å·²å®ç»çåæ®æè½å½æ¡£"); |
| | | ErrorCode DOCUMENT_DUPLICATE_SOURCE = new ErrorCode(1_030_110_109, "éå¤å½æ¡£ï¼æ¥æºåæ®ã{}ãå·²çææ¡£æ¡ã{}ãï¼è¯·å¿éå¤å½æ¡£"); |
| | | ErrorCode DOCUMENT_CATEGORY_NOT_EXISTS = new ErrorCode(1_030_110_110, "ä¿åå¤±è´¥ï¼æéæ¡£æ¡åç±»ä¸åå¨ï¼è¯·å·æ°é¡µé¢åéæ°éæ©æ¡£æ¡åç±»"); |
| | | ErrorCode DOCUMENT_BORROWED_CANNOT_BORROW = new ErrorCode(1_030_110_111, "æä½å¤±è´¥ï¼æ¡£æ¡ã{}ãå½åç¶æä¸ºãååºä¸ãï¼è¯·çå¾
å½è¿ååæä½"); |
| | | |
| | | // ========== åé
1_030_110_200 ========== |
| | | ErrorCode BORROW_NOT_EXISTS = new ErrorCode(1_030_110_200, "åé
åä¸åå¨ï¼è¯·å·æ°é¡µé¢åéè¯"); |
| | | ErrorCode BORROW_NO_EXISTS = new ErrorCode(1_030_110_201, "çæåé
åå·å¤±è´¥ï¼è¯·éæ°æäº¤"); |
| | | ErrorCode BORROW_UPDATE_FAIL_STATUS = new ErrorCode(1_030_110_202, "æ´æ°å¤±è´¥ï¼åé
å({})å½åç¶æä¸ºã{}ãï¼åªæãè稿ãæã已驳åãçåé
åæè½ä¿®æ¹"); |
| | | ErrorCode BORROW_DELETE_FAIL_STATUS = new ErrorCode(1_030_110_203, "å é¤å¤±è´¥ï¼åé
å({})å½åç¶æä¸ºã{}ãï¼åªæãè稿ãç¶æçåé
åæè½å é¤"); |
| | | ErrorCode BORROW_SUBMIT_FAIL_STATUS = new ErrorCode(1_030_110_204, "æäº¤å®¡æ¹å¤±è´¥ï¼åé
å({})å½åç¶æä¸ºã{}ãï¼åªæãè稿ãæã已驳åãçåé
åæè½æäº¤"); |
| | | ErrorCode BORROW_DEADLINE_BEFORE_DATE = new ErrorCode(1_030_110_205, "ä¿å失败ï¼å½è¿æé({})ä¸è½æ©äºåé
æ¥æ({})ï¼è¯·éæ°éæ©å½è¿æé"); |
| | | ErrorCode BORROW_DOCUMENT_NOT_IN_STOCK = new ErrorCode(1_030_110_206, "æäº¤å¤±è´¥ï¼æ¡£æ¡ã{}ãå½åç¶æä¸ºã{}ãï¼åªæãå¨åºãçæ¡£æ¡æè½åé
"); |
| | | ErrorCode BORROW_DOCUMENT_ALREADY_BORROWED = new ErrorCode(1_030_110_207, "æäº¤å¤±è´¥ï¼æ¡£æ¡ã{}ãå·²å卿ªå½è¿çåé
å({})ï¼è¯·çå¾
å
¶å½è¿åååé
"); |
| | | ErrorCode BORROW_RETURN_FAIL_STATUS = new ErrorCode(1_030_110_208, "å½è¿å¤±è´¥ï¼åé
å({})å½åç¶æä¸ºã{}ãï¼åªæãååºä¸ãçåé
åæè½ç»è®°å½è¿"); |
| | | ErrorCode BORROW_DOCUMENT_LOCKED = new ErrorCode(1_030_110_209, "æä½å¤±è´¥ï¼æ¡£æ¡ã{}ãæ£å¨è¢«å
¶ä»åé
æµç¨å¤çï¼è¯·ç¨åéè¯ï¼è¥æç»å¤±è´¥è¯·è系档æ¡ç®¡çåæ ¸å¯¹åé
è®°å½"); |
| | | ErrorCode BORROW_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_030_110_210, "æ¡£æ¡åé
审æ¹åç±»ä¸åå¨ï¼è¯·å
å¨BPM模åå建档æ¡åé
å®¡æ¹æµç¨åç±»"); |
| | | ErrorCode BORROW_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_110_211, "æ¡£æ¡åé
审æ¹åç±»ï¼archive_borrow_approveï¼ä¸æ²¡æå·²åå¸çæµç¨ï¼æ æ³æäº¤åé
审æ¹ã请å
å¨ãBPM â æµç¨å®ä¹ãä¸å建并å叿¡£æ¡åé
å®¡æ¹æµç¨åéè¯"); |
| | | ErrorCode BORROW_DOCUMENT_NOT_EXISTS = new ErrorCode(1_030_110_212, "ä¿åå¤±è´¥ï¼æéæ¡£æ¡ä¸åå¨æå·²è¢«å é¤ï¼è¯·å·æ°å表åéæ°éæ©æ¡£æ¡"); |
| | | ErrorCode BORROW_BORROWER_REQUIRED = new ErrorCode(1_030_110_213, "ä¿å失败ï¼åé
人ä¸è½ä¸ºç©ºï¼è¯·å¡«åæéæ©åé
人ååä¿å"); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.framework.web.config; |
| | | |
| | | import cn.iocoder.yudao.framework.swagger.config.YudaoSwaggerAutoConfiguration; |
| | | import org.springdoc.core.models.GroupedOpenApi; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | @Configuration(proxyBeanMethods = false) |
| | | public class ArchiveWebConfiguration { |
| | | |
| | | @Bean |
| | | public GroupedOpenApi archiveGroupedOpenApi() { |
| | | return YudaoSwaggerAutoConfiguration.buildGroupedOpenApi("archive"); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.service.borrow; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowPageReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowReturnReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowSaveReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.borrow.ArchiveBorrowDO; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ¡£æ¡åé
å Service æ¥å£ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface ArchiveBorrowService { |
| | | |
| | | /** |
| | | * å建åé
åï¼èç¨¿ï¼ |
| | | * |
| | | * @param createReqVO åå»ºä¿¡æ¯ |
| | | * @return åé
åç¼å· |
| | | */ |
| | | Long createBorrow(ArchiveBorrowSaveReqVO createReqVO); |
| | | |
| | | /** |
| | | * æ´æ°åé
åï¼ä»
è稿æå·²é©³åå¯ä¿®æ¹ï¼ |
| | | * |
| | | * @param updateReqVO æ´æ°ä¿¡æ¯ |
| | | */ |
| | | void updateBorrow(ArchiveBorrowSaveReqVO updateReqVO); |
| | | |
| | | /** |
| | | * å é¤åé
åï¼ä»
è稿å¯å é¤ï¼ |
| | | * |
| | | * @param id åé
åç¼å· |
| | | */ |
| | | void deleteBorrow(Long id); |
| | | |
| | | /** |
| | | * è·å¾åé
å |
| | | * |
| | | * @param id åé
åç¼å· |
| | | * @return åé
å |
| | | */ |
| | | ArchiveBorrowDO getBorrow(Long id); |
| | | |
| | | /** |
| | | * è·å¾åé
åå页 |
| | | * |
| | | * @param reqVO æ¥è¯¢æ¡ä»¶ |
| | | * @return åé
åå页 |
| | | */ |
| | | PageResult<ArchiveBorrowDO> getBorrowPage(ArchiveBorrowPageReqVO reqVO); |
| | | |
| | | /** |
| | | * è·å¾é¾æåé
åå页ï¼ååºä¸ ä¸ å½è¿æéå·²è¿ï¼ |
| | | * |
| | | * @param reqVO æ¥è¯¢æ¡ä»¶ |
| | | * @return åé
åå页 |
| | | */ |
| | | PageResult<ArchiveBorrowDO> getOverdueBorrowPage(ArchiveBorrowPageReqVO reqVO); |
| | | |
| | | /** |
| | | * æäº¤åé
å®¡æ¹ |
| | | * |
| | | * @param id åé
åç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ keyï¼ä¸ºç©ºæ¶èªå¨åæ¡£æ¡åé
审æ¹åç±»ä¸ææ°çå·²å叿µç¨ |
| | | */ |
| | | void submitBorrow(Long id, String processDefinitionKey); |
| | | |
| | | /** |
| | | * è·å¾æ¡£æ¡åé
审æ¹å¯ç¨çæµç¨å®ä¹å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表ï¼key / nameï¼ |
| | | */ |
| | | List<Map<String, Object>> getApproveProcessDefinitionList(); |
| | | |
| | | /** |
| | | * å½è¿ç»è®°ï¼ä»
ååºä¸å¯ç»è®°ï¼ |
| | | * |
| | | * @param returnReqVO å½è¿ä¿¡æ¯ |
| | | */ |
| | | void returnBorrow(ArchiveBorrowReturnReqVO returnReqVO); |
| | | |
| | | /** |
| | | * åååé
å审æ¹ç»æï¼BPM çå¬å¨è°ç¨ï¼ |
| | | * |
| | | * @param id åé
åç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | * @param reason 驳ååå |
| | | */ |
| | | void updateBorrowAuditStatus(Long id, Integer bpmResult, String reason); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.service.borrow; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowPageReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowReturnReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.borrow.vo.ArchiveBorrowSaveReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.borrow.ArchiveBorrowDO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.document.ArchiveDocumentDO; |
| | | import cn.iocoder.yudao.module.archive.dal.mysql.borrow.ArchiveBorrowMapper; |
| | | import cn.iocoder.yudao.module.archive.dal.redis.ArchiveNoRedisDAO; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveBorrowStatusEnum; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveDocumentStatusEnum; |
| | | import cn.iocoder.yudao.module.archive.service.document.ArchiveDocumentService; |
| | | import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; |
| | | import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| | | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; |
| | | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.archive.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | | * æ¡£æ¡åé
å Service å®ç°ç±» |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | @Slf4j |
| | | public class ArchiveBorrowServiceImpl implements ArchiveBorrowService { |
| | | |
| | | /** æ¡£æ¡åé
审æ¹ç BPM æµç¨åç±»ç¼ç */ |
| | | public static final String BORROW_APPROVE_CATEGORY_CODE = "archive_borrow_approve"; |
| | | |
| | | @Resource |
| | | private ArchiveBorrowMapper borrowMapper; |
| | | |
| | | @Resource |
| | | private ArchiveDocumentService documentService; |
| | | |
| | | @Resource |
| | | private ArchiveNoRedisDAO archiveNoRedisDAO; |
| | | |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | | |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createBorrow(ArchiveBorrowSaveReqVO createReqVO) { |
| | | // 1. æ ¡éªåé
人ãå½è¿æéãæ¡£æ¡å¯å |
| | | validateBorrower(createReqVO.getBorrowerName()); |
| | | validateReturnDeadline(createReqVO); |
| | | ArchiveDocumentDO document = validateDocumentBorrowable(createReqVO.getDocumentId(), null); |
| | | |
| | | // 2. ç»è£
åé
åï¼æ¡£æ¡ç¼å·/æ é¢åå¿«ç
§ï¼é¿å
æ¡£æ¡æ¹åååå²åæ®å¤±çï¼ |
| | | ArchiveBorrowDO borrow = BeanUtils.toBean(createReqVO, ArchiveBorrowDO.class); |
| | | borrow.setId(null); |
| | | borrow.setNo(archiveNoRedisDAO.generate(ArchiveNoRedisDAO.BORROW_NO_PREFIX)); |
| | | borrow.setDocumentNo(document.getNo()); |
| | | borrow.setDocumentTitle(document.getTitle()); |
| | | borrow.setStatus(ArchiveBorrowStatusEnum.DRAFT.getStatus()); |
| | | borrowMapper.insert(borrow); |
| | | return borrow.getId(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateBorrow(ArchiveBorrowSaveReqVO updateReqVO) { |
| | | // 1.1 æ ¡éªåé
ååå¨ä¸ç¶æå
è®¸ä¿®æ¹ |
| | | ArchiveBorrowDO oldBorrow = validateBorrowExists(updateReqVO.getId()); |
| | | if (!ArchiveBorrowStatusEnum.DRAFT.getStatus().equals(oldBorrow.getStatus()) |
| | | && !ArchiveBorrowStatusEnum.REJECTED.getStatus().equals(oldBorrow.getStatus())) { |
| | | throw exception(BORROW_UPDATE_FAIL_STATUS, oldBorrow.getNo(), |
| | | ArchiveBorrowStatusEnum.nameOf(oldBorrow.getStatus())); |
| | | } |
| | | // 1.2 æ ¡éªåé
人ãå½è¿æéãæ¡£æ¡å¯åï¼æé¤èªèº«ï¼ |
| | | validateBorrower(updateReqVO.getBorrowerName()); |
| | | validateReturnDeadline(updateReqVO); |
| | | ArchiveDocumentDO document = validateDocumentBorrowable(updateReqVO.getDocumentId(), updateReqVO.getId()); |
| | | |
| | | // 2. æ´æ°ï¼æ¡£æ¡ç¼å·/æ é¢å·æ°ä¸ºææ°å¿«ç
§ï¼ |
| | | ArchiveBorrowDO updateObj = BeanUtils.toBean(updateReqVO, ArchiveBorrowDO.class); |
| | | updateObj.setDocumentNo(document.getNo()); |
| | | updateObj.setDocumentTitle(document.getTitle()); |
| | | borrowMapper.updateById(updateObj); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteBorrow(Long id) { |
| | | // 1. æ ¡éªåé
ååå¨ä¸ä¸ºè稿 |
| | | ArchiveBorrowDO borrow = validateBorrowExists(id); |
| | | if (!ArchiveBorrowStatusEnum.DRAFT.getStatus().equals(borrow.getStatus())) { |
| | | throw exception(BORROW_DELETE_FAIL_STATUS, borrow.getNo(), |
| | | ArchiveBorrowStatusEnum.nameOf(borrow.getStatus())); |
| | | } |
| | | |
| | | borrowMapper.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | public ArchiveBorrowDO getBorrow(Long id) { |
| | | return borrowMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<ArchiveBorrowDO> getBorrowPage(ArchiveBorrowPageReqVO reqVO) { |
| | | return borrowMapper.selectPage(reqVO); |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<ArchiveBorrowDO> getOverdueBorrowPage(ArchiveBorrowPageReqVO reqVO) { |
| | | return borrowMapper.selectOverduePage(reqVO); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitBorrow(Long id, String processDefinitionKey) { |
| | | // 1.1 æ ¡éªåé
ååå¨ä¸ç¶æå
许æäº¤ |
| | | ArchiveBorrowDO borrow = validateBorrowExists(id); |
| | | if (!ArchiveBorrowStatusEnum.DRAFT.getStatus().equals(borrow.getStatus()) |
| | | && !ArchiveBorrowStatusEnum.REJECTED.getStatus().equals(borrow.getStatus())) { |
| | | throw exception(BORROW_SUBMIT_FAIL_STATUS, borrow.getNo(), |
| | | ArchiveBorrowStatusEnum.nameOf(borrow.getStatus())); |
| | | } |
| | | // 1.2 æ ¡éªæ¡£æ¡ä»å¯åï¼æäº¤åäºæ¬¡æ ¡éªï¼é¿å
è稿æé´è¢«ä»äººåèµ°ï¼ |
| | | validateDocumentBorrowable(borrow.getDocumentId(), borrow.getId()); |
| | | // 1.3 å
è§£æå¯ç¨æµç¨ï¼æ²¡æå·²å叿µç¨æ¶ç´æ¥å¤±è´¥ï¼é¿å
ç䏿 æ³æäº¤çå¤å¿è稿 |
| | | String definitionKey = resolveProcessDefinitionKey(processDefinitionKey); |
| | | |
| | | // 2. åèµ·æµç¨å¹¶ååç¶æ |
| | | String processInstanceId = processInstanceApi.createProcessInstance(getLoginUserId(), |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(definitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | borrowMapper.updateById(new ArchiveBorrowDO() |
| | | .setId(id) |
| | | .setStatus(ArchiveBorrowStatusEnum.APPROVING.getStatus()) |
| | | .setProcessInstanceId(processInstanceId) |
| | | // éæ°æäº¤æ¶æ¸
空ä¸ä¸æ¬¡ç驳åä¿¡æ¯ |
| | | .setRejectReason("") |
| | | .setRejectTime(null)); |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getApproveProcessDefinitionList() { |
| | | validateApproveCategory(); |
| | | |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = |
| | | bpmProcessDefinitionService.getProcessDefinitionInfoListByCategory(BORROW_APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (BpmProcessDefinitionInfoDO info : definitionInfoList) { |
| | | ProcessDefinition pd = bpmProcessDefinitionService.getProcessDefinition(info.getProcessDefinitionId()); |
| | | if (pd == null || pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void returnBorrow(ArchiveBorrowReturnReqVO returnReqVO) { |
| | | // 1. æ ¡éªåé
ååå¨ä¸ä¸ºååºä¸ |
| | | ArchiveBorrowDO borrow = validateBorrowExists(returnReqVO.getId()); |
| | | if (!ArchiveBorrowStatusEnum.BORROWED.getStatus().equals(borrow.getStatus())) { |
| | | throw exception(BORROW_RETURN_FAIL_STATUS, borrow.getNo(), |
| | | ArchiveBorrowStatusEnum.nameOf(borrow.getStatus())); |
| | | } |
| | | |
| | | // 2. æ¡ä»¶æ´æ°åé
å为已å½è¿ï¼é¿å
å¹¶åéå¤å½è¿ |
| | | int rows = borrowMapper.update(null, new LambdaUpdateWrapper<ArchiveBorrowDO>() |
| | | .eq(ArchiveBorrowDO::getId, borrow.getId()) |
| | | .eq(ArchiveBorrowDO::getStatus, ArchiveBorrowStatusEnum.BORROWED.getStatus()) |
| | | .set(ArchiveBorrowDO::getStatus, ArchiveBorrowStatusEnum.RETURNED.getStatus()) |
| | | .set(ArchiveBorrowDO::getReturnTime, LocalDateTime.now()) |
| | | .set(ArchiveBorrowDO::getReturnConfirmUserId, getLoginUserId()) |
| | | .set(ArchiveBorrowDO::getReturnRemark, returnReqVO.getReturnRemark())); |
| | | if (rows == 0) { |
| | | throw exception(BORROW_RETURN_FAIL_STATUS, borrow.getNo(), |
| | | ArchiveBorrowStatusEnum.nameOf(borrow.getStatus())); |
| | | } |
| | | |
| | | // 3. æ¡£æ¡ç¶æåå°ãå¨åºã |
| | | if (!documentService.updateDocumentStatusToInStock(borrow.getDocumentId())) { |
| | | log.warn("[returnBorrow] åé
å({}) å½è¿æåï¼ä½æ¡£æ¡({}) ç¶ææªä»ãååºä¸ãæ´æ°ä¸ºãå¨åºãï¼è¯·äººå·¥æ ¸å¯¹", |
| | | borrow.getNo(), borrow.getDocumentNo()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateBorrowAuditStatus(Long id, Integer bpmResult, String reason) { |
| | | ArchiveBorrowDO borrow = borrowMapper.selectById(id); |
| | | if (borrow == null) { |
| | | log.warn("[updateBorrowAuditStatus] åé
å({}) ä¸åå¨ï¼å¿½ç¥ BPM ç»æåå", id); |
| | | return; |
| | | } |
| | | if (!ArchiveBorrowStatusEnum.APPROVING.getStatus().equals(borrow.getStatus())) { |
| | | log.warn("[updateBorrowAuditStatus] åé
å({}) ä¸å¤äºå®¡æ¹ä¸ç¶æï¼å¿½ç¥ BPM ç»æåå", borrow.getNo()); |
| | | return; |
| | | } |
| | | |
| | | // 审æ¹éè¿ï¼æ¡£æ¡æ¡ä»¶æ´æ°ä¸ºãååºä¸ãï¼è¥æ¡£æ¡å·²è¢«ä»äººååºï¼æ¡ä»¶æ´æ°å¤±è´¥åæ´ä½åæ»ï¼é¿å
åºç°ãåé
åå·²ååºä½æ¡£æ¡æªéå®ãçèç¶æ |
| | | if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult)) { |
| | | if (!documentService.updateDocumentStatusToBorrowed(borrow.getDocumentId())) { |
| | | throw exception(BORROW_DOCUMENT_LOCKED, borrow.getDocumentNo()); |
| | | } |
| | | borrowMapper.updateById(new ArchiveBorrowDO() |
| | | .setId(id) |
| | | .setStatus(ArchiveBorrowStatusEnum.BORROWED.getStatus()) |
| | | .setApproveTime(LocalDateTime.now())); |
| | | return; |
| | | } |
| | | |
| | | // 驳å |
| | | if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult)) { |
| | | borrowMapper.updateById(new ArchiveBorrowDO() |
| | | .setId(id) |
| | | .setStatus(ArchiveBorrowStatusEnum.REJECTED.getStatus()) |
| | | .setRejectReason(reason) |
| | | .setRejectTime(LocalDateTime.now())); |
| | | return; |
| | | } |
| | | |
| | | // æ¤å / åæ¶ï¼åå°èç¨¿ï¼æ¸
空æµç¨å®ä¾ |
| | | borrowMapper.updateById(new ArchiveBorrowDO() |
| | | .setId(id) |
| | | .setStatus(ArchiveBorrowStatusEnum.DRAFT.getStatus()) |
| | | .setProcessInstanceId("") |
| | | .setRejectReason("") |
| | | .setRejectTime(null)); |
| | | } |
| | | |
| | | // ==================== æ ¡éªé»è¾ ==================== |
| | | |
| | | private ArchiveBorrowDO validateBorrowExists(Long id) { |
| | | ArchiveBorrowDO borrow = id != null ? borrowMapper.selectById(id) : null; |
| | | if (borrow == null) { |
| | | throw exception(BORROW_NOT_EXISTS); |
| | | } |
| | | return borrow; |
| | | } |
| | | |
| | | private void validateBorrower(String borrowerName) { |
| | | if (StrUtil.isBlank(borrowerName)) { |
| | | throw exception(BORROW_BORROWER_REQUIRED); |
| | | } |
| | | } |
| | | |
| | | private void validateReturnDeadline(ArchiveBorrowSaveReqVO reqVO) { |
| | | if (reqVO.getReturnDeadline() != null && reqVO.getBorrowDate() != null |
| | | && reqVO.getReturnDeadline().isBefore(reqVO.getBorrowDate())) { |
| | | throw exception(BORROW_DEADLINE_BEFORE_DATE, reqVO.getReturnDeadline(), reqVO.getBorrowDate()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªæ¡£æ¡å¯åï¼æ¡£æ¡åå¨ãå¤äºå¨åºã䏿²¡ææªå½è¿çåé
å |
| | | * |
| | | * @param excludeBorrowId éè¦æé¤çåé
åç¼å·ï¼æ´æ° / éæ°æäº¤æ¶ä¼ èªèº«ï¼ |
| | | */ |
| | | private ArchiveDocumentDO validateDocumentBorrowable(Long documentId, Long excludeBorrowId) { |
| | | ArchiveDocumentDO document = documentId != null |
| | | ? documentService.getDocumentWithoutPermissionCheck(documentId) : null; |
| | | if (document == null) { |
| | | throw exception(BORROW_DOCUMENT_NOT_EXISTS); |
| | | } |
| | | if (!ArchiveDocumentStatusEnum.IN_STOCK.getStatus().equals(document.getStatus())) { |
| | | throw exception(BORROW_DOCUMENT_NOT_IN_STOCK, document.getNo(), |
| | | ArchiveDocumentStatusEnum.nameOf(document.getStatus())); |
| | | } |
| | | List<ArchiveBorrowDO> openBorrows = borrowMapper.selectListByDocumentIdAndStatusIn(documentId, |
| | | List.of(ArchiveBorrowStatusEnum.APPROVING.getStatus(), ArchiveBorrowStatusEnum.BORROWED.getStatus())); |
| | | for (ArchiveBorrowDO openBorrow : openBorrows) { |
| | | if (excludeBorrowId != null && excludeBorrowId.equals(openBorrow.getId())) { |
| | | continue; |
| | | } |
| | | throw exception(BORROW_DOCUMENT_ALREADY_BORROWED, document.getNo(), openBorrow.getNo()); |
| | | } |
| | | return document; |
| | | } |
| | | |
| | | private void validateApproveCategory() { |
| | | List<BpmCategoryDO> categories = bpmCategoryService.getCategoryListByCode( |
| | | Collections.singletonList(BORROW_APPROVE_CATEGORY_CODE)); |
| | | if (CollUtil.isEmpty(categories)) { |
| | | throw exception(BORROW_BPM_CATEGORY_NOT_EXISTS); |
| | | } |
| | | } |
| | | |
| | | /** è§£æå¯ç¨çæµç¨å®ä¹ keyï¼ä¼å
使ç¨åç«¯ä¼ å
¥ä¸ç¡®å®å·²åå¸çææ°æµç¨ï¼å¦åååç±»ä¸ææ°å·²å叿µç¨ */ |
| | | private String resolveProcessDefinitionKey(String processDefinitionKey) { |
| | | List<Map<String, Object>> definitionList = getApproveProcessDefinitionList(); |
| | | if (CollUtil.isEmpty(definitionList)) { |
| | | throw exception(BORROW_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | if (StrUtil.isNotBlank(processDefinitionKey)) { |
| | | for (Map<String, Object> item : definitionList) { |
| | | if (processDefinitionKey.equals(String.valueOf(item.get("key")))) { |
| | | return processDefinitionKey; |
| | | } |
| | | } |
| | | } |
| | | return String.valueOf(definitionList.get(0).get("key")); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.service.borrow.listener; |
| | | |
| | | import cn.iocoder.yudao.module.archive.service.borrow.ArchiveBorrowService; |
| | | import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEvent; |
| | | import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEventListener; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * æ¡£æ¡åé
å审æ¹ç¶æçå¬å¨ |
| | | * |
| | | * çå¬ BPM æµç¨å®ä¾ç¶æåæ´äºä»¶ï¼åååé
åç¶æï¼å®¡æ¹éè¿âååºä¸ï¼å¹¶é宿¡£æ¡ï¼ï¼é©³åâ已驳åï¼æ¤åâè稿 |
| | | */ |
| | | @Component |
| | | @Slf4j |
| | | public class ArchiveBorrowStatusListener extends BpmProcessInstanceStatusEventListener { |
| | | |
| | | /** æ¡£æ¡åé
å®¡æ¹æµç¨å®ä¹ keyï¼éä¸ {@code docs/sql/archive_borrow_approve.bpmn} ä¿æä¸è´ */ |
| | | private static final String BORROW_PROCESS_DEFINITION_KEY = "archive_borrow_approve"; |
| | | |
| | | @Resource |
| | | private ArchiveBorrowService borrowService; |
| | | |
| | | @Override |
| | | protected String getProcessDefinitionKey() { |
| | | return BORROW_PROCESS_DEFINITION_KEY; |
| | | } |
| | | |
| | | @Override |
| | | protected void onEvent(BpmProcessInstanceStatusEvent event) { |
| | | Long borrowId; |
| | | try { |
| | | borrowId = Long.parseLong(event.getBusinessKey()); |
| | | } catch (NumberFormatException e) { |
| | | log.warn("[onEvent] businessKey({}) 䏿¯ææçæ¡£æ¡åé
åç¼å·", event.getBusinessKey()); |
| | | return; |
| | | } |
| | | |
| | | log.info("[onEvent] æ¶å°BPM审æ¹äºä»¶ï¼borrowId={}, status={}", borrowId, event.getStatus()); |
| | | |
| | | // åååé
åç¶æï¼å®¡æ¹éè¿æ¶è¥æ¡£æ¡å·²è¢«ä»äººååºï¼ä¼æåºå¼å¸¸å¹¶åæ»æ¬æ¬¡ååï¼é¿å
èç¶æ |
| | | try { |
| | | borrowService.updateBorrowAuditStatus(borrowId, event.getStatus(), event.getReason()); |
| | | log.info("[onEvent] æ¡£æ¡åé
å({}) 审æ¹ç»æåå宿", borrowId); |
| | | } catch (Exception e) { |
| | | log.error("[onEvent] ååæ¡£æ¡åé
å({}) 审æ¹ç»æå¤±è´¥", borrowId, e); |
| | | } |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.service.category; |
| | | |
| | | import cn.iocoder.yudao.module.archive.controller.admin.category.vo.ArchiveCategoryListReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.category.vo.ArchiveCategorySaveReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.category.ArchiveCategoryDO; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æ¡£æ¡åç±» Service æ¥å£ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface ArchiveCategoryService { |
| | | |
| | | /** |
| | | * å建档æ¡åç±» |
| | | * |
| | | * @param createReqVO åå»ºä¿¡æ¯ |
| | | * @return åç±»ç¼å· |
| | | */ |
| | | Long createCategory(ArchiveCategorySaveReqVO createReqVO); |
| | | |
| | | /** |
| | | * æ´æ°æ¡£æ¡åç±» |
| | | * |
| | | * @param updateReqVO æ´æ°ä¿¡æ¯ |
| | | */ |
| | | void updateCategory(ArchiveCategorySaveReqVO updateReqVO); |
| | | |
| | | /** |
| | | * å 餿¡£æ¡åç±»ï¼åå¨ååç±»ææ¡£æ¡æ¶ä¸å
许å é¤ï¼ |
| | | * |
| | | * @param id åç±»ç¼å· |
| | | */ |
| | | void deleteCategory(Long id); |
| | | |
| | | /** |
| | | * è·å¾æ¡£æ¡åç±» |
| | | * |
| | | * @param id åç±»ç¼å· |
| | | * @return åç±» |
| | | */ |
| | | ArchiveCategoryDO getCategory(Long id); |
| | | |
| | | /** |
| | | * è·å¾æ¡£æ¡åç±»åè¡¨ï¼ææåºå¼ååºï¼ |
| | | * |
| | | * @param reqVO æ¥è¯¢æ¡ä»¶ |
| | | * @return åç±»å表 |
| | | */ |
| | | List<ArchiveCategoryDO> getCategoryList(ArchiveCategoryListReqVO reqVO); |
| | | |
| | | /** |
| | | * è·å¾å
¨é¨æ¡£æ¡åç±»ï¼æå»ºåç±»æ ç¨ï¼ |
| | | * |
| | | * @return åç±»å表 |
| | | */ |
| | | List<ArchiveCategoryDO> getCategoryList(); |
| | | |
| | | /** |
| | | * æç¼ç è·å¾æ¡£æ¡åç±» |
| | | * |
| | | * @param code åç±»ç¼ç |
| | | * @return åç±» |
| | | */ |
| | | ArchiveCategoryDO getCategoryByCode(String code); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.service.category; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.category.vo.ArchiveCategoryListReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.category.vo.ArchiveCategorySaveReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.category.ArchiveCategoryDO; |
| | | import cn.iocoder.yudao.module.archive.dal.mysql.category.ArchiveCategoryMapper; |
| | | import cn.iocoder.yudao.module.archive.dal.mysql.document.ArchiveDocumentMapper; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.archive.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | | * æ¡£æ¡åç±» Service å®ç°ç±» |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class ArchiveCategoryServiceImpl implements ArchiveCategoryService { |
| | | |
| | | /** 顶级åç±»çç¶åç±»ç¼å· */ |
| | | private static final Long ROOT_PARENT_ID = 0L; |
| | | |
| | | @Resource |
| | | private ArchiveCategoryMapper categoryMapper; |
| | | |
| | | @Resource |
| | | private ArchiveDocumentMapper documentMapper; |
| | | |
| | | @Override |
| | | public Long createCategory(ArchiveCategorySaveReqVO createReqVO) { |
| | | // 1.1 æ ¡éªç¶åç±»åå¨ |
| | | validateParentCategory(createReqVO.getParentId(), createReqVO.getName()); |
| | | // 1.2 æ ¡éªå级åç±»åç§°ä¸éå¤ãåç±»ç¼ç ä¸éå¤ |
| | | validateNameUnique(createReqVO.getName(), createReqVO.getParentId(), null); |
| | | validateCodeUnique(createReqVO.getCode(), null); |
| | | |
| | | // 2. æå
¥ï¼è¡¥é»è®¤å¼ï¼ |
| | | ArchiveCategoryDO category = BeanUtils.toBean(createReqVO, ArchiveCategoryDO.class); |
| | | category.setId(null); |
| | | if (category.getSort() == null) { |
| | | category.setSort(0); |
| | | } |
| | | if (category.getDefaultSecretLevel() == null) { |
| | | category.setDefaultSecretLevel(1); |
| | | } |
| | | if (category.getStatus() == null) { |
| | | category.setStatus(0); |
| | | } |
| | | categoryMapper.insert(category); |
| | | return category.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public void updateCategory(ArchiveCategorySaveReqVO updateReqVO) { |
| | | // 1.1 æ ¡éªåç±»åå¨ |
| | | ArchiveCategoryDO oldCategory = validateCategoryExists(updateReqVO.getId()); |
| | | // 1.2 æ ¡éªç¶åç±»åå¨ï¼ä¸ä¸è½æåç±»æå°èªèº«æå
¶ååä¸ï¼é¿å
å½¢æç¯ï¼ |
| | | validateParentCategory(updateReqVO.getParentId(), updateReqVO.getName()); |
| | | validateParentNotSelfOrDescendant(oldCategory, updateReqVO.getParentId()); |
| | | // 1.3 æ ¡éªå级åç§°ä¸éå¤ãç¼ç ä¸éå¤ |
| | | validateNameUnique(updateReqVO.getName(), updateReqVO.getParentId(), updateReqVO.getId()); |
| | | validateCodeUnique(updateReqVO.getCode(), updateReqVO.getId()); |
| | | |
| | | // 2. æ´æ° |
| | | ArchiveCategoryDO updateObj = BeanUtils.toBean(updateReqVO, ArchiveCategoryDO.class); |
| | | categoryMapper.updateById(updateObj); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteCategory(Long id) { |
| | | // 1.1 æ ¡éªåç±»åå¨ |
| | | ArchiveCategoryDO category = validateCategoryExists(id); |
| | | // 1.2 åå¨ååç±»æ¶ä¸å
许å é¤ |
| | | List<ArchiveCategoryDO> children = categoryMapper.selectListByParentId(id); |
| | | if (CollUtil.isNotEmpty(children)) { |
| | | throw exception(CATEGORY_HAS_CHILDREN, category.getName(), children.size()); |
| | | } |
| | | // 1.3 åç±»ä¸å卿¡£æ¡æ¶ä¸å
许å é¤ |
| | | Long documentCount = documentMapper.selectCountByCategoryId(id); |
| | | if (documentCount != null && documentCount > 0) { |
| | | throw exception(CATEGORY_HAS_DOCUMENT, category.getName(), documentCount); |
| | | } |
| | | |
| | | categoryMapper.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | public ArchiveCategoryDO getCategory(Long id) { |
| | | return categoryMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public List<ArchiveCategoryDO> getCategoryList(ArchiveCategoryListReqVO reqVO) { |
| | | return categoryMapper.selectList(new LambdaQueryWrapperX<ArchiveCategoryDO>() |
| | | .likeIfPresent(ArchiveCategoryDO::getName, reqVO.getName()) |
| | | .eqIfPresent(ArchiveCategoryDO::getStatus, reqVO.getStatus()) |
| | | .orderByAsc(ArchiveCategoryDO::getSort) |
| | | .orderByAsc(ArchiveCategoryDO::getId)); |
| | | } |
| | | |
| | | @Override |
| | | public List<ArchiveCategoryDO> getCategoryList() { |
| | | return categoryMapper.selectListOrdered(); |
| | | } |
| | | |
| | | @Override |
| | | public ArchiveCategoryDO getCategoryByCode(String code) { |
| | | if (StrUtil.isBlank(code)) { |
| | | return null; |
| | | } |
| | | return categoryMapper.selectByCode(code); |
| | | } |
| | | |
| | | // ==================== æ ¡éªé»è¾ ==================== |
| | | |
| | | /** æ ¡éªåç±»åå¨ï¼ä¸å卿¶æåºç²¾ç¡®æç¤º */ |
| | | private ArchiveCategoryDO validateCategoryExists(Long id) { |
| | | ArchiveCategoryDO category = id != null ? categoryMapper.selectById(id) : null; |
| | | if (category == null) { |
| | | throw exception(CATEGORY_NOT_EXISTS); |
| | | } |
| | | return category; |
| | | } |
| | | |
| | | /** æ ¡éªç¶åç±»ï¼0 表示顶级ï¼é 0 æ¶å¿
é¡»åå¨ */ |
| | | private void validateParentCategory(Long parentId, String categoryName) { |
| | | if (parentId == null) { |
| | | throw exception(CATEGORY_PARENT_INVALID, categoryName); |
| | | } |
| | | if (Objects.equals(parentId, ROOT_PARENT_ID)) { |
| | | return; |
| | | } |
| | | if (categoryMapper.selectById(parentId) == null) { |
| | | throw exception(CATEGORY_PARENT_INVALID, categoryName); |
| | | } |
| | | } |
| | | |
| | | /** æ ¡éªç¶åç±»ä¸è½æ¯èªèº«ï¼ä¹ä¸è½æ¯èªå·±çåååç±» */ |
| | | private void validateParentNotSelfOrDescendant(ArchiveCategoryDO category, Long parentId) { |
| | | if (Objects.equals(category.getId(), parentId)) { |
| | | throw exception(CATEGORY_PARENT_INVALID, category.getName()); |
| | | } |
| | | Set<Long> descendantIds = collectDescendantIds(category.getId()); |
| | | if (descendantIds.contains(parentId)) { |
| | | throw exception(CATEGORY_PARENT_INVALID, category.getName()); |
| | | } |
| | | } |
| | | |
| | | /** æ¶éåç±»çå
¨é¨åååç±»ç¼å·ï¼å«èªèº«ï¼ */ |
| | | private Set<Long> collectDescendantIds(Long id) { |
| | | List<ArchiveCategoryDO> all = categoryMapper.selectListOrdered(); |
| | | Set<Long> result = new HashSet<>(); |
| | | result.add(id); |
| | | boolean changed = true; |
| | | while (changed) { |
| | | changed = false; |
| | | for (ArchiveCategoryDO category : all) { |
| | | if (result.contains(category.getParentId()) && result.add(category.getId())) { |
| | | changed = true; |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | private void validateNameUnique(String name, Long parentId, Long excludeId) { |
| | | Long count = categoryMapper.selectCountByName(name, parentId, excludeId); |
| | | if (count != null && count > 0) { |
| | | throw exception(CATEGORY_NAME_DUPLICATE, name); |
| | | } |
| | | } |
| | | |
| | | private void validateCodeUnique(String code, Long excludeId) { |
| | | Long count = categoryMapper.selectCountByCode(code, excludeId); |
| | | if (count != null && count > 0) { |
| | | ArchiveCategoryDO exists = categoryMapper.selectByCode(code); |
| | | throw exception(CATEGORY_CODE_DUPLICATE, code, exists != null ? exists.getName() : code); |
| | | } |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.service.document; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentCreateReqDTO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.document.vo.ArchiveDocumentPageReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.document.vo.ArchiveDocumentSaveReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.document.ArchiveDocumentDO; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æ¡£æ¡ Service æ¥å£ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface ArchiveDocumentService { |
| | | |
| | | /** æ¡£æ¡éä»¶çä¸å¡è®°å½ç±»åï¼{@code system_storage_attachment.record_type}ï¼ */ |
| | | String DOCUMENT_RECORD_TYPE = "archive_document"; |
| | | |
| | | /** |
| | | * åå»ºæ¡£æ¡ |
| | | * |
| | | * @param createReqVO åå»ºä¿¡æ¯ |
| | | * @return æ¡£æ¡ç¼å· |
| | | */ |
| | | Long createDocument(ArchiveDocumentSaveReqVO createReqVO); |
| | | |
| | | /** |
| | | * æ´æ°æ¡£æ¡ï¼ååºä¸çæ¡£æ¡ä¸å
许修æ¹ï¼ |
| | | * |
| | | * @param updateReqVO æ´æ°ä¿¡æ¯ |
| | | */ |
| | | void updateDocument(ArchiveDocumentSaveReqVO updateReqVO); |
| | | |
| | | /** |
| | | * å 餿¡£æ¡ï¼ååºä¸æå卿ªå½è¿åé
åæ¶ä¸å
许å é¤ï¼ |
| | | * |
| | | * @param id æ¡£æ¡ç¼å· |
| | | */ |
| | | void deleteDocument(Long id); |
| | | |
| | | /** |
| | | * è·å¾æ¡£æ¡ï¼å«æææ¡£æ¡æéæ ¡éªï¼ |
| | | * |
| | | * @param id æ¡£æ¡ç¼å· |
| | | * @return æ¡£æ¡ |
| | | */ |
| | | ArchiveDocumentDO getDocument(Long id); |
| | | |
| | | /** |
| | | * è·å¾æ¡£æ¡ï¼è·³è¿æææ¡£æ¡æéæ ¡éªï¼ä¾æ¨¡åå
é¨ä¸ RPC è°ç¨ä½¿ç¨ï¼ |
| | | * |
| | | * @param id æ¡£æ¡ç¼å· |
| | | * @return æ¡£æ¡ |
| | | */ |
| | | ArchiveDocumentDO getDocumentWithoutPermissionCheck(Long id); |
| | | |
| | | /** |
| | | * è·å¾æ¡£æ¡å页 |
| | | * |
| | | * @param reqVO æ¥è¯¢æ¡ä»¶ |
| | | * @return æ¡£æ¡å页 |
| | | */ |
| | | PageResult<ArchiveDocumentDO> getDocumentPage(ArchiveDocumentPageReqVO reqVO); |
| | | |
| | | /** |
| | | * è·å¾æ¡£æ¡å表ï¼å¯¼åºç¨ï¼ä¸åé¡µï¼ |
| | | * |
| | | * @param reqVO æ¥è¯¢æ¡ä»¶ |
| | | * @return æ¡£æ¡å表 |
| | | */ |
| | | List<ArchiveDocumentDO> getDocumentList(ArchiveDocumentPageReqVO reqVO); |
| | | |
| | | /** |
| | | * ææ¥æºåæ®å½æ¡£ï¼å¹ç失败è¯ä¹ï¼éå¤å½æ¡£æãéå¤å½æ¡£ãå¼å¸¸ï¼å¹¶åæ¾å·²çæçæ¡£æ¡ç¼å·ï¼ |
| | | * |
| | | * @param reqDTO 彿¡£ä¿¡æ¯ |
| | | * @return æ¡£æ¡ç¼å· |
| | | */ |
| | | Long archiveBySource(ArchiveDocumentCreateReqDTO reqDTO); |
| | | |
| | | /** |
| | | * å¤ææ¥æºåæ®æ¯å¦å·²å½æ¡£ |
| | | * |
| | | * @param sourceType æ¥æºç±»å |
| | | * @param sourceId æ¥æºåæ®ç¼å· |
| | | * @return æ¯å¦å·²å½æ¡£ |
| | | */ |
| | | Boolean isArchived(Integer sourceType, Long sourceId); |
| | | |
| | | /** |
| | | * ææ¥æºåæ®è·å¾æ¡£æ¡ |
| | | * |
| | | * @param sourceType æ¥æºç±»å |
| | | * @param sourceId æ¥æºåæ®ç¼å· |
| | | * @return æ¡£æ¡ |
| | | */ |
| | | ArchiveDocumentDO getBySource(Integer sourceType, Long sourceId); |
| | | |
| | | /** |
| | | * æ¡ä»¶æ´æ°æ¡£æ¡ç¶æä¸ºãååºä¸ãï¼ä»
å½å½å为ãå¨åºãæ¶çæï¼ |
| | | * |
| | | * @param documentId æ¡£æ¡ç¼å· |
| | | * @return æ¯å¦æ´æ°æåï¼false 表示档æ¡å·²è¢«å
¶å®æµç¨ååºæç¶æå¼å¸¸ |
| | | */ |
| | | boolean updateDocumentStatusToBorrowed(Long documentId); |
| | | |
| | | /** |
| | | * æ¡ä»¶æ´æ°æ¡£æ¡ç¶æä¸ºãå¨åºãï¼ä»
å½å½å为ãååºä¸ãæ¶çæï¼ |
| | | * |
| | | * @param documentId æ¡£æ¡ç¼å· |
| | | * @return æ¯å¦æ´æ°æå |
| | | */ |
| | | boolean updateDocumentStatusToInStock(Long documentId); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.service.document; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.security.core.service.SecurityFrameworkService; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentCreateReqDTO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.document.vo.ArchiveDocumentPageReqVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.document.vo.ArchiveDocumentSaveReqVO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.category.ArchiveCategoryDO; |
| | | import cn.iocoder.yudao.module.archive.dal.dataobject.document.ArchiveDocumentDO; |
| | | import cn.iocoder.yudao.module.archive.dal.mysql.borrow.ArchiveBorrowMapper; |
| | | import cn.iocoder.yudao.module.archive.dal.mysql.document.ArchiveDocumentMapper; |
| | | import cn.iocoder.yudao.module.archive.dal.redis.ArchiveNoRedisDAO; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveBorrowStatusEnum; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveCategoryStatusEnum; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveDocumentStatusEnum; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveSecretLevelEnum; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveSourceTypeEnum; |
| | | import cn.iocoder.yudao.module.archive.service.category.ArchiveCategoryService; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | import static cn.iocoder.yudao.module.archive.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | | * æ¡£æ¡ Service å®ç°ç±» |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class ArchiveDocumentServiceImpl implements ArchiveDocumentService { |
| | | |
| | | /** æææ¡£æ¡ï¼ä¿å¯çº§ï¼æ¥çæéç¹ */ |
| | | public static final String SENSITIVE_PERMISSION = "archive:document:sensitive"; |
| | | |
| | | @Resource |
| | | private ArchiveDocumentMapper documentMapper; |
| | | |
| | | @Resource |
| | | private ArchiveBorrowMapper borrowMapper; |
| | | |
| | | @Resource |
| | | private ArchiveCategoryService categoryService; |
| | | |
| | | @Resource |
| | | private ArchiveNoRedisDAO archiveNoRedisDAO; |
| | | |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | |
| | | @Resource(name = "ss") |
| | | private SecurityFrameworkService securityFrameworkService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createDocument(ArchiveDocumentSaveReqVO createReqVO) { |
| | | // 1. æ ¡éªåç±» |
| | | ArchiveCategoryDO category = validateCategory(createReqVO.getCategoryId()); |
| | | |
| | | // 2. ç»è£
æ¡£æ¡ï¼å¯çº§/è½½ä½/彿¡£æ¥æ/彿¡£äººè¡¥é»è®¤å¼ï¼ |
| | | ArchiveDocumentDO document = BeanUtils.toBean(createReqVO, ArchiveDocumentDO.class); |
| | | document.setId(null); |
| | | document.setNo(archiveNoRedisDAO.generate(ArchiveNoRedisDAO.DOCUMENT_NO_PREFIX)); |
| | | document.setSecretLevel(createReqVO.getSecretLevel() != null ? createReqVO.getSecretLevel() |
| | | : category.getDefaultSecretLevel()); |
| | | document.setCarrierType(createReqVO.getCarrierType() != null ? createReqVO.getCarrierType() : 3); |
| | | document.setSourceType(ArchiveSourceTypeEnum.MANUAL.getType()); |
| | | document.setArchiveDate(createReqVO.getArchiveDate() != null ? createReqVO.getArchiveDate() : LocalDate.now()); |
| | | document.setArchivistUserId(getLoginUserId()); |
| | | document.setStatus(ArchiveDocumentStatusEnum.IN_STOCK.getStatus()); |
| | | documentMapper.insert(document); |
| | | |
| | | // 3. ç»å®éä»¶ |
| | | storageAttachmentApi.bindAttachments("file", DOCUMENT_RECORD_TYPE, document.getId(), createReqVO.getBlobIds()); |
| | | return document.getId(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateDocument(ArchiveDocumentSaveReqVO updateReqVO) { |
| | | // 1.1 æ ¡éªæ¡£æ¡åå¨ |
| | | ArchiveDocumentDO oldDocument = validateDocumentExists(updateReqVO.getId()); |
| | | // 1.2 ååºä¸çæ¡£æ¡ä¸å
è®¸ä¿®æ¹ |
| | | if (ArchiveDocumentStatusEnum.BORROWED.getStatus().equals(oldDocument.getStatus())) { |
| | | throw exception(DOCUMENT_UPDATE_FAIL_BORROWED, oldDocument.getNo()); |
| | | } |
| | | // 1.3 æææ¡£æ¡éè¦ææææ¡£æ¡æéæè½ä¿®æ¹ |
| | | validateSecretLevelVisible(oldDocument); |
| | | // 1.4 æ ¡éªåç±» |
| | | validateCategory(updateReqVO.getCategoryId()); |
| | | |
| | | // 2. æ´æ°ï¼å¯çº§ä¸ºç©ºæ¶ä¿çåå¼ï¼é¿å
è¢«ç½®ç©ºï¼ |
| | | ArchiveDocumentDO updateObj = BeanUtils.toBean(updateReqVO, ArchiveDocumentDO.class); |
| | | if (updateObj.getSecretLevel() == null) { |
| | | updateObj.setSecretLevel(oldDocument.getSecretLevel()); |
| | | } |
| | | documentMapper.updateById(updateObj); |
| | | |
| | | // 3. å¢éæ´æ°éä»¶ |
| | | storageAttachmentApi.updateAttachments("file", DOCUMENT_RECORD_TYPE, updateReqVO.getId(), |
| | | updateReqVO.getBlobIds()); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteDocument(Long id) { |
| | | // 1.1 æ ¡éªæ¡£æ¡åå¨ |
| | | ArchiveDocumentDO document = validateDocumentExists(id); |
| | | // 1.2 ååºä¸æå卿ªå½è¿åé
åæ¶ä¸å
许å é¤ |
| | | boolean hasOpenBorrow = CollUtil.isNotEmpty(borrowMapper.selectListByDocumentIdAndStatusIn(id, |
| | | List.of(ArchiveBorrowStatusEnum.APPROVING.getStatus(), ArchiveBorrowStatusEnum.BORROWED.getStatus()))); |
| | | if (ArchiveDocumentStatusEnum.BORROWED.getStatus().equals(document.getStatus()) || hasOpenBorrow) { |
| | | throw exception(DOCUMENT_DELETE_FAIL_STATUS, document.getNo(), |
| | | ArchiveDocumentStatusEnum.nameOf(document.getStatus())); |
| | | } |
| | | |
| | | // 2. å 餿¡£æ¡ä¸éä»¶ |
| | | documentMapper.deleteById(id); |
| | | storageAttachmentApi.deleteAttachmentsByRecord(DOCUMENT_RECORD_TYPE, id); |
| | | } |
| | | |
| | | @Override |
| | | public ArchiveDocumentDO getDocument(Long id) { |
| | | ArchiveDocumentDO document = validateDocumentExists(id); |
| | | validateSecretLevelVisible(document); |
| | | return document; |
| | | } |
| | | |
| | | @Override |
| | | public ArchiveDocumentDO getDocumentWithoutPermissionCheck(Long id) { |
| | | return documentMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<ArchiveDocumentDO> getDocumentPage(ArchiveDocumentPageReqVO reqVO) { |
| | | return documentMapper.selectPage(reqVO, !hasSensitivePermission()); |
| | | } |
| | | |
| | | @Override |
| | | public List<ArchiveDocumentDO> getDocumentList(ArchiveDocumentPageReqVO reqVO) { |
| | | return documentMapper.selectList(reqVO, !hasSensitivePermission()); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long archiveBySource(ArchiveDocumentCreateReqDTO reqDTO) { |
| | | // 1. æ ¡éªæ¥æºç±»åï¼åªå
许课é¢/ä¼å/è´¢å¡ï¼ |
| | | ArchiveSourceTypeEnum sourceType = ArchiveSourceTypeEnum.valueOf(reqDTO.getSourceType()); |
| | | if (sourceType == null || sourceType == ArchiveSourceTypeEnum.MANUAL) { |
| | | throw exception(DOCUMENT_SOURCE_TYPE_UNSUPPORTED, reqDTO.getSourceType()); |
| | | } |
| | | |
| | | // 2. éå¤å½æ¡£æ ¡éªï¼å䏿¥æºåæ®åªå
许çæä¸ä»½æ¡£æ¡ |
| | | ArchiveDocumentDO exists = documentMapper.selectBySource(reqDTO.getSourceType(), reqDTO.getSourceId()); |
| | | if (exists != null) { |
| | | throw exception(DOCUMENT_DUPLICATE_SOURCE, |
| | | StrUtil.blankToDefault(reqDTO.getSourceNo(), String.valueOf(reqDTO.getSourceId())), |
| | | exists.getNo()); |
| | | } |
| | | |
| | | // 3. æåç±»ç¼ç å®ä½æ¡£æ¡åç±» |
| | | ArchiveCategoryDO category = categoryService.getCategoryByCode(reqDTO.getCategoryCode()); |
| | | if (category == null) { |
| | | throw exception(DOCUMENT_SOURCE_CATEGORY_NOT_EXISTS, reqDTO.getCategoryCode()); |
| | | } |
| | | |
| | | // 4. ç»è£
å¹¶è½åºæ¡£æ¡ï¼æ é¢ãå¯çº§ä¸ºç©ºæ¶åå«åæ¥æºæ é¢ãåç±»é»è®¤å¯çº§ï¼ |
| | | ArchiveDocumentDO document = new ArchiveDocumentDO(); |
| | | document.setNo(archiveNoRedisDAO.generate(ArchiveNoRedisDAO.DOCUMENT_NO_PREFIX)); |
| | | document.setTitle(StrUtil.blankToDefault(reqDTO.getTitle(), reqDTO.getSourceTitle())); |
| | | document.setCategoryId(category.getId()); |
| | | document.setSecretLevel(reqDTO.getSecretLevel() != null ? reqDTO.getSecretLevel() |
| | | : category.getDefaultSecretLevel()); |
| | | // èå¨å½æ¡£é»è®¤åæ¶ä¿ççµå件䏿¥æºå
³èï¼è½½ä½åãçµå+å®ä½ãï¼ç±æ¡£æ¡ç®¡çååç»è¡¥å
å®ä½ä½ç½® |
| | | document.setCarrierType(3); |
| | | document.setSourceType(reqDTO.getSourceType()); |
| | | document.setSourceNo(reqDTO.getSourceNo()); |
| | | document.setSourceId(reqDTO.getSourceId()); |
| | | document.setSourceTitle(reqDTO.getSourceTitle()); |
| | | document.setArchiveDate(reqDTO.getArchiveDate() != null ? reqDTO.getArchiveDate() : LocalDate.now()); |
| | | document.setArchivistUserId(getLoginUserId()); |
| | | document.setStatus(ArchiveDocumentStatusEnum.IN_STOCK.getStatus()); |
| | | document.setSummary(reqDTO.getSummary()); |
| | | document.setTags(reqDTO.getTags()); |
| | | document.setRemark(reqDTO.getRemark()); |
| | | documentMapper.insert(document); |
| | | |
| | | // 5. ç»å®æ¥æºåæ®çéä»¶ |
| | | storageAttachmentApi.bindAttachments("file", DOCUMENT_RECORD_TYPE, document.getId(), reqDTO.getBlobIds()); |
| | | return document.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public Boolean isArchived(Integer sourceType, Long sourceId) { |
| | | return documentMapper.selectBySource(sourceType, sourceId) != null; |
| | | } |
| | | |
| | | @Override |
| | | public ArchiveDocumentDO getBySource(Integer sourceType, Long sourceId) { |
| | | if (sourceType == null || sourceId == null) { |
| | | return null; |
| | | } |
| | | return documentMapper.selectBySource(sourceType, sourceId); |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateDocumentStatusToBorrowed(Long documentId) { |
| | | int rows = documentMapper.update(null, new LambdaUpdateWrapper<ArchiveDocumentDO>() |
| | | .eq(ArchiveDocumentDO::getId, documentId) |
| | | .eq(ArchiveDocumentDO::getStatus, ArchiveDocumentStatusEnum.IN_STOCK.getStatus()) |
| | | .set(ArchiveDocumentDO::getStatus, ArchiveDocumentStatusEnum.BORROWED.getStatus())); |
| | | return rows > 0; |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateDocumentStatusToInStock(Long documentId) { |
| | | int rows = documentMapper.update(null, new LambdaUpdateWrapper<ArchiveDocumentDO>() |
| | | .eq(ArchiveDocumentDO::getId, documentId) |
| | | .eq(ArchiveDocumentDO::getStatus, ArchiveDocumentStatusEnum.BORROWED.getStatus()) |
| | | .set(ArchiveDocumentDO::getStatus, ArchiveDocumentStatusEnum.IN_STOCK.getStatus())); |
| | | return rows > 0; |
| | | } |
| | | |
| | | // ==================== æ ¡éªé»è¾ ==================== |
| | | |
| | | private ArchiveDocumentDO validateDocumentExists(Long id) { |
| | | ArchiveDocumentDO document = id != null ? documentMapper.selectById(id) : null; |
| | | if (document == null) { |
| | | throw exception(DOCUMENT_NOT_EXISTS); |
| | | } |
| | | return document; |
| | | } |
| | | |
| | | /** æ ¡éªåç±»åå¨ä¸å¯ç¨ */ |
| | | private ArchiveCategoryDO validateCategory(Long categoryId) { |
| | | ArchiveCategoryDO category = categoryService.getCategory(categoryId); |
| | | if (category == null) { |
| | | throw exception(DOCUMENT_CATEGORY_NOT_EXISTS); |
| | | } |
| | | if (ArchiveCategoryStatusEnum.DISABLE.getStatus().equals(category.getStatus())) { |
| | | throw exception(CATEGORY_DISABLED, category.getName()); |
| | | } |
| | | return category; |
| | | } |
| | | |
| | | /** æææ¡£æ¡å¯è§æ§æ ¡éªï¼ä¿å¯çº§æ¡£æ¡éè¦ {@code archive:document:sensitive} æé */ |
| | | private void validateSecretLevelVisible(ArchiveDocumentDO document) { |
| | | if (ArchiveSecretLevelEnum.SECRET.getLevel().equals(document.getSecretLevel()) && !hasSensitivePermission()) { |
| | | throw exception(DOCUMENT_SENSITIVE_NO_PERMISSION, document.getTitle()); |
| | | } |
| | | } |
| | | |
| | | private boolean hasSensitivePermission() { |
| | | return securityFrameworkService.hasPermission(SENSITIVE_PERMISSION); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.service.stat; |
| | | |
| | | import cn.iocoder.yudao.module.archive.controller.admin.stat.vo.ArchiveStatRespVO; |
| | | |
| | | /** |
| | | * æ¡£æ¡ç»è®¡ Service æ¥å£ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface ArchiveStatService { |
| | | |
| | | /** |
| | | * è·å¾æ¡£æ¡ç»è®¡æ»è§ï¼åé + æµè½¬ + åç±»/å¯çº§/è½½ä½åå¸ï¼ |
| | | * |
| | | * @return ç»è®¡ç»æ |
| | | */ |
| | | ArchiveStatRespVO getOverview(); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.archive.service.stat; |
| | | |
| | | import cn.iocoder.yudao.module.archive.controller.admin.stat.vo.ArchiveStatRespVO; |
| | | import cn.iocoder.yudao.module.archive.controller.admin.stat.vo.ArchiveStatValueVO; |
| | | import cn.iocoder.yudao.module.archive.dal.mysql.borrow.ArchiveBorrowMapper; |
| | | import cn.iocoder.yudao.module.archive.dal.mysql.document.ArchiveDocumentMapper; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveCarrierTypeEnum; |
| | | import cn.iocoder.yudao.module.archive.enums.ArchiveSecretLevelEnum; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æ¡£æ¡ç»è®¡ Service å®ç°ç±» |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class ArchiveStatServiceImpl implements ArchiveStatService { |
| | | |
| | | @Resource |
| | | private ArchiveDocumentMapper documentMapper; |
| | | |
| | | @Resource |
| | | private ArchiveBorrowMapper borrowMapper; |
| | | |
| | | @Override |
| | | public ArchiveStatRespVO getOverview() { |
| | | ArchiveStatRespVO respVO = new ArchiveStatRespVO(); |
| | | |
| | | // 1. æ¡£æ¡åé |
| | | respVO.setTotalCount(documentMapper.selectTotalCount()); |
| | | respVO.setInStockCount(documentMapper.selectInStockCount()); |
| | | respVO.setBorrowedCount(documentMapper.selectBorrowedCount()); |
| | | |
| | | // 2. åé
æµè½¬ï¼ååºä¸ / 龿æªè¿ï¼é¾æå®æ¶è®¡ç®ï¼ |
| | | respVO.setBorrowingCount(borrowMapper.selectBorrowingCount()); |
| | | respVO.setOverdueCount(borrowMapper.selectOverdueCount()); |
| | | |
| | | // 3. åå¸ç»è®¡ï¼å¯çº§ / è½½ä½è¡¥æä¸¾åç§°ï¼ä¾¿äºåç«¯ç´æ¥æ¸²æï¼ |
| | | respVO.setByCategory(documentMapper.selectCountGroupByCategory()); |
| | | respVO.setBySecretLevel(fillSecretLevelName(documentMapper.selectCountGroupBySecretLevel())); |
| | | respVO.setByCarrierType(fillCarrierTypeName(documentMapper.selectCountGroupByCarrierType())); |
| | | return respVO; |
| | | } |
| | | |
| | | private List<ArchiveStatValueVO> fillSecretLevelName(List<ArchiveStatValueVO> list) { |
| | | list.forEach(item -> item.setName(ArchiveSecretLevelEnum.nameOf(item.getValue()))); |
| | | return list; |
| | | } |
| | | |
| | | private List<ArchiveStatValueVO> fillCarrierTypeName(List<ArchiveStatValueVO> list) { |
| | | list.forEach(item -> item.setName(ArchiveCarrierTypeEnum.nameOf(item.getValue()))); |
| | | return list; |
| | | } |
| | | |
| | | } |
| | |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- æ¡£æ¡æ¨¡å APIï¼æ¥éåè¯ææ¥æºåæ®å½æ¡£ï¼ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-module-archive-api</artifactId> |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- Web ç¸å
³ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | |
| | | } |
| | | |
| | | @PostMapping("/archive") |
| | | @Operation(summary = "彿¡£æ¥éå") |
| | | @Operation(summary = "彿¡£æ¥éåï¼åæ¶çæè´¢å¡æ¡£æ¡ï¼") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('finance:reimbursement:archive')") |
| | | public CommonResult<Boolean> archiveReimbursement(@RequestParam("id") Long id) { |
| | | reimbursementService.archiveReimbursement(id); |
| | | return success(true); |
| | | public CommonResult<String> archiveReimbursement(@RequestParam("id") Long id) { |
| | | return success(reimbursementService.archiveReimbursement(id)); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | |
| | | @ExcelProperty("彿¡£æ¶é´") |
| | | private LocalDateTime archiveTime; |
| | | |
| | | @Schema(description = "彿¡£çæçæ¡£æ¡ IDï¼éç©ºè¡¨ç¤ºå·²å½æ¡£ï¼", example = "1024") |
| | | private Long archiveDocumentId; |
| | | |
| | | @Schema(description = "æ¯å¦å·²å½æ¡£ï¼archiveDocumentId é空å³ä¸º trueï¼", example = "false") |
| | | private Boolean archived; |
| | | |
| | | @Schema(description = "夿³¨", example = "åºå·®å京") |
| | | @ExcelProperty("夿³¨") |
| | | private String remark; |
| | |
| | | /** 彿¡£æ¶é´ */ |
| | | private LocalDateTime archiveTime; |
| | | |
| | | /** 彿¡£çæçæ¡£æ¡ IDï¼archive_document.idï¼å½æ¡£èå¨ååï¼ */ |
| | | private Long archiveDocumentId; |
| | | |
| | | /** 夿³¨ */ |
| | | private String remark; |
| | | |
| | |
| | | ErrorCode REIMBURSEMENT_UPDATE_FAIL_NOT_DRAFT = new ErrorCode(1_030_107_003, "æ¥éå({})䏿¯è稿æå·²é©³åç¶æï¼æ æ³ä¿®æ¹ï¼åªæè稿å已驳åçæ¥éåå¯ä»¥ç¼è¾"); |
| | | ErrorCode REIMBURSEMENT_SUBMIT_FAIL_STATUS = new ErrorCode(1_030_107_004, "æäº¤å®¡æ¹å¤±è´¥ï¼åªæè稿æå·²é©³åç¶æçæ¥éåæè½æäº¤"); |
| | | ErrorCode REIMBURSEMENT_SUBMIT_FAIL_ITEM_EMPTY = new ErrorCode(1_030_107_005, "æäº¤å®¡æ¹å¤±è´¥ï¼æ¥éåæ²¡ææç»è¡ï¼æ æ³æäº¤"); |
| | | ErrorCode REIMBURSEMENT_ARCHIVE_FAIL_STATUS = new ErrorCode(1_030_107_006, "彿¡£å¤±è´¥ï¼åªæå·²éè¿ç¶æçæ¥éåæè½å½æ¡£"); |
| | | ErrorCode REIMBURSEMENT_ARCHIVE_FAIL_STATUS = new ErrorCode(1_030_107_006, "彿¡£å¤±è´¥ï¼æ¥éå({})å½åç¶æä¸ºã{}ãï¼åªæãå·²éè¿ãç¶æçæ¥éåæè½å½æ¡£å°æ¡£æ¡ç®¡ç"); |
| | | ErrorCode REIMBURSEMENT_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS = new ErrorCode(1_030_107_007, "æ´æ°å®¡æ¹ç¶æå¤±è´¥ï¼åªæå®¡æ¹ä¸çæ¥éåæè½æ´æ°"); |
| | | ErrorCode REIMBURSEMENT_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_030_107_008, "æ¥é审æ¹åç±»ä¸åå¨ï¼è¯·å
å¨BPM模åå建æ¥éå®¡æ¹æµç¨åç±»"); |
| | | ErrorCode REIMBURSEMENT_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_107_009, "æ¥é审æ¹åç±»ï¼finance_reimbursement_approveï¼ä¸æ²¡æå·²åå¸çæµç¨ï¼æ æ³æäº¤æ¥é审æ¹ã请å
å¨ãBPM â æµç¨å®ä¹ãä¸å建并å叿¥éå®¡æ¹æµç¨åéè¯"); |
| | | ErrorCode REIMBURSEMENT_CUSTOM_NO_EXISTS = new ErrorCode(1_030_107_010, "æ¥éåå·({})已被å
¶ä»æ¥éå使ç¨ï¼è¯·æ´æ¢å
¶ä»åå·ï¼ææ¸
ç©ºè¯¥åæ®µç±ç³»ç»èªå¨çæ"); |
| | | ErrorCode REIMBURSEMENT_CUSTOM_NO_INVALID = new ErrorCode(1_030_107_011, "æ¥éåå·({})ä¸é´ä¸è½å
å«ç©ºæ ¼ï¼è¯·å»æç©ºæ ¼åéæ°è¾å
¥ï¼ææ¸
ç©ºè¯¥åæ®µç±ç³»ç»èªå¨çæ"); |
| | | ErrorCode REIMBURSEMENT_ALREADY_ARCHIVED = new ErrorCode(1_030_107_012, "éå¤å½æ¡£ï¼æ¥éå({})å·²äºæ¤å彿¡£å¹¶çææ¡£æ¡(ç¼å·={})ï¼è¯·å¿éå¤å½æ¡£ï¼å¦éæ¥ç请å徿¡£æ¡ç®¡ç模å"); |
| | | |
| | | } |
| | |
| | | private final Integer status; |
| | | private final String name; |
| | | |
| | | /** æç¶æå¼å䏿åï¼æªå¹é
æ¶åéä¸ºãæªç¥ã */ |
| | | public static String nameOf(Integer status) { |
| | | if (status == null) { |
| | | return "æªç¥"; |
| | | } |
| | | for (FinanceReimbursementStatusEnum item : values()) { |
| | | if (item.getStatus().equals(status)) { |
| | | return item.getName(); |
| | | } |
| | | } |
| | | return "æªç¥"; |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | void submitReimbursement(Long id, String processDefinitionKey, Long userId); |
| | | |
| | | void archiveReimbursement(Long id); |
| | | /** |
| | | * 彿¡£æ¥éåï¼ç¶æç½®ä¸ºå·²å½æ¡£ + çææ¡£æ¡æ¡ç®å¹¶ååæ¡£æ¡ IDï¼ |
| | | * |
| | | * @param id æ¥éåç¼å· |
| | | * @return çæçæ¡£æ¡ç¼å·ï¼ç¨äºå端æç¤ºï¼ |
| | | */ |
| | | String archiveReimbursement(Long id); |
| | | |
| | | List<Map<String, Object>> getReimbursementApproveProcessDefinitionList(); |
| | | |
| | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.archive.api.document.ArchiveDocumentApi; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentCreateReqDTO; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentRespDTO; |
| | | import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; |
| | | import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| | | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; |
| | |
| | | import cn.iocoder.yudao.module.finance.dal.redis.FinanceNoRedisDAO; |
| | | import cn.iocoder.yudao.module.finance.enums.FinanceReimbursementStatusEnum; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | |
| | | */ |
| | | public static final String REIMBURSEMENT_RECORD_TYPE = "finance_reimbursement"; |
| | | |
| | | /** 彿¡£æ¥æºç±»åï¼4-è´¢å¡ï¼å¯¹åº archive 模å source_typeï¼ */ |
| | | private static final Integer ARCHIVE_SOURCE_TYPE_FINANCE = 4; |
| | | |
| | | /** 彿¡£å¯çº§ï¼3-ä¿å¯ï¼è´¢å¡æ¡£æ¡é»è®¤ä¿å¯ï¼ */ |
| | | private static final Integer ARCHIVE_SECRET_LEVEL_SECRET = 3; |
| | | |
| | | /** è´¢å¡æ¡£æ¡åç±»ç¼ç ï¼å¯¹åº archive_category.codeï¼ */ |
| | | private static final String ARCHIVE_CATEGORY_CODE_FINANCE = "finance"; |
| | | |
| | | @Resource |
| | | private FinanceReimbursementMapper reimbursementMapper; |
| | | @Resource |
| | |
| | | |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | |
| | | @Resource |
| | | private ArchiveDocumentApi archiveDocumentApi; |
| | | |
| | | @Resource |
| | | private BpmProcessInstanceApi processInstanceApi; |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void archiveReimbursement(Long id) { |
| | | // 1. æ ¡éªåå¨ + å·²éè¿ç¶æ |
| | | public String archiveReimbursement(Long id) { |
| | | // 1. æ ¡éªåå¨ + ç¶æ |
| | | FinanceReimbursementDO reimbursement = validateReimbursementExists(id); |
| | | if (!FinanceReimbursementStatusEnum.APPROVED.getStatus().equals(reimbursement.getStatus())) { |
| | | throw exception(REIMBURSEMENT_ARCHIVE_FAIL_STATUS); |
| | | boolean archived = FinanceReimbursementStatusEnum.ARCHIVED.getStatus().equals(reimbursement.getStatus()); |
| | | if (archived && reimbursement.getArchiveDocumentId() != null) { |
| | | throw exception(REIMBURSEMENT_ALREADY_ARCHIVED, reimbursement.getNo(), |
| | | StrUtil.blankToDefault(archiveNo(id), "æªç¥")); |
| | | } |
| | | if (!archived && !FinanceReimbursementStatusEnum.APPROVED.getStatus().equals(reimbursement.getStatus())) { |
| | | throw exception(REIMBURSEMENT_ARCHIVE_FAIL_STATUS, reimbursement.getNo(), |
| | | FinanceReimbursementStatusEnum.nameOf(reimbursement.getStatus())); |
| | | } |
| | | |
| | | // 2. æ´æ°ä¸ºå·²å½æ¡£ |
| | | // 2. æ´æ°ä¸ºå·²å½æ¡£ï¼åå²å·²å½æ¡£ä½å°æªçææ¡£æ¡æ¡ç®çï¼è·³è¿ç¶ææ´æ°ï¼ä»
è¡¥çææ¡£æ¡ï¼ |
| | | if (!archived) { |
| | | reimbursementMapper.updateById(new FinanceReimbursementDO() |
| | | .setId(id) |
| | | .setStatus(FinanceReimbursementStatusEnum.ARCHIVED.getStatus()) |
| | | .setArchiveTime(LocalDateTime.now())); |
| | | } |
| | | |
| | | // 3. ææ¥æºåæ®çææ¡£æ¡æ¡ç®ï¼è´¢å¡æ¡£æ¡é»è®¤ãä¿å¯ã级ï¼ï¼å¹¶ååæ¡£æ¡ ID |
| | | List<Long> blobIds = storageAttachmentApi.listAttachments(REIMBURSEMENT_RECORD_TYPE, id).stream() |
| | | .map(StorageBlobRespDTO::getId).collect(Collectors.toList()); |
| | | Long archiveDocumentId = archiveDocumentApi.archiveBySource(new ArchiveDocumentCreateReqDTO() |
| | | .setSourceType(ARCHIVE_SOURCE_TYPE_FINANCE) |
| | | .setSourceId(id) |
| | | .setSourceNo(reimbursement.getNo()) |
| | | .setSourceTitle(reimbursement.getTitle()) |
| | | .setCategoryCode(ARCHIVE_CATEGORY_CODE_FINANCE) |
| | | .setSecretLevel(ARCHIVE_SECRET_LEVEL_SECRET) |
| | | .setSummary("è´¢å¡æ¥éåè¯å½æ¡£") |
| | | .setBlobIds(blobIds)).getCheckedData(); |
| | | |
| | | reimbursementMapper.updateById(new FinanceReimbursementDO() |
| | | .setId(id) |
| | | .setStatus(FinanceReimbursementStatusEnum.ARCHIVED.getStatus()) |
| | | .setArchiveTime(LocalDateTime.now())); |
| | | .setArchiveDocumentId(archiveDocumentId)); |
| | | return StrUtil.blankToDefault(archiveNo(id), "æªç¥"); |
| | | } |
| | | |
| | | @Override |
| | |
| | | return reimbursement; |
| | | } |
| | | |
| | | /** æ¥è¯¢æ¥æºåæ®å·²çæçæ¡£æ¡ç¼å·ï¼æªå½æ¡£æ¶è¿å nullï¼ */ |
| | | private String archiveNo(Long reimbursementId) { |
| | | ArchiveDocumentRespDTO archive = archiveDocumentApi |
| | | .getBySource(ARCHIVE_SOURCE_TYPE_FINANCE, reimbursementId).getCheckedData(); |
| | | return archive != null ? archive.getNo() : null; |
| | | } |
| | | |
| | | /** |
| | | * è§£ææ°å¢æ¶çæ¥éåå·ï¼å»æé¦å°¾ç©ºæ ¼åè¥ä¸ºç©ºï¼åç±ç³»ç»æ BX + æ¥æ + 6 使µæ°´çæï¼ |
| | | * å¦å使ç¨ç¨æ·èªå®ä¹åå·ã |
| | |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- æ¡£æ¡æ¨¡å APIï¼è¯¾é¢ç³æ¥ä¹¦ææ¥æºåæ®å½æ¡£ï¼ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-module-archive-api</artifactId> |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- Web ç¸å
³ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | |
| | | return success(true); |
| | | } |
| | | |
| | | @PostMapping("/archive") |
| | | @Operation(summary = "课é¢ç³æ¥ä¹¦å½æ¡£å°æ¡£æ¡ç®¡ç") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('research:application:archive')") |
| | | public CommonResult<String> archiveApplication(@RequestParam("id") Long id) { |
| | | return success(applicationService.archiveApplication(id)); |
| | | } |
| | | |
| | | // ==================== å
鍿¹æ³ ==================== |
| | | |
| | | private ResearchApplicationRespVO buildApplicationDetail(ResearchApplicationDO application) { |
| | |
| | | @Schema(description = "ç«é¡¹éç¥å
Œ ID") |
| | | private Long noticeId; |
| | | |
| | | @Schema(description = "彿¡£çæçæ¡£æ¡ IDï¼éç©ºè¡¨ç¤ºå·²å½æ¡£ï¼", example = "1024") |
| | | private Long archiveDocumentId; |
| | | |
| | | @Schema(description = "æ¯å¦å·²å½æ¡£ï¼archiveDocumentId é空å³ä¸º trueï¼", example = "false") |
| | | private Boolean archived; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | |
| | | /** å·²åå¸çç«é¡¹éç¥å
Œ ID */ |
| | | private Long noticeId; |
| | | |
| | | /** 彿¡£çæçæ¡£æ¡ IDï¼archive_document.idï¼å½æ¡£èå¨ååï¼ */ |
| | | private Long archiveDocumentId; |
| | | |
| | | /** 夿³¨ */ |
| | | private String remark; |
| | | |
| | |
| | | ErrorCode APPLICATION_PUBLISH_NOTICE_FAIL_STATUS = new ErrorCode(1_030_109_109, "åå¸ç«é¡¹éç¥å¤±è´¥ï¼è¯¾é¢ç³æ¥ä¹¦({})å½åç¶æä¸ºã{}ãï¼åªæå·²ç«é¡¹çè¯¾é¢æè½åå¸ç«é¡¹éç¥"); |
| | | ErrorCode APPLICATION_NOTICE_EXISTS = new ErrorCode(1_030_109_110, "åå¸å¤±è´¥ï¼è¯¥è¯¾é¢({})çç«é¡¹éç¥å·²äº {} åå¸ï¼è¯·å¿éå¤åå¸"); |
| | | ErrorCode APPLICATION_MEMBER_NOT_EXISTS = new ErrorCode(1_030_109_111, "ä¿åå¤±è´¥ï¼æéç³æ¥ä¼å(ID={})å·²ä¸åå¨ï¼è¯·éæ°ä»ä¼ååè¡¨éæ©ç³æ¥äºº"); |
| | | ErrorCode APPLICATION_ARCHIVE_FAIL_STATUS = new ErrorCode(1_030_109_112, "彿¡£å¤±è´¥ï¼è¯¾é¢ç³æ¥ä¹¦({})å½åç¶æä¸ºã{}ãï¼åªæãå·²ç«é¡¹ãçè¯¾é¢æè½å½æ¡£å°æ¡£æ¡ç®¡ç"); |
| | | ErrorCode APPLICATION_ALREADY_ARCHIVED = new ErrorCode(1_030_109_113, "éå¤å½æ¡£ï¼è¯¾é¢ç³æ¥ä¹¦({})å·²äºæ¤å彿¡£å¹¶çææ¡£æ¡(ç¼å·={})ï¼è¯·å¿éå¤å½æ¡£ï¼å¦éæ¥ç请å徿¡£æ¡ç®¡ç模å"); |
| | | |
| | | // ========== ä¸å®¶è¯å®¡æç» 1_030_109_200 ========== |
| | | ErrorCode REVIEW_NOT_EXISTS = new ErrorCode(1_030_109_200, "ä¸å®¶è¯å®¡è®°å½ä¸åå¨"); |
| | |
| | | /** åå¸ç«é¡¹éç¥ï¼çæç³»ç»å
¬åï¼é²éå¤ï¼ */ |
| | | void publishNotice(Long id); |
| | | |
| | | /** |
| | | * å°ãå·²ç«é¡¹ãç课é¢ç³æ¥ä¹¦å½æ¡£å°æ¡£æ¡ç®¡çï¼å¹¶åå彿¡£æ¡£æ¡ ID |
| | | * |
| | | * @param id ç³æ¥ä¹¦ç¼å· |
| | | * @return çæçæ¡£æ¡ç¼å·ï¼ç¨äºå端æç¤ºï¼ |
| | | */ |
| | | String archiveApplication(Long id); |
| | | |
| | | /** ä¸å®¶è¯å®¡æ±æ»ç»æåå主åï¼ç±è¯å®¡æå¡è°ç¨ï¼ */ |
| | | void updateReviewSummary(Long id, BigDecimal reviewAvgScore, Integer reviewPass); |
| | | |
| | |
| | | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.archive.api.document.ArchiveDocumentApi; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentCreateReqDTO; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentRespDTO; |
| | | import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; |
| | | import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| | | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; |
| | |
| | | import cn.iocoder.yudao.module.research.enums.ResearchGuidelineStatusEnum; |
| | | import cn.iocoder.yudao.module.research.service.guideline.ResearchGuidelineService; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO; |
| | | import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO; |
| | | import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; |
| | | import cn.iocoder.yudao.module.system.service.notice.NoticeService; |
| | |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| | |
| | | private static final String APPLICATION_APPROVE_CATEGORY_CODE = "research_topic_approve"; |
| | | public static final String APPLICATION_RECORD_TYPE = "research_application"; |
| | | |
| | | /** 彿¡£æ¥æºç±»åï¼2-课é¢ï¼å¯¹åº archive 模å source_typeï¼ */ |
| | | private static final Integer ARCHIVE_SOURCE_TYPE_RESEARCH = 2; |
| | | |
| | | /** 彿¡£å¯çº§ï¼2-å
é¨ */ |
| | | private static final Integer ARCHIVE_SECRET_LEVEL_INTERNAL = 2; |
| | | |
| | | /** è¯¾é¢æ¡£æ¡åç±»ç¼ç ï¼å¯¹åº archive_category.codeï¼ */ |
| | | private static final String ARCHIVE_CATEGORY_CODE_RESEARCH = "research"; |
| | | |
| | | /** ç«é¡¹éç¥ä½¿ç¨ãå
¬åãç±»åï¼system_notice_type: 1-éç¥ 2-å
¬åï¼ */ |
| | | private static final Integer NOTICE_TYPE_ANNOUNCEMENT = 2; |
| | | |
| | |
| | | |
| | | @Resource |
| | | private ResearchApplicationMapper applicationMapper; |
| | | |
| | | @Resource |
| | | private ArchiveDocumentApi archiveDocumentApi; |
| | | |
| | | @Resource |
| | | private ResearchNoRedisDAO noRedisDAO; |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public String archiveApplication(Long id) { |
| | | // 1.1 æ ¡éªåå¨ |
| | | ResearchApplicationDO application = validateApplicationExists(id); |
| | | // 1.2 åªæãå·²ç«é¡¹ãçè¯¾é¢æè½å½æ¡£ |
| | | if (!ResearchApplicationStatusEnum.APPROVED.getStatus().equals(application.getStatus())) { |
| | | throw exception(APPLICATION_ARCHIVE_FAIL_STATUS, |
| | | application.getNo(), ResearchApplicationStatusEnum.nameOf(application.getStatus())); |
| | | } |
| | | // 1.3 éå¤å½æ¡£æ ¡éª |
| | | if (application.getArchiveDocumentId() != null) { |
| | | throw exception(APPLICATION_ALREADY_ARCHIVED, application.getNo(), |
| | | StrUtil.blankToDefault(archiveNo(id), "æªç¥")); |
| | | } |
| | | |
| | | // 2. 带å
¥ç³æ¥ä¹¦éä»¶ï¼ææ¥æºåæ®å½æ¡£ï¼æ¥æºåå·åç«é¡¹ç¼å·ï¼æªçææ¶åéç³æ¥ç¼å·ï¼ |
| | | String sourceNo = StrUtil.blankToDefault(application.getResearchNo(), application.getNo()); |
| | | List<Long> blobIds = storageAttachmentApi.listAttachments(APPLICATION_RECORD_TYPE, id).stream() |
| | | .map(StorageBlobRespDTO::getId).collect(Collectors.toList()); |
| | | Long archiveDocumentId = archiveDocumentApi.archiveBySource(new ArchiveDocumentCreateReqDTO() |
| | | .setSourceType(ARCHIVE_SOURCE_TYPE_RESEARCH) |
| | | .setSourceId(id) |
| | | .setSourceNo(sourceNo) |
| | | .setSourceTitle(application.getTitle()) |
| | | .setCategoryCode(ARCHIVE_CATEGORY_CODE_RESEARCH) |
| | | .setSecretLevel(ARCHIVE_SECRET_LEVEL_INTERNAL) |
| | | .setSummary("课é¢ç³æ¥ä¹¦å½æ¡£") |
| | | .setBlobIds(blobIds)).getCheckedData(); |
| | | |
| | | // 3. åå彿¡£æ¡£æ¡ IDï¼ä½ä¸ºå·²å½æ¡£ç¡¬æ è®°ï¼ |
| | | applicationMapper.updateById(new ResearchApplicationDO() |
| | | .setId(id).setArchiveDocumentId(archiveDocumentId)); |
| | | return StrUtil.blankToDefault(archiveNo(id), "æªç¥"); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateReviewSummary(Long id, BigDecimal reviewAvgScore, Integer reviewPass) { |
| | | // ç¨ UpdateWrapper æ¾å¼ setï¼ä¿è¯ãè¯å®¡æç»è¢«å ç©ºãæ¶è½ææ±æ»å¼æ¸
æ null |
| | | applicationMapper.update(null, new LambdaUpdateWrapper<ResearchApplicationDO>() |
| | |
| | | return application; |
| | | } |
| | | |
| | | /** æ¥è¯¢æ¥æºåæ®å·²çæçæ¡£æ¡ç¼å·ï¼æªå½æ¡£æ¶è¿å nullï¼ */ |
| | | private String archiveNo(Long applicationId) { |
| | | ArchiveDocumentRespDTO archive = archiveDocumentApi |
| | | .getBySource(ARCHIVE_SOURCE_TYPE_RESEARCH, applicationId).getCheckedData(); |
| | | return archive != null ? archive.getNo() : null; |
| | | } |
| | | |
| | | /** ä¿åï¼è稿ï¼é¶æ®µæ ¡éªæåï¼å¿
é¡»åå¨ä¸å·²åå¸ */ |
| | | private ResearchGuidelineDO validateGuidelineForSave(Long guidelineId) { |
| | | ResearchGuidelineDO guideline = guidelineService.getGuideline(guidelineId); |
| | |
| | | RESEARCH_APPLICATION("research_application", "课é¢ç³æ¥ä¹¦"), |
| | | RESEARCH_FUND_RECORD("research_fund_record", "ç»è´¹æ¨ä»åè¯"), |
| | | |
| | | // ===== æ¡£æ¡ç®¡ç ===== |
| | | ARCHIVE_DOCUMENT("archive_document", "æ¡£æ¡"), |
| | | RESEARCH_FUND_RECORD("research_fund_record", "ç»è´¹æ¨ä»åè¯"), |
| | | |
| | | // ===== ä¼ä¸å¾®ä¿¡æ´»å¨ ===== |
| | | WXCP_ACTIVITY_SIGNUP("wxcp_activity_signup", "ä¼ä¸å¾®ä¿¡æ´»å¨æ¥å"); |
| | | |
| | |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- æ¡£æ¡æ¨¡å APIï¼ä¼åææææ¥æºåæ®å½æ¡£ï¼ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-module-archive-api</artifactId> |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- Web ç¸å
³ --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | |
| | | return success(new PageResult<>(buildMemberDetailList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | @PostMapping("/archive") |
| | | @Operation(summary = "ä¼åææå½æ¡£å°æ¡£æ¡ç®¡ç") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('ums:member:archive')") |
| | | public CommonResult<String> archiveMember(@RequestParam("id") Long id) { |
| | | return success(memberService.archiveMember(id)); |
| | | } |
| | | |
| | | // ==================== å
鍿¹æ³ ==================== |
| | | |
| | | private UmsMemberRespVO buildMemberDetail(UmsMemberDO member) { |
| | |
| | | @Schema(description = "ç¶æ", example = "1") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "彿¡£çæçæ¡£æ¡ IDï¼éç©ºè¡¨ç¤ºå·²å½æ¡£ï¼", example = "1024") |
| | | private Long archiveDocumentId; |
| | | |
| | | @Schema(description = "æ¯å¦å·²å½æ¡£ï¼archiveDocumentId é空å³ä¸º trueï¼", example = "false") |
| | | private Boolean archived; |
| | | |
| | | @Schema(description = "夿³¨", example = "") |
| | | private String remark; |
| | | |
| | |
| | | /** ç¶æï¼1-æ£å¸¸ 0-æå */ |
| | | private Integer status; |
| | | |
| | | /** 彿¡£çæçæ¡£æ¡ IDï¼archive_document.idï¼å½æ¡£èå¨ååï¼ */ |
| | | private Long archiveDocumentId; |
| | | |
| | | /** 夿³¨ */ |
| | | private String remark; |
| | | |
| | |
| | | ErrorCode MEMBER_USER_CREATE_FAIL = new ErrorCode(1_030_108_102, "å建ä¼åç³»ç»è´¦å·å¤±è´¥ï¼è¯·è系管çå"); |
| | | ErrorCode MEMBER_USER_MOBILE_EXISTS = new ErrorCode(1_030_108_103, "è¯¥ææºå·å·²è¢«å
¶ä»ä¼åè´¦å·ä½¿ç¨"); |
| | | ErrorCode MEMBER_GRADE_NOT_MATCH_TYPE = new ErrorCode(1_030_108_104, "ä¼åç级ä¸ä¼åç±»åä¸å¹é
ï¼ä¸ªäººä¼åä¸è½éæ©åä½ç级ï¼åä½ä¼åä¸è½éæ©ä¸ªäººç级"); |
| | | ErrorCode MEMBER_ARCHIVE_FAIL_STATUS = new ErrorCode(1_030_108_105, "彿¡£å¤±è´¥ï¼ä¼å({})å½åç¶æä¸ºã{}ãï¼åªæãæ£å¸¸ãç¶æçä¼åæè½å½æ¡£å°æ¡£æ¡ç®¡çï¼è¯·å
å¯ç¨è¯¥ä¼å"); |
| | | ErrorCode MEMBER_ALREADY_ARCHIVED = new ErrorCode(1_030_108_106, "éå¤å½æ¡£ï¼ä¼å({})å·²äºæ¤å彿¡£å¹¶çææ¡£æ¡(ç¼å·={})ï¼è¯·å¿éå¤å½æ¡£ï¼å¦éæ¥ç请å徿¡£æ¡ç®¡ç模å"); |
| | | |
| | | } |
| | |
| | | |
| | | PageResult<UmsMemberDO> getMemberPage(UmsMemberPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * å°ãæ£å¸¸ãç¶æçä¼åææ¥æºåæ®å½æ¡£å°æ¡£æ¡ç®¡çï¼å¹¶åå彿¡£æ¡£æ¡ ID |
| | | * |
| | | * @param id ä¼åç¼å· |
| | | * @return çæçæ¡£æ¡ç¼å·ï¼ç¨äºå端æç¤ºï¼ |
| | | */ |
| | | String archiveMember(Long id); |
| | | |
| | | } |
| | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.archive.api.document.ArchiveDocumentApi; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentCreateReqDTO; |
| | | import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserCreateReqDTO; |
| | | import cn.iocoder.yudao.module.ums.controller.admin.member.vo.UmsMemberPageReqVO; |
| | |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.ums.enums.ErrorCodeConstants.*; |
| | |
| | | |
| | | public static final String MEMBER_RECORD_TYPE = "ums_member"; |
| | | |
| | | /** ä¼åç¶æï¼æ£å¸¸ï¼å¯å½æ¡£ï¼ */ |
| | | private static final Integer MEMBER_STATUS_NORMAL = 1; |
| | | |
| | | /** 彿¡£æ¥æºç±»åï¼3-ä¼åï¼å¯¹åº archive 模å source_typeï¼ */ |
| | | private static final Integer ARCHIVE_SOURCE_TYPE_MEMBER = 3; |
| | | |
| | | /** 彿¡£å¯çº§ï¼2-å
é¨ */ |
| | | private static final Integer ARCHIVE_SECRET_LEVEL_INTERNAL = 2; |
| | | |
| | | /** ä¼åæ¡£æ¡åç±»ç¼ç ï¼å¯¹åº archive_category.codeï¼ */ |
| | | private static final String ARCHIVE_CATEGORY_CODE_MEMBER = "member"; |
| | | |
| | | @Resource |
| | | private UmsMemberMapper memberMapper; |
| | | |
| | |
| | | |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | |
| | | @Resource |
| | | private ArchiveDocumentApi archiveDocumentApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | return memberMapper.selectPage(pageReqVO); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public String archiveMember(Long id) { |
| | | // 1.1 æ ¡éªä¼ååå¨ |
| | | UmsMemberDO member = validateMemberExists(id); |
| | | // 1.2 åªæãæ£å¸¸ãç¶æçä¼åæè½å½æ¡£ |
| | | if (!MEMBER_STATUS_NORMAL.equals(member.getStatus())) { |
| | | throw exception(MEMBER_ARCHIVE_FAIL_STATUS, member.getNo(), memberStatusName(member.getStatus())); |
| | | } |
| | | // 1.3 éå¤å½æ¡£æ ¡éª |
| | | if (member.getArchiveDocumentId() != null) { |
| | | throw exception(MEMBER_ALREADY_ARCHIVED, member.getNo(), |
| | | StrUtil.blankToDefault(archiveNo(id), "æªç¥")); |
| | | } |
| | | |
| | | // 2. 带å
¥ä¼åææéä»¶ï¼ææ¥æºåæ®å½æ¡£ |
| | | List<Long> blobIds = storageAttachmentApi.listAttachments(MEMBER_RECORD_TYPE, id).stream() |
| | | .map(StorageBlobRespDTO::getId).collect(Collectors.toList()); |
| | | Long archiveDocumentId = archiveDocumentApi.archiveBySource(new ArchiveDocumentCreateReqDTO() |
| | | .setSourceType(ARCHIVE_SOURCE_TYPE_MEMBER) |
| | | .setSourceId(id) |
| | | .setSourceNo(member.getNo()) |
| | | .setSourceTitle(member.getName()) |
| | | .setCategoryCode(ARCHIVE_CATEGORY_CODE_MEMBER) |
| | | .setSecretLevel(ARCHIVE_SECRET_LEVEL_INTERNAL) |
| | | .setSummary("ä¼åææå½æ¡£") |
| | | .setBlobIds(blobIds)).getCheckedData(); |
| | | |
| | | // 3. åå彿¡£æ¡£æ¡ IDï¼ä½ä¸ºå·²å½æ¡£ç¡¬æ è®°ï¼ |
| | | memberMapper.updateById(new UmsMemberDO().setId(id).setArchiveDocumentId(archiveDocumentId)); |
| | | return StrUtil.blankToDefault(archiveNo(id), "æªç¥"); |
| | | } |
| | | |
| | | // =================== å
鍿¹æ³ =================== |
| | | |
| | | private Long createSystemUser(UmsApplicationDO application) { |
| | |
| | | return member; |
| | | } |
| | | |
| | | /** ä¼åç¶æä¸æåï¼1-æ£å¸¸ 0-æåï¼ç¨äºå½æ¡£å¤±è´¥æç¤ºï¼ */ |
| | | private String memberStatusName(Integer status) { |
| | | if (status == null) { |
| | | return "æªç¥"; |
| | | } |
| | | return MEMBER_STATUS_NORMAL.equals(status) ? "æ£å¸¸" : "æå"; |
| | | } |
| | | |
| | | /** æ¥è¯¢æ¥æºåæ®å·²çæçæ¡£æ¡ç¼å·ï¼æªå½æ¡£æ¶è¿å nullï¼ */ |
| | | private String archiveNo(Long memberId) { |
| | | ArchiveDocumentRespDTO archive = archiveDocumentApi |
| | | .getBySource(ARCHIVE_SOURCE_TYPE_MEMBER, memberId).getCheckedData(); |
| | | return archive != null ? archive.getNo() : null; |
| | | } |
| | | |
| | | } |
| | |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- æ¡£æ¡ç®¡ç模å --> |
| | | <dependency> |
| | | <groupId>cn.iocoder.boot</groupId> |
| | | <artifactId>yudao-module-archive</artifactId> |
| | | <version>${revision}</version> |
| | | </dependency> |
| | | |
| | | <!-- spring boot é
ç½®æéä¾èµ --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |