Browse Source

Merge branch 'master' of http://8.136.199.33:3000/hongze/hz_crm_api into cygx/cygx_14_8

zhangchuanxing 5 days ago
parent
commit
cf61696e6e

+ 10 - 1
controllers/company_seller.go

@@ -7509,7 +7509,16 @@ func (this *CompanySellerController) CheckListRaiServerType() {
 	list := make([]company.DepartmentGroupSellers, 0)
 	listServer := make([]company.DepartmentGroupSellers, 0)
 
-	condition := " AND role_type_code IN ('rai_seller','rai_group') AND enabled = 1 AND  rai_enabled = 1 "
+	// 获取图片识别手机号的配置
+	crmConfig, err := company.GetConfigDetailByCode("rai_data_summary_seller")
+	if err != nil {
+		br.Msg = "获取配置失败"
+		br.ErrMsg = "获取配置失败"
+		br.IsSendEmail = false
+		return
+	}
+
+	condition := " AND role_type_code IN ('rai_seller','rai_group') AND enabled = 1 AND  rai_enabled = 1 OR   admin_id  IN( " + crmConfig.ConfigValue + ") "
 	var pars []interface{}
 	//名字带6 的属于服务组
 	//if serverType == "开拓" {

+ 206 - 42
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, ",")
@@ -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 权益数据汇总弹窗详情接口

+ 5 - 1
controllers/statistic_report.go

@@ -3797,7 +3797,11 @@ func (this *StatisticReportController) IncrementalCompanyList() {
 
 	//条件
 	if adminId != "" {
-		condition += ` AND c.seller_id in  (` + adminId + `) `
+		if dataType == "未续约客户" {
+			condition += ` AND (c.share_seller_id in  (` + adminId + `) OR c.seller_id in  (` + adminId + `)) `
+		}else{
+			condition += ` AND c.seller_id in  (` + adminId + `) `
+		}
 		//pars = append(pars, adminId)
 	} else {
 

+ 1 - 1
models/statistic_report.go

@@ -822,7 +822,7 @@ func GetIncrementalCompanyListByOperationRecord(condition string, pars []interfa
 	sql1 += ` GROUP BY a.company_id, a.product_id `
 
 	//查询真正的数据
-	sql := `SELECT a.id, a.company_id, b.company_name, c.seller_id, c.seller_name, c.seller_name_init, a.product_id, a.product_name, a.create_time, b.region_type, c.renewal_reason, c.renewal_todo, c.status , a.sys_real_name, a.operation FROM company_operation_record a
+	sql := `SELECT a.id, a.company_id, b.company_name, c.seller_id, c.seller_name, c.seller_name_init, a.product_id, a.product_name, a.create_time, b.region_type, c.renewal_reason, c.renewal_todo, c.status , a.sys_real_name, a.operation, c.share_seller FROM company_operation_record a
 		RIGHT JOIN company b ON a.company_id = b.company_id
 		JOIN company_product c ON b.company_id = c.company_id 
 		AND a.product_id = c.product_id

+ 20 - 18
services/cygx/acitvity.go

@@ -1256,15 +1256,16 @@ func DoActivityOnenIdWxTemplateMsg(activityId int) (err error) {
 		item := new(models.OpenIdList)
 		item.UserId = v.UserId
 		item.OpenId = v.OpenId
-		if mapUserIdChooseSend[v.UserId] == 0 {
-			//如果小助手没有选择过权限信息,那么做消息推送
-			OpenIdList = append(OpenIdList, item)
-		} else {
-			//如果勾选了权限信息,则要满足 1选择产业,2没有选择不接受任何消息推送,3活动对应的主客观跟自己选择的一致。
-			if mapOpenidFllow[v.UserId] != "" && mapOpenidRefuset[v.UserId] == "" && mapUserIdChooseTypeSend[v.UserId] != 0 {
-				OpenIdList = append(OpenIdList, item)
-			}
-		}
+		OpenIdList = append(OpenIdList, item)
+		//if mapUserIdChooseSend[v.UserId] == 0 {
+		//	//如果小助手没有选择过权限信息,那么做消息推送
+		//	OpenIdList = append(OpenIdList, item)
+		//} else {
+		//	//如果勾选了权限信息,则要满足 1选择产业,2没有选择不接受任何消息推送,3活动对应的主客观跟自己选择的一致。
+		//	if mapOpenidFllow[v.UserId] != "" && mapOpenidRefuset[v.UserId] == "" && mapUserIdChooseTypeSend[v.UserId] != 0 {
+		//		OpenIdList = append(OpenIdList, item)
+		//	}
+		//}
 	}
 
 	var openiditems []*cygx.CygxActivityUserTemplateRecord
@@ -1292,15 +1293,16 @@ func DoActivityOnenIdWxTemplateMsg(activityId int) (err error) {
 		item := new(models.OpenIdList)
 		item.UserId = v.UserId
 		item.OpenId = v.OpenId
-		if mapUserIdChooseSend[v.UserId] == 0 {
-			//如果小助手没有选择过权限信息,那么做消息推送
-			OpenIdListYx = append(OpenIdListYx, item)
-		} else {
-			//如果勾选了权限信息,则要满足 1选择产业,2没有选择不接受任何消息推送,3活动对应的主客观跟自己选择的一致。
-			if mapOpenidFllow[v.UserId] != "" && mapOpenidRefuset[v.UserId] == "" && mapUserIdChooseTypeSend[v.UserId] != 0 {
-				OpenIdListYx = append(OpenIdListYx, item)
-			}
-		}
+		OpenIdListYx = append(OpenIdListYx, item)
+		//if mapUserIdChooseSend[v.UserId] == 0 {
+		//	//如果小助手没有选择过权限信息,那么做消息推送
+		//	OpenIdListYx = append(OpenIdListYx, item)
+		//} else {
+		//	//如果勾选了权限信息,则要满足 1选择产业,2没有选择不接受任何消息推送,3活动对应的主客观跟自己选择的一致。
+		//	if mapOpenidFllow[v.UserId] != "" && mapOpenidRefuset[v.UserId] == "" && mapUserIdChooseTypeSend[v.UserId] != 0 {
+		//		OpenIdListYx = append(OpenIdListYx, item)
+		//	}
+		//}
 	}
 
 	var openIdArrYx []string

+ 26 - 0
utils/common.go

@@ -2361,3 +2361,29 @@ func GetAttendanceDetailSecondsByYiDong(str string) string {
 	timeStr += "''"
 	return timeStr
 }
+
+// 浮点类型转为千分位字符串
+func FormatNumberWithCommas(num float64, m int) string {
+	// 先格式化为2位小数字符串
+	str := strconv.FormatFloat(num, 'f', m, 64)
+
+	// 分割整数和小数部分
+	parts := strings.Split(str, ".")
+	intPart := parts[0]
+	decimalPart := parts[1] // 已截取2位小数
+
+	// 从右往左每3位加逗号
+	var formatted strings.Builder
+	n := len(intPart)
+	for i := 0; i < n; i++ {
+		if (n-i)%3 == 0 && i != 0 {
+			formatted.WriteByte(',')
+		}
+		formatted.WriteByte(intPart[i])
+	}
+	if decimalPart == "00" {
+		return formatted.String()
+	} else {
+		return formatted.String() + "." + decimalPart
+	}
+}