contract_invoice.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. Order("contract_invoice_id ASC").
  52. Find(&list).Error
  53. return
  54. }
  55. func (c *ContractInvoice) PageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractInvoice, err error) {
  56. results = make([]*ContractInvoice, 0)
  57. query := global.DEFAULT_MYSQL.Model(c).
  58. Where("is_deleted = 0").
  59. Where(condition, pars...)
  60. query.Count(&count)
  61. if len(page.GetOrderItemsString()) > 0 {
  62. query = query.Order(page.GetOrderItemsString())
  63. }
  64. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
  65. return
  66. }
  67. // DeleteAndCreateNewInvoice 删除并新增登记
  68. func (c *ContractInvoice) DeleteAndCreateNewInvoice(contractRegisterId, invoiceType int, invoices []*ContractInvoice) (err error) {
  69. tx := global.DEFAULT_MYSQL.Begin()
  70. defer func() {
  71. if err != nil {
  72. tx.Rollback()
  73. } else {
  74. tx.Commit()
  75. }
  76. }()
  77. err = tx.Model(c).
  78. Where("contract_register_id = ? AND invoice_type = ?", contractRegisterId, invoiceType).
  79. UpdateColumn("is_deleted", 1).Error
  80. if err != nil {
  81. return
  82. }
  83. if len(invoices) > 0 {
  84. err = tx.CreateInBatches(invoices, len(invoices)).Error
  85. if err != nil {
  86. return
  87. }
  88. }
  89. return
  90. }
  91. // ContractInvoiceSaveReq 合同开票-请求体
  92. type ContractInvoiceSaveReq struct {
  93. ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
  94. InvoiceType int `json:"invoice_type" binding:"oneof=1 2" description:"类型: 1-开票登记; 2-到款登记"`
  95. AmountList []*ContractInvoiceSaveItem `json:"amount_list"`
  96. }
  97. // ContractInvoiceSaveReq 合同开票数据
  98. type ContractInvoiceSaveItem struct {
  99. InvoiceId int `json:"invoice_id" description:"开票ID"`
  100. Amount float64 `json:"amount" description:"开票金额/到款金额"`
  101. InvoiceDate string `json:"invoice_date" description:"开票日期/到款月"`
  102. }
  103. // GetContractInvoiceItemList 获取开票到款列表
  104. func GetContractInvoiceItemList(condition string, pars []interface{}) (itemList []*ContractInvoiceItem, err error) {
  105. list := make([]*ContractInvoice, 0)
  106. err = global.DEFAULT_MYSQL.Model(ContractInvoice{}).
  107. Where("is_deleted = 0").
  108. Where(condition, pars...).
  109. Order("contract_invoice_id ASC").
  110. Find(&list).Error
  111. if err != nil {
  112. return
  113. }
  114. itemList = formatContractInvoice2ItemList(list)
  115. return
  116. }
  117. // formatContractInvoice2ItemList 格式化ContractInvoice
  118. func formatContractInvoice2ItemList(list []*ContractInvoice) (itemList []*ContractInvoiceItem) {
  119. itemList = make([]*ContractInvoiceItem, 0)
  120. for i := range list {
  121. d := utils.TimeTransferString(utils.FormatDate, list[i].InvoiceDate)
  122. if list[i].InvoiceType == ContractInvoiceTypePay {
  123. d = utils.TimeTransferString(utils.FormatMonth, list[i].InvoiceDate)
  124. }
  125. itemList = append(itemList, &ContractInvoiceItem{
  126. ContractInvoiceId: list[i].ContractInvoiceId,
  127. ContractRegisterId: list[i].ContractRegisterId,
  128. Amount: list[i].Amount,
  129. InvoiceType: list[i].InvoiceType,
  130. InvoiceDate: d,
  131. Remark: list[i].Remark,
  132. CreateTime: utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
  133. })
  134. }
  135. return
  136. }