فهرست منبع

Merge branch 'master' into dev/2.4_rai_new

# Conflicts:
#	controller/census/invoice_payment.go
#	models/fms/contract_invoice.go
#	models/fms/contract_register.go
xiexiaoyuan 2 سال پیش
والد
کامیت
97e2e9b90a

+ 67 - 28
controller/census/invoice_payment.go

@@ -431,9 +431,11 @@ func ExportInvoicePaymentCensusList(c *gin.Context, results *fms.InvoicePaymentC
 // @Param   StartDate		query	string	false	"合同开始日期"
 // @Param   EndDate			query	string	false	"合同结束日期"
 // @Param   TimeType		query	int		false	"时间类型: 1-开票时间; 2-到款时间"
-// @Param   HasInvoice		query	int		false	"是否已开票: 0-否; 1-是"
-// @Param   HasPayment		query	int		false	"是否已到款: 0-否; 1-是"
+// @Param   HasInvoice		query	string		false	"是否已开票: 0-否; 1-是; 空-全部"
+// @Param   HasPayment		query	string		false	"是否已到款: 0-否; 1-是; 空-全部"
 // @Param   IsExport		query	int		false	"是否导出: 0-否; 1-是"
+// @Param   SortParam       query   string  false      "排序字段参数,用来排序的字段, 枚举值:'invoice_time':开票日 、 'payment_date':到款日"
+// @Param   SortType        query   string  true       "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
 // @Success 200 {object} fms.ContractRegisterItem
 // @router /census/invoice_payment/list [get]
 func (ct *InvoicePaymentController) List(c *gin.Context) {
@@ -477,45 +479,84 @@ func (ct *InvoicePaymentController) List(c *gin.Context) {
 		}
 	}
 	// 开票到款日期
-	if req.TimeType > 0 && req.StartDate != "" && req.EndDate != "" {
+	if req.StartDate != "" && req.EndDate != "" {
 		st := fmt.Sprint(req.StartDate, " 00:00:00")
 		ed := fmt.Sprint(req.EndDate, " 23:59:59")
-		if req.TimeType == 1 {
-			cond += ` AND (c.invoice_time BETWEEN ? AND ?)`
-		}
-		if req.TimeType == 2 {
-			cond += ` AND (d.invoice_time BETWEEN ? AND ?)`
-		}
-		pars = append(pars, st, ed)
-	}
-	// 已开票未到款
-	if req.HasInvoice == 1 && req.HasPayment == 0 {
-		cond += ` AND a.invoice_id > 0 AND a.payment_id = 0 `
+		cond += ` AND ((c.invoice_time BETWEEN ? AND ?) or (d.invoice_time BETWEEN ? AND ?))`
+		pars = append(pars, st, ed, st, ed)
 	}
-	// 已到款未开票
-	if req.HasPayment == 1 && req.HasInvoice == 0 {
-		cond += ` AND a.payment_id > 0 AND a.invoice_id = 0 `
+
+	if req.HasInvoice == "1" {
+		cond += ` AND a.invoice_id > 0 `
+	}else if req.HasInvoice == "0" {
+		cond += ` AND a.invoice_id = 0 `
 	}
-	// 已开票且已到款
-	if req.HasInvoice == 1 && req.HasPayment == 1 {
-		cond += ` AND a.invoice_id > 0 AND a.payment_id > 0 `
+
+	if req.HasPayment == "1" {
+		cond += ` AND a.payment_id > 0 `
+	}else if req.HasPayment == "0" {
+		cond += ` AND a.payment_id = 0 `
 	}
 
+
+
 	page := new(base.Page)
 	page.SetPageSize(req.PageSize)
 	page.SetCurrent(req.Current)
-	page.AddOrderItem(base.OrderItem{Column: "a.create_time", Asc: false})
+	//排序
+	if req.SortType == "" {
+		req.SortType = "desc"
+	}
+	if req.SortType != "desc" && req.SortType != "asc" {
+		resp.Fail("排序类型不正确", c)
+		return
+	}
+	if req.SortParam == "" {
+			page.AddOrderItem(base.OrderItem{Column: "sort_invoice_id", Asc: true})
+			page.AddOrderItem(base.OrderItem{Column: "sort_payment_id", Asc: false})
+			page.AddOrderItem(base.OrderItem{Column: "c.invoice_time", Asc: false})
+			page.AddOrderItem(base.OrderItem{Column: "c.amount", Asc: false})
+			page.AddOrderItem(base.OrderItem{Column: "a.create_time", Asc: false})
+	}else if req.SortParam == "invoice_time" {
+		if req.SortType == "asc" {
+			page.AddOrderItem(base.OrderItem{Column: "sort_invoice_id", Asc: false})
+			page.AddOrderItem(base.OrderItem{Column: "c.invoice_time", Asc: true})
+			page.AddOrderItem(base.OrderItem{Column: "c.amount", Asc: true})
+			page.AddOrderItem(base.OrderItem{Column: "a.create_time", Asc: true})
+		}else{
+			page.AddOrderItem(base.OrderItem{Column: "sort_invoice_id", Asc: true})
+			page.AddOrderItem(base.OrderItem{Column: "c.invoice_time", Asc: false})
+			page.AddOrderItem(base.OrderItem{Column: "c.amount", Asc: false})
+			page.AddOrderItem(base.OrderItem{Column: "a.create_time", Asc: false})
+		}
+	}else if req.SortParam == "payment_date" {
+		if req.SortType == "asc" {
+			page.AddOrderItem(base.OrderItem{Column: "sort_payment_id", Asc: false})
+			page.AddOrderItem(base.OrderItem{Column: "d.invoice_time", Asc: true})
+			page.AddOrderItem(base.OrderItem{Column: "d.amount", Asc: true})
+			page.AddOrderItem(base.OrderItem{Column: "a.create_time", Asc: true})
+		}else{
+			page.AddOrderItem(base.OrderItem{Column: "sort_payment_id", Asc: true})
+			page.AddOrderItem(base.OrderItem{Column: "d.invoice_time", Asc: false})
+			page.AddOrderItem(base.OrderItem{Column: "d.amount", Asc: false})
+			page.AddOrderItem(base.OrderItem{Column: "a.create_time", Asc: false})
+		}
+	}else{
+		resp.Fail("排序字段不正确", c)
+		return
+	}
+
+
 	if req.IsExport == 1 {
 		page.SetPageSize(10000)
 		page.SetCurrent(1)
 	}
 
-	registerList, registerIds, e := fms.GetInvoicePaymentCensusPageList(page, cond, pars)
+	registerList, total, e := fms.GetInvoicePaymentCensusPageList(page, cond, pars)
 	if e != nil {
 		resp.FailMsg("获取失败", "获取商品到款统计列表总数失败, Err: "+e.Error(), c)
 		return
 	}
-	total := int64(len(registerIds))
 	queryRegisterIds := make([]int, 0)
 	for i := range registerList {
 		queryRegisterIds = append(queryRegisterIds, registerList[i].ContractRegisterId)
@@ -611,9 +652,6 @@ func (ct *InvoicePaymentController) List(c *gin.Context) {
 			summaryMap := make(map[int][]*fms.InvoicePaymentCensusInfo)
 			amountMap := make(map[string]*fms.ContractPaymentServiceAmount)
 			for i := range summaryList {
-				if summaryMap[summaryList[i].RegisterId] == nil {
-					summaryMap[summaryList[i].RegisterId] = make([]*fms.InvoicePaymentCensusInfo, 0)
-				}
 				v := new(fms.InvoicePaymentCensusInfo)
 				v.InvoiceId = summaryList[i].InvoiceId
 				v.InvoiceDate = utils.TimeTransferString(utils.FormatDate, summaryList[i].InvoiceDate)
@@ -656,19 +694,20 @@ func (ct *InvoicePaymentController) List(c *gin.Context) {
 				}
 				v.ServiceAmountList = svaList
 
-				summaryMap[summaryList[i].RegisterId] = append(summaryMap[summaryList[i].RegisterId], v)
+				summaryMap[summaryList[i].SummaryId] = append(summaryMap[summaryList[i].SummaryId], v)
 			}
 
 			// 响应列表
 			for i := range registerList {
 				v := new(fms.InvoicePaymentCensusItem)
+				v.SummaryId = registerList[i].SummaryId
 				v.ContractRegisterId = registerList[i].ContractRegisterId
 				v.CompanyName = registerList[i].CompanyName
 				v.NewCompany = registerList[i].NewCompany
 				v.StartDate = utils.TimeTransferString(utils.FormatDate, registerList[i].StartDate)
 				v.EndDate = utils.TimeTransferString(utils.FormatDate, registerList[i].EndDate)
 				v.ServicesName = servicesNameMap[registerList[i].ContractRegisterId]
-				v.InvoicePaymentList = summaryMap[registerList[i].ContractRegisterId]
+				v.InvoicePaymentList = summaryMap[registerList[i].SummaryId]
 				respList = append(respList, v)
 			}
 		}()

+ 17 - 2
controller/contract/register.go

@@ -260,7 +260,7 @@ func (rg *RegisterController) Add(c *gin.Context) {
 	ob.NewCompany = req.NewCompany
 	ob.Set()
 	// 存在代付的直接完成登记, 且不允许进行开票/到款登记
-	if req.HasPayment == 1 {
+	if req.HasPayment == 1 || req.ContractStatus == fms.ContractStatusEnd {
 		ob.RegisterStatus = fms.ContractRegisterStatusComplete
 	}
 
@@ -1700,10 +1700,25 @@ func (rg *RegisterController) InvoiceList(c *gin.Context) {
 		return
 	}
 	page.SetTotal(total)
+	contractRegisterIds := make([]int, 0)
+	contractStatusMap := make(map[int]int)
 	for i := range list {
 		list[i].UnitName = unitMap[list[i].CurrencyUnit]
+		contractRegisterIds = append(contractRegisterIds, list[i].ContractRegisterId)
+	}
+	if len(contractRegisterIds) > 0 {
+		contractRegisters, err := fms.GetContractInfoByRegisterIds(contractRegisterIds)
+		if err != nil {
+			resp.FailMsg("查询合同信息失败", "查询合同信息失败, Err: "+err.Error(), c)
+			return
+		}
+		for _, v := range contractRegisters {
+			contractStatusMap[v.ContractRegisterId] = v.ContractStatus
+		}
+	}
+	for i := range list {
+		list[i].ContractStatus = contractStatusMap[list[i].ContractRegisterId]
 	}
-
 	// 分币种合计金额
 	var amountTotal float64
 	sumList, e := fms.GetInvoiceListCurrencySum(cond, pars, "currency_unit")

+ 3 - 0
models/fms/constants.go

@@ -12,6 +12,7 @@ const (
 	ContractStatusSendOut     = 2 // 单章寄出
 	ContractStatusCheckedBack = 3 // 已签回
 	ContractStatusEnd         = 4 // 已终止
+	ContractStatusEmailBackUp = 5 // 邮件备案
 
 	// 合同登记状态
 	ContractRegisterStatusIng      = 1 // 进行中
@@ -47,6 +48,7 @@ var ContractStatusKeyNameMap = map[int]string{
 	ContractStatusSendOut:     "单章寄出",
 	ContractStatusCheckedBack: "已签回",
 	ContractStatusEnd:         "已终止",
+	ContractStatusEmailBackUp: "邮件备案",
 }
 
 var ContractStatusNameKeyMap = map[string]int{
@@ -54,6 +56,7 @@ var ContractStatusNameKeyMap = map[string]int{
 	"单章寄出": ContractStatusSendOut,
 	"已签回":  ContractStatusCheckedBack,
 	"已终止":  ContractStatusEnd,
+	"邮件备案": ContractStatusEmailBackUp,
 }
 
 var ContractInvoiceKeyNameMap = map[int]string{

+ 8 - 6
models/fms/contract_invoice.go

@@ -43,6 +43,7 @@ type ContractInvoiceItem struct {
 	ContractInvoiceId  int     `gorm:"column:contract_invoice_id" json:"contract_invoice_id" description:"开票ID"`
 	ContractRegisterId int     `gorm:"column:contract_register_id" json:"contract_register_id" description:"登记ID"`
 	ContractCode       string  `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
+	ContractStatus     int     `json:"contract_status" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回"`
 	Amount             float64 `gorm:"column:amount" json:"amount" description:"换算金额"`
 	OriginAmount       float64 `gorm:"column:origin_amount" json:"origin_amount" description:"开票/到款金额"`
 	CurrencyUnit       string  `gorm:"column:currency_unit" json:"currency_unit" description:"货币国际代码"`
@@ -265,16 +266,16 @@ func DeleteContractInvoicesByRegisterId(registerId int) (err error) {
 
 // InvoicePaymentCensusListReq 商品到款统计列表请求体
 type InvoicePaymentCensusListReq struct {
-	Keyword string `json:"keyword" form:"keyword" binding:"omitempty" description:"关键词"`
-	//SellGroupId  int    `json:"sell_group_id" form:"sell_group_id" description:"销售组别ID"`
+	Keyword      string `json:"keyword" form:"keyword" binding:"omitempty" description:"关键词"`
 	SellerIds    string `json:"seller_ids" form:"seller_ids" description:"销售ID,多个ID之间用逗号拼接"`
-	ServiceTypes string `json:"service_types" form:"service_types" description:"套餐类型"`
+	ServiceTypes string `json:"service_types" form:"service_types" description:"套餐类型, 多个套餐之间用逗号拼接"`
 	StartDate    string `json:"start_date" form:"start_date" binding:"omitempty,datetime=2006-01-02" description:"开始日期"`
 	EndDate      string `json:"end_date" form:"end_date" binding:"omitempty,datetime=2006-01-02" description:"结束日期"`
-	TimeType     int    `json:"time_type" form:"time_type" description:"时间类型: 1-开票时间; 2-到款时间"`
-	HasInvoice   int    `json:"has_invoice" form:"has_invoice" description:"是否已开票: 0-否; 1-是"`
-	HasPayment   int    `json:"has_payment" form:"has_payment" description:"是否已到款: 0-否; 1-是"`
+	HasInvoice   string `json:"has_invoice" form:"has_invoice" description:"是否已开票: 0-否; 1-是; 空-全部"`
+	HasPayment   string `json:"has_payment" form:"has_payment" description:"是否已到款: 0-否; 1-是; 空-全部"`
 	IsExport     int    `json:"is_export" form:"is_export" description:"是否导出: 0-否; 1-是"`
+	SortParam    string `json:"sort_param" form:"sort_param" description:"排序字段参数,用来排序的字段, 枚举值:'invoice_time':开票日 、 'payment_date':到款日"`
+	SortType     string `json:"sort_type" form:"sort_type" description:"如何排序,是正序还是倒序,枚举值:asc 正序,desc 倒叙"`
 	base.PageReq
 }
 
@@ -315,6 +316,7 @@ type InvoicePaymentCensusResp struct {
 
 // InvoicePaymentCensusItem 商品到款统计信息
 type InvoicePaymentCensusItem struct {
+	SummaryId       int       `json:"summary_id" description:"汇总ID"`
 	ContractRegisterId int                         `json:"contract_register_id" description:"登记ID"`
 	CompanyName        string                      `json:"company_name" description:"客户名称"`
 	NewCompany         int                         `json:"new_company" description:"是否为新客户: 0-否; 1-是"`

+ 10 - 2
models/fms/contract_register.go

@@ -155,7 +155,7 @@ type ContractRegisterDelReq struct {
 // ContractRegisterUpdateStatusReq 合同登记-修改合同状态请求体
 type ContractRegisterUpdateStatusReq struct {
 	ContractRegisterId int `json:"contract_register_id" binding:"required,gte=1" description:"登记ID"`
-	ContractStatus     int `json:"contract_status" binding:"oneof=1 2 3 4" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回; 4-已终止"`
+	ContractStatus     int `json:"contract_status" binding:"oneof=1 2 3 4 5" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回; 4-已终止, 5-邮件备案"`
 }
 
 // ContractRegisterAddReq 新增合同登记请求体
@@ -177,7 +177,7 @@ type ContractRegisterAddReq struct {
 	EndDate            string                        `json:"end_date" binding:"required" description:"合同结束日期"`
 	SignDate           string                        `json:"sign_date" description:"合同签订日期"`
 	AgreedPayTime      string                        `json:"agreed_pay_time" description:"约定付款时间(如:生效日起10日内)"`
-	ContractStatus     int                           `json:"contract_status" binding:"oneof=1 2 3 4" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回; 4-已终止"`
+	ContractStatus     int                           `json:"contract_status" binding:"oneof=1 2 3 4 5" description:"合同状态: 1-已审批; 2-单章寄出; 3-已签回; 4-已终止; 5-邮件备案"`
 	Remark             string                        `json:"remark" description:"备注信息"`
 	ProductIds         string                        `json:"product_ids" description:"产品ID:1-FICC; 2-权益, 如果两者都有,则用英文逗号拼接"`
 	ServiceRemark      string                        `json:"service_remark" description:"套餐备注"`
@@ -487,6 +487,14 @@ func CreateImportContractRegister(item *ContractRegister, serviceList []*Contrac
 	return
 }
 
+
+func GetContractInfoByRegisterIds(registerIds []int) (list []ContractRegister,err error) {
+	err = global.DEFAULT_MYSQL.Model(ContractRegister{}).
+		Where("is_deleted = 0 AND contract_register_id in ?", registerIds).
+		Find(&list).Error
+	return
+}
+
 // CreateContractRegisterAndServices 新增合同登记及套餐
 func CreateContractRegisterAndServicesAndPayMent(item *ContractRegister, serviceDetail []*ContractServiceAndDetail, prePayId int) (err error) {
 	tx := global.DEFAULT_MYSQL.Begin()

+ 8 - 12
models/fms/invoice_payment_summary.go

@@ -48,15 +48,19 @@ func (c *InvoicePaymentSummary) DeleteAndCreate(registerId int, summaryList []*I
 	return
 }
 
+type ContractRegisterSummary struct {
+	SummaryId       int       `json:"summary_id" description:"汇总ID"`
+	ContractRegister
+}
 // GetInvoicePaymentCensusPageList 获取商品到款统计列表-总数
-func GetInvoicePaymentCensusPageList(page base.IPage, condition string, pars []interface{}) (results []*ContractRegister, registerIds []int, err error) {
+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.*").
+		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...).
-		Group("a.register_id")
+		Where(condition, pars...)
+	query.Count(&count)
 	if len(page.GetOrderItemsString()) > 0 {
 		query = query.Order(page.GetOrderItemsString())
 	}
@@ -64,14 +68,6 @@ func GetInvoicePaymentCensusPageList(page base.IPage, condition string, pars []i
 	if err != nil {
 		return
 	}
-	queryCount := global.DEFAULT_MYSQL.Table("invoice_payment_summary AS a").
-		Select("a.register_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...).
-		Group("a.register_id")
-	queryCount.Find(&registerIds)
 	return
 }
 

+ 2 - 2
services/fms/contract_register.go

@@ -60,8 +60,8 @@ func CheckContractRegisterAmount(registerId int) {
 
 	status := fms.ContractRegisterStatusIng
 	// 以下情况更新合同登记状态为已完成
-	// 1.合同存在代付; 2.合同状态为已签回且合同金额=开票金额=到款金额
-	if item.HasPayment == 1 || (amount.Equal(invoiceAmount) && invoiceAmount.Equal(paymentAmount) && item.ContractStatus == fms.ContractStatusCheckedBack) {
+	// 1.合同存在代付; 2.合同状态为已签回且合同金额=开票金额=到款金额; 3合同状态为已终止
+	if item.HasPayment == 1 || (amount.Equal(invoiceAmount) && invoiceAmount.Equal(paymentAmount) && item.ContractStatus == fms.ContractStatusCheckedBack) || item.ContractStatus == fms.ContractStatusEnd {
 		status = fms.ContractRegisterStatusComplete
 	}
 	updateCols := []string{"InvoicedAmount", "PaymentAmount", "RegisterStatus", "ModifyTime"}