|
@@ -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 权益数据汇总弹窗详情接口
|