浏览代码

商品到款统计修改

xiexiaoyuan 2 年之前
父节点
当前提交
30e8a63f11

+ 54 - 20
controller/census/invoice_payment.go

@@ -430,9 +430,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) {
@@ -485,34 +487,68 @@ func (ct *InvoicePaymentController) List(c *gin.Context) {
 		}
 		pars = append(pars, st, ed)
 	}
-	// 已开票未到款
-	if req.HasInvoice == 1 && req.HasPayment == 0 {
-		cond += ` AND a.invoice_id > 0 AND a.payment_id = 0 `
-	}
-	// 已到款未开票
-	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 == "invoice_time" || req.SortParam == "" {
+		page.AddOrderItem(base.OrderItem{Column: "sort_invoice_id", Asc: true})
+		page.AddOrderItem(base.OrderItem{Column: "sort_payment_id", Asc: false})
+		if req.SortType == "asc" {
+			page.AddOrderItem(base.OrderItem{Column: "c.invoice_time", Asc: true})
+		}else{
+			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" {
+		page.AddOrderItem(base.OrderItem{Column: "sort_invoice_id", Asc: false})
+		page.AddOrderItem(base.OrderItem{Column: "sort_payment_id", Asc: true})
+		if req.SortType == "asc" {
+			page.AddOrderItem(base.OrderItem{Column: "d.invoice_time", Asc: true})
+		}else{
+			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)
@@ -603,9 +639,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)
@@ -646,12 +679,13 @@ 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
@@ -659,7 +693,7 @@ func (ct *InvoicePaymentController) List(c *gin.Context) {
 				v.EndDate = utils.TimeTransferString(utils.FormatDate, registerList[i].EndDate)
 				svList := servicesNameMap[registerList[i].ContractRegisterId]
 				v.ServicesName = strings.Join(svList, ",")
-				v.InvoicePaymentList = summaryMap[registerList[i].ContractRegisterId]
+				v.InvoicePaymentList = summaryMap[registerList[i].SummaryId]
 				respList = append(respList, v)
 			}
 		}()

+ 1 - 1
controller/contract/register.go

@@ -261,7 +261,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
 	}
 

+ 3 - 0
models/fms/constants.go

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

+ 5 - 2
models/fms/contract_invoice.go

@@ -262,9 +262,11 @@ type InvoicePaymentCensusListReq struct {
 	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
 }
 
@@ -305,6 +307,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-是"`

+ 2 - 2
models/fms/contract_register.go

@@ -150,7 +150,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 新增合同登记请求体
@@ -170,7 +170,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:"备注信息"`
 	ProductId          int                     `json:"product_id" binding:"oneof=1 2" description:"产品ID"`
 	ServiceRemark      string                  `json:"service_remark" description:"套餐备注"`

+ 8 - 12
models/fms/invoice_payment_summary.go

@@ -43,15 +43,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())
 	}
@@ -59,14 +63,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

@@ -58,8 +58,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"}