invoice_payment_summary.go 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package fms
  2. import (
  3. "fmt"
  4. "hongze/fms_api/global"
  5. "hongze/fms_api/models/base"
  6. "strings"
  7. "time"
  8. )
  9. // InvoicePaymentSummary 开票到款汇总表
  10. type InvoicePaymentSummary struct {
  11. Id int `gorm:"primaryKey;column:id" json:"id" description:"汇总ID"`
  12. RegisterId int `gorm:"column:register_id" json:"register_id" description:"登记ID"`
  13. InvoiceId int `gorm:"column:invoice_id" json:"invoice_id" description:"开票ID"`
  14. PaymentId int `gorm:"column:payment_id" json:"payment_id" description:"到款ID"`
  15. ServiceProductId int `gorm:"column:service_product_id" json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
  16. base.TimeBase
  17. }
  18. func (c *InvoicePaymentSummary) TableName() string {
  19. return "invoice_payment_summary"
  20. }
  21. func (c *InvoicePaymentSummary) Create() (err error) {
  22. err = global.DEFAULT_MYSQL.Create(c).Error
  23. return
  24. }
  25. // DeleteAndCreate 删除并新增汇总
  26. func (c *InvoicePaymentSummary) DeleteAndCreate(registerId int, summaryList []*InvoicePaymentSummary) (err error) {
  27. tx := global.DEFAULT_MYSQL.Begin()
  28. defer func() {
  29. if err != nil {
  30. tx.Rollback()
  31. } else {
  32. tx.Commit()
  33. }
  34. }()
  35. sql := `DELETE FROM invoice_payment_summary WHERE register_id = ?`
  36. tx.Exec(sql, registerId)
  37. if len(summaryList) > 0 {
  38. err = tx.CreateInBatches(summaryList, len(summaryList)).Error
  39. if err != nil {
  40. return
  41. }
  42. }
  43. return
  44. }
  45. type ContractRegisterSummary struct {
  46. SummaryId int `json:"summary_id" description:"汇总ID"`
  47. ContractRegister
  48. }
  49. // GetInvoicePaymentCensusPageList 获取商品到款统计列表-总数
  50. func GetInvoicePaymentCensusPageList(page base.IPage, condition string, pars []interface{}) (results []*ContractRegisterSummary, count int64, err error) {
  51. query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
  52. Select("b.*, a.id as summary_id, IF(a.invoice_id >0, 1,0) as sort_invoice_id, IF(a.payment_id >0, 1,0) as sort_payment_id").
  53. Joins("JOIN contract_register AS b ON a.register_id = b.contract_register_id AND b.is_deleted = 0").
  54. Joins("LEFT JOIN contract_invoice AS c ON a.invoice_id = c.contract_invoice_id AND c.is_deleted = 0").
  55. Joins("LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0").
  56. Where(condition, pars...)
  57. query.Count(&count)
  58. if len(page.GetOrderItemsString()) > 0 {
  59. query = query.Order(page.GetOrderItemsString())
  60. }
  61. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
  62. if err != nil {
  63. return
  64. }
  65. return
  66. }
  67. type InvoicePaymentSummaryItem struct {
  68. SummaryId int `json:"summary_id" description:"汇总ID"`
  69. RegisterId int `json:"register_id" description:"登记ID"`
  70. CompanyName string `json:"company_name" description:"客户名称"`
  71. NewCompany int `json:"new_company" description:"是否为新客户: 0-否; 1-是"`
  72. StartDate time.Time `json:"start_date" description:"合同开始日期"`
  73. EndDate time.Time `json:"end_date" description:"合同结束日期"`
  74. InvoiceId int `json:"invoice_id" description:"开票ID"`
  75. InvoiceDate time.Time `json:"invoice_time" description:"开票日期"`
  76. InvoiceAmount float64 `json:"invoice_amount" description:"开票金额"`
  77. SellerId int `json:"seller_id" description:"销售ID"`
  78. SellerName string `json:"seller_name" description:"销售名称"`
  79. SellerGroupId int `json:"seller_group_id" description:"销售组别ID"`
  80. SellerGroupName string `json:"seller_group_name" description:"销售组别名称"`
  81. PaymentId int `json:"payment_id" description:"到款ID"`
  82. PaymentDate time.Time `json:"payment_date" description:"到款日期"`
  83. PaymentAmount float64 `json:"payment_amount" description:"到款金额"`
  84. PayType int `json:"pay_type" description:"付款方式:0-无;1-年付;2-半年付;3-季付;4-次付;5-异常"`
  85. ServiceProductId int `json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
  86. }
  87. // GetInvoicePaymentCensusSummaryData 获取商品到款统计列表-汇总数据
  88. func GetInvoicePaymentCensusSummaryData(condition string, pars []interface{}) (results []*InvoicePaymentSummaryItem, err error) {
  89. fields := []string{"a.id AS summary_id", "a.register_id", "a.invoice_id", "a.payment_id", "a.service_product_id", "b.company_name", "b.start_date", "b.end_date",
  90. "c.origin_amount AS invoice_amount", "c.invoice_time AS invoice_date", "IF(c.seller_id > 0, c.seller_id, d.seller_id) AS seller_id", "IF(c.seller_name = '' OR c.seller_name IS NULL, d.seller_name, c.seller_name) AS seller_name", "IF(c.seller_group_id > 0,c.seller_group_id,d.seller_group_id) AS seller_group_id",
  91. "IF(c.seller_group_name = '' OR c.seller_group_name IS NULL, d.seller_group_name, c.seller_group_name) AS seller_group_name", "d.origin_amount AS payment_amount", "d.invoice_time AS payment_date", "d.pay_type",
  92. }
  93. query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
  94. Select(strings.Join(fields, ",")).
  95. Joins("JOIN contract_register AS b ON a.register_id = b.contract_register_id AND b.is_deleted = 0").
  96. Joins("LEFT JOIN contract_invoice AS c ON a.invoice_id = c.contract_invoice_id AND c.is_deleted = 0").
  97. Joins("LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0").
  98. Where(condition, pars...)
  99. query.Find(&results)
  100. return
  101. }
  102. // GetInvoicePaymentCensusSummaryDataIds 获取商品到款统计列表-汇总数据IDs
  103. func GetInvoicePaymentCensusSummaryDataIds(condition string, pars []interface{}) (summaryIds []int, err error) {
  104. query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
  105. Select("a.id AS summary_id").
  106. Joins("JOIN contract_register AS b ON a.register_id = b.contract_register_id AND b.is_deleted = 0").
  107. Joins("LEFT JOIN contract_invoice AS c ON a.invoice_id = c.contract_invoice_id AND c.is_deleted = 0").
  108. Joins("LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0").
  109. Where(condition, pars...)
  110. query.Find(&summaryIds)
  111. return
  112. }
  113. // GetContractSummaryInvoicePaymentAmountTotal 获取汇总金额合计信息
  114. func GetContractSummaryInvoicePaymentAmountTotal(condition string, pars []interface{}, amountType int) (amountTotal float64, err error) {
  115. joinCond := `a.invoice_id = b.contract_invoice_id`
  116. if amountType == 2 {
  117. joinCond = `a.payment_id = b.contract_invoice_id`
  118. }
  119. query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
  120. Select("IFNULL(SUM(b.amount),0)").
  121. Joins(fmt.Sprintf("JOIN contract_invoice AS b ON %s AND b.is_deleted = 0", joinCond)).
  122. Where(condition, pars...)
  123. err = query.Find(&amountTotal).Error
  124. return
  125. }
  126. // GetSummaryListCurrencySum 获取汇总分货币合计
  127. func GetSummaryListCurrencySum(condition string, pars []interface{}, amountType int) (results []*InvoiceListCurrencySum, err error) {
  128. joinCond := `a.invoice_id = b.contract_invoice_id`
  129. if amountType == 2 {
  130. joinCond = `a.payment_id = b.contract_invoice_id`
  131. }
  132. query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
  133. Select("b.currency_unit, b.invoice_type, SUM(b.amount) AS amount_total, SUM(b.origin_amount) AS origin_amount_total").
  134. Joins(fmt.Sprintf("JOIN contract_invoice AS b ON %s AND b.is_deleted = 0", joinCond)).
  135. Where(condition, pars...).
  136. Group("b.currency_unit")
  137. err = query.Find(&results).Error
  138. return
  139. }
  140. // DeleteInvoicePaymentSummaryByRegisterId 根据合同登记ID删除汇总数据
  141. func DeleteInvoicePaymentSummaryByRegisterId(registerId int) (err error) {
  142. sql := `DELETE FROM invoice_payment_summary WHERE register_id = ?`
  143. err = global.DEFAULT_MYSQL.Exec(sql, registerId).Error
  144. return
  145. }
  146. // DeleteInvoicePaymentSummaryByInvoiceIdAndPaymentId 根据开票到款ID删除汇总数据
  147. func DeleteInvoicePaymentSummaryByInvoiceIdAndPaymentId(invoiceId, arriveId, registerId int) (err error) {
  148. sql := `DELETE FROM invoice_payment_summary WHERE invoice_id = ? AND payment_id = ? AND register_id = ?`
  149. err = global.DEFAULT_MYSQL.Exec(sql, invoiceId, arriveId, registerId).Error
  150. return
  151. }
  152. // GetContractSummaryInvoicePaymentAmount 获取汇总金额合计信息
  153. func GetContractSummaryInvoicePaymentAmount(condition string, pars []interface{}) (amountTotal float64, err error) {
  154. joinCond := ` (a.invoice_id = b.contract_invoice_id OR a.payment_id = b.contract_invoice_id) `
  155. query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
  156. Select("b.amount").
  157. Joins(fmt.Sprintf(" JOIN contract_invoice AS b ON %s AND b.is_deleted = 0 ", joinCond)).
  158. Where(condition, pars...).Group("id")
  159. nq := global.DEFAULT_MYSQL.Table("(?) AS e", query).
  160. Select(" IFNULL( SUM( e.amount ), 0 ) ")
  161. err = nq.Find(&amountTotal).Error
  162. return
  163. }
  164. // GetInvoicePaymentSummaryByRegisterIdAndInvoiceId 根据合同登记ID和开票ID获取汇总数据
  165. func GetInvoicePaymentSummaryByRegisterIdAndInvoiceId(registerId,invocieId int) (results []*ContractRegisterSummary, err error) {
  166. sql := `SELECT * FROM invoice_payment_summary WHERE register_id = ? AND invoice_id= ? `
  167. err = global.DEFAULT_MYSQL.Exec(sql, registerId, invocieId).Find(&results).Error
  168. return
  169. }