Browse Source

Merge branch 'feature/pool381_fms_invice' into debug

xyxie 1 week ago
parent
commit
fead32d6fd

+ 166 - 4
controllers/statistic_report.go

@@ -6133,6 +6133,7 @@ func (this *StatisticReportController) InvoicePaymentList() {
 	sortParam := this.GetString("SortParam")
 	sortType := this.GetString("SortType")
 	sellerIdstr := this.GetString("SellerIds")
+	shareSellerIdstr := this.GetString("ShareSellerIds")
 	cond := `1 = 1`
 	pars := make([]interface{}, 0)
 
@@ -6147,6 +6148,42 @@ func (this *StatisticReportController) InvoicePaymentList() {
 		cond += ` AND (c.seller_id in (` + sellerIdstr + `) OR d.seller_id in  (` + sellerIdstr + `))`
 		//pars = append(pars, sellerIds, sellerIds)
 	}
+	if shareSellerIdstr != "" {
+		// 校验入参
+		shareSellerIdsSlice := strings.Split(shareSellerIdstr, ",")
+		shareSellerIds := make([]int, 0)
+		for _, v := range shareSellerIdsSlice {
+			id, err := strconv.Atoi(v)
+			if err != nil {
+				br.Msg = "分享销售ID格式不正确!"
+				return
+			}
+			shareSellerIds = append(shareSellerIds, id)
+		}
+		// 查询分享销售ID对应的客户ID,以便找出对应的合同编码
+		companyNames, e := company.GetCompanyNameByShareSellerId(shareSellerIds)
+		if e != nil {
+			br.Msg = "获取失败!"
+			br.ErrMsg = "获取分享销售ID对应的客户ID失败,Err:" + e.Error()
+			return
+		}
+		contractCodes, e := company.GetContractCodesByShareSellerId(shareSellerIds)
+		if e != nil {
+			br.Msg = "获取失败!"
+			br.ErrMsg = "获取分享销售ID对应的合同编码失败,Err:" + e.Error()
+			return
+		}
+		if len(companyNames) > 0 {
+			 if len(contractCodes) > 0 {
+				cond += ` AND (b.company_name IN (` + utils.GetOrmInReplace(len(companyNames)) + `) OR b.contract_code IN (` + utils.GetOrmInReplace(len(contractCodes)) + `))`
+				pars = append(pars, companyNames, contractCodes)
+			 } else {
+				cond += ` AND b.company_name IN (` + utils.GetOrmInReplace(len(companyNames)) + `)`
+				pars = append(pars, companyNames)
+			 }
+		}
+
+	}
 	// 套餐筛选
 	if serviceType != "" {
 		serviceTypes := strings.Split(serviceType, ",")
@@ -6175,6 +6212,24 @@ func (this *StatisticReportController) InvoicePaymentList() {
 	if utils.RunMode == "debug" {
 		dshiAdminId = 233
 	}
+
+	// 咨询组的分组id
+	groupId := 0
+	if utils.RunMode == "release" {
+		groupId = 37
+	} else {
+		groupId = 61
+	}
+
+	raiGroupId := 0
+	if utils.RunMode == "release" {
+		raiGroupId = 68
+	} else {
+		raiGroupId = 132
+	}
+
+	isEmpty := false
+	
 	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
 		sellerIdsList, err := system.GetSellerIdsByDepId(depId)
 		if err != nil {
@@ -6197,10 +6252,63 @@ func (this *StatisticReportController) InvoicePaymentList() {
 		sellerIdsList = strings.TrimRight(sellerIdsList, ",")
 
 		cond += ` AND (c.seller_id IN (` + sellerIdsList + `) OR d.seller_id IN (` + sellerIdsList + `))`
-		pars = append(pars)
 	} else if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
-		cond += ` AND (c.seller_id=? OR d.seller_id=?)`
-		pars = append(pars, sysUser.AdminId, sysUser.AdminId)
+		if sysUser.GroupId == groupId {
+			// 如果是Ficc咨询组, 则查询
+			//productId := 1
+			// 咨询组的销售,查询名下的合同列表,
+			companyNames, err := company.GetCompanyNameByShareSellerId([]int{sysUser.AdminId})
+			if err != nil {
+				br.Msg = "获取失败!"
+				br.ErrMsg = "获取商品到款统计列表总数失败,Err:" + err.Error()
+				return
+			}
+			contractCodes, err := company.GetContractCodesByShareSellerId([]int{sysUser.AdminId})
+			if err != nil {
+				br.Msg = "获取失败!"
+				br.ErrMsg = "获取商品到款统计列表总数失败,Err:" + err.Error()
+				return
+			}
+			if len(companyNames) == 0 {	
+				isEmpty = true
+			} else {
+				if len(contractCodes) > 0 {
+					cond += ` AND (b.company_name IN (` + utils.GetOrmInReplace(len(companyNames)) + `) OR b.contract_code IN (` + utils.GetOrmInReplace(len(contractCodes)) + `)) AND a.service_product_id = 1`
+					pars = append(pars, companyNames, contractCodes)
+				} else {
+					cond += ` AND b.company_name IN (` + utils.GetOrmInReplace(len(companyNames)) + `) AND a.service_product_id = 1`
+					pars = append(pars, companyNames)
+				}
+			}
+		} else if sysUser.GroupId == raiGroupId {// 如果是权益的服务组销售,
+			//productId := 2
+			companyNames, err := company.GetCompanyNameByShareSellerId([]int{sysUser.AdminId})
+			if err != nil {
+				br.Msg = "获取失败!"
+				br.ErrMsg = "获取商品到款统计列表总数失败,Err:" + err.Error()
+				return
+			}
+			contractCodes, err := company.GetContractCodesByShareSellerId([]int{sysUser.AdminId})
+			if err != nil {
+				br.Msg = "获取失败!"
+				br.ErrMsg = "获取商品到款统计列表总数失败,Err:" + err.Error()
+				return
+			}
+			if len(companyNames) == 0 {	
+				isEmpty = true
+			} else {
+				if len(contractCodes) > 0 {
+					cond += ` AND (b.company_name IN (` + utils.GetOrmInReplace(len(companyNames)) + `) OR b.contract_code IN (` + utils.GetOrmInReplace(len(contractCodes)) + `)) AND a.service_product_id = 2`
+					pars = append(pars, companyNames, contractCodes)
+				} else {
+					cond += ` AND b.company_name IN (` + utils.GetOrmInReplace(len(companyNames)) + `) AND a.service_product_id = 2`
+					pars = append(pars, companyNames)
+				}
+			}
+		} else {
+			cond += ` AND (c.seller_id=? OR d.seller_id=?)`
+			pars = append(pars, sysUser.AdminId, sysUser.AdminId)
+		}
 	}
 
 	// 开票到款日期
@@ -6279,7 +6387,19 @@ func (this *StatisticReportController) InvoicePaymentList() {
 		br.Msg = "排序字段不正确!"
 		return
 	}
-
+	if isEmpty {
+		page := paging.GetPaging(currentIndex, pageSize, 0)
+		results := new(fms.InvoicePaymentCensusResp)
+		results.Paging = page
+		results.DataList = make([]*fms.InvoicePaymentCensusItem, 0)
+		results.InvoiceCurrencyTotal = make([]*fms.InvoiceListCurrencyTotal, 0)
+		results.PaymentCurrencyTotal = make([]*fms.InvoiceListCurrencyTotal, 0)
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = results
+		return
+	}
 	registerList, total, e := fms.GetInvoicePaymentCensusPageList(cond, pars, order, startSize, pageSize)
 	if e != nil {
 		br.Msg = "获取失败!"
@@ -6287,8 +6407,38 @@ func (this *StatisticReportController) InvoicePaymentList() {
 		return
 	}
 	queryRegisterIds := make([]int, 0)
+	contractCodeSlice := make([]string, 0)
+	companyNameSlice := make([]string, 0)
 	for i := range registerList {
 		queryRegisterIds = append(queryRegisterIds, registerList[i].ContractRegisterId)
+		contractCodeSlice = append(contractCodeSlice, registerList[i].ContractCode)
+		companyNameSlice = append(companyNameSlice, registerList[i].CompanyName)
+	}
+	// 根据合同编码查询对应的共享销售
+	shareSellerMap := make(map[string]*company.CompanyShareSeller)
+	contractShareSellerMap := make(map[string]*company.ContractShareSeller)
+	if len(companyNameSlice) > 0 {
+		shareSellerList, e := company.GetShareSellerByCompanyName(companyNameSlice)
+		if e != nil {
+			br.Msg = "获取失败!"
+			br.ErrMsg = "获取共享销售失败,Err:" + e.Error()
+			return
+		}
+		for _, v := range shareSellerList {
+			name := fmt.Sprintf("%s_%s", v.CompanyName, v.ProductId)
+			shareSellerMap[name] = v
+		}
+	}
+	if len(contractCodeSlice) > 0 {
+		contractShareSellerList, e := company.GetShareSellerListByContractCode(contractCodeSlice)
+		if e != nil {
+			br.Msg = "获取失败!"
+			br.ErrMsg = "获取共享销售失败,Err:" + e.Error()
+			return
+		}
+		for _, v := range contractShareSellerList {
+			contractShareSellerMap[v.ContractCode] = v
+		}
 	}
 
 	//fmt.Println("queryRegisterIds:",queryRegisterIds)
@@ -6444,6 +6594,18 @@ func (this *StatisticReportController) InvoicePaymentList() {
 				v.InvoicePaymentList = summaryMap[registerList[i].SummaryId]
 				v.ContractType = registerList[i].ContractType
 				v.ActualPayCompanies = registerList[i].ActualPayCompanies
+				shareSellerItem := fmt.Sprintf("%s_%d", registerList[i].CompanyName, v.ServiceProductId)
+				contractShareSeller, ok := shareSellerMap[shareSellerItem]
+				if ok {
+					v.ShareSellerId = contractShareSeller.ShareSellerId
+					v.ShareSellerName = contractShareSeller.ShareSeller
+				}else{
+					contractShareSeller, ok := contractShareSellerMap[registerList[i].ContractCode]
+					if ok {
+						v.ShareSellerId = contractShareSeller.ShareSellerId
+						v.ShareSellerName = contractShareSeller.ShareSeller
+					}
+				}
 				respList = append(respList, v)
 			}
 		}()

+ 34 - 1
models/company/company_contract.go

@@ -2,9 +2,11 @@ package company
 
 import (
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
+	"hongze/hz_crm_api/utils"
 	"strings"
 	"time"
+
+	"github.com/beego/beego/v2/client/orm"
 )
 
 type CompanyContract struct {
@@ -510,3 +512,34 @@ func UpdateCompanyContractDueEndDateMerge(inheritEndDate, dueEndDate string, inh
 	_, err = o.Raw(sql, inheritEndDate, dueEndDate, inheritCompanyContracId, mergeCompanyContractId, companyContractId).Exec()
 	return
 }
+
+// 根据分享销售ID获取合同编码
+func GetContractCodesByShareSellerId(shareSellerIds []int) (contractCodes []string, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT distinct cc.contract_code FROM company_contract cc left join company_product cp on cc.company_id = cp.company_id and cc.product_id = cp.product_id
+		WHERE cp.share_seller_id IN (` + utils.GetOrmInReplace(len(shareSellerIds)) + `)`
+	_, err = o.Raw(sql, shareSellerIds).QueryRows(&contractCodes)
+	return
+}
+
+// 根据分享销售ID获取合同编码
+func GetContractCodesByShareSellerIdstr(shareSellerIds []string) (contractCodes []string, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT distinct cc.contract_code FROM company_contract cc left join company_product cp on cc.company_id = cp.company_id and cc.product_id = cp.product_id
+		WHERE cp.share_seller_id IN (` + strings.Join(shareSellerIds, ",") + `)`
+	_, err = o.Raw(sql).QueryRows(&contractCodes)
+	return
+}
+type ContractShareSeller struct {
+	ContractCode string 
+	ShareSellerId int   
+	ShareSeller string 
+}
+// 根据合同编码获取共享销售ID
+func GetShareSellerListByContractCode(contractCodes []string) (shareSellerList []*ContractShareSeller, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT distinct cc.contract_code, cp.share_seller_id, cp.share_seller FROM company_contract cc left join company_product cp on cc.company_id = cp.company_id and cc.product_id = cp.product_id
+		 WHERE cc.contract_code IN (` + utils.GetOrmInReplace(len(contractCodes)) + `) and cp.share_seller_id >0`
+	_, err = o.Raw(sql, contractCodes).QueryRows(&shareSellerList)
+	return
+}

+ 31 - 1
models/company/company_product.go

@@ -1,9 +1,10 @@
 package company
 
 import (
-	"github.com/beego/beego/v2/client/orm"
 	"hongze/hz_crm_api/utils"
 	"time"
+
+	"github.com/beego/beego/v2/client/orm"
 )
 
 type CompanyProduct struct {
@@ -742,3 +743,32 @@ func UpdateCompanyProductSellerUnexpiredInitinit16_1_05(sellerId int, sellerName
 	_, err = o.Raw(sql, sellerId, sellerName, companyId).Exec()
 	return
 }
+
+
+func GetCompanyNameByShareSellerId(shareSellerIds []int) (companyName []string, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT distinct c.company_name FROM company_product cp left join company c on cp.company_id = c.company_id WHERE cp.share_seller_id IN (` + utils.GetOrmInReplace(len(shareSellerIds)) + `)`
+	_, err = o.Raw(sql, shareSellerIds).QueryRows(&companyName)
+	return
+}
+
+func GetCompanyNameByShareSellerIdStr(shareSellerIds []string) (companyName []string, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT distinct c.company_name FROM company_product cp left join company c on cp.company_id = c.company_id WHERE cp.share_seller_id IN (` + utils.GetOrmInReplace(len(shareSellerIds)) + `)`
+	_, err = o.Raw(sql, shareSellerIds).QueryRows(&companyName)
+	return
+}
+
+type CompanyShareSeller struct {
+	CompanyName string 
+	ProductId int
+	ShareSellerId int 
+	ShareSeller string 
+}
+
+func GetShareSellerByCompanyName(companyNames []string) (items []*CompanyShareSeller, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT cp.share_seller_id, cp.share_seller, c.company_name, cp.product_id FROM company_product cp left join company c on cp.company_id = c.company_id WHERE c.company_name IN (` + utils.GetOrmInReplace(len(companyNames)) + `)`
+	_, err = o.Raw(sql, companyNames).QueryRows(&items)
+	return
+}

+ 5 - 1
models/fms/contract_invoice.go

@@ -1,9 +1,10 @@
 package fms
 
 import (
-	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/utils"
 	"time"
+
+	"github.com/rdlucklib/rdluck_tools/paging"
 )
 
 // ContractInvoice 合同开票表
@@ -163,6 +164,9 @@ type InvoicePaymentCensusItem struct {
 	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:"未开票总金额(换算后)"`
+	ShareSellerId     int                         `json:"share_seller_id" description:"共享销售ID"`
+	ShareSellerName   string                      `json:"share_seller_name" description:"共享销售名称"`
+	ServiceProductId   int                         `json:"service_product_id" description:"套餐类型:1ficc套餐,2权益套餐"`
 }
 
 // InvoicePaymentCensusInfo 开票到款统计信息

+ 1 - 1
models/fms/invoice_payment_summary.go

@@ -25,7 +25,7 @@ type ContractRegisterSummary struct {
 // GetInvoicePaymentCensusPageList 获取商品到款统计列表-总数
 func GetInvoicePaymentCensusPageList(condition string, pars []interface{}, order string, startSize, pageSize int) (results []*ContractRegisterSummary, total int64, err error) {
 	o := orm.NewOrmUsingDB("fms")
-	sql := `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 FROM invoice_payment_summary AS a 
+	sql := `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, a.service_product_id FROM invoice_payment_summary AS a 
 			JOIN contract_register AS b ON a.register_id = b.contract_register_id AND b.is_deleted = 0
 			LEFT JOIN contract_invoice AS c ON a.invoice_id = c.contract_invoice_id AND c.is_deleted = 0
 			LEFT JOIN contract_invoice AS d ON a.payment_id = d.contract_invoice_id AND d.is_deleted = 0