123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- package fms
- import (
- "fmt"
- "hongze/fms_api/global"
- "hongze/fms_api/models/base"
- "strings"
- "time"
- )
- // InvoicePaymentSummary 开票到款汇总表
- type InvoicePaymentSummary struct {
- Id int `gorm:"primaryKey;column:id" json:"id" description:"汇总ID"`
- RegisterId int `gorm:"column:register_id" json:"register_id" description:"登记ID"`
- InvoiceId int `gorm:"column:invoice_id" json:"invoice_id" description:"开票ID"`
- PaymentId int `gorm:"column:payment_id" json:"payment_id" description:"到款ID"`
- ServiceProductId int `gorm:"column:service_product_id" json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
- base.TimeBase
- }
- func (c *InvoicePaymentSummary) TableName() string {
- return "invoice_payment_summary"
- }
- func (c *InvoicePaymentSummary) Create() (err error) {
- err = global.DEFAULT_MYSQL.Create(c).Error
- return
- }
- // DeleteAndCreate 删除并新增汇总
- func (c *InvoicePaymentSummary) DeleteAndCreate(registerId int, summaryList []*InvoicePaymentSummary) (err error) {
- tx := global.DEFAULT_MYSQL.Begin()
- defer func() {
- if err != nil {
- tx.Rollback()
- } else {
- tx.Commit()
- }
- }()
- sql := `DELETE FROM invoice_payment_summary WHERE register_id = ?`
- tx.Exec(sql, registerId)
- if len(summaryList) > 0 {
- err = tx.CreateInBatches(summaryList, len(summaryList)).Error
- if err != nil {
- return
- }
- }
- return
- }
- type ContractRegisterSummary struct {
- SummaryId int `json:"summary_id" description:"汇总ID"`
- ContractRegister
- }
- // GetInvoicePaymentCensusPageList 获取商品到款统计列表-总数
- func GetInvoicePaymentCensusPageList(page base.IPage, condition string, pars []interface{}) (results []*ContractRegisterSummary, count int64, err error) {
- query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
- 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").
- Joins("JOIN contract_register AS b ON a.register_id = b.contract_register_id AND b.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS c ON a.invoice_id = c.contract_invoice_id AND c.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0").
- Where(condition, pars...)
- query.Count(&count)
- if len(page.GetOrderItemsString()) > 0 {
- query = query.Order(page.GetOrderItemsString())
- }
- err = query.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
- if err != nil {
- return
- }
- return
- }
- type InvoicePaymentSummaryItem struct {
- SummaryId int `json:"summary_id" description:"汇总ID"`
- RegisterId int `json:"register_id" description:"登记ID"`
- CompanyName string `json:"company_name" description:"客户名称"`
- NewCompany int `json:"new_company" description:"是否为新客户: 0-否; 1-是"`
- StartDate time.Time `json:"start_date" description:"合同开始日期"`
- EndDate time.Time `json:"end_date" description:"合同结束日期"`
- InvoiceId int `json:"invoice_id" description:"开票ID"`
- InvoiceDate time.Time `json:"invoice_time" description:"开票日期"`
- InvoiceAmount float64 `json:"invoice_amount" description:"开票金额"`
- SellerId int `json:"seller_id" description:"销售ID"`
- SellerName string `json:"seller_name" description:"销售名称"`
- SellerGroupId int `json:"seller_group_id" description:"销售组别ID"`
- SellerGroupName string `json:"seller_group_name" description:"销售组别名称"`
- PaymentId int `json:"payment_id" description:"到款ID"`
- PaymentDate time.Time `json:"payment_date" description:"到款日期"`
- PaymentAmount float64 `json:"payment_amount" description:"到款金额"`
- PayType int `json:"pay_type" description:"付款方式:0-无;1-年付;2-半年付;3-季付;4-次付;5-异常"`
- ServiceProductId int `json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
- ContractAmount float64 `gorm:"column:contract_amount" json:"contract_amount" description:"合同金额"`
- InvoicedAmount float64 `gorm:"column:invoiced_amount" json:"invoiced_amount" description:"开票金额"`
- CurrencyUnit string `gorm:"column:currency_unit" json:"currency_unit" description:"货币国际代码"`
- RMBRate float64 `gorm:"column:rmb_rate" json:"rmb_rate" description:"人民币汇率(create_time当日)"`
- }
- // GetInvoicePaymentCensusSummaryData 获取商品到款统计列表-汇总数据
- func GetInvoicePaymentCensusSummaryData(condition string, pars []interface{}) (results []*InvoicePaymentSummaryItem, err error) {
- 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",
- "c.origin_amount AS invoice_amount", "c.invoice_time AS invoice_date", "c.seller_id", "c.seller_name", "c.seller_group_id",
- "c.seller_group_name", "d.origin_amount AS payment_amount", "d.invoice_time AS payment_date", "d.pay_type",
- }
- query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
- Select(strings.Join(fields, ",")).
- Joins("JOIN contract_register AS b ON a.register_id = b.contract_register_id AND b.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS c ON a.invoice_id = c.contract_invoice_id AND c.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0").
- Where(condition, pars...)
- query.Find(&results)
- return
- }
- // GetInvoicePaymentCensusSummaryDataIds 获取商品到款统计列表-汇总数据IDs
- func GetInvoicePaymentCensusSummaryDataIds(condition string, pars []interface{}) (summaryIds []int, err error) {
- query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
- Select("a.id AS summary_id").
- Joins("JOIN contract_register AS b ON a.register_id = b.contract_register_id AND b.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS c ON a.invoice_id = c.contract_invoice_id AND c.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0").
- Where(condition, pars...)
- query.Find(&summaryIds)
- return
- }
- // GetContractSummaryInvoicePaymentAmountTotal 获取汇总金额合计信息
- func GetContractSummaryInvoicePaymentAmountTotal(condition string, pars []interface{}, amountType int) (amountTotal float64, err error) {
- joinCond := `a.invoice_id = b.contract_invoice_id`
- if amountType == 2 {
- joinCond = `a.payment_id = b.contract_invoice_id`
- }
- query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
- Select("IFNULL(SUM(b.amount),0)").
- Joins(fmt.Sprintf("JOIN contract_invoice AS b ON %s AND b.is_deleted = 0", joinCond)).
- Where(condition, pars...)
- err = query.Find(&amountTotal).Error
- return
- }
- // GetSummaryListCurrencySum 获取汇总分货币合计
- func GetSummaryListCurrencySum(condition string, pars []interface{}, amountType int) (results []*InvoiceListCurrencySum, err error) {
- joinCond := `a.invoice_id = b.contract_invoice_id`
- if amountType == 2 {
- joinCond = `a.payment_id = b.contract_invoice_id`
- }
- query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
- Select("b.currency_unit, b.invoice_type, SUM(b.amount) AS amount_total, SUM(b.origin_amount) AS origin_amount_total").
- Joins(fmt.Sprintf("JOIN contract_invoice AS b ON %s AND b.is_deleted = 0", joinCond)).
- Where(condition, pars...).
- Group("b.currency_unit")
- err = query.Find(&results).Error
- return
- }
- // DeleteInvoicePaymentSummaryByRegisterId 根据合同登记ID删除汇总数据
- func DeleteInvoicePaymentSummaryByRegisterId(registerId int) (err error) {
- sql := `DELETE FROM invoice_payment_summary WHERE register_id = ?`
- err = global.DEFAULT_MYSQL.Exec(sql, registerId).Error
- return
- }
- // DeleteInvoicePaymentSummaryByInvoiceIdAndPaymentId 根据开票到款ID删除汇总数据
- func DeleteInvoicePaymentSummaryByInvoiceIdAndPaymentId(invoiceId, arriveId, registerId int) (err error) {
- sql := `DELETE FROM invoice_payment_summary WHERE invoice_id = ? AND payment_id = ? AND register_id = ?`
- err = global.DEFAULT_MYSQL.Exec(sql, invoiceId, arriveId, registerId).Error
- return
- }
- type InvoiceSummary struct {
- SummaryId int `json:"summary_id" description:"汇总ID"`
- ContractAmountCount float64 `gorm:"column:contract_amount_count" json:"contract_amount_count" description:"合同金额"`
- InvoicedAmountCount float64 `gorm:"column:invoiced_amount_count" json:"invoiced_amount_count" description:"开票金额"`
- ContractRegister
- }
- // GetInvoiceCensusPageList 获取未开票统计列表-总数
- func GetInvoiceCensusPageList(page base.IPage, condition string, pars []interface{}) (results []*InvoiceSummary, count int64, err error) {
- query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
- 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, SUM( c.amount ) AS invoiced_amount_count,SUM( d.amount ) AS payment_amount_count ").
- Joins("JOIN contract_register AS b ON a.register_id = b.contract_register_id AND b.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS c ON a.invoice_id = c.contract_invoice_id AND c.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0").
- Where(condition, pars...).Group("b.contract_register_id")
- nq := global.DEFAULT_MYSQL.Table("(?) AS e", query).
- Select("*").Where(" e.invoiced_amount_count <> e.contract_amount ")
- nq.Count(&count)
- if len(page.GetOrderItemsString()) > 0 {
- nq = nq.Order(page.GetOrderItemsString())
- }
- err = nq.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
- if err != nil {
- return
- }
- return
- }
- // GetNoPaymentCensusPageList 获取开票未到款统计计列表-总数
- func GetNoPaymentCensusPageList(page base.IPage, condition string, pars []interface{}) (results []*InvoiceSummary, count int64, err error) {
- query := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
- 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, SUM( c.amount ) AS invoiced_amount_count,SUM( d.amount ) AS payment_amount_count " +
- " ,c.invoice_time ").
- Joins("JOIN contract_register AS b ON a.register_id = b.contract_register_id AND b.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS c ON a.invoice_id = c.contract_invoice_id AND c.is_deleted = 0").
- Joins("LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0").
- Where(condition, pars...).Group("b.contract_register_id")
- nq := global.DEFAULT_MYSQL.Table("(?) AS e", query).
- Select("*").Where(" e.invoiced_amount_count <> e.contract_amount AND e.payment_amount = 0 ")
- nq.Count(&count)
- if len(page.GetOrderItemsString()) > 0 {
- nq = nq.Order(page.GetOrderItemsString())
- }
- err = nq.Limit(int(page.GetPageSize())).Offset(int(page.Offset())).Find(&results).Error
- if err != nil {
- return
- }
- return
- }
- // NotInvoicePaymentCensusResp 未开票到款到款统计响应体
- type NotInvoicePaymentCensusResp struct {
- DataList []*InvoicePaymentCensusItem `json:"data_list"`
- InvoiceTotal float64 `json:"invoice_total" description:"开票总金额(换算后)"`
- PaymentTotal float64 `json:"payment_total" description:"到款总金额(换算后)"`
- InvoiceCurrencyTotal []*InvoiceListCurrencyTotal `json:"invoice_currency_total" description:"开票-分币种总金额"`
- PaymentCurrencyTotal []*InvoiceListCurrencyTotal `json:"payment_currency_total" description:"到款-分币种总金额"`
- NotInvoiceTotal float64 `json:"not_invoice_total" description:"未开票总金额(换算后)"`
- NotInvoiceCurrencyTotal []*InvoiceListCurrencyTotal `json:"not_invoice_currency_total" description:"未开票-分币种总金额"`
- }
|