contract_invoice.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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. ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
  13. Amount float64 `gorm:"column:amount" json:"amount" description:"金额"`
  14. InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记"`
  15. InvoiceDate time.Time `gorm:"column:invoice_time" json:"invoice_time" description:"开票日期/到款月"`
  16. AdminId int `gorm:"column:admin_id" json:"admin_id" description:"操作人ID"`
  17. AdminName string `gorm:"column:admin_name" json:"admin_name" description:"操作人姓名"`
  18. Remark string `gorm:"column:remark" json:"remark" description:"备注信息"`
  19. IsDeleted int `gorm:"column:is_deleted" json:"is_deleted" description:"是否已删除: 0-正常; 1-已删除"`
  20. base.TimeBase
  21. }
  22. func (c *ContractInvoice) TableName() string {
  23. return "contract_invoice"
  24. }
  25. // ContractInvoiceItem 合同开票/到款
  26. type ContractInvoiceItem struct {
  27. ContractInvoiceId int `gorm:"column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"`
  28. ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"`
  29. ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
  30. Amount float64 `gorm:"column:amount" json:"amount" description:"金额"`
  31. InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记"`
  32. InvoiceDate string `gorm:"column:invoice_time" json:"invoice_time" description:"开票日期/到款月"`
  33. Remark string `gorm:"column:remark" json:"remark" description:"备注信息"`
  34. CreateTime string `gorm:"column:create_time" json:"create_time" description:"创建时间"`
  35. }
  36. func (c *ContractInvoice) Create() (err error) {
  37. err = global.DEFAULT_MYSQL.Create(c).Error
  38. return
  39. }
  40. func (c *ContractInvoice) AddInBatches(list []*ContractInvoice) (err error) {
  41. err = global.DEFAULT_MYSQL.CreateInBatches(list, len(list)).Error
  42. return
  43. }
  44. func (c *ContractInvoice) Update(updateCols []string) (err error) {
  45. err = global.DEFAULT_MYSQL.Model(c).Select(updateCols).Updates(c).Error
  46. return
  47. }
  48. func (c *ContractInvoice) List(condition string, pars []interface{}, orderRule string) (list []*ContractInvoice, err error) {
  49. list = make([]*ContractInvoice, 0)
  50. query := global.DEFAULT_MYSQL.Model(c).
  51. Where("is_deleted = 0").
  52. Where(condition, pars...)
  53. if orderRule != "" {
  54. query.Order(orderRule)
  55. } else {
  56. query.Order("contract_invoice_id ASC")
  57. }
  58. err = query.Find(&list).Error
  59. return
  60. }
  61. func (c *ContractInvoice) PageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractInvoice, err error) {
  62. results = make([]*ContractInvoice, 0)
  63. query := global.DEFAULT_MYSQL.Model(c).
  64. Where("is_deleted = 0").
  65. Where(condition, pars...)
  66. query.Count(&count)
  67. if len(page.GetOrderItemsString()) > 0 {
  68. query = query.Order(page.GetOrderItemsString())
  69. }
  70. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
  71. return
  72. }
  73. // DeleteAndCreateNewInvoice 删除并新增登记
  74. func (c *ContractInvoice) DeleteAndCreateNewInvoice(contractRegisterId, invoiceType int, deleteInvoiceIds []int, invoices []*ContractInvoice) (err error) {
  75. tx := global.DEFAULT_MYSQL.Begin()
  76. defer func() {
  77. if err != nil {
  78. tx.Rollback()
  79. } else {
  80. tx.Commit()
  81. }
  82. }()
  83. if len(deleteInvoiceIds) > 0 {
  84. err = tx.Model(c).
  85. Where("contract_register_id = ? AND invoice_type = ? AND contract_invoice_id IN (?)", contractRegisterId, invoiceType, deleteInvoiceIds).
  86. UpdateColumn("is_deleted", 1).Error
  87. if err != nil {
  88. return
  89. }
  90. }
  91. if len(invoices) > 0 {
  92. err = tx.CreateInBatches(invoices, len(invoices)).Error
  93. if err != nil {
  94. return
  95. }
  96. }
  97. return
  98. }
  99. // ContractInvoiceSaveReq 合同开票-请求体
  100. type ContractInvoiceSaveReq struct {
  101. ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
  102. InvoiceType int `json:"invoice_type" binding:"oneof=1 2" description:"类型: 1-开票登记; 2-到款登记"`
  103. AmountList []*ContractInvoiceSaveItem `json:"amount_list"`
  104. }
  105. // ContractInvoiceSaveReq 合同开票数据
  106. type ContractInvoiceSaveItem struct {
  107. InvoiceId int `json:"invoice_id" description:"开票ID"`
  108. Amount float64 `json:"amount" description:"开票金额/到款金额"`
  109. InvoiceDate string `json:"invoice_date" description:"开票日期/到款月"`
  110. }
  111. // GetContractInvoiceItemList 获取开票到款列表
  112. func GetContractInvoiceItemList(condition string, pars []interface{}) (itemList []*ContractInvoiceItem, err error) {
  113. list := make([]*ContractInvoice, 0)
  114. err = global.DEFAULT_MYSQL.Model(ContractInvoice{}).
  115. Where("is_deleted = 0").
  116. Where(condition, pars...).
  117. Order("contract_invoice_id ASC").
  118. Find(&list).Error
  119. if err != nil {
  120. return
  121. }
  122. itemList = formatContractInvoice2ItemList(list)
  123. return
  124. }
  125. // formatContractInvoice2ItemList 格式化ContractInvoice
  126. func formatContractInvoice2ItemList(list []*ContractInvoice) (itemList []*ContractInvoiceItem) {
  127. itemList = make([]*ContractInvoiceItem, 0)
  128. for i := range list {
  129. itemList = append(itemList, &ContractInvoiceItem{
  130. ContractInvoiceId: list[i].ContractInvoiceId,
  131. ContractRegisterId: list[i].ContractRegisterId,
  132. ContractCode: list[i].ContractCode,
  133. Amount: list[i].Amount,
  134. InvoiceType: list[i].InvoiceType,
  135. InvoiceDate: utils.TimeTransferString(utils.FormatDate, list[i].InvoiceDate),
  136. Remark: list[i].Remark,
  137. CreateTime: utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
  138. })
  139. }
  140. return
  141. }
  142. // ContractInvoiceListReq 合同开票/到款登记列表请求体
  143. type ContractInvoiceListReq struct {
  144. InvoiceType int `json:"invoice_type" form:"invoice_type" binding:"oneof=1 2" description:"类型: 1-开票登记; 2-到款登记"`
  145. ContractCode string `json:"contract_code" form:"contract_code" binding:"omitempty" description:"合同编号"`
  146. StartDate string `json:"start_date" form:"start_date" binding:"omitempty,datetime=2006-01-02" description:"开始日期"`
  147. EndDate string `json:"end_date" form:"end_date" binding:"omitempty,datetime=2006-01-02" description:"结束日期"`
  148. MinAmount float64 `json:"min_amount" form:"min_amount" description:"开票金额区间-最小值"`
  149. MaxAmount float64 `json:"max_amount" form:"max_amount" description:"开票金额区间-最大值"`
  150. base.PageReq
  151. }
  152. // GetContractInvoiceItemPageList 获取合同开票/到款列表-分页
  153. func GetContractInvoiceItemPageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractInvoiceItem, err error) {
  154. list := make([]*ContractInvoice, 0)
  155. query := global.DEFAULT_MYSQL.Table("contract_invoice").
  156. Where("is_deleted = 0").
  157. Where(condition, pars...)
  158. query.Count(&count)
  159. if len(page.GetOrderItemsString()) > 0 {
  160. query = query.Order(page.GetOrderItemsString())
  161. }
  162. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&list).Error
  163. if err != nil {
  164. return
  165. }
  166. for i := range list {
  167. results = append(results, formatContractInvoice2Item(list[i]))
  168. }
  169. return
  170. }
  171. // formatContractInvoice2Item 格式化ContractInvoiceItem
  172. func formatContractInvoice2Item(item *ContractInvoice) (formatItem *ContractInvoiceItem) {
  173. formatItem = new(ContractInvoiceItem)
  174. formatItem.ContractInvoiceId = item.ContractInvoiceId
  175. formatItem.ContractRegisterId = item.ContractRegisterId
  176. formatItem.ContractCode = item.ContractCode
  177. formatItem.Amount = item.Amount
  178. formatItem.InvoiceType = item.InvoiceType
  179. formatItem.InvoiceDate = utils.TimeTransferString(utils.FormatDate, item.InvoiceDate)
  180. formatItem.Remark = item.Remark
  181. formatItem.CreateTime = utils.TimeTransferString(utils.FormatDateTime, item.CreateTime)
  182. return
  183. }