contract_invoice.go 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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) Sum(field, condition string, pars []interface{}) (total float64, err error) {
  49. totalList := make([]float64, 0)
  50. err = global.DEFAULT_MYSQL.Model(c).
  51. Where("is_deleted = 0").
  52. Where(condition, pars...).
  53. Pluck(field, &totalList).Error
  54. for i := range totalList {
  55. total += totalList[i]
  56. }
  57. return
  58. }
  59. func (c *ContractInvoice) List(condition string, pars []interface{}, orderRule string) (list []*ContractInvoice, err error) {
  60. list = make([]*ContractInvoice, 0)
  61. query := global.DEFAULT_MYSQL.Model(c).
  62. Where("is_deleted = 0").
  63. Where(condition, pars...)
  64. if orderRule != "" {
  65. query.Order(orderRule)
  66. } else {
  67. query.Order("contract_invoice_id ASC")
  68. }
  69. err = query.Find(&list).Error
  70. return
  71. }
  72. func (c *ContractInvoice) PageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractInvoice, err error) {
  73. results = make([]*ContractInvoice, 0)
  74. query := global.DEFAULT_MYSQL.Model(c).
  75. Where("is_deleted = 0").
  76. Where(condition, pars...)
  77. query.Count(&count)
  78. if len(page.GetOrderItemsString()) > 0 {
  79. query = query.Order(page.GetOrderItemsString())
  80. }
  81. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
  82. return
  83. }
  84. // DeleteAndCreateNewInvoice 删除并新增登记
  85. func (c *ContractInvoice) DeleteAndCreateNewInvoice(contractRegisterId, invoiceType int, deleteInvoiceIds []int, invoices []*ContractInvoice) (err error) {
  86. tx := global.DEFAULT_MYSQL.Begin()
  87. defer func() {
  88. if err != nil {
  89. tx.Rollback()
  90. } else {
  91. tx.Commit()
  92. }
  93. }()
  94. if len(deleteInvoiceIds) > 0 {
  95. err = tx.Model(c).
  96. Where("contract_register_id = ? AND invoice_type = ? AND contract_invoice_id IN (?)", contractRegisterId, invoiceType, deleteInvoiceIds).
  97. UpdateColumn("is_deleted", 1).Error
  98. if err != nil {
  99. return
  100. }
  101. }
  102. if len(invoices) > 0 {
  103. err = tx.CreateInBatches(invoices, len(invoices)).Error
  104. if err != nil {
  105. return
  106. }
  107. }
  108. return
  109. }
  110. // ContractInvoiceSaveReq 合同开票-请求体
  111. type ContractInvoiceSaveReq struct {
  112. ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
  113. InvoiceType int `json:"invoice_type" binding:"oneof=1 2" description:"类型: 1-开票登记; 2-到款登记"`
  114. AmountList []*ContractInvoiceSaveItem `json:"amount_list"`
  115. }
  116. // ContractInvoiceSaveReq 合同开票数据
  117. type ContractInvoiceSaveItem struct {
  118. InvoiceId int `json:"invoice_id" description:"开票ID"`
  119. Amount float64 `json:"amount" description:"开票金额/到款金额"`
  120. InvoiceDate string `json:"invoice_date" description:"开票日期/到款月"`
  121. Remark string `json:"remark" description:"备注"`
  122. }
  123. // GetContractInvoiceItemList 获取开票到款列表
  124. func GetContractInvoiceItemList(condition string, pars []interface{}) (itemList []*ContractInvoiceItem, err error) {
  125. list := make([]*ContractInvoice, 0)
  126. err = global.DEFAULT_MYSQL.Model(ContractInvoice{}).
  127. Where("is_deleted = 0").
  128. Where(condition, pars...).
  129. Order("contract_invoice_id ASC").
  130. Find(&list).Error
  131. if err != nil {
  132. return
  133. }
  134. itemList = formatContractInvoice2ItemList(list)
  135. return
  136. }
  137. // formatContractInvoice2ItemList 格式化ContractInvoice
  138. func formatContractInvoice2ItemList(list []*ContractInvoice) (itemList []*ContractInvoiceItem) {
  139. itemList = make([]*ContractInvoiceItem, 0)
  140. for i := range list {
  141. itemList = append(itemList, &ContractInvoiceItem{
  142. ContractInvoiceId: list[i].ContractInvoiceId,
  143. ContractRegisterId: list[i].ContractRegisterId,
  144. ContractCode: list[i].ContractCode,
  145. Amount: list[i].Amount,
  146. InvoiceType: list[i].InvoiceType,
  147. InvoiceDate: utils.TimeTransferString(utils.FormatDate, list[i].InvoiceDate),
  148. Remark: list[i].Remark,
  149. CreateTime: utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
  150. })
  151. }
  152. return
  153. }
  154. // ContractInvoiceListReq 合同开票/到款登记列表请求体
  155. type ContractInvoiceListReq struct {
  156. InvoiceType int `json:"invoice_type" form:"invoice_type" binding:"oneof=1 2" description:"类型: 1-开票登记; 2-到款登记"`
  157. ContractCode string `json:"contract_code" form:"contract_code" binding:"omitempty" description:"合同编号"`
  158. StartDate string `json:"start_date" form:"start_date" binding:"omitempty,datetime=2006-01-02" description:"开始日期"`
  159. EndDate string `json:"end_date" form:"end_date" binding:"omitempty,datetime=2006-01-02" description:"结束日期"`
  160. MinAmount float64 `json:"min_amount" form:"min_amount" description:"开票金额区间-最小值"`
  161. MaxAmount float64 `json:"max_amount" form:"max_amount" description:"开票金额区间-最大值"`
  162. base.PageReq
  163. }
  164. // GetContractInvoiceItemPageList 获取合同开票/到款列表-分页
  165. func GetContractInvoiceItemPageList(page base.IPage, condition string, pars []interface{}) (count int64, results []*ContractInvoiceItem, err error) {
  166. list := make([]*ContractInvoice, 0)
  167. query := global.DEFAULT_MYSQL.Table("contract_invoice").
  168. Where("is_deleted = 0").
  169. Where(condition, pars...)
  170. query.Count(&count)
  171. if len(page.GetOrderItemsString()) > 0 {
  172. query = query.Order(page.GetOrderItemsString())
  173. }
  174. err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&list).Error
  175. if err != nil {
  176. return
  177. }
  178. for i := range list {
  179. results = append(results, formatContractInvoice2Item(list[i]))
  180. }
  181. return
  182. }
  183. // formatContractInvoice2Item 格式化ContractInvoiceItem
  184. func formatContractInvoice2Item(item *ContractInvoice) (formatItem *ContractInvoiceItem) {
  185. formatItem = new(ContractInvoiceItem)
  186. formatItem.ContractInvoiceId = item.ContractInvoiceId
  187. formatItem.ContractRegisterId = item.ContractRegisterId
  188. formatItem.ContractCode = item.ContractCode
  189. formatItem.Amount = item.Amount
  190. formatItem.InvoiceType = item.InvoiceType
  191. formatItem.InvoiceDate = utils.TimeTransferString(utils.FormatDate, item.InvoiceDate)
  192. formatItem.Remark = item.Remark
  193. formatItem.CreateTime = utils.TimeTransferString(utils.FormatDateTime, item.CreateTime)
  194. return
  195. }
  196. // DeleteContractInvoicesByRegisterId 根据合同登记ID删除开票/到款记录
  197. func DeleteContractInvoicesByRegisterId(registerId int) (err error) {
  198. sql := `UPDATE contract_invoice SET is_deleted = 1 WHERE contract_register_id = ?`
  199. err = global.DEFAULT_MYSQL.Exec(sql, registerId).Error
  200. return
  201. }