package fms import ( "hongze/fms_api/global" "hongze/fms_api/models/base" "hongze/fms_api/utils" "time" ) // ContractInvoice 合同开票表 type ContractInvoice struct { ContractInvoiceId int `gorm:"primaryKey;column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"` ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"` Amount float64 `gorm:"column:amount" json:"amount" description:"金额"` InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记"` InvoiceDate time.Time `gorm:"column:invoice_time" json:"invoice_time" description:"开票日期/到款月"` AdminId int `gorm:"column:admin_id" json:"admin_id" description:"操作人ID"` AdminName string `gorm:"column:admin_name" json:"admin_name" description:"操作人姓名"` Remark string `gorm:"column:remark" json:"remark" description:"备注信息"` IsDeleted int `gorm:"column:is_deleted" json:"is_deleted" description:"是否已删除: 0-正常; 1-已删除"` base.TimeBase } func (c *ContractInvoice) TableName() string { return "contract_invoice" } // ContractInvoiceItem 合同开票/到款 type ContractInvoiceItem struct { ContractInvoiceId int `gorm:"column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"` ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"` Amount float64 `gorm:"column:amount" json:"amount" description:"金额"` InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记"` InvoiceDate string `gorm:"column:invoice_time" json:"invoice_time" description:"开票日期/到款月"` Remark string `gorm:"column:remark" json:"remark" description:"备注信息"` CreateTime string `gorm:"column:create_time" json:"create_time" description:"创建时间"` } func (c *ContractInvoice) Create() (err error) { err = global.DEFAULT_MYSQL.Create(c).Error return } func (c *ContractInvoice) AddInBatches(list []*ContractInvoice) (err error) { err = global.DEFAULT_MYSQL.CreateInBatches(list, len(list)).Error return } func (c *ContractInvoice) Update(updateCols []string) (err error) { err = global.DEFAULT_MYSQL.Model(c).Select(updateCols).Updates(c).Error return } func (c *ContractInvoice) List(condition string, pars []interface{}) (list []*ContractInvoice, err error) { list = make([]*ContractInvoice, 0) err = global.DEFAULT_MYSQL.Model(c). Where("is_deleted = 0"). Where(condition, pars...). Order("contract_invoice_id ASC"). Find(&list).Error return } func (c *ContractInvoice) PageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractInvoice, err error) { results = make([]*ContractInvoice, 0) query := global.DEFAULT_MYSQL.Model(c). Where("is_deleted = 0"). Where(condition, pars...) query.Count(&count) if len(page.GetOrderItemsString()) > 0 { query = query.Order(page.GetOrderItemsString()) } err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error return } // DeleteAndCreateNewInvoice 删除并新增登记 func (c *ContractInvoice) DeleteAndCreateNewInvoice(contractRegisterId, invoiceType int, invoices []*ContractInvoice) (err error) { tx := global.DEFAULT_MYSQL.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() err = tx.Model(c). Where("contract_register_id = ? AND invoice_type = ?", contractRegisterId, invoiceType). UpdateColumn("is_deleted", 1).Error if err != nil { return } if len(invoices) > 0 { err = tx.CreateInBatches(invoices, len(invoices)).Error if err != nil { return } } return } // ContractInvoiceSaveReq 合同开票-请求体 type ContractInvoiceSaveReq struct { ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"` InvoiceType int `json:"invoice_type" binding:"oneof=1 2" description:"类型: 1-开票登记; 2-到款登记"` AmountList []*ContractInvoiceSaveItem `json:"amount_list"` } // ContractInvoiceSaveReq 合同开票数据 type ContractInvoiceSaveItem struct { InvoiceId int `json:"invoice_id" description:"开票ID"` Amount float64 `json:"amount" description:"开票金额/到款金额"` InvoiceDate string `json:"invoice_date" description:"开票日期/到款月"` } // GetContractInvoiceItemList 获取开票到款列表 func GetContractInvoiceItemList(condition string, pars []interface{}) (itemList []*ContractInvoiceItem, err error) { list := make([]*ContractInvoice, 0) err = global.DEFAULT_MYSQL.Model(ContractInvoice{}). Where("is_deleted = 0"). Where(condition, pars...). Order("contract_invoice_id ASC"). Find(&list).Error if err != nil { return } itemList = formatContractInvoice2ItemList(list) return } // formatContractInvoice2ItemList 格式化ContractInvoice func formatContractInvoice2ItemList(list []*ContractInvoice) (itemList []*ContractInvoiceItem) { itemList = make([]*ContractInvoiceItem, 0) for i := range list { itemList = append(itemList, &ContractInvoiceItem{ ContractInvoiceId: list[i].ContractInvoiceId, ContractRegisterId: list[i].ContractRegisterId, Amount: list[i].Amount, InvoiceType: list[i].InvoiceType, InvoiceDate: utils.TimeTransferString(utils.FormatDate, list[i].InvoiceDate), Remark: list[i].Remark, CreateTime: utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime), }) } return }