contract_invoice.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. package fms
  2. import (
  3. "github.com/rdlucklib/rdluck_tools/paging"
  4. "hongze/hz_crm_api/utils"
  5. "time"
  6. )
  7. // ContractInvoice 合同开票表
  8. type ContractInvoice struct {
  9. ContractInvoiceId int `gorm:"primaryKey;column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"`
  10. ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"`
  11. ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
  12. Amount float64 `gorm:"column:amount" json:"amount" description:"换算后的金额(人民币)"`
  13. OriginAmount float64 `gorm:"column:origin_amount" json:"origin_amount" description:"开票/到款金额"`
  14. CurrencyUnit string `gorm:"column:currency_unit" json:"currency_unit" description:"货币国际代码"`
  15. InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记"`
  16. InvoiceDate time.Time `gorm:"column:invoice_time" json:"invoice_time" description:"开票日期/到款月"`
  17. InvoiceTime time.Time `description:"开票日期/到款月"`
  18. SellerId int `gorm:"column:seller_id" json:"seller_id" description:"销售ID"`
  19. SellerName string `gorm:"column:seller_name" json:"seller_name" description:"销售名称"`
  20. SellerGroupId int `gorm:"column:seller_group_id" json:"seller_group_id" description:"销售分组ID"`
  21. SellerGroupName string `gorm:"column:seller_group_name" json:"seller_group_name" description:"销售分组名称"`
  22. SellerTeamId int `gorm:"column:seller_team_id" json:"seller_team_id" description:"销售小组ID"`
  23. SellerTeamName string `gorm:"column:seller_team_name" json:"seller_team_name" description:"销售小组名称"`
  24. PayType int `gorm:"column:pay_type" json:"pay_type" description:"付款方式:0-无;1-年付;2-半年付;3-季付;4-次付;5-异常"`
  25. AdminId int `gorm:"column:admin_id" json:"admin_id" description:"操作人ID"`
  26. AdminName string `gorm:"column:admin_name" json:"admin_name" description:"操作人姓名"`
  27. Remark string `gorm:"column:remark" json:"remark" description:"备注信息"`
  28. IsDeleted int `gorm:"column:is_deleted" json:"is_deleted" description:"是否已删除: 0-正常; 1-已删除"`
  29. ServiceProductId int `gorm:"column:service_product_id" json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
  30. IsPrePay int `gorm:"column:is_pre_pay" json:"is_pre_pay" description:"是否预付款: 0-不是; 1-是"`
  31. StartDate time.Time `gorm:"column:start_date" json:"start_date" description:"约定开始时间"`
  32. EndDate time.Time `gorm:"column:end_date" json:"end_date" description:"约定结束时间"`
  33. PreRegisterId int `gorm:"column:pre_register_id" json:"pre_register_id" description:"预登记ID"`
  34. CreateTime time.Time `gorm:"autoCreateTime;column:create_time" json:"create_time" description:"创建时间"`
  35. ModifyTime time.Time `gorm:"autoUpdateTime:milli;column:modify_time" json:"modify_time" description:"最后更新时间"`
  36. }
  37. func (c *ContractInvoice) TableName() string {
  38. return "contract_invoice"
  39. }
  40. // ContractInvoiceItem 合同开票/到款
  41. type ContractInvoiceItem struct {
  42. ContractInvoiceId int `gorm:"column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"`
  43. ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"`
  44. ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
  45. ContractStatus int `json:"contract_status" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
  46. Amount float64 `gorm:"column:amount" json:"amount" description:"换算金额"`
  47. OriginAmount float64 `gorm:"column:origin_amount" json:"origin_amount" description:"开票/到款金额"`
  48. CurrencyUnit string `gorm:"column:currency_unit" json:"currency_unit" description:"货币国际代码"`
  49. UnitName string `json:"unit_name" description:"货币单位名称"`
  50. InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记;3-开票预登记;4-到款预登记"`
  51. InvoiceDate string `gorm:"column:invoice_time" json:"invoice_time" description:"开票日期/到款月"`
  52. SellerId int `gorm:"column:seller_id" json:"seller_id" description:"销售ID"`
  53. SellerName string `gorm:"column:seller_name" json:"seller_name" description:"销售名称"`
  54. PayType int `gorm:"column:pay_type" json:"pay_type" description:"付款方式:0-无;1-年付;2-半年付;3-季付;4-次付;5-异常"`
  55. Remark string `gorm:"column:remark" json:"remark" description:"备注信息"`
  56. ServiceProductId int `gorm:"column:service_product_id" json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
  57. IsPrePay int `gorm:"column:is_pre_pay" json:"is_pre_pay" description:"是否预付款: 0-不是; 1-是"`
  58. StartDate string `gorm:"column:start_date" json:"start_date" description:"约定开始时间"`
  59. EndDate string `gorm:"column:end_date" json:"end_date" description:"约定结束时间"`
  60. CreateTime string `gorm:"column:create_time" json:"create_time" description:"创建时间"`
  61. CompanyName string `gorm:"column:company_name" json:"company_name" description:"客户名称"`
  62. }
  63. // ContractInvoiceSaveReq 合同开票-请求体
  64. type ContractInvoiceSaveReq struct {
  65. ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
  66. InvoiceType int `json:"invoice_type" binding:"oneof=1 2 3" description:"类型: 1-开票登记; 2-到款登记; 3-预到款登记"`
  67. AmountList []*ContractInvoiceSaveItem `json:"amount_list"`
  68. }
  69. // ContractInvoiceSaveItem 合同开票数据
  70. type ContractInvoiceSaveItem struct {
  71. ServiceProductId int `json:"service_product_id" binding:"oneof=1 2" description:"套餐类型:1ficc套餐,2权益套餐"`
  72. InvoiceId int `json:"invoice_id" description:"开票ID"`
  73. OriginAmount float64 `json:"origin_amount" description:"开票(到款)金额"`
  74. Amount float64 `json:"amount" description:"换算后的金额"`
  75. InvoiceDate string `json:"invoice_date" description:"开票日期/到款月"`
  76. Remark string `json:"remark" description:"备注"`
  77. SellerId int `json:"seller_id" description:"销售ID"`
  78. }
  79. // formatContractInvoice2ItemList 格式化ContractInvoice
  80. func formatContractInvoice2ItemList(list []*ContractInvoice) (itemList []*ContractInvoiceItem) {
  81. itemList = make([]*ContractInvoiceItem, 0)
  82. for i := range list {
  83. itemList = append(itemList, &ContractInvoiceItem{
  84. ContractInvoiceId: list[i].ContractInvoiceId,
  85. ContractRegisterId: list[i].ContractRegisterId,
  86. ContractCode: list[i].ContractCode,
  87. Amount: list[i].Amount,
  88. OriginAmount: list[i].OriginAmount,
  89. CurrencyUnit: list[i].CurrencyUnit,
  90. InvoiceType: list[i].InvoiceType,
  91. InvoiceDate: utils.TimeTransferString(utils.FormatDate, list[i].InvoiceDate),
  92. SellerId: list[i].SellerId,
  93. SellerName: list[i].SellerName,
  94. PayType: list[i].PayType,
  95. Remark: list[i].Remark,
  96. ServiceProductId: list[i].ServiceProductId,
  97. IsPrePay: list[i].IsPrePay,
  98. StartDate: list[i].StartDate.Format(utils.FormatDate),
  99. EndDate: list[i].StartDate.Format(utils.FormatDate),
  100. CreateTime: utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
  101. })
  102. }
  103. return
  104. }
  105. // formatContractInvoice2Item 格式化ContractInvoiceItem
  106. func formatContractInvoice2Item(item *ContractInvoiceRespItem) (formatItem *ContractInvoiceItem) {
  107. formatItem = new(ContractInvoiceItem)
  108. formatItem.ContractInvoiceId = item.ContractInvoiceId
  109. formatItem.ContractRegisterId = item.ContractRegisterId
  110. formatItem.ContractCode = item.ContractCode
  111. formatItem.Amount = item.Amount
  112. formatItem.OriginAmount = item.OriginAmount
  113. formatItem.CurrencyUnit = item.CurrencyUnit
  114. formatItem.InvoiceType = item.InvoiceType
  115. formatItem.InvoiceDate = utils.TimeTransferString(utils.FormatDate, item.InvoiceDate)
  116. formatItem.SellerId = item.SellerId
  117. formatItem.SellerName = item.SellerName
  118. formatItem.PayType = item.PayType
  119. formatItem.Remark = item.Remark
  120. formatItem.IsPrePay = item.IsPrePay
  121. formatItem.ServiceProductId = item.ServiceProductId
  122. formatItem.CreateTime = utils.TimeTransferString(utils.FormatDateTime, item.CreateTime)
  123. formatItem.CompanyName = item.CompanyName
  124. return
  125. }
  126. // InvoicePaymentCensusResp 商品到款统计响应体
  127. type InvoicePaymentCensusRespItem struct {
  128. DataList []*InvoicePaymentCensusItem `json:"data_list"`
  129. InvoiceTotal float64 `json:"invoice_total" description:"开票总金额(换算后)"`
  130. PaymentTotal float64 `json:"payment_total" description:"到款总金额(换算后)"`
  131. AmountTotal float64 `json:"amount_total" description:"合计总金额(换算后)"`
  132. InvoiceCurrencyTotal []*InvoiceListCurrencyTotal `json:"invoice_currency_total" description:"开票-分币种总金额"`
  133. PaymentCurrencyTotal []*InvoiceListCurrencyTotal `json:"payment_currency_total" description:"到款-分币种总金额"`
  134. }
  135. type InvoicePaymentCensusResp struct {
  136. InvoicePaymentCensusRespItem
  137. Paging *paging.PagingItem
  138. }
  139. // InvoicePaymentCensusItem 商品到款统计信息
  140. type InvoicePaymentCensusItem struct {
  141. SummaryId int `json:"summary_id" description:"汇总ID"`
  142. ContractRegisterId int `json:"contract_register_id" description:"登记ID"`
  143. CompanyName string `json:"company_name" description:"客户名称"`
  144. NewCompany int `json:"new_company" description:"是否为新客户: 0-否; 1-是"`
  145. StartDate string `json:"start_date" description:"合同开始日期"`
  146. EndDate string `json:"end_date" description:"合同结束日期"`
  147. ServicesName string `json:"services_name" description:"套餐信息字符串拼接"`
  148. ContractType int `json:"contract_type" description:"合同类型: 0-无 1-新签; 2-续约"`
  149. ActualPayCompanies string `json:"actual_pay_companies" description:"该合同关联的所有代付方, 英文逗号拼接"`
  150. InvoicePaymentList []*InvoicePaymentCensusInfo `json:"invoice_payment_list" description:"开票到款列表"`
  151. ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
  152. ContractAmount float64 `gorm:"column:contract_amount" json:"contract_amount" description:"合同金额"`
  153. UnitName string `gorm:"unit_name" json:"unit_name" description:"单位名称"`
  154. ProductIds string `gorm:"column:product_ids" json:"product_ids" description:"产品ID:1-FICC; 2-权益, 如果两者都有,则用英文逗号拼接"`
  155. NotInvoiceTotal float64 `json:"not_invoice_total" description:"未开票总金额(换算后)"`
  156. }
  157. // InvoicePaymentCensusInfo 开票到款统计信息
  158. type InvoicePaymentCensusInfo struct {
  159. InvoiceId int `json:"invoice_id" description:"开票ID"`
  160. InvoiceDate string `json:"invoice_time" description:"开票日期"`
  161. InvoiceAmount float64 `json:"invoice_amount" description:"开票金额"`
  162. SellerId int `json:"seller_id" description:"销售ID"`
  163. SellerName string `json:"seller_name" description:"销售名称"`
  164. SellerGroupId int `json:"seller_group_id" description:"销售组别ID"`
  165. SellerGroupName string `json:"seller_group_name" description:"销售组别名称"`
  166. PaymentId int `json:"payment_id" description:"到款ID"`
  167. PaymentDate string `json:"payment_date" description:"到款日期"`
  168. PaymentAmount float64 `json:"payment_amount" description:"到款金额"`
  169. PayType int `json:"pay_type" description:"付款方式:0-无;1-年付;2-半年付;3-季付;4-次付;5-异常"`
  170. ServiceAmountList []*ContractPaymentServiceAmountItem `json:"service_amount_list" description:"到款套餐金额分配信息"`
  171. SellerType int `json:"seller_type" description:"销售类型:1ficc销售,2权益销售"`
  172. }
  173. // ContractInvoiceAmountTotal 开票到款金额合计信息
  174. type ContractInvoiceAmountTotal struct {
  175. InvoiceType int `json:"invoice_type" description:"类型: 1-开票; 2-到款"`
  176. TotalAmount float64 `json:"total_amount" description:"金额合计"`
  177. }
  178. // UpdatePaymentPayTypeReq 到款登记-修改付款方式请求体
  179. type UpdatePaymentPayTypeReq struct {
  180. ContractPaymentId int `json:"contract_payment_id" binding:"required,gte=1" description:"到款登记ID"`
  181. PayType int `json:"pay_type" binding:"oneof=1 2 3 4" description:"付款方式: 1-年付; 2-半年付; 3-季付; 4-次付"`
  182. }
  183. // CensusSellerGroupInvoiceItem 销售组开票统计数据
  184. type CensusSellerGroupInvoiceItem struct {
  185. GroupId int `json:"group_id" description:"分组ID"`
  186. GroupName string `json:"group_name" description:"分组名称"`
  187. InvoiceAmount float64 `json:"invoice_amount" description:"开票金额"`
  188. GroupRate float64 `json:"group_rate" description:"分组占比"`
  189. }
  190. // CensusSellerInvoiceItem 销售组开票统计数据
  191. type CensusSellerInvoiceItem struct {
  192. SellerId int `json:"seller_id" description:"销售ID"`
  193. SellerName string `json:"seller_name" description:"销售名称"`
  194. GroupId int `json:"group_id" description:"分组ID"`
  195. GroupName string `json:"group_name" description:"分组名称"`
  196. InvoiceAmount float64 `json:"invoice_amount" description:"开票金额"`
  197. GroupRate float64 `json:"group_rate" description:"分组占比"`
  198. SellerRate float64 `json:"seller_rate" description:"全员占比"`
  199. }
  200. // InvoiceListCurrencyTotal 开票/到款列表分币种合计信息
  201. type InvoiceListCurrencyTotal struct {
  202. Name string `json:"name" description:"货币名称"`
  203. UnitName string `json:"unit_name" description:"单位名称"`
  204. Code string `json:"code" description:"国际代码"`
  205. Amount float64 `json:"amount" description:"金额"`
  206. FlagImg string `json:"flag_img" description:"国旗图标"`
  207. }
  208. // InvoiceListCurrencySum 开票/到款列表分币种总和
  209. type InvoiceListCurrencySum struct {
  210. CurrencyUnit string `json:"currency_unit" description:"货币代码"`
  211. InvoiceType int `json:"invoice_type" description:"开票类型:1-开票; 2-到款"`
  212. AmountTotal float64 `json:"amount_total" description:"换算后合计金额"`
  213. OriginAmountTotal float64 `json:"origin_amount_total" description:"原合计金额"`
  214. }
  215. // ContractInvoiceDetailItem 预登记列表详情用-invoice_time换register_time
  216. type ContractInvoiceDetailItem struct {
  217. ContractInvoiceId int `gorm:"column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"`
  218. ContractRegisterId int `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"`
  219. ContractCode string `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
  220. ContractStatus int `json:"contract_status" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
  221. OriginAmount float64 `gorm:"column:amount" json:"amount" description:"开票/到款金额"`
  222. CurrencyUnit string `gorm:"column:currency_unit" json:"currency_unit" description:"货币国际代码"`
  223. UnitName string `json:"unit_name" description:"货币单位名称"`
  224. InvoiceType int `gorm:"column:invoice_type" json:"invoice_type" description:"类型: 1-开票登记; 2-到款登记;3-开票预登记;4-到款预登记"`
  225. InvoiceDate string `gorm:"column:register_date" json:"register_date" description:"开票日期/到款月"`
  226. SellerId int `gorm:"column:seller_id" json:"seller_id" description:"销售ID"`
  227. SellerName string `gorm:"column:seller_name" json:"seller_name" description:"销售名称"`
  228. PayType int `gorm:"column:pay_type" json:"pay_type" description:"付款方式:0-无;1-年付;2-半年付;3-季付;4-次付;5-异常"`
  229. Remark string `gorm:"column:remark" json:"remark" description:"备注信息"`
  230. ServiceProductId int `gorm:"column:service_product_id" json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
  231. IsPrePay int `gorm:"column:is_pre_pay" json:"is_pre_pay" description:"是否预付款: 0-不是; 1-是"`
  232. StartDate string `gorm:"column:start_date" json:"start_date" description:"约定开始时间"`
  233. EndDate string `gorm:"column:end_date" json:"end_date" description:"约定结束时间"`
  234. CreateTime string `gorm:"column:create_time" json:"create_time" description:"创建时间"`
  235. PreRegisterId int `gorm:"column:pre_register_id" json:"pre_register_id" description:"预登记ID"`
  236. }
  237. type ContractInvoiceRespItem struct {
  238. ContractInvoice
  239. CompanyName string `gorm:"column:company_name" json:"company_name" description:"客户名称"`
  240. }
  241. type DupInvoice struct {
  242. ContractInvoice
  243. TemplateIds string
  244. }