This commit is contained in:
2026-05-01 15:35:48 +08:00
parent 354856360b
commit 27f0e47162
4 changed files with 102 additions and 23 deletions

View File

@@ -64,8 +64,22 @@ func (c *ContractInfo) BeforeCreate(tx *gorm.DB) error {
// ================ 工厂方法 ================
// NewContractInfo 创建新的合同信息
// NewContractInfo 创建新的合同信息(自动生成合同编号)
func NewContractInfo(enterpriseInfoID, userID, contractName string, contractType ContractType, contractFileID, contractFileURL string) (*ContractInfo, error) {
contractCode := GenerateContractCode(contractType)
return newContractInfo(enterpriseInfoID, userID, contractName, contractType, contractFileID, contractFileURL, contractCode)
}
// NewContractInfoWithCode 创建新的合同信息(使用指定的合同编号)
func NewContractInfoWithCode(enterpriseInfoID, userID, contractName string, contractType ContractType, contractFileID, contractFileURL, contractCode string) (*ContractInfo, error) {
if contractCode == "" {
return nil, fmt.Errorf("合同编号不能为空")
}
return newContractInfo(enterpriseInfoID, userID, contractName, contractType, contractFileID, contractFileURL, contractCode)
}
// newContractInfo 创建合同信息的内部实现
func newContractInfo(enterpriseInfoID, userID, contractName string, contractType ContractType, contractFileID, contractFileURL, contractCode string) (*ContractInfo, error) {
if enterpriseInfoID == "" {
return nil, fmt.Errorf("企业信息ID不能为空")
}
@@ -90,9 +104,6 @@ func NewContractInfo(enterpriseInfoID, userID, contractName string, contractType
return nil, fmt.Errorf("无效的合同类型: %s", contractType)
}
// 生成合同编码
contractCode := GenerateContractCode(contractType)
contractInfo := &ContractInfo{
ID: uuid.New().String(),
EnterpriseInfoID: enterpriseInfoID,
@@ -338,22 +349,24 @@ type ContractInfoDeletedEvent struct {
}
// GenerateContractCode 生成合同编码
// 格式HYDATA-YYYYMMDD-R{6位随机数}R=入驻)
func GenerateContractCode(contractType ContractType) string {
prefix := "CON"
now := time.Now()
dateStr := now.Format("20060102")
prefix := "R"
switch contractType {
case ContractTypeCooperation:
prefix += "01"
prefix = "R" // 入驻
case ContractTypeReSign:
prefix += "02"
prefix = "B" // 补签
}
// 获取当前日期格式为YYYYMMDD
now := time.Now()
dateStr := now.Format("20060102") // YYYYMMDD格式
// 生成一个随机的6位数字
randNum := fmt.Sprintf("%06d", rand.Intn(1000000))
// 格式CON + 类型标识 + YYYYMMDD + 6位随机数
return fmt.Sprintf("%s%s%s", prefix, dateStr, randNum)
return fmt.Sprintf("HYDATA-%s-%s%s", dateStr, prefix, randNum)
}
// GenerateContractCodeWithPrefix 使用指定前缀生成合同编码
func GenerateContractCodeWithPrefix(contractType ContractType) string {
return GenerateContractCode(contractType)
}