Browse Source

Merge branch 'pool_641'

ziwen 1 year ago
parent
commit
8425ecb589

+ 23 - 9
controller/contract/pre_register.go

@@ -168,7 +168,7 @@ func (rg *PreRegisterController) Add(c *gin.Context) {
 		currencyUnit = req.List[0].CurrencyUnit
 	}
 	// 获取销售分组信息
-	sellerList, e := crmService.GetSellerDepartmentListWithGroupAndTeam()
+	sellerList, e := crmService.GetSellerDepartmentListWithEnable()
 	if e != nil {
 		resp.FailData("获取销售失败", "Err:"+e.Error(), c)
 		return
@@ -399,6 +399,9 @@ func (rg *PreRegisterController) Add(c *gin.Context) {
 	// 开票到款汇总
 	go fmsService.SummaryInvoicePaymentByContractRegisterId(ob.ContractRegisterId)
 
+	//预登记后更新register表开票到款合计金额
+	go fmsService.CheckContractRegisterAmountAfterPre(ob.ContractRegisterId)
+
 	resp.Ok("操作成功", c)
 }
 
@@ -443,7 +446,7 @@ func (rg *PreRegisterController) Edit(c *gin.Context) {
 		currencyUnit = req.List[0].CurrencyUnit
 	}
 	// 获取销售分组信息
-	sellerList, e := crmService.GetSellerDepartmentListWithGroupAndTeam()
+	sellerList, e := crmService.GetSellerDepartmentListWithEnable()
 	if e != nil {
 		resp.FailData("获取销售失败", "Err:"+e.Error(), c)
 		return
@@ -682,6 +685,8 @@ func (rg *PreRegisterController) Edit(c *gin.Context) {
 	// 开票到款汇总
 	go fmsService.SummaryInvoicePaymentByContractRegisterId(ob.ContractRegisterId)
 
+	//预登记后更新register表开票到款合计金额
+	go fmsService.CheckContractRegisterAmountAfterPre(ob.ContractRegisterId)
 	resp.Ok("操作成功", c)
 }
 
@@ -839,11 +844,11 @@ func (rg *PreRegisterController) Detail(c *gin.Context) {
 	pars := make([]interface{}, 0)
 
 	if req.InvoiceId == 0 && req.ArriveId == 0 {
-		cond = `contract_register_id = ? AND invoice_type = ? `
-		pars = append(pars, req.ContractRegisterId, req.InvoiceType)
+		cond = `a.contract_register_id = ? `
+		pars = append(pars, req.ContractRegisterId)
 	} else {
-		cond = `contract_register_id = ? AND invoice_type = ?  AND contract_invoice_id =? `
-		pars = append(pars, req.ContractRegisterId, req.InvoiceType)
+		cond = `a.contract_register_id = ?  AND a.contract_invoice_id =? `
+		pars = append(pars, req.ContractRegisterId)
 	}
 
 	if req.InvoiceType == 4 {
@@ -858,7 +863,7 @@ func (rg *PreRegisterController) Detail(c *gin.Context) {
 	}
 
 	if req.DetailType == 1 {
-		dupList, e := fms.GetDuplicateContractInvoiceDetailItemListWithType(nItme.CompanyName, nItme.StartDate, nItme.EndDate, req.InvoiceType)
+		dupList, e := fms.GetDuplicateContractInvoiceDetailItemListWithType(nItme.CompanyName, nItme.StartDate, nItme.EndDate)
 		if e != nil {
 			err = fmt.Errorf("获取开票到款列表失败, Err: %s", e.Error())
 			return
@@ -869,6 +874,12 @@ func (rg *PreRegisterController) Detail(c *gin.Context) {
 			}
 		}
 	}
+	respList := make([]*fms.ContractInvoiceDetailItem, 0)
+	for _, v := range list {
+		if v.InvoiceType == req.InvoiceType {
+			respList = append(respList, v)
+		}
+	}
 
 	//获取ficc小套餐品种
 	sysConf := new(system.SysConfig)
@@ -946,7 +957,7 @@ func (rg *PreRegisterController) Detail(c *gin.Context) {
 	}
 	respItem := fms.ContractPreRegisterDetail{
 		ContractRegisterItem: &nItme,
-		List:                 list,
+		List:                 respList,
 		Services:             services,
 		ServiceTemplateIds:   serviceTemplateIds,
 	}
@@ -991,7 +1002,7 @@ func (rg *PreRegisterController) Save(c *gin.Context) {
 	}
 
 	// 获取销售分组信息
-	sellerList, e := crmService.GetSellerDepartmentListWithGroupAndTeam()
+	sellerList, e := crmService.GetSellerDepartmentListWithEnable()
 	if e != nil {
 		resp.FailData("获取销售失败", "Err:"+e.Error(), c)
 		return
@@ -1227,5 +1238,8 @@ func (rg *PreRegisterController) Save(c *gin.Context) {
 	// 开票到款汇总
 	go fmsService.SummaryInvoicePaymentByContractRegisterId(ob.ContractRegisterId)
 
+	//预登记后更新register表开票到款合计金额
+	go fmsService.CheckContractRegisterAmountAfterPre(ob.ContractRegisterId)
+
 	resp.Ok("操作成功", c)
 }

+ 11 - 11
controller/contract/register.go

@@ -413,15 +413,15 @@ func (rg *RegisterController) Add(c *gin.Context) {
 		}
 
 		// 获取销售分组信息
-		sellerList, e := crmService.GetSellerDepartmentListWithGroupAndTeam()
-		if e != nil {
-			resp.FailData("获取销售失败", "Err:"+e.Error(), c)
-			return
-		}
-		sellerMap := make(map[int]*crm.SellerAdminWithGroupTeam)
-		for i := range sellerList {
-			sellerMap[sellerList[i].SellerId] = sellerList[i]
-		}
+		//sellerList, e := crmService.GetSellerDepartmentListWithGroupAndTeam()
+		//if e != nil {
+		//	resp.FailData("获取销售失败", "Err:"+e.Error(), c)
+		//	return
+		//}
+		//sellerMap := make(map[int]*crm.SellerAdminWithGroupTeam)
+		//for i := range sellerList {
+		//	sellerMap[sellerList[i].SellerId] = sellerList[i]
+		//}
 		//处理重复公司名日期等重复的开票到款记录
 		dupList, e := fms.GetDuplicateContractInvoiceDetailItemList(ob.CompanyName, req.StartDate, req.EndDate)
 		if e != nil {
@@ -1408,7 +1408,7 @@ func (rg *RegisterController) Invoice(c *gin.Context) {
 		dayDiff := item.EndDate.Sub(item.StartDate).Hours() / 24
 
 		// 获取销售分组信息
-		sellerList, e := crmService.GetSellerDepartmentListWithGroupAndTeam()
+		sellerList, e := crmService.GetSellerDepartmentListWithEnable()
 		if e != nil {
 			resp.FailData("获取销售失败", "Err:"+e.Error(), c)
 			return
@@ -2673,7 +2673,7 @@ func (rg *RegisterController) Import(c *gin.Context) {
 	}
 
 	// 获取所有销售Map
-	sellerList, e := crmService.GetSellerDepartmentListWithGroupAndTeam()
+	sellerList, e := crmService.GetSellerDepartmentListWithEnable()
 	if e != nil {
 		resp.FailData("获取销售列表失败", "Err:"+e.Error(), c)
 		return

+ 37 - 29
models/fms/contract_invoice.go

@@ -369,7 +369,7 @@ type InvoicePaymentCensusInfo struct {
 	PaymentAmount     float64                             `json:"payment_amount" description:"到款金额"`
 	PayType           int                                 `json:"pay_type" description:"付款方式:0-无;1-年付;2-半年付;3-季付;4-次付;5-异常"`
 	ServiceAmountList []*ContractPaymentServiceAmountItem `json:"service_amount_list" description:"到款套餐金额分配信息"`
-	SellerType        string                               `json:"seller_type" description:"销售类型:1ficc销售,2权益销售"`
+	SellerType        string                              `json:"seller_type" description:"销售类型:1ficc销售,2权益销售"`
 }
 
 // ContractInvoiceAmountTotal 开票到款金额合计信息
@@ -550,16 +550,24 @@ type ContractInvoiceDetailItem struct {
 	EndDate            string  `gorm:"column:end_date" json:"end_date" description:"约定结束时间"`
 	CreateTime         string  `gorm:"column:create_time" json:"create_time" description:"创建时间"`
 	PreRegisterId      int     `gorm:"column:pre_register_id" json:"pre_register_id" description:"预登记ID"`
+	HasInvoiceSeller   int     `json:"has_invoice_seller" description:"对应的开票记录有没有销售 0没有 1有"`
+}
+
+type InvoiceDetailItem struct {
+	ContractInvoice
+	HasInvoiceSeller int `json:"has_invoice_seller" description:"对应的开票记录有没有销售 0没有 1有"`
 }
 
 // GetContractInvoiceDetailItemList 预登记列表详情用-获取开票到款列表
 func GetContractInvoiceDetailItemList(condition string, pars []interface{}) (itemList []*ContractInvoiceDetailItem, err error) {
-	list := make([]*ContractInvoice, 0)
-	err = global.DEFAULT_MYSQL.Model(ContractInvoice{}).
+	list := make([]*InvoiceDetailItem, 0)
+	err = global.DEFAULT_MYSQL.Table("contract_invoice AS a").
+		Select("a.*,IF(p.seller_id > 0, 1, 0) AS has_invoice_seller ").
+		Joins("JOIN contract_pre_register AS p ON p.invoice_id = a.contract_invoice_id OR p.arrive_id = a.contract_invoice_id ").
 		Where("is_deleted = 0").
 		Where(condition, pars...).
 		Order("contract_invoice_id ASC").
-		Find(&list).Error
+		Scan(&list).Error
 	if err != nil {
 		return
 	}
@@ -568,7 +576,7 @@ func GetContractInvoiceDetailItemList(condition string, pars []interface{}) (ite
 }
 
 // formatContractInvoice2ItemList 预登记列表详情用-格式化ContractInvoice
-func formatContractInvoice2DetailItemList(list []*ContractInvoice) (itemList []*ContractInvoiceDetailItem) {
+func formatContractInvoice2DetailItemList(list []*InvoiceDetailItem) (itemList []*ContractInvoiceDetailItem) {
 	itemList = make([]*ContractInvoiceDetailItem, 0)
 	for i := range list {
 		itemList = append(itemList, &ContractInvoiceDetailItem{
@@ -589,6 +597,7 @@ func formatContractInvoice2DetailItemList(list []*ContractInvoice) (itemList []*
 			EndDate:            list[i].StartDate.Format(utils.FormatDate),
 			CreateTime:         utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
 			PreRegisterId:      list[i].PreRegisterId,
+			HasInvoiceSeller:   list[i].HasInvoiceSeller,
 		})
 	}
 	return
@@ -605,12 +614,13 @@ func (c *ContractInvoice) FetchByRegisterId(registerId int) (items []*ContractIn
 }
 
 // GetDuplicateContractInvoiceDetailItemListWithType 预登记列表详情用-获取开票到款列表
-func GetDuplicateContractInvoiceDetailItemListWithType(companyName, startDate, endDate string, invoiceType int) (itemList []*ContractInvoiceDetailItem, err error) {
-	list := make([]*ContractInvoice, 0)
+func GetDuplicateContractInvoiceDetailItemListWithType(companyName, startDate, endDate string) (itemList []*ContractInvoiceDetailItem, err error) {
+	list := make([]*InvoiceDetailItem, 0)
 	err = global.DEFAULT_MYSQL.Table("contract_invoice as a ").
-		Select(" a.* ").
+		Select(" a.*,IF(p.seller_id > 0, 1, 0) AS has_invoice_seller  ").
 		Joins(" JOIN contract_register as b ON a.contract_register_id = b.contract_register_id ").
-		Where(fmt.Sprintf("a.is_deleted = 0 AND b.company_name = '%s' AND b.start_date= '%s' AND b.end_date= '%s' AND b.is_deleted=0 AND (a.invoice_type=3 OR a.invoice_type=4) AND a.invoice_type = %v ", companyName, startDate, endDate, invoiceType)).
+		Joins("JOIN contract_pre_register AS p ON p.invoice_id = a.contract_invoice_id OR p.arrive_id = a.contract_invoice_id ").
+		Where(fmt.Sprintf("a.is_deleted = 0 AND b.company_name = '%s' AND b.start_date= '%s' AND b.end_date= '%s' AND b.is_deleted=0 AND (a.invoice_type=3 OR a.invoice_type=4) ", companyName, startDate, endDate)).
 		Order("a.contract_invoice_id ASC").
 		Find(&list).Error
 	if err != nil {
@@ -672,22 +682,22 @@ WHERE
 
 // NotPaymentCensusItem 商品到款统计信息
 type NotPaymentCensusItem 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-是"`
-	StartDate          string                  `json:"start_date" description:"合同开始日期"`
-	EndDate            string                  `json:"end_date" description:"合同结束日期"`
-	ServicesName       string                  `json:"services_name" description:"套餐信息字符串拼接"`
-	ContractType       int                     `json:"contract_type" description:"合同类型: 0-无 1-新签; 2-续约"`
-	ActualPayCompanies string                  `json:"actual_pay_companies" description:"该合同关联的所有代付方, 英文逗号拼接"`
-	InvoicePaymentList []*NotPaymentCensusInfo `json:"invoice_payment_list" description:"开票到款列表"`
-	ContractCode       string                  `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
-	ContractAmount     float64                 `gorm:"column:contract_amount" json:"contract_amount" description:"合同金额"`
-	UnitName           string                  `gorm:"unit_name" json:"unit_name" description:"单位名称"`
-	ProductIds         string                  `gorm:"column:product_ids" json:"product_ids" description:"产品ID:1-FICC; 2-权益, 如果两者都有,则用英文逗号拼接"`
-	NotInvoiceTotal    float64                 `json:"not_invoice_total" description:"未开票总金额(换算后)"`
-	NotInvoiceList    []*NotInvoicePaymentSummaryItem     `json:"not_invoice_list" description:"未开票invoice列表"`
+	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-是"`
+	StartDate          string                          `json:"start_date" description:"合同开始日期"`
+	EndDate            string                          `json:"end_date" description:"合同结束日期"`
+	ServicesName       string                          `json:"services_name" description:"套餐信息字符串拼接"`
+	ContractType       int                             `json:"contract_type" description:"合同类型: 0-无 1-新签; 2-续约"`
+	ActualPayCompanies string                          `json:"actual_pay_companies" description:"该合同关联的所有代付方, 英文逗号拼接"`
+	InvoicePaymentList []*NotPaymentCensusInfo         `json:"invoice_payment_list" description:"开票到款列表"`
+	ContractCode       string                          `gorm:"column:contract_code" json:"contract_code" description:"合同编号"`
+	ContractAmount     float64                         `gorm:"column:contract_amount" json:"contract_amount" description:"合同金额"`
+	UnitName           string                          `gorm:"unit_name" json:"unit_name" description:"单位名称"`
+	ProductIds         string                          `gorm:"column:product_ids" json:"product_ids" description:"产品ID:1-FICC; 2-权益, 如果两者都有,则用英文逗号拼接"`
+	NotInvoiceTotal    float64                         `json:"not_invoice_total" description:"未开票总金额(换算后)"`
+	NotInvoiceList     []*NotInvoicePaymentSummaryItem `json:"not_invoice_list" description:"未开票invoice列表"`
 }
 
 // NotPaymentCensusInfo 开票到款统计信息
@@ -706,8 +716,6 @@ type NotPaymentCensusInfo struct {
 	ServiceAmountList []*ContractPaymentServiceAmountItem `json:"service_amount_list" description:"到款套餐金额分配信息"`
 	SellerType        int                                 `json:"seller_type" description:"销售类型:1ficc销售,2权益销售"`
 	NotPaymentAmount  float64                             `json:"not_payment_amount" description:"开票未到款金额"`
-	ServiceProductId int       `json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
-	UnitName string  `json:"unit_name" description:"单位名称"`
+	ServiceProductId  int                                 `json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
+	UnitName          string                              `json:"unit_name" description:"单位名称"`
 }
-
-

+ 52 - 0
services/fms/contract_register.go

@@ -405,4 +405,56 @@ func GetContractServiceNameFormat(registerIds []int) (serviceNameMap map[int]str
 		serviceNameMap[k] = strings.Trim(serviceNameMap[k], ",")
 	}
 	return
+}
+
+// CheckContractRegisterAmountAfterPre 预登记后更新register表开票到款合计金额
+func CheckContractRegisterAmountAfterPre(registerId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			alarm_msg.SendAlarmMsg("校验合同登记金额失败, ErrMsg: "+err.Error(), 3)
+		}
+	}()
+
+	// 获取合同登记信息
+	cr := new(fms.ContractRegister)
+	item, e := cr.Fetch(registerId)
+	if e != nil {
+		err = errors.New("获取合同登记信息失败, Err: " + e.Error())
+		return
+	}
+
+	// 获取开票/到款信息
+	invoiceCond := `contract_register_id = ?`
+	invoicePars := make([]interface{}, 0)
+	invoicePars = append(invoicePars, registerId)
+	ci := new(fms.ContractInvoice)
+	invoiceList, e := ci.List(invoiceCond, invoicePars, "")
+	if e != nil {
+		err = errors.New("获取开票到款信息失败, Err: " + e.Error())
+		return
+	}
+	invoiceAmount := decimal.NewFromFloat(0).Round(2)
+	paymentAmount := decimal.NewFromFloat(0).Round(2)
+	for i := range invoiceList {
+		a := decimal.NewFromFloat(invoiceList[i].OriginAmount).Round(2)
+		if invoiceList[i].InvoiceType == fms.ContractInvoiceTypePreMake {
+			invoiceAmount = invoiceAmount.Add(a)
+		}
+		if invoiceList[i].InvoiceType == fms.ContractInvoiceTypePrePay {
+			paymentAmount = paymentAmount.Add(a)
+		}
+	}
+
+	updateCols := []string{"InvoicedAmount", "PaymentAmount", "ModifyTime"}
+	ia, _ := invoiceAmount.Round(2).Float64()
+	pa, _ := paymentAmount.Round(2).Float64()
+	item.InvoicedAmount = ia
+	item.PaymentAmount = pa
+	item.ModifyTime = time.Now().Local()
+	if e = item.Update(updateCols); e != nil {
+		err = errors.New("更新合同登记金额及状态失败, Err: " + e.Error())
+		return
+	}
+	return
 }