feat(financial): 新增凭证分录科目明细字段
- 在数据库表 fin_voucher_entry 中添加 subject_detail 字段
- 更新应用开发环境配置中的数据库连接URL
- 在 FinLedgerEntryRecordVo 和 FinLedgerRowVo 中添加 subjectDetail 属性
- 在 FinVoucherEntry 实体类中添加 subjectDetail 字段和注解
- 更新 MyBatis 映射文件以包含 subject_detail 字段映射
- 在 FinLedgerServiceImpl 中设置科目明细数据
- 创建凭证分录科目明细字段前端联调文档
| | |
| | | `auxiliary_type` varchar(32) DEFAULT NULL COMMENT 'è¾
婿 ¸ç®ç±»å', |
| | | `auxiliary_id` varchar(64) DEFAULT NULL COMMENT 'è¾
婿 ¸ç®å¯¹è±¡ID', |
| | | `auxiliary_name` varchar(128) DEFAULT NULL COMMENT 'è¾
婿 ¸ç®å¯¹è±¡åç§°', |
| | | `subject_detail` varchar(255) DEFAULT NULL COMMENT 'ç§ç®æç»', |
| | | `create_user` varchar(64) DEFAULT NULL COMMENT 'å建人', |
| | | `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `update_user` varchar(64) DEFAULT NULL COMMENT 'ä¿®æ¹äºº', |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # åè¯åå½ç§ç®æç»å段å端èè°ææ¡£ |
| | | |
| | | > ææ¡£æ¥æï¼2026-06-08 |
| | | > å
³è模åï¼è´¢å¡ç®¡ç - åè¯ / ç§ç®æç»è´¦ |
| | | |
| | | --- |
| | | |
| | | ## 1. åæ´æ¦è¿° |
| | | |
| | | å¨**åè¯åå½**䏿°å¢ `subjectDetail`ï¼ç§ç®æç»ï¼å段ï¼å符串类åï¼ç±ç¨æ·å¨å端è¾å
¥ï¼éåè¯ä¿å/ä¿®æ¹æ¥å£ä¼ å
¥å端ï¼å¹¶å¨ä»¥ä¸åºæ¯åæ¾ï¼ |
| | | |
| | | 1. **åè¯è¯¦æ
** (`GET /financial/voucher/detail/{id}`) |
| | | 2. **ç§ç®æç»è´¦æ¥è¯¢** (`GET /financial/ledger/detail`) |
| | | |
| | | --- |
| | | |
| | | ## 2. æ°æ®åºåæ´ |
| | | |
| | | ### 2.1 æ°å¢å段 |
| | | |
| | | ```sql |
| | | ALTER TABLE fin_voucher_entry |
| | | ADD COLUMN subject_detail VARCHAR(255) DEFAULT NULL COMMENT 'ç§ç®æç»' AFTER auxiliary_name; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## 3. æ¥å£åæ´ |
| | | |
| | | ### 3.1 åè¯æ°å¢ /financial/voucher/add |
| | | |
| | | **Method**: `POST` |
| | | |
| | | **Request Body** 示ä¾ï¼ |
| | | |
| | | ```json |
| | | { |
| | | "voucherNo": "è®°-0001", |
| | | "voucherDate": "2026-06-08", |
| | | "summary": "éè´åææ", |
| | | "creator": "å¼ ä¸", |
| | | "attachmentCount": 0, |
| | | "remark": "", |
| | | "entries": [ |
| | | { |
| | | "subjectCode": "1403", |
| | | "subjectName": "åææ", |
| | | "summary": "éè´Aææ", |
| | | "debit": 5000.00, |
| | | "credit": 0, |
| | | "subjectDetail": "Aææ-è§æ ¼åå·001" |
| | | }, |
| | | { |
| | | "subjectCode": "1002", |
| | | "subjectName": "é¶è¡å款", |
| | | "summary": "æ¯ä»è´§æ¬¾", |
| | | "debit": 0, |
| | | "credit": 5000.00, |
| | | "subjectDetail": "å·¥åé¶è¡-åºæ¬æ·" |
| | | } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | **åæ´è¯´æ**ï¼ |
| | | - `entries` æ°ç»ä¸æ¯æ¡åå½å¯¹è±¡æ°å¢ `subjectDetail` åæ®µï¼å¯éï¼å符串ï¼ã |
| | | - å端å¨åå½è¡ä¸å¢å è¾å
¥æ¡ï¼ä¾ç¨æ·å¡«åç§ç®æç»ã |
| | | |
| | | --- |
| | | |
| | | ### 3.2 åè¯ä¿®æ¹ /financial/voucher/update |
| | | |
| | | **Method**: `PUT` |
| | | |
| | | **Request Body** 示ä¾ï¼ |
| | | |
| | | ```json |
| | | { |
| | | "id": 1, |
| | | "voucherNo": "è®°-0001", |
| | | "voucherDate": "2026-06-08", |
| | | "summary": "éè´åææ", |
| | | "creator": "å¼ ä¸", |
| | | "attachmentCount": 0, |
| | | "remark": "", |
| | | "entries": [ |
| | | { |
| | | "subjectCode": "1403", |
| | | "subjectName": "åææ", |
| | | "summary": "éè´Aææ", |
| | | "debit": 5000.00, |
| | | "credit": 0, |
| | | "subjectDetail": "Aææ-è§æ ¼åå·001" |
| | | }, |
| | | { |
| | | "subjectCode": "1002", |
| | | "subjectName": "é¶è¡å款", |
| | | "summary": "æ¯ä»è´§æ¬¾", |
| | | "debit": 0, |
| | | "credit": 5000.00, |
| | | "subjectDetail": "å·¥åé¶è¡-åºæ¬æ·" |
| | | } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | **åæ´è¯´æ**ï¼ |
| | | - 忰墿¥å£ï¼`entries` 䏿¯æ¡å彿¯æ `subjectDetail`ã |
| | | - ä¿®æ¹æ¶å端éå°åæ `subjectDetail` å¼åæ¾å°è¾å
¥æ¡ä¸ã |
| | | |
| | | --- |
| | | |
| | | ### 3.3 åè¯è¯¦æ
/financial/voucher/detail/{id} |
| | | |
| | | **Method**: `GET` |
| | | |
| | | **Response** 示ä¾ï¼ |
| | | |
| | | ```json |
| | | { |
| | | "code": 200, |
| | | "msg": "æä½æå", |
| | | "data": { |
| | | "id": 1, |
| | | "voucherNo": "è®°-0001", |
| | | "voucherDate": "2026-06-08", |
| | | "summary": "éè´åææ", |
| | | "creator": "å¼ ä¸", |
| | | "status": "unposted", |
| | | "attachmentCount": 0, |
| | | "remark": "", |
| | | "entries": [ |
| | | { |
| | | "id": 1, |
| | | "voucherId": 1, |
| | | "rowNo": 1, |
| | | "subjectCode": "1403", |
| | | "subjectName": "åææ", |
| | | "summary": "éè´Aææ", |
| | | "debit": 5000.00, |
| | | "credit": 0.00, |
| | | "auxiliaryType": null, |
| | | "auxiliaryId": null, |
| | | "auxiliaryName": null, |
| | | "subjectDetail": "Aææ-è§æ ¼åå·001", |
| | | "createUser": "admin", |
| | | "createTime": "2026-06-08T10:00:00", |
| | | "updateUser": "admin", |
| | | "updateTime": "2026-06-08T10:00:00", |
| | | "deptId": 1 |
| | | }, |
| | | { |
| | | "id": 2, |
| | | "voucherId": 1, |
| | | "rowNo": 2, |
| | | "subjectCode": "1002", |
| | | "subjectName": "é¶è¡å款", |
| | | "summary": "æ¯ä»è´§æ¬¾", |
| | | "debit": 0.00, |
| | | "credit": 5000.00, |
| | | "auxiliaryType": null, |
| | | "auxiliaryId": null, |
| | | "auxiliaryName": null, |
| | | "subjectDetail": "å·¥åé¶è¡-åºæ¬æ·", |
| | | "createUser": "admin", |
| | | "createTime": "2026-06-08T10:00:00", |
| | | "updateUser": "admin", |
| | | "updateTime": "2026-06-08T10:00:00", |
| | | "deptId": 1 |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **åæ´è¯´æ**ï¼ |
| | | - `entries` æ°ç»ä¸æ¯æ¡åå½å¯¹è±¡æ°å¢ `subjectDetail` åæ®µã |
| | | - å端å¨è¯¦æ
页åå½å表ä¸å¢å ä¸åæ¾ç¤º `subjectDetail`ã |
| | | |
| | | --- |
| | | |
| | | ### 3.4 ç§ç®æç»è´¦æ¥è¯¢ /financial/ledger/detail |
| | | |
| | | **Method**: `GET` |
| | | |
| | | **Query åæ°**ï¼ |
| | | - `subjectCode`ï¼å¿
å¡«ï¼ |
| | | - `auxiliaryType`ï¼å¯éï¼ |
| | | - `auxiliaryId`ï¼å¯éï¼ |
| | | - `startMonth`ï¼YYYY-MMï¼ |
| | | - `endMonth`ï¼YYYY-MMï¼ |
| | | |
| | | **Response** 示ä¾ï¼ |
| | | |
| | | ```json |
| | | { |
| | | "code": 200, |
| | | "msg": "æä½æå", |
| | | "data": [ |
| | | { |
| | | "rowType": "opening", |
| | | "date": "2026-06-01", |
| | | "voucherNo": "-", |
| | | "summary": "æåä½é¢", |
| | | "debit": 0.00, |
| | | "credit": 0.00, |
| | | "direction": "å", |
| | | "balance": 10000.00 |
| | | }, |
| | | { |
| | | "rowType": "entry", |
| | | "date": "2026-06-08", |
| | | "voucherNo": "è®°-0001", |
| | | "summary": "éè´Aææ", |
| | | "subjectDetail": "Aææ-è§æ ¼åå·001", |
| | | "debit": 5000.00, |
| | | "credit": 0.00, |
| | | "direction": "å", |
| | | "balance": 15000.00 |
| | | }, |
| | | { |
| | | "rowType": "monthly_total", |
| | | "date": "2026-06-30", |
| | | "voucherNo": "-", |
| | | "summary": "æ¬æå计", |
| | | "debit": 5000.00, |
| | | "credit": 0.00, |
| | | "direction": "å", |
| | | "balance": 15000.00 |
| | | }, |
| | | { |
| | | "rowType": "yearly_total", |
| | | "date": "2026-06-30", |
| | | "voucherNo": "-", |
| | | "summary": "å计", |
| | | "debit": 5000.00, |
| | | "credit": 0.00, |
| | | "direction": "å", |
| | | "balance": 15000.00 |
| | | } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | **åæ´è¯´æ**ï¼ |
| | | - å½ `rowType` 为 `entry`ï¼åå½è¡ï¼æ¶ï¼æ°å¢ `subjectDetail` åæ®µè¿åã |
| | | - `opening`ã`monthly_total`ã`yearly_total` è¡ä¸è¿å `subjectDetail`ï¼å段为 `null`ï¼JSON ä¸ä¸æ¾ç¤ºï¼ã |
| | | - å端å¨ç§ç®æç»è´¦è¡¨æ ¼ä¸ï¼åå½è¡å¢å ä¸åæ¾ç¤º `subjectDetail`ã |
| | | |
| | | --- |
| | | |
| | | ## 4. å端修æ¹ç¹æ±æ» |
| | | |
| | | | 页é¢/ç»ä»¶ | ä¿®æ¹å
容 | |
| | | |-----------|----------| |
| | | | åè¯æ°å¢é¡µ | åå½è¡¨æ ¼æ¯è¡å¢å ãç§ç®æç»ãè¾å
¥æ¡ï¼å段å `subjectDetail` | |
| | | | åè¯ä¿®æ¹é¡µ | åä¸ï¼ä¸éä»è¯¦æ
æ¥å£åæ¾ `subjectDetail` å¼ | |
| | | | åè¯è¯¦æ
页 | åå½å表å¢å ãç§ç®æç»ãå±ç¤ºå | |
| | | | ç§ç®æç»è´¦é¡µ | åå½è¡ï¼`rowType=entry`ï¼å¢å ãç§ç®æç»ãå±ç¤ºåï¼æå/å计è¡ä¸æ¾ç¤º | |
| | | |
| | | --- |
| | | |
| | | ## 5. åæ®µè¯´æ |
| | | |
| | | | åæ®µå | ç±»å | å¿
å¡« | 说æ | |
| | | |--------|------|------|------| |
| | | | `subjectDetail` | String | å¦ | ç§ç®æç»ï¼ç¨æ·èªå®ä¹è¾å
¥ï¼æå¤§é¿åº¦ 255 å符 | |
| | | |
| | | --- |
| | | |
| | | ## 6. 注æäºé¡¹ |
| | | |
| | | 1. `subjectDetail` 为å¯éåæ®µï¼ä¸ä¼ æä¼ 空å符串å坿£å¸¸ä¿åã |
| | | 2. åè¯è¿è´¦/ä½åºç¶æä¸å½±å `subjectDetail` ç读åï¼å·²è¿è´¦åè¯ç `subjectDetail` ä»å¯å¨æç»è´¦ä¸æ¥è¯¢ã |
| | | 3. ç§ç®æç»è´¦ä¸ä»
`rowType=entry` çè¡æºå¸¦ `subjectDetail`ï¼å
¶ä½å计/æåè¡ä¸æºå¸¦è¯¥å段ã |
| | |
| | | private BigDecimal credit; |
| | | |
| | | /** |
| | | * ç§ç®æç»ã |
| | | */ |
| | | private String subjectDetail; |
| | | |
| | | /** |
| | | * è¡å·ï¼æåºå段ï¼ã |
| | | */ |
| | | private Integer rowNo; |
| | |
| | | private String summary; |
| | | |
| | | /** |
| | | * ç§ç®æç»ã |
| | | */ |
| | | private String subjectDetail; |
| | | |
| | | /** |
| | | * åæ¹éé¢ã |
| | | */ |
| | | private BigDecimal debit; |
| | |
| | | @ApiModelProperty("è¾
婿 ¸ç®å¯¹è±¡åç§°") |
| | | private String auxiliaryName; |
| | | |
| | | @ApiModelProperty("ç§ç®æç»") |
| | | private String subjectDetail; |
| | | |
| | | @ApiModelProperty("å建人") |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private String createUser; |
| | |
| | | row.setDate(entry.getVoucherDate()); |
| | | row.setVoucherNo(entry.getVoucherNo()); |
| | | row.setSummary(StringUtils.isNotEmpty(entry.getSummary()) ? entry.getSummary() : ""); |
| | | row.setSubjectDetail(entry.getSubjectDetail()); |
| | | row.setDebit(debit); |
| | | row.setCredit(credit); |
| | | row.setBalance(money(runningBalance)); |
| | |
| | | druid: |
| | | # ä¸»åºæ°æ®æº |
| | | master: |
| | | url: jdbc:mysql://localhost:3306/product-inventory-management-new-pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
| | | url: jdbc:mysql://localhost:3306/product-inventory-management-bdpro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
| | | username: root |
| | | password: 123456 |
| | | # ä»åºæ°æ®æº |
| | |
| | | <result column="auxiliary_type" property="auxiliaryType"/> |
| | | <result column="auxiliary_id" property="auxiliaryId"/> |
| | | <result column="auxiliary_name" property="auxiliaryName"/> |
| | | <result column="subject_detail" property="subjectDetail"/> |
| | | <result column="create_user" property="createUser"/> |
| | | <result column="create_time" property="createTime"/> |
| | | <result column="update_user" property="updateUser"/> |
| | |
| | | END AS summary, |
| | | e.debit AS debit, |
| | | e.credit AS credit, |
| | | e.subject_detail AS subjectDetail, |
| | | e.row_no AS rowNo |
| | | FROM fin_voucher_entry e |
| | | INNER JOIN fin_voucher v ON e.voucher_id = v.id |
| | |
| | | END AS summary, |
| | | e.debit AS debit, |
| | | e.credit AS credit, |
| | | e.subject_detail AS subjectDetail, |
| | | e.row_no AS rowNo |
| | | FROM fin_voucher_entry e |
| | | INNER JOIN fin_voucher v ON e.voucher_id = v.id |