Browse Source

no message

zhangchuanxing 1 week ago
parent
commit
6010c623bc
1 changed files with 152 additions and 0 deletions
  1. 152 0
      controllers/statistic/rai_data_summary.go

+ 152 - 0
controllers/statistic/rai_data_summary.go

@@ -12,6 +12,7 @@ import (
 	"hongze/hz_crm_api/services"
 	cygxService "hongze/hz_crm_api/services/cygx"
 	"hongze/hz_crm_api/utils"
+	"sort"
 	"strconv"
 	"strings"
 	"time"
@@ -36,6 +37,8 @@ type StatisticRaiDataSummaryController struct {
 // @Param   ContractButtonType   query   string	  false       "开关类型,:`新签`,`续约`,`收入` 多个用英文逗号隔开, "
 // @Param   StartDate   query   string	  false       "开始时间 "
 // @Param   EndDate   query   string	  false       "结束时间 "
+// @Param   SortParam   query   string  false       "排序字段参数,用来排序的字段, 枚举值:根据列表表头对应参数"
+// @Param   SortType   query   string  true       "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
 // @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
 // @Success 200 {object} statistic_report.RaiDataSummaryListResp
 // @router /rai_data_summary/list [get]
@@ -63,6 +66,8 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 	serverButton, _ := this.GetBool("ServerButton")
 	startDate := this.GetString("StartDate")
 	endDate := this.GetString("EndDate")
+	sortParam := this.GetString("SortParam")
+	sortType := this.GetString("SortType")
 
 	adminIdArr := strings.Split(adminId, ",")
 	serviceAdminIdArr := strings.Split(serviceAdminId, ",")
@@ -626,6 +631,9 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 	resp := new(statistic_report.RaiDataSummaryListResp)
 	var items []*statistic_report.RaiDataSummaryResp
 
+	mapSortDateService := make(map[int]float64)
+	mapSortDateDevelop := make(map[int]float64)
+
 	for i := startYear; i <= endYear; i++ {
 		for _, Dv := range dataTypeArr {
 			item := new(statistic_report.RaiDataSummaryResp)
@@ -636,6 +644,8 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 			}
 			keyMapTtoal = fmt.Sprint(item.DataType, "_Develop")
 			keyMapTtoalServer = fmt.Sprint(item.DataType, "_Server_")
+
+			var dataListDevelop []*statistic_report.RaiDataSummaryDetail
 			for _, vS := range sellerDevelop {
 				keyMap = fmt.Sprint(item.DataType, "_", vS.AdminId)
 				sellerItem := new(statistic_report.RaiDataSummaryDetail)
@@ -693,8 +703,60 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 				sellerItem.NewCustomerPaymentsReceivedCount = utils.SubFloatToString(mapNewCustomerPaymentsReceivedMoney[keyMap], 2) // "新客到款-(数据)"
 				if developButton || serverButton || adminId != "" {
 					item.DataList = append(item.DataList, sellerItem)
+					dataListDevelop = append(dataListDevelop, sellerItem)
+				}
+
+				//处理要排序的值
+				switch sortParam {
+				case "AddTrialCount": //新增试用
+					mapSortDateDevelop[vS.AdminId] = mapAddTrialNum[keyMap]
+				case "NewContractData": //新签合同
+					mapSortDateDevelop[vS.AdminId] = mapNewContractMoney[keyMap]
+				case "ExpiredContractData": //到期合同
+					mapSortDateDevelop[vS.AdminId] = mapExpiredContractMoney[keyMap]
+				case "RenewedContractData": //续约合同
+					mapSortDateDevelop[vS.AdminId] = mapRenewedContractMoney[keyMap]
+				case "RenewalRateData": //续约率
+					if mapRenewedContractMoney[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
+						mapSortDateDevelop[vS.AdminId] = 0
+					} else {
+						mapSortDateDevelop[vS.AdminId] = mapRenewedContractMoney[keyMap] / mapExpiredContractMoney[keyMap]
+					}
+				case "ConfirmedNoRenewalContractData": //确认不续约合同
+					mapSortDateDevelop[vS.AdminId] = confirmedNoRenewalContractMoney[keyMap]
+				case "ConfirmNonRenewalRateData": //确认不续约率
+					if confirmedNoRenewalContractMoney[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
+						mapSortDateDevelop[vS.AdminId] = 0
+					} else {
+						mapSortDateDevelop[vS.AdminId] = confirmedNoRenewalContractMoney[keyMap] / mapExpiredContractMoney[keyMap]
+					}
+				case "SignedClientCount": //签约客户数量
+					mapSortDateDevelop[vS.AdminId] = float64(mapSignedClientNum[keyMap])
+				case "AverageRevenueCount": //客单价
+					if mapSignedClientNum[keyMap] == 0 || mapSignedClientMoney[keyMap] == 0 {
+						mapSortDateDevelop[vS.AdminId] = 0
+					} else {
+						mapSortDateDevelop[vS.AdminId] = mapSignedClientMoney[keyMap] / float64(mapSignedClientNum[keyMap])
+					}
+				case "InvoiceAmountCount": //开票金额
+					mapSortDateDevelop[vS.AdminId] = mapInvoiceAmountMoney[keyMap]
+				case "PaymentReceivedCount": //到款金额
+					mapSortDateDevelop[vS.AdminId] = mapPaymentAmountMoney[keyMap]
+				case "UnpaidRatioCount": //未到款比例
+					if mapInvoiceAmountMoney[keyMap] == 0 || mapPaymentAmountMoney[keyMap] == 0 {
+						mapSortDateDevelop[vS.AdminId] = 0
+					} else {
+						mapSortDateDevelop[vS.AdminId] = (mapInvoiceAmountMoney[keyMap] - mapPaymentAmountMoney[keyMap]) / mapInvoiceAmountMoney[keyMap]
+					}
+				case "NewCustomerInvoicingCount": //新开票金额
+					mapSortDateDevelop[vS.AdminId] = mapNewCustomerInvoicingMoney[keyMap]
+				case "NewCustomerPaymentsReceivedCount": //新客到款
+					mapSortDateDevelop[vS.AdminId] = mapNewCustomerPaymentsReceivedMoney[keyMap]
 				}
 			}
+			if sortType != "" && sortParam != "" && len(mapSortDateDevelop) > 0 {
+				item.DataList = handleMapSortDate(mapSortDateDevelop, dataListDevelop, sortType)
+			}
 
 			if len(sellerDevelop) > 0 && adminId == "" {
 				sellerItem := new(statistic_report.RaiDataSummaryDetail)
@@ -752,6 +814,7 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 				item.DataList = append(item.DataList, sellerItem)
 			}
 
+			var dataListService []*statistic_report.RaiDataSummaryDetail
 			for _, vS := range sellerService {
 				keyMap = fmt.Sprint(item.DataType, "_Server_", vS.AdminId)
 				sellerItem := new(statistic_report.RaiDataSummaryDetail)
@@ -810,8 +873,61 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 				sellerItem.NewCustomerPaymentsReceivedCount = utils.SubFloatToString(mapNewCustomerPaymentsReceivedMoney[keyMap], 2) // "新客到款-(数据)"
 				if developButton || serverButton || serviceAdminId != "" {
 					item.DataList = append(item.DataList, sellerItem)
+					dataListService = append(dataListService, sellerItem)
 				}
+
+				//处理要排序的值
+				switch sortParam {
+				case "AddTrialCount": //新增试用
+					mapSortDateService[vS.AdminId] = mapAddTrialNum[keyMap]
+				case "NewContractData": //新签合同
+					mapSortDateService[vS.AdminId] = mapNewContractMoney[keyMap]
+				case "ExpiredContractData": //到期合同
+					mapSortDateService[vS.AdminId] = mapExpiredContractMoney[keyMap]
+				case "RenewedContractData": //续约合同
+					mapSortDateService[vS.AdminId] = mapRenewedContractMoney[keyMap]
+				case "RenewalRateData": //续约率
+					if mapRenewedContractMoney[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
+						mapSortDateService[vS.AdminId] = 0
+					} else {
+						mapSortDateService[vS.AdminId] = mapRenewedContractMoney[keyMap] / mapExpiredContractMoney[keyMap]
+					}
+				case "ConfirmedNoRenewalContractData": //确认不续约合同
+					mapSortDateService[vS.AdminId] = confirmedNoRenewalContractMoney[keyMap]
+				case "ConfirmNonRenewalRateData": //确认不续约率
+					if confirmedNoRenewalContractMoney[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
+						mapSortDateService[vS.AdminId] = 0
+					} else {
+						mapSortDateService[vS.AdminId] = confirmedNoRenewalContractMoney[keyMap] / mapExpiredContractMoney[keyMap]
+					}
+				case "SignedClientCount": //签约客户数量
+					mapSortDateService[vS.AdminId] = float64(mapSignedClientNum[keyMap])
+				case "AverageRevenueCount": //客单价
+					if mapSignedClientNum[keyMap] == 0 || mapSignedClientMoney[keyMap] == 0 {
+						mapSortDateService[vS.AdminId] = 0
+					} else {
+						mapSortDateService[vS.AdminId] = mapSignedClientMoney[keyMap] / float64(mapSignedClientNum[keyMap])
+					}
+				case "InvoiceAmountCount": //开票金额
+					mapSortDateService[vS.AdminId] = mapInvoiceAmountMoney[keyMap]
+				case "PaymentReceivedCount": //到款金额
+					mapSortDateService[vS.AdminId] = mapPaymentAmountMoney[keyMap]
+				case "UnpaidRatioCount": //未到款比例
+					if mapInvoiceAmountMoney[keyMap] == 0 || mapPaymentAmountMoney[keyMap] == 0 {
+						mapSortDateService[vS.AdminId] = 0
+					} else {
+						mapSortDateService[vS.AdminId] = (mapInvoiceAmountMoney[keyMap] - mapPaymentAmountMoney[keyMap]) / mapInvoiceAmountMoney[keyMap]
+					}
+				case "NewCustomerInvoicingCount": //新开票金额
+					mapSortDateService[vS.AdminId] = mapNewCustomerInvoicingMoney[keyMap]
+				case "NewCustomerPaymentsReceivedCount": //新客到款
+					mapSortDateService[vS.AdminId] = mapNewCustomerPaymentsReceivedMoney[keyMap]
+				}
+			}
+			if sortType != "" && sortParam != "" && len(mapSortDateService) > 0 {
+				item.DataList = handleMapSortDate(mapSortDateService, dataListService, sortType)
 			}
+
 			if len(sellerService) > 0 && serviceAdminId == "" {
 				sellerItem := new(statistic_report.RaiDataSummaryDetail)
 				sellerItem.IsServerSeller = true
@@ -878,6 +994,42 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
 	br.Data = resp
 }
 
+// 排序处理
+func handleMapSortDate(mapSort map[int]float64, dataList []*statistic_report.RaiDataSummaryDetail, orderType string) (dataListResp []*statistic_report.RaiDataSummaryDetail) {
+	type kvSort struct {
+		AdminIdKey int
+		AdminValue float64
+	}
+
+	var adminSlice []kvSort
+	for k, v := range mapSort {
+		adminSlice = append(adminSlice, kvSort{k, v})
+	}
+
+	if orderType == "asc" {
+		// 2. 按Value从小到大排序
+		sort.Slice(adminSlice, func(i, j int) bool {
+			return adminSlice[i].AdminValue < adminSlice[j].AdminValue // "<" 表示升序
+		})
+	} else {
+		// 2.1 按Value从大到小排序
+		sort.Slice(adminSlice, func(i, j int) bool {
+			return adminSlice[i].AdminValue > adminSlice[j].AdminValue // ">" 表示降序
+		})
+	}
+
+	// 3. 输出排序结果
+	for _, vsort := range adminSlice {
+		for _, vDate := range dataList {
+			if vDate.SellerId == strconv.Itoa(vsort.AdminIdKey) {
+				dataListResp = append(dataListResp, vDate)
+			}
+		}
+	}
+	//fmt.Println("dataListResp", dataListResp)
+	return
+}
+
 // MergeCompanyList
 // @Title 权益数据汇总弹窗详情
 // @Description 权益数据汇总弹窗详情接口