SNAPSHOT W7 已部署稳定态 — 凯迪ERP+OA一体化平台 (MET 73.3%)

恢复点(restore point)。别人改崩后可 git reset --hard 回到此提交。

== 此快照内容 ==
- 后端 oa-backend: 734 控制器 / 711 实体 (Spring Boot 3.2.5 + SQLite, 端口8091)
- 前端 modern-ui/app: Vue3+Vite, 约700页 (构建产物已在 oa-backend/src/main/resources/static)
- 数据库 oa-backend/data/oa.db: 含全部演示数据 (强制入库, 6.6MB)
- 交接文档 go.md + go-code-reference/endpoints/entities/database.md
- 多代理建设脚本 .claude/wf-*.js

== 状态 ==
- 对 凯迪科技ERP_20260507.xlsx 合规 MET ~73.3% (PARTIAL 75: 34可建+6种子/bug+35外部硬天花板)
- 安全: 5轮红队+5轮复检, default-deny分级鉴权, 连续零可利用
- W3~W7 累计补完436缺口; W8末轮(40缺口)为半成品(源码树可编译但未集成)
- 运行: cd oa-backend; java -jar build/libs/oa-backend-0.1.0.jar --server.port=8091; admin/123456

== 排除(gitignore, 可再生) ==
node_modules / oa-backend/build / .jdks / *.log / Backup-ERP-* / 弃用的OFBiz核心(只保留modern-ui)
完整文件夹备份见同目录 Backup-ERP-20260615-191517/ (含上述全部, 仅缺 node_modules)

时间戳: 20260615-191517

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Qiufeng
2026-06-15 19:19:15 +08:00
co-authored by Claude Opus 4.8
commit 5e51dc3f56
10584 changed files with 2501339 additions and 0 deletions
@@ -0,0 +1,204 @@
package com.kaidi.oa.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.math.BigDecimal;
import java.time.Instant;
/**
* 融资业务主记录(金融办·融资管理)。一条 Financing 代表一笔对外融资/授信:
* financingType 为 银行贷款 / 融资租赁 / 债券 / 票据 / 股权融资 之一;
* repayMethod 为 等额本息 / 等额本金 / 到期一次还本付息 / 按期付息到期还本 之一;
* status 流转 申请中 → 审批中 → 已放款 → 还款中 → 已结清,异常态 逾期 / 已驳回。
* creditLimit 为授信额度,amount 为本笔融资本金(提款金额),rate 为年化利率(%)。
* 还本付息计划由 {@link RepaymentPlan} 按本记录的 repayMethod / term / rate 自动生成。
*/
@Entity
@Table(name = "financing")
public class Financing {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String code;
/** 资金方 / 出借机构(银行 / 租赁公司 / 投资方)。 */
private String lender;
/** 融资类型:银行贷款 / 融资租赁 / 债券 / 票据 / 股权融资。 */
private String financingType;
/** 授信额度。 */
private BigDecimal creditLimit = BigDecimal.ZERO;
/** 本笔融资本金(提款金额)。 */
private BigDecimal amount = BigDecimal.ZERO;
private String currency;
/** 年化利率(百分比,如 4.35 表示 4.35%)。 */
private Double rate;
private String startDate;
/** 到期日(用于到期分级预警)。 */
private String endDate;
/** 期限(月)。 */
private Integer termMonths;
/** 还款方式:等额本息 / 等额本金 / 到期一次还本付息 / 按期付息到期还本。 */
private String repayMethod;
/** 申请中 / 审批中 / 已放款 / 还款中 / 已结清 / 逾期 / 已驳回。 */
private String status;
private String companySubject;
private String purpose;
private String owner;
private Instant createdAt;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getLender() {
return lender;
}
public void setLender(String lender) {
this.lender = lender;
}
public String getFinancingType() {
return financingType;
}
public void setFinancingType(String financingType) {
this.financingType = financingType;
}
public BigDecimal getCreditLimit() {
return creditLimit;
}
public void setCreditLimit(BigDecimal creditLimit) {
this.creditLimit = creditLimit;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public Double getRate() {
return rate;
}
public void setRate(Double rate) {
this.rate = rate;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public Integer getTermMonths() {
return termMonths;
}
public void setTermMonths(Integer termMonths) {
this.termMonths = termMonths;
}
public String getRepayMethod() {
return repayMethod;
}
public void setRepayMethod(String repayMethod) {
this.repayMethod = repayMethod;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCompanySubject() {
return companySubject;
}
public void setCompanySubject(String companySubject) {
this.companySubject = companySubject;
}
public String getPurpose() {
return purpose;
}
public void setPurpose(String purpose) {
this.purpose = purpose;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public Instant getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Instant createdAt) {
this.createdAt = createdAt;
}
}