contract_invoice.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package fms
  2. import (
  3. "hongze/fms_api/global"
  4. "hongze/fms_api/models/base"
  5. "hongze/fms_api/utils"
  6. "time"
  7. )
  8. // ContractInvoice 合同开票表
  9. type ContractInvoice struct {
  10. ContractInvoiceId int `gorm:"primaryKey;column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"`
  11. ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"`
  12. Amount float64 `gorm:"column:amount" json:"amount" description:"金额"`
  13. InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记"`
  14. InvoiceDate time.Time `gorm:"column:invoice_time" json:"invoice_time" description:"开票日期/到款月"`
  15. AdminId int `gorm:"column:admin_id" json:"admin_id" description:"操作人ID"`
  16. AdminName string `gorm:"column:admin_name" json:"admin_name" description:"操作人姓名"`
  17. Remark string `gorm:"column:remark" json:"remark" description:"备注信息"`
  18. IsDeleted int `gorm:"column:is_deleted" json:"is_deleted" description:"是否已删除: 0-正常; 1-已删除"`
  19. base.TimeBase
  20. }
  21. func (c *ContractInvoice) TableName() string {
  22. return "contract_invoice"
  23. }
  24. // ContractInvoiceItem 合同开票/到款
  25. type ContractInvoiceItem struct {
  26. ContractInvoiceId int `gorm:"column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"`
  27. ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"`
  28. Amount float64 `gorm:"column:amount" json:"amount" description:"金额"`
  29. InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记"`
  30. InvoiceDate string `gorm:"column:invoice_time" json:"invoice_time" description:"开票日期/到款月"`
  31. Remark string `gorm:"column:remark" json:"remark" description:"备注信息"`
  32. CreateTime string `gorm:"column:create_time" json:"create_time" description:"创建时间"`
  33. }
  34. func (c *ContractInvoice) Create() (err error) {
  35. err = global.DEFAULT_MYSQL.Create(c).Error
  36. return
  37. }
  38. func (c *ContractInvoice) AddInBatches(list []*ContractInvoice) (err error) {
  39. err = global.DEFAULT_MYSQL.CreateInBatches(list, len(list)).Error
  40. return
  41. }
  42. func (c *ContractInvoice) Update(updateCols []string) (err error) {
  43. err = global.DEFAULT_MYSQL.Model(c).Select(updateCols).Updates(c).Error
  44. return
  45. }
  46. func (c *ContractInvoice) List(condition string, pars []interface{}) (list []*ContractInvoice, err error) {
  47. list = make([]*ContractInvoice, 0)
  48. err = global.DEFAULT_MYSQL.Model(c).
  49. Where("is_deleted = 0").
  50. Where(condition, pars...).
  51. Find(&list).Error
  52. return
  53. }
  54. func (c *ContractInvoice) PageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractInvoice, err error) {
  55. results = make([]*ContractInvoice, 0)
  56. query := global.DEFAULT_MYSQL.Model(c).
  57. Where("is_deleted = 0").
  58. Where(condition, pars...)
  59. query.Count(&count)
  60. if len(page.GetOrderItemsString()) > 0 {
  61. query = query.Order(page.GetOrderItemsString())
  62. }
  63. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
  64. return
  65. }
  66. // DeleteAndCreateNewInvoice 删除并新增登记
  67. func (c *ContractInvoice) DeleteAndCreateNewInvoice(contractRegisterId, invoiceType int, invoices []*ContractInvoice) (err error) {
  68. tx := global.DEFAULT_MYSQL.Begin()
  69. defer func() {
  70. if err != nil {
  71. tx.Rollback()
  72. } else {
  73. tx.Commit()
  74. }
  75. }()
  76. err = tx.Model(c).
  77. Where("contract_register_id = ? AND invoice_type = ?", contractRegisterId, invoiceType).
  78. UpdateColumn("is_deleted", 1).Error
  79. if err != nil {
  80. return
  81. }
  82. if len(invoices) > 0 {
  83. err = tx.CreateInBatches(invoices, len(invoices)).Error
  84. if err != nil {
  85. return
  86. }
  87. }
  88. return
  89. }
  90. // ContractInvoiceSaveReq 合同开票-请求体
  91. type ContractInvoiceSaveReq struct {
  92. ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
  93. InvoiceType int `json:"invoice_type" binding:"oneof=1 2" description:"类型: 1-开票登记; 2-到款登记"`
  94. AmountList []*ContractInvoiceSaveItem `json:"amount_list"`
  95. }
  96. // ContractInvoiceSaveReq 合同开票数据
  97. type ContractInvoiceSaveItem struct {
  98. InvoiceId int `json:"invoice_id" description:"开票ID"`
  99. Amount float64 `json:"amount" description:"开票金额/到款金额"`
  100. InvoiceDate string `json:"invoice_date" description:"开票日期/到款月"`
  101. }
  102. // GetContractInvoiceItemList 获取开票到款列表
  103. func GetContractInvoiceItemList(condition string, pars []interface{}) (itemList []*ContractInvoiceItem, err error) {
  104. list := make([]*ContractInvoice, 0)
  105. err = global.DEFAULT_MYSQL.Model(ContractInvoice{}).
  106. Where("is_deleted = 0").
  107. Where(condition, pars...).
  108. Order("contract_invoice_id ASC").
  109. Find(&list).Error
  110. if err != nil {
  111. return
  112. }
  113. itemList = formatContractInvoice2ItemList(list)
  114. return
  115. }
  116. // formatContractInvoice2ItemList 格式化ContractInvoice
  117. func formatContractInvoice2ItemList(list []*ContractInvoice) (itemList []*ContractInvoiceItem) {
  118. itemList = make([]*ContractInvoiceItem, 0)
  119. for i := range list {
  120. itemList = append(itemList, &ContractInvoiceItem{
  121. ContractInvoiceId: list[i].ContractInvoiceId,
  122. ContractRegisterId: list[i].ContractRegisterId,
  123. Amount: list[i].Amount,
  124. InvoiceType: list[i].InvoiceType,
  125. InvoiceDate: utils.TimeTransferString(utils.FormatDate, list[i].InvoiceDate),
  126. Remark: list[i].Remark,
  127. CreateTime: utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
  128. })
  129. }
  130. return
  131. }