|
@@ -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, ",")
|
|
@@ -85,12 +90,22 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
var pars []interface{}
|
|
|
var conditionEnSeller string // 手动禁用的销售
|
|
|
|
|
|
- conditionEnSeller = " AND real_name NOT IN ('余晔', '于卓铭', '张怡', '王芳6') "
|
|
|
+ // 获取图片识别手机号的配置
|
|
|
+ crmConfig, err := company.GetConfigDetailByCode("rai_data_summary_seller")
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取配置失败"
|
|
|
+ br.ErrMsg = "获取配置失败"
|
|
|
+ br.IsSendEmail = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //fmt.Println(crmConfig.ConfigValue)
|
|
|
+
|
|
|
+ conditionEnSeller = " AND real_name NOT IN ('余晔', '于卓铭', '张怡', '王芳6') "
|
|
|
mapsellerDevelop := make(map[int]bool) // 开拓组销售Map
|
|
|
mapsellerService := make(map[int]bool) // 服务组销售Map
|
|
|
var sellerIds []string
|
|
|
var sellerServiceIds []string
|
|
|
- condition = " AND role_type_code IN ('rai_seller','rai_group') " + conditionEnSeller
|
|
|
+ condition = " AND role_type_code IN ('rai_seller','rai_group') " + conditionEnSeller + " OR admin_id IN( " + crmConfig.ConfigValue + ") "
|
|
|
|
|
|
sellerListAll, err := system.GetSysUserItemsOrderByCreated(condition, pars)
|
|
|
if err != nil {
|
|
@@ -114,6 +129,7 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
if adminId != "" {
|
|
|
serviceAdminId = ""
|
|
|
condition += " AND admin_id IN (" + adminId + ") "
|
|
|
+ condition += " OR admin_id IN (" + adminId + ") "
|
|
|
sellerIds = make([]string, 0)
|
|
|
}
|
|
|
if serviceAdminId != "" {
|
|
@@ -626,6 +642,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 +655,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)
|
|
@@ -643,9 +664,9 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
sellerIds = append(sellerIds, sellerItem.SellerId)
|
|
|
sellerItem.SellerName = vS.RealName
|
|
|
sellerItem.AddTrialCount = fmt.Sprint(mapAddTrialNum[keyMap])
|
|
|
- sellerItem.NewContractData = fmt.Sprint(utils.SubFloatToString(mapNewContractMoney[keyMap], 2), " / ", mapNewContractNum[keyMap]) // 新签合同(金额/数量)-(数据)
|
|
|
- sellerItem.ExpiredContractData = fmt.Sprint(utils.SubFloatToString(mapExpiredContractMoney[keyMap], 2), " / ", mapExpiredContractNum[keyMap]) //"到期合同(金额/数量)-(数据)"
|
|
|
- sellerItem.RenewedContractData = fmt.Sprint(utils.SubFloatToString(mapRenewedContractMoney[keyMap], 2), " / ", mapRenewedContractNum[keyMap]) // "续约合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.NewContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapNewContractMoney[keyMap], 2), " / ", mapNewContractNum[keyMap]) // 新签合同(金额/数量)-(数据)
|
|
|
+ sellerItem.ExpiredContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapExpiredContractMoney[keyMap], 2), " / ", mapExpiredContractNum[keyMap]) //"到期合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoney[keyMap], 2), " / ", mapRenewedContractNum[keyMap]) // "续约合同(金额/数量)-(数据)"
|
|
|
var renewalRateMoey string
|
|
|
var renewalRateNum string
|
|
|
if mapRenewedContractMoney[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
|
|
@@ -658,8 +679,8 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
} else {
|
|
|
renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNum[keyMap])/float64(mapExpiredContractCompanyNum[keyMap])*100, 2) + "%"
|
|
|
}
|
|
|
- sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
|
|
|
- sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.SubFloatToString(confirmedNoRenewalContractMoney[keyMap], 2), " / ", confirmedNoRenewalContractNum[keyMap]) //"确认不续约合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
|
|
|
+ sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoney[keyMap], 2), " / ", confirmedNoRenewalContractNum[keyMap]) //"确认不续约合同(金额/数量)-(数据)"
|
|
|
|
|
|
var confirmNonRenewalRateMoey string
|
|
|
var confirmNonRenewalRateNum string
|
|
@@ -679,21 +700,73 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
if mapSignedClientNum[keyMap] == 0 || mapSignedClientMoney[keyMap] == 0 {
|
|
|
sellerItem.AverageRevenueCount = "0"
|
|
|
} else {
|
|
|
- sellerItem.AverageRevenueCount = utils.SubFloatToString(mapSignedClientMoney[keyMap]/float64(mapSignedClientNum[keyMap]), 2) //客单价
|
|
|
+ sellerItem.AverageRevenueCount = utils.FormatNumberWithCommas(mapSignedClientMoney[keyMap]/float64(mapSignedClientNum[keyMap]), 2) //客单价
|
|
|
}
|
|
|
|
|
|
- sellerItem.InvoiceAmountCount = utils.SubFloatToString(mapInvoiceAmountMoney[keyMap], 2) //"开票金额-(数据)"
|
|
|
- sellerItem.PaymentReceivedCount = utils.SubFloatToString(mapPaymentAmountMoney[keyMap], 2) //"开票金额-(数据)"
|
|
|
+ sellerItem.InvoiceAmountCount = utils.FormatNumberWithCommas(mapInvoiceAmountMoney[keyMap], 2) //"开票金额-(数据)"
|
|
|
+ sellerItem.PaymentReceivedCount = utils.FormatNumberWithCommas(mapPaymentAmountMoney[keyMap], 2) //"开票金额-(数据)"
|
|
|
if mapInvoiceAmountMoney[keyMap] == 0 || mapPaymentAmountMoney[keyMap] == 0 {
|
|
|
sellerItem.UnpaidRatioCount = "0%"
|
|
|
} else {
|
|
|
sellerItem.UnpaidRatioCount = utils.SubFloatToString((mapInvoiceAmountMoney[keyMap]-mapPaymentAmountMoney[keyMap])/mapInvoiceAmountMoney[keyMap]*100, 2) + "%" //"未到款比例-(数据)"
|
|
|
}
|
|
|
- sellerItem.NewCustomerInvoicingCount = utils.SubFloatToString(mapNewCustomerInvoicingMoney[keyMap], 2) // "新客开票-(数据)"
|
|
|
- sellerItem.NewCustomerPaymentsReceivedCount = utils.SubFloatToString(mapNewCustomerPaymentsReceivedMoney[keyMap], 2) // "新客到款-(数据)"
|
|
|
+ sellerItem.NewCustomerInvoicingCount = utils.FormatNumberWithCommas(mapNewCustomerInvoicingMoney[keyMap], 2) // "新客开票-(数据)"
|
|
|
+ sellerItem.NewCustomerPaymentsReceivedCount = utils.FormatNumberWithCommas(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 == "" {
|
|
@@ -701,9 +774,9 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
sellerItem.SellerId = strings.Join(sellerIds, ",")
|
|
|
sellerItem.SellerName = "开拓组合计"
|
|
|
sellerItem.AddTrialCount = fmt.Sprint(mapAddTrialNum[keyMapTtoal])
|
|
|
- sellerItem.NewContractData = fmt.Sprint(utils.SubFloatToString(mapNewContractMoney[keyMapTtoal], 2), " / ", mapNewContractNum[keyMapTtoal]) // 新签合同(金额/数量)-(数据)
|
|
|
- sellerItem.ExpiredContractData = fmt.Sprint(utils.SubFloatToString(mapExpiredContractMoney[keyMapTtoal], 2), " / ", mapExpiredContractNum[keyMapTtoal]) //"到期合同(金额/数量)-(数据)"
|
|
|
- sellerItem.RenewedContractData = fmt.Sprint(utils.SubFloatToString(mapRenewedContractMoney[keyMapTtoal], 2), " / ", mapRenewedContractNum[keyMapTtoal]) // "续约合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.NewContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapNewContractMoney[keyMapTtoal], 2), " / ", mapNewContractNum[keyMapTtoal]) // 新签合同(金额/数量)-(数据)
|
|
|
+ sellerItem.ExpiredContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapExpiredContractMoney[keyMapTtoal], 2), " / ", mapExpiredContractNum[keyMapTtoal]) //"到期合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoney[keyMapTtoal], 2), " / ", mapRenewedContractNum[keyMapTtoal]) // "续约合同(金额/数量)-(数据)"
|
|
|
var renewalRateMoey string
|
|
|
var renewalRateNum string
|
|
|
if mapRenewedContractMoney[keyMapTtoal] == 0 || mapExpiredContractMoney[keyMapTtoal] == 0 {
|
|
@@ -716,8 +789,8 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
} else {
|
|
|
renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNum[keyMapTtoal])/float64(mapExpiredContractCompanyNum[keyMapTtoal])*100, 2) + "%"
|
|
|
}
|
|
|
- sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
|
|
|
- sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.SubFloatToString(confirmedNoRenewalContractMoney[keyMapTtoal], 2), " / ", confirmedNoRenewalContractNum[keyMapTtoal]) //"确认不续约合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
|
|
|
+ sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoney[keyMapTtoal], 2), " / ", confirmedNoRenewalContractNum[keyMapTtoal]) //"确认不续约合同(金额/数量)-(数据)"
|
|
|
|
|
|
var confirmNonRenewalRateMoey string
|
|
|
var confirmNonRenewalRateNum string
|
|
@@ -737,21 +810,22 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
if mapSignedClientNum[keyMapTtoal] == 0 || mapSignedClientMoney[keyMapTtoal] == 0 {
|
|
|
sellerItem.AverageRevenueCount = "0"
|
|
|
} else {
|
|
|
- sellerItem.AverageRevenueCount = utils.SubFloatToString(mapSignedClientMoney[keyMapTtoal]/float64(mapSignedClientNum[keyMapTtoal]), 2) //客单价
|
|
|
+ sellerItem.AverageRevenueCount = utils.FormatNumberWithCommas(mapSignedClientMoney[keyMapTtoal]/float64(mapSignedClientNum[keyMapTtoal]), 2) //客单价
|
|
|
}
|
|
|
|
|
|
- sellerItem.InvoiceAmountCount = utils.SubFloatToString(mapInvoiceAmountMoney[keyMapTtoal], 2) //"开票金额-(数据)"
|
|
|
- sellerItem.PaymentReceivedCount = utils.SubFloatToString(mapPaymentAmountMoney[keyMapTtoal], 2) //"开票金额-(数据)"
|
|
|
+ sellerItem.InvoiceAmountCount = utils.FormatNumberWithCommas(mapInvoiceAmountMoney[keyMapTtoal], 2) //"开票金额-(数据)"
|
|
|
+ sellerItem.PaymentReceivedCount = utils.FormatNumberWithCommas(mapPaymentAmountMoney[keyMapTtoal], 2) //"开票金额-(数据)"
|
|
|
if mapInvoiceAmountMoney[keyMapTtoal] == 0 || mapPaymentAmountMoney[keyMapTtoal] == 0 {
|
|
|
sellerItem.UnpaidRatioCount = "0%"
|
|
|
} else {
|
|
|
sellerItem.UnpaidRatioCount = utils.SubFloatToString((mapInvoiceAmountMoney[keyMapTtoal]-mapPaymentAmountMoney[keyMapTtoal])/mapInvoiceAmountMoney[keyMapTtoal]*100, 2) + "%" //"未到款比例-(数据)"
|
|
|
}
|
|
|
- sellerItem.NewCustomerInvoicingCount = utils.SubFloatToString(mapNewCustomerInvoicingMoney[keyMapTtoal], 2) // "新客开票-(数据)"
|
|
|
- sellerItem.NewCustomerPaymentsReceivedCount = utils.SubFloatToString(mapNewCustomerPaymentsReceivedMoney[keyMapTtoal], 2) // "新客到款-(数据)"
|
|
|
+ sellerItem.NewCustomerInvoicingCount = utils.FormatNumberWithCommas(mapNewCustomerInvoicingMoney[keyMapTtoal], 2) // "新客开票-(数据)"
|
|
|
+ sellerItem.NewCustomerPaymentsReceivedCount = utils.FormatNumberWithCommas(mapNewCustomerPaymentsReceivedMoney[keyMapTtoal], 2) // "新客到款-(数据)"
|
|
|
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)
|
|
@@ -760,9 +834,9 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
sellerServiceIds = append(sellerServiceIds, sellerItem.SellerId)
|
|
|
sellerItem.SellerName = vS.RealName
|
|
|
sellerItem.AddTrialCount = fmt.Sprint(mapAddTrialNum[keyMap])
|
|
|
- sellerItem.NewContractData = fmt.Sprint(utils.SubFloatToString(mapNewContractMoneyServer[keyMap], 2), " / ", mapNewContractNumServer[keyMap]) // 新签合同(金额/数量)-(数据)
|
|
|
- sellerItem.ExpiredContractData = fmt.Sprint(utils.SubFloatToString(mapExpiredContractMoneyServer[keyMap], 2), " / ", mapExpiredContractNumServer[keyMap]) //"到期合同(金额/数量)-(数据)"
|
|
|
- sellerItem.RenewedContractData = fmt.Sprint(utils.SubFloatToString(mapRenewedContractMoneyServer[keyMap], 2), " / ", mapRenewedContractNumServer[keyMap]) // "续约合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.NewContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapNewContractMoneyServer[keyMap], 2), " / ", mapNewContractNumServer[keyMap]) // 新签合同(金额/数量)-(数据)
|
|
|
+ sellerItem.ExpiredContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapExpiredContractMoneyServer[keyMap], 2), " / ", mapExpiredContractNumServer[keyMap]) //"到期合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoneyServer[keyMap], 2), " / ", mapRenewedContractNumServer[keyMap]) // "续约合同(金额/数量)-(数据)"
|
|
|
var renewalRateMoey string
|
|
|
var renewalRateNum string
|
|
|
if mapRenewedContractMoneyServer[keyMap] == 0 || mapExpiredContractMoneyServer[keyMap] == 0 {
|
|
@@ -775,8 +849,8 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
} else {
|
|
|
renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNumServer[keyMap])/float64(mapExpiredContractCompanyNumServer[keyMap])*100, 2) + "%"
|
|
|
}
|
|
|
- sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
|
|
|
- sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.SubFloatToString(confirmedNoRenewalContractMoneyServer[keyMap], 2), " / ", confirmedNoRenewalContractNumServer[keyMap]) //"确认不续约合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
|
|
|
+ sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoneyServer[keyMap], 2), " / ", confirmedNoRenewalContractNumServer[keyMap]) //"确认不续约合同(金额/数量)-(数据)"
|
|
|
|
|
|
var confirmNonRenewalRateMoey string
|
|
|
var confirmNonRenewalRateNum string
|
|
@@ -796,31 +870,84 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
if mapSignedClientNumServer[keyMap] == 0 || mapSignedClientMoneyServer[keyMap] == 0 {
|
|
|
sellerItem.AverageRevenueCount = "0"
|
|
|
} else {
|
|
|
- sellerItem.AverageRevenueCount = utils.SubFloatToString(mapSignedClientMoneyServer[keyMap]/float64(mapSignedClientNumServer[keyMap]), 2) //客单价
|
|
|
+ sellerItem.AverageRevenueCount = utils.FormatNumberWithCommas(mapSignedClientMoneyServer[keyMap]/float64(mapSignedClientNumServer[keyMap]), 2) //客单价
|
|
|
}
|
|
|
|
|
|
- sellerItem.InvoiceAmountCount = utils.SubFloatToString(mapInvoiceAmountMoney[keyMap], 2) //"开票金额-(数据)"
|
|
|
- sellerItem.PaymentReceivedCount = utils.SubFloatToString(mapPaymentAmountMoney[keyMap], 2) //"开票金额-(数据)"
|
|
|
+ sellerItem.InvoiceAmountCount = utils.FormatNumberWithCommas(mapInvoiceAmountMoney[keyMap], 2) //"开票金额-(数据)"
|
|
|
+ sellerItem.PaymentReceivedCount = utils.FormatNumberWithCommas(mapPaymentAmountMoney[keyMap], 2) //"开票金额-(数据)"
|
|
|
if mapInvoiceAmountMoney[keyMap] == 0 || mapPaymentAmountMoney[keyMap] == 0 {
|
|
|
sellerItem.UnpaidRatioCount = "0%"
|
|
|
} else {
|
|
|
sellerItem.UnpaidRatioCount = utils.SubFloatToString((mapInvoiceAmountMoney[keyMap]-mapPaymentAmountMoney[keyMap])/mapInvoiceAmountMoney[keyMap]*100, 2) + "%" //"未到款比例-(数据)"
|
|
|
}
|
|
|
- sellerItem.NewCustomerInvoicingCount = utils.SubFloatToString(mapNewCustomerInvoicingMoney[keyMap], 2) // "新客开票-(数据)"
|
|
|
- sellerItem.NewCustomerPaymentsReceivedCount = utils.SubFloatToString(mapNewCustomerPaymentsReceivedMoney[keyMap], 2) // "新客到款-(数据)"
|
|
|
+ sellerItem.NewCustomerInvoicingCount = utils.FormatNumberWithCommas(mapNewCustomerInvoicingMoney[keyMap], 2) // "新客开票-(数据)"
|
|
|
+ sellerItem.NewCustomerPaymentsReceivedCount = utils.FormatNumberWithCommas(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] = mapNewContractMoneyServer[keyMap]
|
|
|
+ case "ExpiredContractData": //到期合同
|
|
|
+ mapSortDateService[vS.AdminId] = mapExpiredContractMoneyServer[keyMap]
|
|
|
+ case "RenewedContractData": //续约合同
|
|
|
+ mapSortDateService[vS.AdminId] = mapRenewedContractMoneyServer[keyMap]
|
|
|
+ case "RenewalRateData": //续约率
|
|
|
+ if mapRenewedContractMoneyServer[keyMap] == 0 || mapExpiredContractMoneyServer[keyMap] == 0 {
|
|
|
+ mapSortDateService[vS.AdminId] = 0
|
|
|
+ } else {
|
|
|
+ mapSortDateService[vS.AdminId] = mapRenewedContractMoneyServer[keyMap] / mapExpiredContractMoneyServer[keyMap]
|
|
|
+ }
|
|
|
+ case "ConfirmedNoRenewalContractData": //确认不续约合同
|
|
|
+ mapSortDateService[vS.AdminId] = confirmedNoRenewalContractMoneyServer[keyMap]
|
|
|
+ case "ConfirmNonRenewalRateData": //确认不续约率
|
|
|
+ if confirmedNoRenewalContractMoneyServer[keyMap] == 0 || mapExpiredContractMoneyServer[keyMap] == 0 {
|
|
|
+ mapSortDateService[vS.AdminId] = 0
|
|
|
+ } else {
|
|
|
+ mapSortDateService[vS.AdminId] = confirmedNoRenewalContractMoneyServer[keyMap] / mapExpiredContractMoneyServer[keyMap]
|
|
|
+ }
|
|
|
+ case "SignedClientCount": //签约客户数量
|
|
|
+ mapSortDateService[vS.AdminId] = float64(mapSignedClientNumServer[keyMap])
|
|
|
+ case "AverageRevenueCount": //客单价
|
|
|
+ if mapSignedClientNumServer[keyMap] == 0 || mapSignedClientMoneyServer[keyMap] == 0 {
|
|
|
+ mapSortDateService[vS.AdminId] = 0
|
|
|
+ } else {
|
|
|
+ mapSortDateService[vS.AdminId] = mapSignedClientMoneyServer[keyMap] / float64(mapSignedClientNumServer[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
|
|
|
sellerItem.SellerId = strings.Join(sellerServiceIds, ",")
|
|
|
sellerItem.SellerName = "服务组合计"
|
|
|
sellerItem.AddTrialCount = fmt.Sprint(mapAddTrialNum[keyMapTtoalServer])
|
|
|
- sellerItem.NewContractData = fmt.Sprint(utils.SubFloatToString(mapNewContractMoneyServer[keyMapTtoalServer], 2), " / ", mapNewContractNumServer[keyMapTtoalServer]) // 新签合同(金额/数量)-(数据)
|
|
|
- sellerItem.ExpiredContractData = fmt.Sprint(utils.SubFloatToString(mapExpiredContractMoneyServer[keyMapTtoalServer], 2), " / ", mapExpiredContractNumServer[keyMapTtoalServer]) //"到期合同(金额/数量)-(数据)"
|
|
|
- sellerItem.RenewedContractData = fmt.Sprint(utils.SubFloatToString(mapRenewedContractMoneyServer[keyMapTtoalServer], 2), " / ", mapRenewedContractNumServer[keyMapTtoalServer]) // "续约合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.NewContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapNewContractMoneyServer[keyMapTtoalServer], 2), " / ", mapNewContractNumServer[keyMapTtoalServer]) // 新签合同(金额/数量)-(数据)
|
|
|
+ sellerItem.ExpiredContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapExpiredContractMoneyServer[keyMapTtoalServer], 2), " / ", mapExpiredContractNumServer[keyMapTtoalServer]) //"到期合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoneyServer[keyMapTtoalServer], 2), " / ", mapRenewedContractNumServer[keyMapTtoalServer]) // "续约合同(金额/数量)-(数据)"
|
|
|
var renewalRateMoey string
|
|
|
var renewalRateNum string
|
|
|
if mapRenewedContractMoneyServer[keyMapTtoalServer] == 0 || mapExpiredContractMoneyServer[keyMapTtoalServer] == 0 {
|
|
@@ -833,8 +960,8 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
} else {
|
|
|
renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNumServer[keyMapTtoalServer])/float64(mapExpiredContractCompanyNumServer[keyMapTtoalServer])*100, 2) + "%"
|
|
|
}
|
|
|
- sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
|
|
|
- sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.SubFloatToString(confirmedNoRenewalContractMoneyServer[keyMapTtoalServer], 2), " / ", confirmedNoRenewalContractNumServer[keyMapTtoalServer]) //"确认不续约合同(金额/数量)-(数据)"
|
|
|
+ sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
|
|
|
+ sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoneyServer[keyMapTtoalServer], 2), " / ", confirmedNoRenewalContractNumServer[keyMapTtoalServer]) //"确认不续约合同(金额/数量)-(数据)"
|
|
|
|
|
|
var confirmNonRenewalRateMoey string
|
|
|
var confirmNonRenewalRateNum string
|
|
@@ -854,18 +981,18 @@ func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
|
|
|
if mapSignedClientNumServer[keyMapTtoalServer] == 0 || mapSignedClientMoneyServer[keyMapTtoalServer] == 0 {
|
|
|
sellerItem.AverageRevenueCount = "0"
|
|
|
} else {
|
|
|
- sellerItem.AverageRevenueCount = utils.SubFloatToString(mapSignedClientMoneyServer[keyMapTtoalServer]/float64(mapSignedClientNumServer[keyMapTtoalServer]), 2) //客单价
|
|
|
+ sellerItem.AverageRevenueCount = utils.FormatNumberWithCommas(mapSignedClientMoneyServer[keyMapTtoalServer]/float64(mapSignedClientNumServer[keyMapTtoalServer]), 2) //客单价
|
|
|
}
|
|
|
|
|
|
- sellerItem.InvoiceAmountCount = utils.SubFloatToString(mapInvoiceAmountMoney[keyMapTtoalServer], 2) //"开票金额-(数据)"
|
|
|
- sellerItem.PaymentReceivedCount = utils.SubFloatToString(mapPaymentAmountMoney[keyMapTtoalServer], 2) //"开票金额-(数据)"
|
|
|
+ sellerItem.InvoiceAmountCount = utils.FormatNumberWithCommas(mapInvoiceAmountMoney[keyMapTtoalServer], 2) //"开票金额-(数据)"
|
|
|
+ sellerItem.PaymentReceivedCount = utils.FormatNumberWithCommas(mapPaymentAmountMoney[keyMapTtoalServer], 2) //"开票金额-(数据)"
|
|
|
if mapInvoiceAmountMoney[keyMapTtoalServer] == 0 || mapPaymentAmountMoney[keyMapTtoalServer] == 0 {
|
|
|
sellerItem.UnpaidRatioCount = "0%"
|
|
|
} else {
|
|
|
sellerItem.UnpaidRatioCount = utils.SubFloatToString((mapInvoiceAmountMoney[keyMapTtoalServer]-mapPaymentAmountMoney[keyMapTtoalServer])/mapInvoiceAmountMoney[keyMapTtoalServer]*100, 2) + "%" //"未到款比例-(数据)"
|
|
|
}
|
|
|
- sellerItem.NewCustomerInvoicingCount = utils.SubFloatToString(mapNewCustomerInvoicingMoney[keyMapTtoalServer], 2) // "新客开票-(数据)"
|
|
|
- sellerItem.NewCustomerPaymentsReceivedCount = utils.SubFloatToString(mapNewCustomerPaymentsReceivedMoney[keyMapTtoalServer], 2) // "新客到款-(数据)"
|
|
|
+ sellerItem.NewCustomerInvoicingCount = utils.FormatNumberWithCommas(mapNewCustomerInvoicingMoney[keyMapTtoalServer], 2) // "新客开票-(数据)"
|
|
|
+ sellerItem.NewCustomerPaymentsReceivedCount = utils.FormatNumberWithCommas(mapNewCustomerPaymentsReceivedMoney[keyMapTtoalServer], 2) // "新客到款-(数据)"
|
|
|
item.DataList = append(item.DataList, sellerItem)
|
|
|
}
|
|
|
items = append(items, item)
|
|
@@ -878,6 +1005,43 @@ 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 {
|
|
|
+ //fmt.Println("vsort.AdminIdKey", vsort.AdminIdKey, "vsort.AdminValue", vsort.AdminValue)
|
|
|
+ for _, vDate := range dataList {
|
|
|
+ if vDate.SellerId == strconv.Itoa(vsort.AdminIdKey) {
|
|
|
+ dataListResp = append(dataListResp, vDate)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //fmt.Println("dataListResp", dataListResp)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
// MergeCompanyList
|
|
|
// @Title 权益数据汇总弹窗详情
|
|
|
// @Description 权益数据汇总弹窗详情接口
|