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"` ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"` 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"` ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"` 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{}, orderRule string) (list []*ContractInvoice, err error) { list = make([]*ContractInvoice, 0) query := global.DEFAULT_MYSQL.Model(c). Where("is_deleted = 0"). Where(condition, pars...) if orderRule != "" { query.Order(orderRule) } else { query.Order("contract_invoice_id ASC") } err = query.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, deleteInvoiceIds []int, invoices []*ContractInvoice) (err error) { tx := global.DEFAULT_MYSQL.Begin() defer func() { if err != nil { tx.Rollback() } else { tx.Commit() } }() if len(deleteInvoiceIds) > 0 { err = tx.Model(c). Where("contract_register_id = ? AND invoice_type = ? AND contract_invoice_id IN (?)", contractRegisterId, invoiceType, deleteInvoiceIds). 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, ContractCode: list[i].ContractCode, 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 } // ContractInvoiceListReq 合同开票/到款登记列表请求体 type ContractInvoiceListReq struct { InvoiceType int `json:"invoice_type" form:"invoice_type" binding:"oneof=1 2" description:"类型: 1-开票登记; 2-到款登记"` ContractCode string `json:"contract_code" form:"contract_code" binding:"omitempty" description:"合同编号"` StartDate string `json:"start_date" form:"start_date" binding:"omitempty,datetime=2006-01-02" description:"开始日期"` EndDate string `json:"end_date" form:"end_date" binding:"omitempty,datetime=2006-01-02" description:"结束日期"` MinAmount float64 `json:"min_amount" form:"min_amount" description:"开票金额区间-最小值"` MaxAmount float64 `json:"max_amount" form:"max_amount" description:"开票金额区间-最大值"` base.PageReq } // GetContractInvoiceItemPageList 获取合同开票/到款列表-分页 func GetContractInvoiceItemPageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractInvoiceItem, err error) { list := make([]*ContractInvoice, 0) query := global.DEFAULT_MYSQL.Table("contract_invoice"). 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(&list).Error if err != nil { return } for i := range list { results = append(results, formatContractInvoice2Item(list[i])) } return } // formatContractInvoice2Item 格式化ContractInvoiceItem func formatContractInvoice2Item(item *ContractInvoice) (formatItem *ContractInvoiceItem) { formatItem = new(ContractInvoiceItem) formatItem.ContractInvoiceId = item.ContractInvoiceId formatItem.ContractRegisterId = item.ContractRegisterId formatItem.ContractCode = item.ContractCode formatItem.Amount = item.Amount formatItem.InvoiceType = item.InvoiceType formatItem.InvoiceDate = utils.TimeTransferString(utils.FormatDate, item.InvoiceDate) formatItem.Remark = item.Remark formatItem.CreateTime = utils.TimeTransferString(utils.FormatDateTime, item.CreateTime) return }