rai_data_summary.go 88 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104
  1. package statistic
  2. import (
  3. "fmt"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "hongze/hz_crm_api/controllers"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/company"
  8. "hongze/hz_crm_api/models/cygx"
  9. "hongze/hz_crm_api/models/fms"
  10. "hongze/hz_crm_api/models/statistic_report"
  11. "hongze/hz_crm_api/models/system"
  12. "hongze/hz_crm_api/services"
  13. cygxService "hongze/hz_crm_api/services/cygx"
  14. "hongze/hz_crm_api/utils"
  15. "sort"
  16. "strconv"
  17. "strings"
  18. "time"
  19. )
  20. // 权益数据汇总
  21. // StatisticRaiDataSummaryController 权益数据汇总基类
  22. type StatisticRaiDataSummaryController struct {
  23. controllers.BaseAuthController
  24. }
  25. // MergeCompanyList
  26. // @Title 权益数据汇总
  27. // @Description 权益数据汇总统计列表接口
  28. // @Param AdminId query string true "开拓组销售id,多个用英文逗号隔开,空字符串为全部"
  29. // @Param ServiceAdminId query string true "服务组销售id,多个用英文逗号隔开,空字符串为全部"
  30. // @Param StartYear query int false "开始日期(年份)"
  31. // @Param EndYear query int false "结束日期(年份)"
  32. // @Param DataType query string false "报表类型,枚举值:`季度`,`年度`,`半年度`"
  33. // @Param DevelopButton query int false "开拓组开关,枚举值:1:开启,0:关闭 ,默认关闭"
  34. // @Param ServerButton query int false "服务组开关,枚举值:1:开启,0:关闭 ,默认关闭"
  35. // @Param ContractButtonType query string false "开关类型,:`新签`,`续约`,`收入` 多个用英文逗号隔开, "
  36. // @Param StartDate query string false "开始时间 "
  37. // @Param EndDate query string false "结束时间 "
  38. // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:根据列表表头对应参数"
  39. // @Param SortType query string true "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
  40. // @Param IsExport query bool false "是否导出excel,默认是false"
  41. // @Success 200 {object} statistic_report.RaiDataSummaryListResp
  42. // @router /rai_data_summary/list [get]
  43. func (this *StatisticRaiDataSummaryController) RaiDataSummaryList() {
  44. br := new(models.BaseResponse).Init()
  45. defer func() {
  46. this.Data["json"] = br
  47. this.ServeJSON()
  48. }()
  49. sysUser := this.SysUser
  50. if sysUser == nil {
  51. br.Msg = "请登录"
  52. br.ErrMsg = "请登录,SysUser Is Empty"
  53. br.Ret = 408
  54. return
  55. }
  56. dataType := this.GetString("DataType")
  57. adminId := this.GetString("AdminId")
  58. serviceAdminId := this.GetString("ServiceAdminId")
  59. startYear, _ := this.GetInt("StartYear")
  60. endYear, _ := this.GetInt("EndYear")
  61. developButton, _ := this.GetBool("DevelopButton")
  62. serverButton, _ := this.GetBool("ServerButton")
  63. startDate := this.GetString("StartDate")
  64. endDate := this.GetString("EndDate")
  65. sortParam := this.GetString("SortParam")
  66. sortType := this.GetString("SortType")
  67. adminIdArr := strings.Split(adminId, ",")
  68. serviceAdminIdArr := strings.Split(serviceAdminId, ",")
  69. if adminId == "" {
  70. adminIdArr = make([]string, 0)
  71. }
  72. if serviceAdminId == "" {
  73. serviceAdminIdArr = make([]string, 0)
  74. }
  75. dataTypeArr := []string{}
  76. if dataType == "季度" {
  77. dataTypeArr = []string{"Q1", "Q2", "Q3", "Q4"}
  78. } else if dataType == "半年度" {
  79. dataTypeArr = []string{"H1", "H2"}
  80. } else {
  81. dataTypeArr = []string{""}
  82. }
  83. var condition string
  84. var pars []interface{}
  85. var conditionEnSeller string // 手动禁用的销售
  86. // 获取图片识别手机号的配置
  87. crmConfig, err := company.GetConfigDetailByCode("rai_data_summary_seller")
  88. if err != nil {
  89. br.Msg = "获取配置失败"
  90. br.ErrMsg = "获取配置失败"
  91. br.IsSendEmail = false
  92. return
  93. }
  94. //fmt.Println(crmConfig.ConfigValue)
  95. conditionEnSeller = " AND real_name NOT IN ('余晔', '于卓铭', '张怡', '王芳6') "
  96. mapsellerDevelop := make(map[int]bool) // 开拓组销售Map
  97. mapsellerService := make(map[int]bool) // 服务组销售Map
  98. var sellerIds []string
  99. var sellerServiceIds []string
  100. condition = " AND role_type_code IN ('rai_seller','rai_group') " + conditionEnSeller + " OR admin_id IN( " + crmConfig.ConfigValue + ") "
  101. sellerListAll, err := system.GetSysUserItemsOrderByCreated(condition, pars)
  102. if err != nil {
  103. br.Msg = "获取管理账号失败"
  104. br.ErrMsg = "获取管理账号失败,Err:" + err.Error()
  105. return
  106. }
  107. for _, v := range sellerListAll {
  108. if strings.Contains(v.RealName, "6") {
  109. mapsellerService[v.AdminId] = true
  110. sellerServiceIds = append(sellerServiceIds, strconv.Itoa(v.AdminId))
  111. } else {
  112. mapsellerDevelop[v.AdminId] = true
  113. sellerIds = append(sellerIds, strconv.Itoa(v.AdminId))
  114. }
  115. }
  116. condition = " AND role_type_code IN ('rai_seller','rai_group') AND enabled = 1 AND rai_enabled = 1 " + conditionEnSeller
  117. if adminId != "" {
  118. serviceAdminId = ""
  119. condition += " AND admin_id IN (" + adminId + ") "
  120. condition += " OR admin_id IN (" + adminId + ") "
  121. sellerIds = make([]string, 0)
  122. }
  123. if serviceAdminId != "" {
  124. condition += " AND admin_id IN (" + serviceAdminId + ") "
  125. sellerServiceIds = make([]string, 0)
  126. }
  127. if developButton && !serverButton && adminId == "" && serviceAdminId == "" { //开拓组筛选条件
  128. condition += " AND real_name NOT LIKE '%6%' "
  129. }
  130. if !developButton && serverButton && adminId == "" && serviceAdminId == "" { //服务组筛选条件
  131. condition += " AND real_name LIKE '%6%' "
  132. }
  133. sellerList, err := system.GetSysUserItemsOrderByCreated(condition, pars)
  134. if err != nil {
  135. br.Msg = "获取管理账号失败"
  136. br.ErrMsg = "获取管理账号失败,Err:" + err.Error()
  137. return
  138. }
  139. var sellerDevelop []*system.AdminItem // 开拓组销售
  140. var sellerService []*system.AdminItem // 服务组销售
  141. var sellerDevelopIds = make(map[int]bool) // 开拓组销售的map
  142. mapsellerId := make(map[int]bool) // 权益销售map
  143. for _, v := range sellerList {
  144. if strings.Contains(v.RealName, "6") {
  145. sellerService = append(sellerService, v)
  146. } else {
  147. sellerDevelop = append(sellerDevelop, v)
  148. sellerDevelopIds[v.AdminId] = true
  149. }
  150. mapsellerId[v.AdminId] = true
  151. }
  152. var isCustomizeDate bool // 是否有自定义的时间
  153. //拼接起始时间查询
  154. if startDate == "" {
  155. startDate = fmt.Sprintf("%d-01-01", startYear)
  156. endDate = fmt.Sprintf("%d-12-31", endYear)
  157. } else {
  158. isCustomizeDate = true
  159. startYear = 1
  160. endYear = 1
  161. dataTypeArr = []string{""}
  162. }
  163. //新签部分的数据
  164. var conditionRai string
  165. var parsRai []interface{}
  166. conditionRai = " AND a.product_id = 2 AND a.status = 1 AND a.start_date >= ? AND a.start_date <= ? AND a.rai_contract_type = '新签合同' AND a.contract_type != '打分1派点' "
  167. parsRai = append(parsRai, startDate, endDate)
  168. listRaiData, err := statistic_report.GetRaiDataSummaryList(conditionRai, parsRai)
  169. if err != nil {
  170. br.Msg = "获取数据信息失败"
  171. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  172. return
  173. }
  174. var companyContractIds []int
  175. for _, v := range listRaiData {
  176. companyContractIds = append(companyContractIds, v.CompanyId)
  177. }
  178. companyContractIds = append(companyContractIds, 0)
  179. //续约部分的数据
  180. var conditionInherit string
  181. var parsInherit []interface{}
  182. conditionInherit = ` AND c.product_id = 2 AND a.status = 1 AND a.inherit_end_date >= ? AND a.inherit_end_date <= ? AND a.rai_contract_type = '续约合同' AND a.contract_type != '打分1派点' AND a.company_contract_id NOT IN (` + utils.GetOrmInReplace(len(companyContractIds)) + `) `
  183. parsInherit = append(parsInherit, startDate, endDate, companyContractIds)
  184. listInheritData, err := statistic_report.GetRaiDataSummaryInheritList(conditionInherit, parsInherit)
  185. if err != nil {
  186. br.Msg = "获取数据信息失败"
  187. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  188. return
  189. }
  190. //确认不续约、到期合同部分的数据
  191. var conditionEnd string
  192. var parsEnd []interface{}
  193. conditionEnd = " AND c.product_id = 2 AND a.status = 1 AND a.contract_type != '打分1派点' AND a.due_end_date >= ? AND a.due_end_date <= ? AND a.end_date < ? "
  194. parsEnd = append(parsEnd, startDate, endDate, time.Now().Format(utils.FormatDate))
  195. listEndData, err := statistic_report.GetRaiDataSummaryList(conditionEnd, parsEnd)
  196. if err != nil {
  197. br.Msg = "获取数据信息失败"
  198. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  199. return
  200. }
  201. var conditionConfirm string
  202. var parsConfirm []interface{}
  203. mapNoRenewedcompanyContractIds := make(map[int]bool) //已经确定未续约的合同ID
  204. conditionConfirm = " AND a.company_ascribe_id != 9 AND b.contract_type != '打分1派点' "
  205. companyConfirmList, err := company.GetCompanyContractNoRenewedAscribeListJoin(conditionConfirm, parsConfirm, 0, 0)
  206. if err != nil && err.Error() != utils.ErrNoRow() {
  207. br.Msg = "获取失败"
  208. br.ErrMsg = "获取失败,GetCompanyNoRenewedAscribeList Err:" + err.Error()
  209. return
  210. }
  211. for _, v := range companyConfirmList {
  212. mapNoRenewedcompanyContractIds[v.CompanyContractId] = true
  213. }
  214. mapRenewedContractId := make(map[int]bool) // 出现在续约客户的合同
  215. mapAddTrialNum := make(map[string]float64) // 新增试用-(数据)
  216. mapNewContractMoney := make(map[string]float64) // 新签合同(金额)
  217. mapNewContractNum := make(map[string]int) // 新签合同(数量)
  218. mapExpiredContractMoney := make(map[string]float64) // 到期合同(金额)
  219. mapExpiredContractMoney2 := make(map[string]float64) // 到期合同(金额)(处理永续合同使用)
  220. mapExpiredContractNum := make(map[string]int) // 到期合同(数量)
  221. mapExpiredContractCompanyNum := make(map[string]int) // 到期公司(数量)
  222. mapExpiredContractCompanyNum2 := make(map[string]int) // 到期公司(数量)处理永续合同使用)
  223. mapRenewedContractMoney := make(map[string]float64) // 续约合同(金额)
  224. mapRenewedContractNum := make(map[string]int) // 续约合同(数量)
  225. mapRenewedContractCompanyNum := make(map[string]int) // 续约公司(数量)
  226. confirmedNoRenewalContractMoney := make(map[string]float64) // 确认不续约合同(金额)
  227. confirmedNoRenewalContractNum := make(map[string]int) // 确认不续约合同(数量)
  228. confirmedNoRenewalContractCompanyNum := make(map[string]int) // 确认不续约公司(数量)
  229. mapSignedClientNum := make(map[string]int) // 签约客户(数量)
  230. mapSignedClientMoney := make(map[string]float64) // 签约客户(金额)
  231. mapInvoiceAmountMoney := make(map[string]float64) // 财务系统开票金额(金额)
  232. mapPaymentAmountMoney := make(map[string]float64) // 财务系统到款金额(金额)
  233. mapNewCustomerInvoicingMoney := make(map[string]float64) // 财务系统新客开票金额(金额)
  234. mapNewCustomerPaymentsReceivedMoney := make(map[string]float64) // 财务系统新客到款金额(金额)
  235. mapNewContractMoneyServer := make(map[string]float64) // 新签合同(金额)
  236. mapNewContractNumServer := make(map[string]int) // 新签合同(数量)
  237. mapExpiredContractMoneyServer := make(map[string]float64) // 到期合同(金额)
  238. mapExpiredContractMoneyServer2 := make(map[string]float64) // 到期合同(金额)(处理永续合同使用)
  239. mapExpiredContractNumServer := make(map[string]int) // 到期合同(数量)_服务组
  240. mapExpiredContractCompanyNumServer := make(map[string]int) // 到期公司(数量)_服务组
  241. mapExpiredContractCompanyNumServer2 := make(map[string]int) // 到期公司(数量)_服务组
  242. mapRenewedContractMoneyServer := make(map[string]float64) // 续约合同(金额)_服务组
  243. mapRenewedContractNumServer := make(map[string]int) // 续约合同(数量)_服务组
  244. mapRenewedContractCompanyNumServer := make(map[string]int) // 续约公司(数量)_服务组
  245. confirmedNoRenewalContractMoneyServer := make(map[string]float64) // 确认不续约合同(金额)_服务组
  246. confirmedNoRenewalContractNumServer := make(map[string]int) // 确认不续约合同(数量)_服务组
  247. confirmedNoRenewalContractCompanyNumServer := make(map[string]int) // 确认不续约公司(数量)_服务组
  248. mapSignedClientNumServer := make(map[string]int) // 签约客户(数量)
  249. mapSignedClientMoneyServer := make(map[string]float64) // 签约客户(金额)
  250. ShareTotalServeCountRed := make(map[string]float64) // 当时标红总数量
  251. ShareTotalServeCount := make(map[string]float64) // 当时服务客户总数
  252. var keyMap string
  253. var keyMapTtoal string
  254. var keyMapTtoalServer string
  255. var keyMapCompany string
  256. var keyMapCompanyTotal string
  257. var keyMapCompanyNo string
  258. //var keyMapCompanyNoServer string
  259. var keySigned string
  260. mapCompanyData := make(map[string]bool)
  261. //新签部分的数据(开拓组)
  262. for _, v := range listRaiData {
  263. if !mapsellerDevelop[v.SellerIdInit] {
  264. continue
  265. }
  266. yearStr := getYearStar(utils.StrDateToDate(v.StartDate), dataType, isCustomizeDate)
  267. keyMap = fmt.Sprint(yearStr, "_", v.SellerIdInit)
  268. keySigned = fmt.Sprint(yearStr, "_CID_", v.CompanyId, "_SID_", v.SellerIdInit)
  269. keyMapTtoal = fmt.Sprint(yearStr, "_Develop")
  270. if v.RaiContractType == "新签合同" {
  271. mapNewContractMoney[keyMap] += v.Money
  272. mapNewContractNum[keyMap]++
  273. mapNewContractMoney[keyMapTtoal] += v.Money
  274. mapNewContractNum[keyMapTtoal]++
  275. }
  276. mapSignedClientMoney[keyMap] += v.Money
  277. mapSignedClientMoney[keyMapTtoal] += v.Money
  278. if !mapCompanyData[keySigned] && v.RaiContractType == "新签合同" {
  279. mapSignedClientNum[keyMap]++
  280. mapSignedClientNum[keyMapTtoal]++
  281. mapCompanyData[keySigned] = true
  282. }
  283. }
  284. //新签部分的数据(服务组)
  285. for _, v := range listRaiData {
  286. if !mapsellerService[v.ShareSellerIdInit] {
  287. continue
  288. }
  289. yearStr := getYearStar(utils.StrDateToDate(v.StartDate), dataType, isCustomizeDate)
  290. keyMap = fmt.Sprint(yearStr, "_Server_", v.ShareSellerIdInit)
  291. keySigned = fmt.Sprint(yearStr, "_Server_", v.CompanyId, "_SID_", v.ShareSellerIdInit)
  292. keyMapTtoal = fmt.Sprint(yearStr, "_Server_")
  293. if v.RaiContractType == "新签合同" {
  294. mapNewContractMoneyServer[keyMap] += v.Money
  295. mapNewContractNumServer[keyMap]++
  296. mapNewContractMoneyServer[keyMapTtoal] += v.Money
  297. mapNewContractNumServer[keyMapTtoal]++
  298. }
  299. mapSignedClientMoneyServer[keyMap] += v.Money
  300. mapSignedClientMoneyServer[keyMapTtoal] += v.Money
  301. if !mapCompanyData[keySigned] && v.RaiContractType == "新签合同" {
  302. mapSignedClientNumServer[keyMap]++
  303. mapSignedClientNumServer[keyMapTtoal]++
  304. mapCompanyData[keySigned] = true
  305. }
  306. }
  307. //续约部分的数据(开拓组)
  308. mapKeyMapCompanyData := make(map[string]bool)
  309. for _, v := range listInheritData {
  310. if len(adminIdArr) > 0 && !utils.InArrayByStr(adminIdArr, strconv.Itoa(v.SellerIdLast)) {
  311. continue
  312. }
  313. if !mapsellerDevelop[v.SellerIdLast] {
  314. continue
  315. }
  316. yearStr := getYearStar(utils.StrDateToDate(v.InheritEndDate), dataType, isCustomizeDate)
  317. keyMap = fmt.Sprint(yearStr, "_", v.SellerIdLast)
  318. keyMapCompany = fmt.Sprint(yearStr, "_", v.SellerIdLast, "_CID_", v.CompanyId)
  319. keySigned = fmt.Sprint(yearStr, "_CID_", v.CompanyId, "_SID_", v.SellerIdLast)
  320. keyMapTtoal = fmt.Sprint(yearStr, "_Develop")
  321. //续约合同 数据
  322. mapRenewedContractMoney[keyMap] += v.Money
  323. mapRenewedContractMoney[keyMapTtoal] += v.Money
  324. mapRenewedContractNum[keyMap]++
  325. mapRenewedContractNum[keyMapTtoal]++
  326. //续约公司 数据
  327. if !mapKeyMapCompanyData[keyMapCompany] {
  328. mapRenewedContractCompanyNum[keyMap]++
  329. mapRenewedContractCompanyNum[keyMapTtoal]++
  330. mapKeyMapCompanyData[keyMapCompany] = true
  331. }
  332. //签约合同 数据
  333. mapSignedClientMoney[keyMap] += v.Money
  334. mapSignedClientMoney[keyMapTtoal] += v.Money
  335. if !mapCompanyData[keySigned] {
  336. mapSignedClientNum[keyMap]++
  337. mapSignedClientNum[keyMapTtoal]++
  338. mapCompanyData[keySigned] = true
  339. }
  340. }
  341. //续约部分的数据(服务组)
  342. for _, v := range listInheritData {
  343. if len(serviceAdminIdArr) > 0 && !utils.InArrayByStr(serviceAdminIdArr, strconv.Itoa(v.ShareSellerIdInit)) {
  344. continue
  345. }
  346. if !mapsellerService[v.ShareSellerIdInit] {
  347. continue
  348. }
  349. //if v.Status != "永续" || v.ContractType != "打分派点" {
  350. // mapRenewedContractId[v.CompanyContractId] = true
  351. //}
  352. yearStr := getYearStar(utils.StrDateToDate(v.InheritEndDate), dataType, isCustomizeDate)
  353. keyMap = fmt.Sprint(yearStr, "_Server_", v.ShareSellerIdInit)
  354. keyMapCompany = fmt.Sprint(yearStr, "_Server_", v.ShareSellerIdInit, "_CID_", v.CompanyId)
  355. keySigned = fmt.Sprint(yearStr, "_Server_", v.CompanyId, "_SID_", v.ShareSellerIdInit)
  356. keyMapTtoal = fmt.Sprint(yearStr, "_Server_")
  357. //续约合同 数据
  358. mapRenewedContractMoneyServer[keyMap] += v.Money
  359. mapRenewedContractMoneyServer[keyMapTtoal] += v.Money
  360. mapRenewedContractNumServer[keyMap]++
  361. mapRenewedContractNumServer[keyMapTtoal]++
  362. //续约公司 数据
  363. if !mapKeyMapCompanyData[keyMapCompany] {
  364. mapRenewedContractCompanyNumServer[keyMap]++
  365. mapRenewedContractCompanyNumServer[keyMapTtoal]++
  366. mapKeyMapCompanyData[keyMapCompany] = true
  367. }
  368. ////签约合同 数据
  369. mapSignedClientMoneyServer[keyMap] += v.Money
  370. mapSignedClientMoneyServer[keyMapTtoal] += v.Money
  371. if !mapCompanyData[keySigned] {
  372. mapSignedClientNumServer[keyMap]++
  373. mapSignedClientNumServer[keyMapTtoal]++
  374. mapCompanyData[keySigned] = true
  375. }
  376. }
  377. //确认不续约、到期合同部分的数据
  378. mapKeyMapCompanyEndData := make(map[string]bool)
  379. mapKeyMapCompanyEndDataTotal := make(map[string]bool)
  380. mapKeyMapCompanyNoData := make(map[string]bool)
  381. //到期部分开拓组数据
  382. for _, v := range listEndData {
  383. if len(adminIdArr) > 0 && !utils.InArrayByStr(adminIdArr, strconv.Itoa(v.SellerIdLast)) {
  384. continue
  385. }
  386. if !mapsellerDevelop[v.SellerIdLast] {
  387. continue
  388. }
  389. yearStr := getYearStar(utils.StrDateToDate(v.DueEndDate), dataType, isCustomizeDate)
  390. keyMap = fmt.Sprint(yearStr, "_", v.SellerIdLast)
  391. keyMapCompany = fmt.Sprint(yearStr, "_", v.SellerIdLast, "_CID_", v.CompanyId)
  392. keyMapCompanyTotal = fmt.Sprint(yearStr, "_CID_", v.CompanyId)
  393. keyMapCompanyNo = fmt.Sprint(yearStr, "_", v.SellerIdLast, "_CID_NO", v.CompanyId)
  394. keyMapTtoal = fmt.Sprint(yearStr, "_Develop")
  395. //到期合同数据
  396. mapExpiredContractMoney[keyMap] += v.Money
  397. mapExpiredContractMoney[keyMapTtoal] += v.Money
  398. //一份合同如果属于打分派点,并且当前状态是永续,同时还不属于续约合同,那就加在分子里面,如果是自定义的也可以进展示
  399. if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
  400. mapExpiredContractMoney2[keyMap] += v.Money
  401. mapExpiredContractMoney2[keyMapTtoal] += v.Money
  402. }
  403. //一家公司同一个时间纬度,只统计一次
  404. mapExpiredContractNum[keyMap]++
  405. mapExpiredContractNum[keyMapTtoal]++
  406. //一家公司同一个时间纬度,只统计一次
  407. if !mapKeyMapCompanyEndData[keyMapCompany] {
  408. mapExpiredContractCompanyNum[keyMap]++
  409. if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
  410. mapExpiredContractCompanyNum2[keyMap]++
  411. }
  412. mapKeyMapCompanyEndData[keyMapCompany] = true
  413. }
  414. if !mapKeyMapCompanyEndDataTotal[keyMapCompanyTotal] { //同一家共公司,在某个时段的多分合同下有不同的销售进行兼容
  415. mapExpiredContractCompanyNum[keyMapTtoal]++
  416. if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
  417. mapExpiredContractCompanyNum2[keyMapCompanyTotal]++
  418. }
  419. mapKeyMapCompanyEndDataTotal[keyMapCompanyTotal] = true
  420. }
  421. if mapNoRenewedcompanyContractIds[v.CompanyContractId] { // 确认不续约合同
  422. confirmedNoRenewalContractMoney[keyMap] += v.Money
  423. confirmedNoRenewalContractMoney[keyMapTtoal] += v.Money
  424. //一家公司同一个时间纬度,只统计一次
  425. confirmedNoRenewalContractNum[keyMap]++
  426. confirmedNoRenewalContractNum[keyMapTtoal]++
  427. if !mapKeyMapCompanyNoData[keyMapCompanyNo] {
  428. confirmedNoRenewalContractCompanyNum[keyMap]++
  429. confirmedNoRenewalContractCompanyNum[keyMapTtoal]++
  430. mapKeyMapCompanyNoData[keyMapCompanyNo] = true
  431. }
  432. }
  433. }
  434. //到期部分服务组数据
  435. for _, v := range listEndData {
  436. if len(serviceAdminIdArr) > 0 && !utils.InArrayByStr(serviceAdminIdArr, strconv.Itoa(v.ShareSellerIdLast)) {
  437. continue
  438. }
  439. if !mapsellerService[v.ShareSellerIdLast] {
  440. continue
  441. }
  442. yearStr := getYearStar(utils.StrDateToDate(v.DueEndDate), dataType, isCustomizeDate)
  443. keyMap = fmt.Sprint(yearStr, "_Server_", v.ShareSellerIdLast)
  444. keyMapCompany = fmt.Sprint(yearStr, "_Server_", v.ShareSellerIdLast, "_CID_", v.CompanyId)
  445. keyMapCompanyNo = fmt.Sprint(yearStr, "_Server_", v.ShareSellerIdLast, "_CID_NO", v.CompanyId)
  446. keyMapTtoal = fmt.Sprint(yearStr, "_Server_")
  447. //到期合同数据
  448. mapExpiredContractMoneyServer[keyMap] += v.Money
  449. mapExpiredContractMoneyServer[keyMapTtoal] += v.Money
  450. //一份合同如果属于打分派点,并且当前状态是永续,同时还不属于续约合同,那就加在分子里面,如果是自定义的也可以进展示
  451. if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
  452. mapExpiredContractMoneyServer2[keyMap] += v.Money
  453. mapExpiredContractMoneyServer2[keyMapTtoal] += v.Money
  454. }
  455. mapExpiredContractNumServer[keyMap]++
  456. mapExpiredContractNumServer[keyMapTtoal]++
  457. //一家公司同一个时间纬度,只统计一次
  458. if !mapKeyMapCompanyEndData[keyMapCompany] {
  459. mapExpiredContractCompanyNumServer[keyMap]++
  460. mapExpiredContractCompanyNumServer[keyMapTtoal]++
  461. if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
  462. mapExpiredContractCompanyNumServer2[keyMap]++
  463. mapExpiredContractCompanyNumServer2[keyMapTtoal]++
  464. }
  465. mapKeyMapCompanyEndData[keyMapCompany] = true
  466. }
  467. if mapNoRenewedcompanyContractIds[v.CompanyContractId] { // 确认不续约合同
  468. confirmedNoRenewalContractMoneyServer[keyMap] += v.Money
  469. confirmedNoRenewalContractMoneyServer[keyMapTtoal] += v.Money
  470. //一家公司同一个时间纬度,只统计一次
  471. confirmedNoRenewalContractNumServer[keyMap]++
  472. confirmedNoRenewalContractNumServer[keyMapTtoal]++
  473. if !mapKeyMapCompanyNoData[keyMapCompanyNo] {
  474. confirmedNoRenewalContractCompanyNumServer[keyMap]++
  475. confirmedNoRenewalContractCompanyNumServer[keyMapTtoal]++
  476. mapKeyMapCompanyNoData[keyMapCompanyNo] = true
  477. }
  478. }
  479. }
  480. listFmsData, err := fms.GetContractRegisterListByStartDate(startDate, endDate)
  481. if err != nil {
  482. br.Msg = "获取数据信息失败"
  483. br.ErrMsg = "获取财务系统数据信息失败,Err:" + err.Error()
  484. return
  485. }
  486. //开拓组财务系统数据
  487. for _, v := range listFmsData {
  488. if len(adminIdArr) > 0 && !utils.InArrayByStr(adminIdArr, strconv.Itoa(v.RaiSellerId)) {
  489. continue
  490. }
  491. if !mapsellerDevelop[v.RaiSellerId] {
  492. continue
  493. }
  494. yearStr := getYearStar(utils.StrDateToDate(v.InvoiceTime), dataType, isCustomizeDate)
  495. keyMap = fmt.Sprint(yearStr, "_", v.RaiSellerId)
  496. keyMapTtoal = fmt.Sprint(yearStr, "_Develop")
  497. //开票记录
  498. if v.InvoiceType == 1 || v.InvoiceType == 3 {
  499. mapInvoiceAmountMoney[keyMap] += v.Amount
  500. mapInvoiceAmountMoney[keyMapTtoal] += v.Amount
  501. if v.ContractType == 1 {
  502. mapNewCustomerInvoicingMoney[keyMap] += v.Amount
  503. mapNewCustomerInvoicingMoney[keyMapTtoal] += v.Amount
  504. }
  505. }
  506. //到款记录
  507. if v.InvoiceType == 2 || v.InvoiceType == 4 {
  508. mapPaymentAmountMoney[keyMap] += v.Amount
  509. mapPaymentAmountMoney[keyMapTtoal] += v.Amount
  510. if v.ContractType == 1 {
  511. mapNewCustomerPaymentsReceivedMoney[keyMap] += v.Amount
  512. mapNewCustomerPaymentsReceivedMoney[keyMapTtoal] += v.Amount
  513. }
  514. }
  515. }
  516. //服务组财务系统数据
  517. for _, v := range listFmsData {
  518. if len(serviceAdminIdArr) > 0 && !utils.InArrayByStr(serviceAdminIdArr, strconv.Itoa(v.RaiSellerId)) {
  519. continue
  520. }
  521. if !mapsellerService[v.RaiSellerId] {
  522. continue
  523. }
  524. yearStr := getYearStar(utils.StrDateToDate(v.InvoiceTime), dataType, isCustomizeDate)
  525. keyMap = fmt.Sprint(yearStr, "_Server_", v.RaiSellerId)
  526. keyMapTtoal = fmt.Sprint(yearStr, "_Server_")
  527. //开票记录
  528. if v.InvoiceType == 1 || v.InvoiceType == 3 {
  529. mapInvoiceAmountMoney[keyMap] += v.Amount
  530. mapInvoiceAmountMoney[keyMapTtoal] += v.Amount
  531. if v.ContractType == 1 {
  532. mapNewCustomerInvoicingMoney[keyMap] += v.Amount
  533. mapNewCustomerInvoicingMoney[keyMapTtoal] += v.Amount
  534. }
  535. }
  536. //到款记录
  537. if v.InvoiceType == 2 || v.InvoiceType == 4 {
  538. mapPaymentAmountMoney[keyMap] += v.Amount
  539. mapPaymentAmountMoney[keyMapTtoal] += v.Amount
  540. if v.ContractType == 1 {
  541. mapNewCustomerPaymentsReceivedMoney[keyMap] += v.Amount
  542. mapNewCustomerPaymentsReceivedMoney[keyMapTtoal] += v.Amount
  543. }
  544. }
  545. }
  546. conditionTry := ` AND a.create_time >= ? AND a.create_time <= ? AND a.operation in ( "add","receive","apply_receive" ) AND a.sys_user_id IN ( SELECT admin_id FROM admin WHERE role_type_code IN ( 'rai_seller', 'rai_group' , 'rai_admin') ` + conditionEnSeller + ` ) `
  547. var parsTry []interface{}
  548. parsTry = append(parsTry, startDate, endDate)
  549. //列表页数据
  550. tryList, err := models.GetIncrementalCompanyListByOperationRecordRai(conditionTry, parsTry, 0, 9999)
  551. if err != nil {
  552. br.Msg = "获取失败"
  553. br.ErrMsg = "获取失败,Err:" + err.Error()
  554. return
  555. }
  556. for _, v := range tryList {
  557. sysUserId, _ := strconv.Atoi(v.SysUserId)
  558. if !mapsellerService[sysUserId] && !mapsellerDevelop[sysUserId] {
  559. continue
  560. }
  561. startDateTime := utils.StrTimeToTime(v.CreateTime)
  562. monthNum := startDateTime.Month()
  563. yearStr := strconv.Itoa(startDateTime.Year())
  564. if dataType == "季度" {
  565. if monthNum < 4 {
  566. yearStr += "Q1"
  567. } else if monthNum > 3 && monthNum < 7 {
  568. yearStr += "Q2"
  569. } else if monthNum > 6 && monthNum < 10 {
  570. yearStr += "Q3"
  571. } else if monthNum > 9 {
  572. yearStr += "Q4"
  573. }
  574. } else if dataType == "半年度" {
  575. if monthNum < 7 {
  576. yearStr += "H1"
  577. } else {
  578. yearStr += "H2"
  579. }
  580. }
  581. if isCustomizeDate {
  582. yearStr = ""
  583. }
  584. keyMap = fmt.Sprint(yearStr, "_", v.SysUserId)
  585. mapAddTrialNum[keyMap]++
  586. //var keyMapTtoal string
  587. if mapsellerDevelop[sysUserId] == true {
  588. keyMapTtoal = fmt.Sprint(yearStr, "_Develop")
  589. } else {
  590. keyMapTtoal = fmt.Sprint(yearStr, "_Server_")
  591. }
  592. mapAddTrialNum[keyMapTtoal]++
  593. }
  594. listCoverageRate, err := cygx.GetCygxRaiServeCompanyCoverageRateListByStartDate(startDate, endDate) // 覆盖率数据
  595. if err != nil {
  596. br.Msg = "获取失败"
  597. br.ErrMsg = "获取失败,Err:" + err.Error()
  598. return
  599. }
  600. //服务组财务系统数据
  601. for _, v := range listCoverageRate {
  602. yearStr := getYearStar(utils.StrDateToDate(v.EndDate), dataType, isCustomizeDate)
  603. keyMap = fmt.Sprint(yearStr, "_Server_", v.ShareSellerId)
  604. keyMapTtoal = fmt.Sprint(yearStr, "_Server_")
  605. ShareTotalServeCountRed[keyMap] = float64(v.ShareSellerServeCountRed)
  606. ShareTotalServeCountRed[keyMapTtoal] = float64(v.ShareTotalServeCountRed)
  607. ShareTotalServeCount[keyMap] = float64(v.ShareSellerServeCount)
  608. ShareTotalServeCount[keyMapTtoal] = float64(v.ShareTotalServeCount)
  609. }
  610. resp := new(statistic_report.RaiDataSummaryListResp)
  611. var items []*statistic_report.RaiDataSummaryResp
  612. mapSortDateService := make(map[int]float64)
  613. mapSortDateDevelop := make(map[int]float64)
  614. lastDayOfLastQuarter := utils.GetLastDayOfLastQuarter(time.Now()) //当前时间上一个季度的最后一天
  615. for i := startYear; i <= endYear; i++ {
  616. for _, Dv := range dataTypeArr {
  617. item := new(statistic_report.RaiDataSummaryResp)
  618. if isCustomizeDate {
  619. item.DataType = "" //传了自定义时间之后,把key值,置空
  620. } else {
  621. item.DataType = fmt.Sprint(i, Dv)
  622. }
  623. var haveShowCoverageRate bool //当前时间上一个季度的最后一天 之后的不展示
  624. if item.DataType != "" {
  625. var dataEndDate string
  626. dataEndDate = strconv.Itoa(i)
  627. if strings.Contains(item.DataType, "Q1") {
  628. dataEndDate += "-03-31"
  629. } else if strings.Contains(item.DataType, "Q2") {
  630. dataEndDate += "-06-30"
  631. } else if strings.Contains(item.DataType, "Q3") {
  632. dataEndDate += "-09-30"
  633. } else if strings.Contains(item.DataType, "Q4") {
  634. dataEndDate += "-12-31"
  635. } else if strings.Contains(item.DataType, "H1") {
  636. dataEndDate += "-06-30"
  637. } else {
  638. dataEndDate += "-12-31"
  639. }
  640. dataEndTime := utils.StrDateToDate(dataEndDate)
  641. if dataEndTime.Before(lastDayOfLastQuarter) {
  642. haveShowCoverageRate = true
  643. }
  644. }
  645. keyMapTtoal = fmt.Sprint(item.DataType, "_Develop")
  646. keyMapTtoalServer = fmt.Sprint(item.DataType, "_Server_")
  647. var dataListDevelop []*statistic_report.RaiDataSummaryDetail
  648. for _, vS := range sellerDevelop {
  649. keyMap = fmt.Sprint(item.DataType, "_", vS.AdminId)
  650. sellerItem := new(statistic_report.RaiDataSummaryDetail)
  651. sellerItem.SellerId = strconv.Itoa(vS.AdminId)
  652. sellerIds = append(sellerIds, sellerItem.SellerId)
  653. sellerItem.SellerName = vS.RealName
  654. sellerItem.AddTrialCount = fmt.Sprint(mapAddTrialNum[keyMap])
  655. sellerItem.NewContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapNewContractMoney[keyMap], 2), " / ", mapNewContractNum[keyMap]) // 新签合同(金额/数量)-(数据)
  656. sellerItem.ExpiredContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapExpiredContractMoney[keyMap], 2), " / ", mapExpiredContractNum[keyMap]) //"到期合同(金额/数量)-(数据)"
  657. sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoney[keyMap], 2), " / ", mapRenewedContractNum[keyMap]) // "续约合同(金额/数量)-(数据)"
  658. var renewalRateMoey string
  659. var renewalRateNum string
  660. if mapRenewedContractMoney[keyMap]+mapExpiredContractMoney2[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
  661. renewalRateMoey = "0%"
  662. } else {
  663. renewalRateMoey = utils.SubFloatToString((mapRenewedContractMoney[keyMap]+mapExpiredContractMoney2[keyMap])/mapExpiredContractMoney[keyMap]*100, 2) + "%"
  664. }
  665. if mapRenewedContractCompanyNum[keyMap] == 0 || mapExpiredContractCompanyNum[keyMap] == 0 {
  666. renewalRateNum = "0%"
  667. } else {
  668. renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNum[keyMap])/float64(mapExpiredContractCompanyNum[keyMap])*100, 2) + "%"
  669. }
  670. sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
  671. sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoney[keyMap], 2), " / ", confirmedNoRenewalContractNum[keyMap]) //"确认不续约合同(金额/数量)-(数据)"
  672. var confirmNonRenewalRateMoey string
  673. var confirmNonRenewalRateNum string
  674. if confirmedNoRenewalContractMoney[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
  675. confirmNonRenewalRateMoey = "0%"
  676. } else {
  677. confirmNonRenewalRateMoey = utils.SubFloatToString(confirmedNoRenewalContractMoney[keyMap]/mapExpiredContractMoney[keyMap]*100, 2) + "%"
  678. }
  679. if confirmedNoRenewalContractCompanyNum[keyMap] == 0 || mapExpiredContractCompanyNum[keyMap] == 0 {
  680. confirmNonRenewalRateNum = "0%"
  681. } else {
  682. confirmNonRenewalRateNum = utils.SubFloatToString(float64(confirmedNoRenewalContractCompanyNum[keyMap])/float64(mapExpiredContractCompanyNum[keyMap])*100, 2) + "%"
  683. }
  684. sellerItem.ConfirmNonRenewalRateData = fmt.Sprint(confirmNonRenewalRateMoey, " / ", confirmNonRenewalRateNum) //确认不续约率(金额/数量)-(数据)"
  685. sellerItem.SignedClientCount = fmt.Sprint(mapSignedClientNum[keyMap]) // 签约客户数量
  686. if mapSignedClientNum[keyMap] == 0 || mapSignedClientMoney[keyMap] == 0 {
  687. sellerItem.AverageRevenueCount = "0"
  688. } else {
  689. sellerItem.AverageRevenueCount = utils.FormatNumberWithCommas(mapSignedClientMoney[keyMap]/float64(mapSignedClientNum[keyMap]), 2) //客单价
  690. }
  691. sellerItem.InvoiceAmountCount = utils.FormatNumberWithCommas(mapInvoiceAmountMoney[keyMap], 2) //"开票金额-(数据)"
  692. sellerItem.PaymentReceivedCount = utils.FormatNumberWithCommas(mapPaymentAmountMoney[keyMap], 2) //"开票金额-(数据)"
  693. if mapInvoiceAmountMoney[keyMap] == 0 || mapPaymentAmountMoney[keyMap] == 0 {
  694. sellerItem.UnpaidRatioCount = "0%"
  695. } else {
  696. sellerItem.UnpaidRatioCount = utils.SubFloatToString((mapInvoiceAmountMoney[keyMap]-mapPaymentAmountMoney[keyMap])/mapInvoiceAmountMoney[keyMap]*100, 2) + "%" //"未到款比例-(数据)"
  697. }
  698. sellerItem.NewCustomerInvoicingCount = utils.FormatNumberWithCommas(mapNewCustomerInvoicingMoney[keyMap], 2) // "新客开票-(数据)"
  699. sellerItem.NewCustomerPaymentsReceivedCount = utils.FormatNumberWithCommas(mapNewCustomerPaymentsReceivedMoney[keyMap], 2) // "新客到款-(数据)"
  700. sellerItem.CoverageRate = "--" //
  701. if developButton || serverButton || adminId != "" {
  702. item.DataList = append(item.DataList, sellerItem)
  703. dataListDevelop = append(dataListDevelop, sellerItem)
  704. }
  705. //处理要排序的值
  706. switch sortParam {
  707. case "AddTrialCount": //新增试用
  708. mapSortDateDevelop[vS.AdminId] = mapAddTrialNum[keyMap]
  709. case "NewContractData": //新签合同
  710. mapSortDateDevelop[vS.AdminId] = mapNewContractMoney[keyMap]
  711. case "ExpiredContractData": //到期合同
  712. mapSortDateDevelop[vS.AdminId] = mapExpiredContractMoney[keyMap]
  713. case "RenewedContractData": //续约合同
  714. mapSortDateDevelop[vS.AdminId] = mapRenewedContractMoney[keyMap]
  715. case "RenewalRateData": //续约率
  716. if mapRenewedContractMoney[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
  717. mapSortDateDevelop[vS.AdminId] = 0
  718. } else {
  719. mapSortDateDevelop[vS.AdminId] = mapRenewedContractMoney[keyMap] / mapExpiredContractMoney[keyMap]
  720. }
  721. case "ConfirmedNoRenewalContractData": //确认不续约合同
  722. mapSortDateDevelop[vS.AdminId] = confirmedNoRenewalContractMoney[keyMap]
  723. case "ConfirmNonRenewalRateData": //确认不续约率
  724. if confirmedNoRenewalContractMoney[keyMap] == 0 || mapExpiredContractMoney[keyMap] == 0 {
  725. mapSortDateDevelop[vS.AdminId] = 0
  726. } else {
  727. mapSortDateDevelop[vS.AdminId] = confirmedNoRenewalContractMoney[keyMap] / mapExpiredContractMoney[keyMap]
  728. }
  729. case "SignedClientCount": //签约客户数量
  730. mapSortDateDevelop[vS.AdminId] = float64(mapSignedClientNum[keyMap])
  731. case "AverageRevenueCount": //客单价
  732. if mapSignedClientNum[keyMap] == 0 || mapSignedClientMoney[keyMap] == 0 {
  733. mapSortDateDevelop[vS.AdminId] = 0
  734. } else {
  735. mapSortDateDevelop[vS.AdminId] = mapSignedClientMoney[keyMap] / float64(mapSignedClientNum[keyMap])
  736. }
  737. case "InvoiceAmountCount": //开票金额
  738. mapSortDateDevelop[vS.AdminId] = mapInvoiceAmountMoney[keyMap]
  739. case "PaymentReceivedCount": //到款金额
  740. mapSortDateDevelop[vS.AdminId] = mapPaymentAmountMoney[keyMap]
  741. case "UnpaidRatioCount": //未到款比例
  742. if mapInvoiceAmountMoney[keyMap] == 0 || mapPaymentAmountMoney[keyMap] == 0 {
  743. mapSortDateDevelop[vS.AdminId] = 0
  744. } else {
  745. mapSortDateDevelop[vS.AdminId] = (mapInvoiceAmountMoney[keyMap] - mapPaymentAmountMoney[keyMap]) / mapInvoiceAmountMoney[keyMap]
  746. }
  747. case "NewCustomerInvoicingCount": //新开票金额
  748. mapSortDateDevelop[vS.AdminId] = mapNewCustomerInvoicingMoney[keyMap]
  749. case "NewCustomerPaymentsReceivedCount": //新客到款
  750. mapSortDateDevelop[vS.AdminId] = mapNewCustomerPaymentsReceivedMoney[keyMap]
  751. }
  752. }
  753. if sortType != "" && sortParam != "" && len(mapSortDateDevelop) > 0 {
  754. item.DataList = handleMapSortDate(mapSortDateDevelop, dataListDevelop, sortType)
  755. }
  756. if len(sellerDevelop) > 0 && adminId == "" {
  757. sellerItem := new(statistic_report.RaiDataSummaryDetail)
  758. sellerItem.SellerId = strings.Join(sellerIds, ",")
  759. sellerItem.SellerName = "开拓组合计"
  760. sellerItem.AddTrialCount = fmt.Sprint(mapAddTrialNum[keyMapTtoal])
  761. sellerItem.NewContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapNewContractMoney[keyMapTtoal], 2), " / ", mapNewContractNum[keyMapTtoal]) // 新签合同(金额/数量)-(数据)
  762. sellerItem.ExpiredContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapExpiredContractMoney[keyMapTtoal], 2), " / ", mapExpiredContractNum[keyMapTtoal]) //"到期合同(金额/数量)-(数据)"
  763. sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoney[keyMapTtoal], 2), " / ", mapRenewedContractNum[keyMapTtoal]) // "续约合同(金额/数量)-(数据)"
  764. var renewalRateMoey string
  765. var renewalRateNum string
  766. if mapRenewedContractMoney[keyMapTtoal]+mapExpiredContractMoney2[keyMapTtoal] == 0 || mapExpiredContractMoney[keyMapTtoal] == 0 {
  767. renewalRateMoey = "0%"
  768. } else {
  769. renewalRateMoey = utils.SubFloatToString((mapRenewedContractMoney[keyMapTtoal]+mapExpiredContractMoney2[keyMapTtoal])/mapExpiredContractMoney[keyMapTtoal]*100, 2) + "%"
  770. }
  771. if mapRenewedContractCompanyNum[keyMapTtoal] == 0 || mapExpiredContractCompanyNum[keyMapTtoal] == 0 {
  772. renewalRateNum = "0%"
  773. } else {
  774. renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNum[keyMapTtoal])/float64(mapExpiredContractCompanyNum[keyMapTtoal])*100, 2) + "%"
  775. }
  776. sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
  777. sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoney[keyMapTtoal], 2), " / ", confirmedNoRenewalContractNum[keyMapTtoal]) //"确认不续约合同(金额/数量)-(数据)"
  778. var confirmNonRenewalRateMoey string
  779. var confirmNonRenewalRateNum string
  780. if confirmedNoRenewalContractMoney[keyMapTtoal] == 0 || mapExpiredContractMoney[keyMapTtoal] == 0 {
  781. confirmNonRenewalRateMoey = "0%"
  782. } else {
  783. confirmNonRenewalRateMoey = utils.SubFloatToString(confirmedNoRenewalContractMoney[keyMapTtoal]/mapExpiredContractMoney[keyMapTtoal]*100, 2) + "%"
  784. }
  785. if confirmedNoRenewalContractCompanyNum[keyMapTtoal] == 0 || mapExpiredContractCompanyNum[keyMapTtoal] == 0 {
  786. confirmNonRenewalRateNum = "0%"
  787. } else {
  788. confirmNonRenewalRateNum = utils.SubFloatToString(float64(confirmedNoRenewalContractCompanyNum[keyMapTtoal])/float64(mapExpiredContractCompanyNum[keyMapTtoal])*100, 2) + "%"
  789. }
  790. sellerItem.ConfirmNonRenewalRateData = fmt.Sprint(confirmNonRenewalRateMoey, " / ", confirmNonRenewalRateNum) //确认不续约率(金额/数量)-(数据)"
  791. sellerItem.SignedClientCount = fmt.Sprint(mapSignedClientNum[keyMapTtoal]) // 签约客户数量
  792. if mapSignedClientNum[keyMapTtoal] == 0 || mapSignedClientMoney[keyMapTtoal] == 0 {
  793. sellerItem.AverageRevenueCount = "0"
  794. } else {
  795. sellerItem.AverageRevenueCount = utils.FormatNumberWithCommas(mapSignedClientMoney[keyMapTtoal]/float64(mapSignedClientNum[keyMapTtoal]), 2) //客单价
  796. }
  797. sellerItem.InvoiceAmountCount = utils.FormatNumberWithCommas(mapInvoiceAmountMoney[keyMapTtoal], 2) //"开票金额-(数据)"
  798. sellerItem.PaymentReceivedCount = utils.FormatNumberWithCommas(mapPaymentAmountMoney[keyMapTtoal], 2) //"开票金额-(数据)"
  799. if mapInvoiceAmountMoney[keyMapTtoal] == 0 || mapPaymentAmountMoney[keyMapTtoal] == 0 {
  800. sellerItem.UnpaidRatioCount = "0%"
  801. } else {
  802. sellerItem.UnpaidRatioCount = utils.SubFloatToString((mapInvoiceAmountMoney[keyMapTtoal]-mapPaymentAmountMoney[keyMapTtoal])/mapInvoiceAmountMoney[keyMapTtoal]*100, 2) + "%" //"未到款比例-(数据)"
  803. }
  804. sellerItem.NewCustomerInvoicingCount = utils.FormatNumberWithCommas(mapNewCustomerInvoicingMoney[keyMapTtoal], 2) // "新客开票-(数据)"
  805. sellerItem.NewCustomerPaymentsReceivedCount = utils.FormatNumberWithCommas(mapNewCustomerPaymentsReceivedMoney[keyMapTtoal], 2) // "新客到款-(数据)"
  806. sellerItem.CoverageRate = "--" //
  807. sellerItem.IsAmountTo = true // 是否属于合计
  808. item.DataList = append(item.DataList, sellerItem)
  809. }
  810. var dataListService []*statistic_report.RaiDataSummaryDetail
  811. for _, vS := range sellerService {
  812. keyMap = fmt.Sprint(item.DataType, "_Server_", vS.AdminId)
  813. sellerItem := new(statistic_report.RaiDataSummaryDetail)
  814. sellerItem.IsServerSeller = true
  815. sellerItem.SellerId = strconv.Itoa(vS.AdminId)
  816. sellerServiceIds = append(sellerServiceIds, sellerItem.SellerId)
  817. sellerItem.SellerName = vS.RealName
  818. sellerItem.AddTrialCount = fmt.Sprint(mapAddTrialNum[keyMap])
  819. sellerItem.NewContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapNewContractMoneyServer[keyMap], 2), " / ", mapNewContractNumServer[keyMap]) // 新签合同(金额/数量)-(数据)
  820. sellerItem.ExpiredContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapExpiredContractMoneyServer[keyMap], 2), " / ", mapExpiredContractNumServer[keyMap]) //"到期合同(金额/数量)-(数据)"
  821. sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoneyServer[keyMap], 2), " / ", mapRenewedContractNumServer[keyMap]) // "续约合同(金额/数量)-(数据)"
  822. var renewalRateMoey string
  823. var renewalRateNum string
  824. if mapRenewedContractMoneyServer[keyMap]+mapExpiredContractMoneyServer2[keyMap] == 0 || mapExpiredContractMoneyServer[keyMap] == 0 {
  825. renewalRateMoey = "0%"
  826. } else {
  827. renewalRateMoey = utils.SubFloatToString((mapRenewedContractMoneyServer[keyMap]+mapExpiredContractMoneyServer2[keyMap])/mapExpiredContractMoneyServer[keyMap]*100, 2) + "%"
  828. }
  829. if mapRenewedContractCompanyNumServer[keyMap]+mapExpiredContractCompanyNumServer2[keyMap] == 0 || mapExpiredContractCompanyNumServer[keyMap] == 0 {
  830. renewalRateNum = "0%"
  831. } else {
  832. renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNumServer[keyMap]+mapExpiredContractCompanyNumServer2[keyMap])/float64(mapExpiredContractCompanyNumServer[keyMap])*100, 2) + "%"
  833. }
  834. sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
  835. sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoneyServer[keyMap], 2), " / ", confirmedNoRenewalContractNumServer[keyMap]) //"确认不续约合同(金额/数量)-(数据)"
  836. var confirmNonRenewalRateMoey string
  837. var confirmNonRenewalRateNum string
  838. if confirmedNoRenewalContractMoneyServer[keyMap] == 0 || mapExpiredContractMoneyServer[keyMap] == 0 {
  839. confirmNonRenewalRateMoey = "0%"
  840. } else {
  841. confirmNonRenewalRateMoey = utils.SubFloatToString(confirmedNoRenewalContractMoneyServer[keyMap]/mapExpiredContractMoneyServer[keyMap]*100, 2) + "%"
  842. }
  843. if confirmedNoRenewalContractCompanyNumServer[keyMap] == 0 || mapExpiredContractCompanyNumServer[keyMap] == 0 {
  844. confirmNonRenewalRateNum = "0%"
  845. } else {
  846. confirmNonRenewalRateNum = utils.SubFloatToString(float64(confirmedNoRenewalContractCompanyNumServer[keyMap])/float64(mapExpiredContractCompanyNumServer[keyMap])*100, 2) + "%"
  847. }
  848. sellerItem.ConfirmNonRenewalRateData = fmt.Sprint(confirmNonRenewalRateMoey, " / ", confirmNonRenewalRateNum) //确认不续约率(金额/数量)-(数据)"
  849. sellerItem.SignedClientCount = fmt.Sprint(mapSignedClientNumServer[keyMap]) // 签约客户数量
  850. if mapSignedClientNumServer[keyMap] == 0 || mapSignedClientMoneyServer[keyMap] == 0 {
  851. sellerItem.AverageRevenueCount = "0"
  852. } else {
  853. sellerItem.AverageRevenueCount = utils.FormatNumberWithCommas(mapSignedClientMoneyServer[keyMap]/float64(mapSignedClientNumServer[keyMap]), 2) //客单价
  854. }
  855. sellerItem.InvoiceAmountCount = utils.FormatNumberWithCommas(mapInvoiceAmountMoney[keyMap], 2) //"开票金额-(数据)"
  856. sellerItem.PaymentReceivedCount = utils.FormatNumberWithCommas(mapPaymentAmountMoney[keyMap], 2) //"开票金额-(数据)"
  857. if mapInvoiceAmountMoney[keyMap] == 0 || mapPaymentAmountMoney[keyMap] == 0 {
  858. sellerItem.UnpaidRatioCount = "0%"
  859. } else {
  860. sellerItem.UnpaidRatioCount = utils.SubFloatToString((mapInvoiceAmountMoney[keyMap]-mapPaymentAmountMoney[keyMap])/mapInvoiceAmountMoney[keyMap]*100, 2) + "%" //"未到款比例-(数据)"
  861. }
  862. sellerItem.NewCustomerInvoicingCount = utils.FormatNumberWithCommas(mapNewCustomerInvoicingMoney[keyMap], 2) // "新客开票-(数据)"
  863. sellerItem.NewCustomerPaymentsReceivedCount = utils.FormatNumberWithCommas(mapNewCustomerPaymentsReceivedMoney[keyMap], 2) // "新客到款-(数据)"
  864. if developButton || serverButton || serviceAdminId != "" {
  865. item.DataList = append(item.DataList, sellerItem)
  866. dataListService = append(dataListService, sellerItem)
  867. }
  868. if !haveShowCoverageRate {
  869. sellerItem.CoverageRate = "--"
  870. } else {
  871. if ShareTotalServeCountRed[keyMap] == 0 || ShareTotalServeCount[keyMap] == 0 {
  872. sellerItem.CoverageRate = "0%"
  873. } else {
  874. sellerItem.CoverageRate = utils.SubFloatToString((ShareTotalServeCountRed[keyMap])/ShareTotalServeCount[keyMap]*100, 2) + "%" //"覆盖率"
  875. }
  876. }
  877. //处理要排序的值
  878. switch sortParam {
  879. case "AddTrialCount": //新增试用
  880. mapSortDateService[vS.AdminId] = mapAddTrialNum[keyMap]
  881. case "NewContractData": //新签合同
  882. mapSortDateService[vS.AdminId] = mapNewContractMoneyServer[keyMap]
  883. case "ExpiredContractData": //到期合同
  884. mapSortDateService[vS.AdminId] = mapExpiredContractMoneyServer[keyMap]
  885. case "RenewedContractData": //续约合同
  886. mapSortDateService[vS.AdminId] = mapRenewedContractMoneyServer[keyMap]
  887. case "RenewalRateData": //续约率
  888. if mapRenewedContractMoneyServer[keyMap] == 0 || mapExpiredContractMoneyServer[keyMap] == 0 {
  889. mapSortDateService[vS.AdminId] = 0
  890. } else {
  891. mapSortDateService[vS.AdminId] = mapRenewedContractMoneyServer[keyMap] / mapExpiredContractMoneyServer[keyMap]
  892. }
  893. case "ConfirmedNoRenewalContractData": //确认不续约合同
  894. mapSortDateService[vS.AdminId] = confirmedNoRenewalContractMoneyServer[keyMap]
  895. case "ConfirmNonRenewalRateData": //确认不续约率
  896. if confirmedNoRenewalContractMoneyServer[keyMap] == 0 || mapExpiredContractMoneyServer[keyMap] == 0 {
  897. mapSortDateService[vS.AdminId] = 0
  898. } else {
  899. mapSortDateService[vS.AdminId] = confirmedNoRenewalContractMoneyServer[keyMap] / mapExpiredContractMoneyServer[keyMap]
  900. }
  901. case "SignedClientCount": //签约客户数量
  902. mapSortDateService[vS.AdminId] = float64(mapSignedClientNumServer[keyMap])
  903. case "AverageRevenueCount": //客单价
  904. if mapSignedClientNumServer[keyMap] == 0 || mapSignedClientMoneyServer[keyMap] == 0 {
  905. mapSortDateService[vS.AdminId] = 0
  906. } else {
  907. mapSortDateService[vS.AdminId] = mapSignedClientMoneyServer[keyMap] / float64(mapSignedClientNumServer[keyMap])
  908. }
  909. case "InvoiceAmountCount": //开票金额
  910. mapSortDateService[vS.AdminId] = mapInvoiceAmountMoney[keyMap]
  911. case "PaymentReceivedCount": //到款金额
  912. mapSortDateService[vS.AdminId] = mapPaymentAmountMoney[keyMap]
  913. case "UnpaidRatioCount": //未到款比例
  914. if mapInvoiceAmountMoney[keyMap] == 0 || mapPaymentAmountMoney[keyMap] == 0 {
  915. mapSortDateService[vS.AdminId] = 0
  916. } else {
  917. mapSortDateService[vS.AdminId] = (mapInvoiceAmountMoney[keyMap] - mapPaymentAmountMoney[keyMap]) / mapInvoiceAmountMoney[keyMap]
  918. }
  919. case "NewCustomerInvoicingCount": //新开票金额
  920. mapSortDateService[vS.AdminId] = mapNewCustomerInvoicingMoney[keyMap]
  921. case "NewCustomerPaymentsReceivedCount": //新客到款
  922. mapSortDateService[vS.AdminId] = mapNewCustomerPaymentsReceivedMoney[keyMap]
  923. }
  924. }
  925. if sortType != "" && sortParam != "" && len(mapSortDateService) > 0 {
  926. item.DataList = handleMapSortDate(mapSortDateService, dataListService, sortType)
  927. }
  928. if len(sellerService) > 0 && serviceAdminId == "" {
  929. sellerItem := new(statistic_report.RaiDataSummaryDetail)
  930. sellerItem.IsServerSeller = true
  931. sellerItem.SellerId = strings.Join(sellerServiceIds, ",")
  932. sellerItem.SellerName = "服务组合计"
  933. sellerItem.AddTrialCount = fmt.Sprint(mapAddTrialNum[keyMapTtoalServer])
  934. sellerItem.NewContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapNewContractMoneyServer[keyMapTtoalServer], 2), " / ", mapNewContractNumServer[keyMapTtoalServer]) // 新签合同(金额/数量)-(数据)
  935. sellerItem.ExpiredContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapExpiredContractMoneyServer[keyMapTtoalServer], 2), " / ", mapExpiredContractNumServer[keyMapTtoalServer]) //"到期合同(金额/数量)-(数据)"
  936. sellerItem.RenewedContractData = fmt.Sprint(utils.FormatNumberWithCommas(mapRenewedContractMoneyServer[keyMapTtoalServer], 2), " / ", mapRenewedContractNumServer[keyMapTtoalServer]) // "续约合同(金额/数量)-(数据)"
  937. var renewalRateMoey string
  938. var renewalRateNum string
  939. if mapRenewedContractMoneyServer[keyMapTtoalServer]+mapExpiredContractMoneyServer2[keyMapTtoalServer] == 0 || mapExpiredContractMoneyServer[keyMapTtoalServer] == 0 {
  940. renewalRateMoey = "0%"
  941. } else {
  942. renewalRateMoey = utils.SubFloatToString((mapRenewedContractMoneyServer[keyMapTtoalServer]+mapExpiredContractMoneyServer2[keyMapTtoalServer])/mapExpiredContractMoneyServer[keyMapTtoalServer]*100, 2) + "%"
  943. }
  944. if mapRenewedContractCompanyNumServer[keyMapTtoalServer]+mapExpiredContractCompanyNumServer2[keyMapTtoalServer] == 0 || mapExpiredContractCompanyNumServer[keyMapTtoalServer] == 0 {
  945. renewalRateNum = "0%"
  946. } else {
  947. renewalRateNum = utils.SubFloatToString(float64(mapRenewedContractCompanyNumServer[keyMapTtoalServer]+mapExpiredContractCompanyNumServer2[keyMapTtoalServer])/float64(mapExpiredContractCompanyNumServer[keyMapTtoalServer])*100, 2) + "%"
  948. }
  949. sellerItem.RenewalRateData = fmt.Sprint(renewalRateMoey, " / ", renewalRateNum) //"续约率(金额/数量)-(数据)"
  950. sellerItem.ConfirmedNoRenewalContractData = fmt.Sprint(utils.FormatNumberWithCommas(confirmedNoRenewalContractMoneyServer[keyMapTtoalServer], 2), " / ", confirmedNoRenewalContractNumServer[keyMapTtoalServer]) //"确认不续约合同(金额/数量)-(数据)"
  951. var confirmNonRenewalRateMoey string
  952. var confirmNonRenewalRateNum string
  953. if confirmedNoRenewalContractMoneyServer[keyMapTtoalServer] == 0 || mapExpiredContractMoneyServer[keyMapTtoalServer] == 0 {
  954. confirmNonRenewalRateMoey = "0%"
  955. } else {
  956. confirmNonRenewalRateMoey = utils.SubFloatToString(confirmedNoRenewalContractMoneyServer[keyMapTtoalServer]/mapExpiredContractMoneyServer[keyMapTtoalServer]*100, 2) + "%"
  957. }
  958. if confirmedNoRenewalContractCompanyNumServer[keyMapTtoalServer] == 0 || mapExpiredContractCompanyNumServer[keyMapTtoalServer] == 0 {
  959. confirmNonRenewalRateNum = "0%"
  960. } else {
  961. confirmNonRenewalRateNum = utils.SubFloatToString(float64(confirmedNoRenewalContractCompanyNumServer[keyMapTtoalServer])/float64(mapExpiredContractCompanyNumServer[keyMapTtoalServer])*100, 2) + "%"
  962. }
  963. sellerItem.ConfirmNonRenewalRateData = fmt.Sprint(confirmNonRenewalRateMoey, " / ", confirmNonRenewalRateNum) //确认不续约率(金额/数量)-(数据)"
  964. sellerItem.SignedClientCount = fmt.Sprint(mapSignedClientNumServer[keyMapTtoalServer]) // 签约客户数量
  965. if mapSignedClientNumServer[keyMapTtoalServer] == 0 || mapSignedClientMoneyServer[keyMapTtoalServer] == 0 {
  966. sellerItem.AverageRevenueCount = "0"
  967. } else {
  968. sellerItem.AverageRevenueCount = utils.FormatNumberWithCommas(mapSignedClientMoneyServer[keyMapTtoalServer]/float64(mapSignedClientNumServer[keyMapTtoalServer]), 2) //客单价
  969. }
  970. sellerItem.InvoiceAmountCount = utils.FormatNumberWithCommas(mapInvoiceAmountMoney[keyMapTtoalServer], 2) //"开票金额-(数据)"
  971. sellerItem.PaymentReceivedCount = utils.FormatNumberWithCommas(mapPaymentAmountMoney[keyMapTtoalServer], 2) //"开票金额-(数据)"
  972. if mapInvoiceAmountMoney[keyMapTtoalServer] == 0 || mapPaymentAmountMoney[keyMapTtoalServer] == 0 {
  973. sellerItem.UnpaidRatioCount = "0%"
  974. } else {
  975. sellerItem.UnpaidRatioCount = utils.SubFloatToString((mapInvoiceAmountMoney[keyMapTtoalServer]-mapPaymentAmountMoney[keyMapTtoalServer])/mapInvoiceAmountMoney[keyMapTtoalServer]*100, 2) + "%" //"未到款比例-(数据)"
  976. }
  977. sellerItem.NewCustomerInvoicingCount = utils.FormatNumberWithCommas(mapNewCustomerInvoicingMoney[keyMapTtoalServer], 2) // "新客开票-(数据)"
  978. sellerItem.NewCustomerPaymentsReceivedCount = utils.FormatNumberWithCommas(mapNewCustomerPaymentsReceivedMoney[keyMapTtoalServer], 2) // "新客到款-(数据)"
  979. if !haveShowCoverageRate {
  980. sellerItem.CoverageRate = "--"
  981. } else {
  982. if ShareTotalServeCountRed[keyMapTtoalServer] == 0 || ShareTotalServeCount[keyMapTtoalServer] == 0 {
  983. sellerItem.CoverageRate = "0%"
  984. } else {
  985. sellerItem.CoverageRate = utils.SubFloatToString((ShareTotalServeCountRed[keyMapTtoalServer])/ShareTotalServeCount[keyMapTtoalServer]*100, 2) + "%" //"覆盖率"
  986. }
  987. }
  988. sellerItem.IsAmountTo = true // 是否属于合计
  989. item.DataList = append(item.DataList, sellerItem)
  990. }
  991. items = append(items, item)
  992. }
  993. }
  994. resp.List = items
  995. br.Ret = 200
  996. br.Success = true
  997. br.Msg = "获取成功"
  998. br.Data = resp
  999. }
  1000. // 排序处理
  1001. func handleMapSortDate(mapSort map[int]float64, dataList []*statistic_report.RaiDataSummaryDetail, orderType string) (dataListResp []*statistic_report.RaiDataSummaryDetail) {
  1002. type kvSort struct {
  1003. AdminIdKey int
  1004. AdminValue float64
  1005. }
  1006. var adminSlice []kvSort
  1007. for k, v := range mapSort {
  1008. adminSlice = append(adminSlice, kvSort{k, v})
  1009. }
  1010. if orderType == "asc" {
  1011. // 2. 按Value从小到大排序
  1012. sort.Slice(adminSlice, func(i, j int) bool {
  1013. return adminSlice[i].AdminValue < adminSlice[j].AdminValue // "<" 表示升序
  1014. })
  1015. } else {
  1016. // 2.1 按Value从大到小排序
  1017. sort.Slice(adminSlice, func(i, j int) bool {
  1018. return adminSlice[i].AdminValue > adminSlice[j].AdminValue // ">" 表示降序
  1019. })
  1020. }
  1021. // 3. 输出排序结果
  1022. for _, vsort := range adminSlice {
  1023. //fmt.Println("vsort.AdminIdKey", vsort.AdminIdKey, "vsort.AdminValue", vsort.AdminValue)
  1024. for _, vDate := range dataList {
  1025. if vDate.SellerId == strconv.Itoa(vsort.AdminIdKey) {
  1026. dataListResp = append(dataListResp, vDate)
  1027. }
  1028. }
  1029. }
  1030. //fmt.Println("dataListResp", dataListResp)
  1031. return
  1032. }
  1033. // MergeCompanyList
  1034. // @Title 权益数据汇总弹窗详情
  1035. // @Description 权益数据汇总弹窗详情接口
  1036. // @Param SellerId query int true "销售ID"
  1037. // @Param DataType query string false "报表类型,枚举值:`季度`,`年度`,`半年度`"
  1038. // @Param PopupType query string false "弹窗数据类型,枚举值:"
  1039. // @Param IsServerSeller query bool false "是否属于服务组销售"
  1040. // @Param StartDate query string false "开始时间 "
  1041. // @Param EndDate query string false "结束时间 "
  1042. // @Param PageSize query int true "每页数据条数"
  1043. // @Param CurrentIndex query int true "当前页页码,从1开始"
  1044. // @Success 200 {object} statistic_report.RaiDataSummaryPopupTypeResp
  1045. // @router /rai_data_summary/detail [get]
  1046. func (this *StatisticRaiDataSummaryController) RaiDataSummaryDetail() {
  1047. br := new(models.BaseResponse).Init()
  1048. defer func() {
  1049. this.Data["json"] = br
  1050. this.ServeJSON()
  1051. }()
  1052. sysUser := this.SysUser
  1053. if sysUser == nil {
  1054. br.Msg = "请登录"
  1055. br.ErrMsg = "请登录,SysUser Is Empty"
  1056. br.Ret = 408
  1057. return
  1058. }
  1059. pageSize, _ := this.GetInt("PageSize")
  1060. currentIndex, _ := this.GetInt("CurrentIndex")
  1061. dataType := this.GetString("DataType")
  1062. sellerId := this.GetString("SellerId")
  1063. popupType := this.GetString("PopupType")
  1064. isServerSeller, _ := this.GetBool("IsServerSeller")
  1065. isAmountTo, _ := this.GetBool("IsAmountTo")
  1066. startDate := this.GetString("StartDate")
  1067. endDate := this.GetString("EndDate")
  1068. var startSize int
  1069. if pageSize <= 0 {
  1070. pageSize = utils.PageSize20
  1071. }
  1072. if currentIndex <= 0 {
  1073. currentIndex = 1
  1074. }
  1075. startSize = utils.StartIndex(currentIndex, pageSize)
  1076. //var startDate string
  1077. //var endDate string
  1078. if startDate == "" {
  1079. year := (dataType[:4])
  1080. if strings.Contains(dataType, "Q1") {
  1081. startDate = year + "-01-01"
  1082. endDate = year + "-03-31"
  1083. } else if strings.Contains(dataType, "Q2") {
  1084. startDate = year + "-04-01"
  1085. endDate = year + "-06-30"
  1086. } else if strings.Contains(dataType, "Q3") {
  1087. startDate = year + "-07-01"
  1088. endDate = year + "-09-30"
  1089. } else if strings.Contains(dataType, "Q4") {
  1090. startDate = year + "-10-01"
  1091. endDate = year + "-12-31"
  1092. } else if strings.Contains(dataType, "H1") {
  1093. startDate = year + "-01-01"
  1094. endDate = year + "-06-31"
  1095. } else if strings.Contains(dataType, "H2") {
  1096. startDate = year + "-07-01"
  1097. endDate = year + "-12-31"
  1098. } else {
  1099. startDate = year + "-01-01"
  1100. endDate = year + "-12-31"
  1101. }
  1102. }
  1103. resp := new(statistic_report.RaiDataSummaryPopupTypeResp)
  1104. var listResp []*statistic_report.RaiDataSummaryDetailResp
  1105. var listGroup []*models.CompanyContractGroupList
  1106. var trialTotal int
  1107. var condition string
  1108. var pars []interface{}
  1109. //新签合同的ID
  1110. var companyContractIdsNew []int
  1111. {
  1112. var conditionNew string
  1113. var parsNew []interface{}
  1114. if sellerId != "" {
  1115. conditionNew += ` AND a.seller_id_init IN (` + sellerId + `) `
  1116. }
  1117. conditionNew += " AND a.product_id = 2 AND a.status = 1 AND a.start_date >= ? AND a.start_date <= ? AND a.rai_contract_type = '新签合同' AND a.contract_type != '打分1派点' "
  1118. parsNew = append(parsNew, startDate, endDate)
  1119. listNewData, err := statistic_report.GetRaiDataSummaryList(conditionNew, parsNew)
  1120. if err != nil {
  1121. br.Msg = "获取数据信息失败"
  1122. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1123. return
  1124. }
  1125. for _, v := range listNewData {
  1126. companyContractIdsNew = append(companyContractIdsNew, v.CompanyContractId)
  1127. }
  1128. }
  1129. companyContractIdsNew = append(companyContractIdsNew, 0)
  1130. lenArrCompany := len(companyContractIdsNew)
  1131. switch popupType {
  1132. case "新增试用":
  1133. var parsTry []interface{}
  1134. var conditionTry string
  1135. if sellerId != "" {
  1136. conditionTry += ` AND a.sys_user_id IN (` + sellerId + `) `
  1137. }
  1138. conditionTry += ` AND a.create_time >= ? AND a.create_time <= ? AND a.operation in ( "add","receive","apply_receive" ) AND a.sys_user_id IN ( SELECT admin_id FROM admin WHERE role_type_code IN ( 'rai_seller', 'rai_group' , 'rai_admin') ) `
  1139. parsTry = append(parsTry, startDate, endDate)
  1140. total, err := models.GetIncrementalCompanyCountByOperationRecordRai(conditionTry, parsTry)
  1141. if err != nil {
  1142. br.Msg = "获取失败"
  1143. br.ErrMsg = "获取新增试用客户数量失败,Err:" + err.Error()
  1144. return
  1145. }
  1146. trialTotal = total
  1147. //列表页数据
  1148. tryList, err := models.GetIncrementalCompanyListByOperationRecordRai(conditionTry, parsTry, startSize, pageSize)
  1149. if err != nil {
  1150. br.Msg = "获取失败"
  1151. br.ErrMsg = "获取失败,Err:" + err.Error()
  1152. return
  1153. }
  1154. if len(tryList) > 0 {
  1155. for _, v := range tryList {
  1156. item := new(statistic_report.RaiDataSummaryDetailResp)
  1157. v.SellerName = v.SysRealName
  1158. if v.Operation == "add" {
  1159. item.AddType = "新建"
  1160. } else if v.Operation == "receive" || v.Operation == "apply_receive" {
  1161. item.AddType = "领取"
  1162. }
  1163. item.CompanyId = v.CompanyId
  1164. item.CompanyName = v.CompanyName
  1165. item.SellerName = v.SellerName
  1166. item.CreateTime = v.CreateTime
  1167. listResp = append(listResp, item)
  1168. }
  1169. }
  1170. case "新签合同":
  1171. if sellerId != "" {
  1172. if isServerSeller {
  1173. condition += ` AND a.share_seller_id_init IN (` + sellerId + `) `
  1174. } else {
  1175. condition += ` AND a.seller_id_init IN (` + sellerId + `) `
  1176. }
  1177. }
  1178. condition += ` AND a.status = 1 AND a.start_date >= ? AND a.start_date <= ? AND a.product_id = 2 AND a.contract_type != '打分1派点' `
  1179. pars = append(pars, startDate, endDate)
  1180. condition += ` AND a.rai_contract_type = ? `
  1181. pars = append(pars, "新签合同")
  1182. total, err := company.GetIncrementalNewCompanyProductMergeCount(condition, pars)
  1183. if err != nil && err.Error() != utils.ErrNoRow() {
  1184. br.Msg = "获取失败"
  1185. br.ErrMsg = "获取失败,Err:" + err.Error()
  1186. return
  1187. }
  1188. trialTotal = total
  1189. //列表页数据
  1190. tmpList, err := models.GetIncrementalCompanyMergeList(condition, pars, startSize, pageSize)
  1191. if err != nil {
  1192. br.Msg = "获取失败"
  1193. br.ErrMsg = "获取失败,Err:" + err.Error()
  1194. return
  1195. }
  1196. if len(tmpList) > 0 {
  1197. var companyContractIds []int
  1198. for _, v := range tmpList {
  1199. companyContractIds = append(companyContractIds, v.CompanyContractId)
  1200. }
  1201. //合并合同所对应的权限
  1202. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  1203. if err != nil {
  1204. br.Msg = "获取失败"
  1205. br.ErrMsg = "获取失败,Err:" + err.Error()
  1206. return
  1207. }
  1208. for _, v := range tmpList {
  1209. item := new(statistic_report.RaiDataSummaryDetailResp)
  1210. item.CompanyId = v.CompanyId
  1211. item.CompanyName = v.CompanyName
  1212. if isServerSeller {
  1213. item.SellerName = v.ShareSeller
  1214. } else {
  1215. item.SellerName = v.SellerNameInit
  1216. }
  1217. item.StartDate = v.StartDate
  1218. item.EndDate = v.EndDate
  1219. item.Money = v.Money
  1220. item.PermissionName = mappermissionName[v.CompanyContractId]
  1221. listResp = append(listResp, item)
  1222. }
  1223. listGroup, err = models.GetCompanyContractGroupList(condition, pars)
  1224. if err != nil {
  1225. br.Msg = "获取失败"
  1226. br.ErrMsg = "获取失败,Err:" + err.Error()
  1227. return
  1228. }
  1229. }
  1230. case "到期合同":
  1231. if sellerId != "" {
  1232. if isServerSeller {
  1233. condition += ` AND a.share_seller_id_last IN (` + sellerId + `) `
  1234. } else {
  1235. condition += ` AND a.seller_id_last IN (` + sellerId + `) `
  1236. }
  1237. }
  1238. condition += ` AND a.product_id = 2 AND a.status = 1 AND a.due_end_date >= ? AND a.due_end_date <= ? AND a.end_date < ? AND a.contract_type != '打分1派点' `
  1239. pars = append(pars, startDate, endDate, time.Now().Format(utils.FormatDate))
  1240. total, err := company.GetIncrementalNewCompanyProductMergeCount(condition, pars)
  1241. if err != nil && err.Error() != utils.ErrNoRow() {
  1242. br.Msg = "获取失败"
  1243. br.ErrMsg = "获取失败,Err:" + err.Error()
  1244. return
  1245. }
  1246. trialTotal = total
  1247. //列表页数据
  1248. tmpList, err := models.GetIncrementalCompanyMergeListEnd(condition, pars, startSize, pageSize)
  1249. if err != nil {
  1250. br.Msg = "获取失败"
  1251. br.ErrMsg = "获取失败,Err:" + err.Error()
  1252. return
  1253. }
  1254. if len(tmpList) > 0 {
  1255. var companyContractIds []int
  1256. for _, v := range tmpList {
  1257. companyContractIds = append(companyContractIds, v.CompanyContractId)
  1258. }
  1259. //合并合同所对应的权限
  1260. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  1261. if err != nil {
  1262. br.Msg = "获取失败"
  1263. br.ErrMsg = "获取失败,Err:" + err.Error()
  1264. return
  1265. }
  1266. for _, v := range tmpList {
  1267. item := new(statistic_report.RaiDataSummaryDetailResp)
  1268. item.CompanyId = v.CompanyId
  1269. item.CompanyName = v.CompanyName
  1270. if v.ContractType == "打分派点" {
  1271. item.CompanyName = v.CompanyName + "(打分客户)"
  1272. }
  1273. if isServerSeller {
  1274. item.SellerName = v.ShareSellerLast
  1275. } else {
  1276. item.SellerName = v.SellerNameLast
  1277. }
  1278. item.StartDate = v.StartDate
  1279. item.EndDate = v.EndDate
  1280. item.Money = v.Money
  1281. item.PermissionName = mappermissionName[v.CompanyContractId]
  1282. listResp = append(listResp, item)
  1283. }
  1284. listGroup, err = models.GetCompanyContractGroupList(condition, pars)
  1285. if err != nil {
  1286. br.Msg = "获取失败"
  1287. br.ErrMsg = "获取失败,Err:" + err.Error()
  1288. return
  1289. }
  1290. }
  1291. case "续约合同":
  1292. if sellerId != "" {
  1293. if isServerSeller {
  1294. condition += ` AND a.share_seller_id_init IN (` + sellerId + `) `
  1295. } else {
  1296. condition += ` AND a.seller_id_init IN (` + sellerId + `) `
  1297. }
  1298. }
  1299. condition += ` AND a.status = 1 AND a.inherit_end_date >= ? AND a.inherit_end_date <= ? AND a.inherit_company_contract_id > 0 AND a.rai_contract_type = '续约合同' AND a.contract_type != '打分1派点' AND a.company_contract_id NOT IN (` + utils.GetOrmInReplace(lenArrCompany) + `) `
  1300. pars = append(pars, startDate, endDate, companyContractIdsNew)
  1301. total, err := company.GetIncrementalNewCompanyProductMergeCount(condition, pars)
  1302. if err != nil && err.Error() != utils.ErrNoRow() {
  1303. br.Msg = "获取失败"
  1304. br.ErrMsg = "获取失败,Err:" + err.Error()
  1305. return
  1306. }
  1307. trialTotal = total
  1308. //列表页数据
  1309. tmpList, err := models.GetIncrementalCompanyMergeList(condition, pars, startSize, pageSize)
  1310. if err != nil {
  1311. br.Msg = "获取失败"
  1312. br.ErrMsg = "获取失败,Err:" + err.Error()
  1313. return
  1314. }
  1315. if len(tmpList) > 0 {
  1316. var companyContractIds []int
  1317. for _, v := range tmpList {
  1318. companyContractIds = append(companyContractIds, v.CompanyContractId)
  1319. }
  1320. //合并合同所对应的权限
  1321. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  1322. if err != nil {
  1323. br.Msg = "获取失败"
  1324. br.ErrMsg = "获取失败,Err:" + err.Error()
  1325. return
  1326. }
  1327. for _, v := range tmpList {
  1328. item := new(statistic_report.RaiDataSummaryDetailResp)
  1329. item.CompanyId = v.CompanyId
  1330. item.CompanyName = v.CompanyName
  1331. if isServerSeller {
  1332. item.SellerName = v.ShareSellerInit
  1333. } else {
  1334. item.SellerName = v.SellerNameInit
  1335. }
  1336. item.StartDate = v.StartDate
  1337. item.EndDate = v.EndDate
  1338. item.Money = v.Money
  1339. item.PermissionName = mappermissionName[v.CompanyContractId]
  1340. listResp = append(listResp, item)
  1341. }
  1342. listGroup, err = models.GetCompanyContractGroupList(condition, pars)
  1343. if err != nil {
  1344. br.Msg = "获取失败"
  1345. br.ErrMsg = "获取失败,Err:" + err.Error()
  1346. return
  1347. }
  1348. }
  1349. case "续约率":
  1350. var conditionEnd string
  1351. var parsEnd []interface{}
  1352. if sellerId != "" {
  1353. if isServerSeller {
  1354. condition += ` AND a.share_seller_id_init IN (` + sellerId + `) `
  1355. conditionEnd += ` AND a.share_seller_id_last IN (` + sellerId + `) `
  1356. } else {
  1357. condition += ` AND a.seller_id_init IN (` + sellerId + `) `
  1358. conditionEnd += ` AND a.seller_id_last IN (` + sellerId + `) `
  1359. }
  1360. }
  1361. condition += ` AND a.status = 1 AND a.inherit_end_date >= ? AND a.inherit_end_date <= ? AND inherit_company_contract_id > 0 AND a.rai_contract_type = '续约合同' AND a.contract_type != '打分1派点' AND a.company_contract_id NOT IN (` + utils.GetOrmInReplace(lenArrCompany) + `) `
  1362. pars = append(pars, startDate, endDate, companyContractIdsNew)
  1363. listRaiData, err := statistic_report.GetRaiDataSummaryList(condition, pars)
  1364. if err != nil {
  1365. br.Msg = "获取数据信息失败"
  1366. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1367. return
  1368. }
  1369. //到期合同数据
  1370. conditionEnd += ` AND a.status = 1 AND a.contract_type != '打分1派点' AND a.due_end_date >= ? AND a.due_end_date <= ? AND a.end_date < ? `
  1371. parsEnd = append(parsEnd, startDate, endDate, time.Now().Format(utils.FormatDate))
  1372. listEndData, err := statistic_report.GetRaiDataSummaryList(conditionEnd, parsEnd)
  1373. if err != nil {
  1374. br.Msg = "获取数据信息失败"
  1375. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1376. return
  1377. }
  1378. var renewedContractMoney float64 // 续约金额
  1379. var renewedContractCompany float64 // 续约客户数
  1380. maprenewedContractCompany := make(map[int]bool)
  1381. var expiredContractMoney float64 //到期金额
  1382. var expiredContractMoney2 float64 //到期金额
  1383. var expiredContractCompany float64 // 到期客户数
  1384. var expiredContractCompany2 float64 // 到期客户数
  1385. mapexpiredContractCompany := make(map[int]bool)
  1386. mapRenewedContractId := make(map[int]bool) // 出现在续约客户的合同
  1387. for _, v := range listRaiData {
  1388. renewedContractMoney += v.Money
  1389. if !maprenewedContractCompany[v.CompanyId] {
  1390. renewedContractCompany++
  1391. maprenewedContractCompany[v.CompanyId] = true
  1392. }
  1393. //mapRenewedContractId[v.CompanyContractId] = true
  1394. //startDateTime := utils.StrDateToDate(v.StartDate)
  1395. //if startDateTime.Before(time.Now().AddDate(0, 0, -1)) { //到期合同数据
  1396. // expiredContractMoney += v.Money
  1397. // if !mapexpiredContractCompany[v.CompanyId] {
  1398. // expiredContractCompany++
  1399. // mapexpiredContractCompany[v.CompanyId] = true
  1400. // }
  1401. //}
  1402. }
  1403. for _, v := range listEndData {
  1404. expiredContractMoney += v.Money
  1405. if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
  1406. expiredContractMoney2 += v.Money
  1407. }
  1408. if !mapexpiredContractCompany[v.CompanyId] {
  1409. expiredContractCompany++
  1410. if v.Status == "永续" && v.ContractType == "打分派点" && !mapRenewedContractId[v.CompanyContractId] && v.RaiCountShowType != -1 {
  1411. expiredContractCompany2++
  1412. }
  1413. mapexpiredContractCompany[v.CompanyId] = true
  1414. }
  1415. }
  1416. renewedContractMoney += expiredContractMoney2
  1417. item := new(statistic_report.RaiDataSummaryDetailResp)
  1418. item.TbaleNameAText = "金额续约率"
  1419. item.RenewedContractMoney = fmt.Sprint(utils.SubFloatToString(renewedContractMoney, 2))
  1420. item.ExpiredContractMoney = fmt.Sprint(utils.SubFloatToString(expiredContractMoney, 2))
  1421. if renewedContractMoney == 0 || expiredContractMoney == 0 {
  1422. item.RenewalRate = "0%"
  1423. } else {
  1424. item.RenewalRate = fmt.Sprint(utils.SubFloatToString(renewedContractMoney/expiredContractMoney*100, 2), "%")
  1425. }
  1426. listResp = append(listResp, item)
  1427. renewedContractCompany += expiredContractCompany2
  1428. item2 := new(statistic_report.RaiDataSummaryDetailResp)
  1429. item2.TbaleNameAText = "客户续约率"
  1430. item2.RenewedContractMoney = fmt.Sprint(renewedContractCompany)
  1431. item2.ExpiredContractMoney = fmt.Sprint(expiredContractCompany)
  1432. if renewedContractCompany == 0 || expiredContractCompany == 0 {
  1433. item2.RenewalRate = "0%"
  1434. } else {
  1435. item2.RenewalRate = fmt.Sprint(utils.SubFloatToString(renewedContractCompany/expiredContractCompany*100, 2), "%")
  1436. }
  1437. listResp = append(listResp, item2)
  1438. case "确认不续约合同":
  1439. noRenewedcompanyContractIds := services.GetCompanyContractNoRenewedAscribeListArr()
  1440. condition += ` AND a.company_contract_id IN (` + utils.GetOrmInReplace(len(noRenewedcompanyContractIds)) + `) ` // 已确认
  1441. pars = append(pars, noRenewedcompanyContractIds)
  1442. if sellerId != "" {
  1443. if isServerSeller {
  1444. condition += ` AND a.share_seller_id_last IN (` + sellerId + `) `
  1445. } else {
  1446. condition += ` AND a.seller_id_last IN (` + sellerId + `) `
  1447. }
  1448. }
  1449. condition += ` AND a.product_id = 2 AND a.status = 1 AND a.contract_type != '打分1派点' AND a.due_end_date >= ? AND a.due_end_date <= ? AND a.due_end_date <= ? `
  1450. pars = append(pars, startDate, endDate, time.Now().Format(utils.FormatDate))
  1451. total, err := company.GetIncrementalNewCompanyProductMergeCount(condition, pars)
  1452. if err != nil && err.Error() != utils.ErrNoRow() {
  1453. br.Msg = "获取失败"
  1454. br.ErrMsg = "获取失败,Err:" + err.Error()
  1455. return
  1456. }
  1457. trialTotal = total
  1458. //列表页数据
  1459. tmpList, err := models.GetIncrementalCompanyMergeList(condition, pars, startSize, pageSize)
  1460. if err != nil {
  1461. br.Msg = "获取失败"
  1462. br.ErrMsg = "获取失败,Err:" + err.Error()
  1463. return
  1464. }
  1465. if len(tmpList) > 0 {
  1466. var companyContractIds []int
  1467. for _, v := range tmpList {
  1468. companyContractIds = append(companyContractIds, v.CompanyContractId)
  1469. }
  1470. //合并合同所对应的权限
  1471. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  1472. if err != nil {
  1473. br.Msg = "获取失败"
  1474. br.ErrMsg = "获取失败,Err:" + err.Error()
  1475. return
  1476. }
  1477. for _, v := range tmpList {
  1478. item := new(statistic_report.RaiDataSummaryDetailResp)
  1479. item.CompanyId = v.CompanyId
  1480. item.CompanyName = v.CompanyName
  1481. if isServerSeller {
  1482. item.SellerName = v.ShareSellerLast
  1483. } else {
  1484. item.SellerName = v.SellerNameLast
  1485. }
  1486. item.StartDate = v.StartDate
  1487. item.EndDate = v.EndDate
  1488. item.Money = v.Money
  1489. item.PermissionName = mappermissionName[v.CompanyContractId]
  1490. listResp = append(listResp, item)
  1491. }
  1492. listGroup, err = models.GetCompanyContractGroupList(condition, pars)
  1493. if err != nil {
  1494. br.Msg = "获取失败"
  1495. br.ErrMsg = "获取失败,Err:" + err.Error()
  1496. return
  1497. }
  1498. }
  1499. case "确认不续约率":
  1500. noRenewedcompanyContractIdsMap := services.GetCompanyContractNoRenewedAscribeListMap()
  1501. var conditionEnd string
  1502. var parsEnd []interface{}
  1503. if sellerId != "" {
  1504. if isServerSeller {
  1505. //condition += ` AND a.share_seller_id_init IN (` + sellerId + `) `
  1506. conditionEnd += ` AND a.share_seller_id_last IN (` + sellerId + `) `
  1507. } else {
  1508. //condition += ` AND a.seller_id_init IN (` + sellerId + `) `
  1509. conditionEnd += ` AND a.seller_id_last IN (` + sellerId + `) `
  1510. }
  1511. }
  1512. //condition += ` AND a.product_id = 2 AND a.status = 1 AND a.contract_type != '打分1派点' AND a.end_date >= ? AND a.end_date <= ? AND a.end_date <= ? `
  1513. //pars = append(pars, startDate, endDate, time.Now().Format(utils.FormatDate))
  1514. //listRaiData, err := statistic_report.GetRaiDataSummaryList(condition, pars)
  1515. //if err != nil {
  1516. // br.Msg = "获取数据信息失败"
  1517. // br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1518. // return
  1519. //}
  1520. //fmt.Println(len(listRaiData))
  1521. conditionEnd += ` AND a.product_id = 2 AND a.status = 1 AND a.contract_type != '打分1派点' AND a.due_end_date >= ? AND a.due_end_date <= ? AND a.end_date < ? `
  1522. parsEnd = append(parsEnd, startDate, endDate, time.Now().Format(utils.FormatDate))
  1523. listEndData, err := statistic_report.GetRaiDataSummaryList(conditionEnd, parsEnd)
  1524. if err != nil {
  1525. br.Msg = "获取数据信息失败"
  1526. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1527. return
  1528. }
  1529. var norenewedContractMoney float64 // 不续约金额
  1530. var norenewedContractCompany float64 // 不续约客户数
  1531. mapnorenewedContractCompany := make(map[int]bool)
  1532. var expiredContractMoney float64 //到期金额
  1533. var expiredContractCompany float64 // 到期客户数
  1534. mapexpiredContractCompany := make(map[int]bool)
  1535. for _, v := range listEndData {
  1536. if noRenewedcompanyContractIdsMap[v.CompanyContractId] {
  1537. norenewedContractMoney += v.Money
  1538. if !mapnorenewedContractCompany[v.CompanyId] {
  1539. norenewedContractCompany++
  1540. mapnorenewedContractCompany[v.CompanyId] = true
  1541. }
  1542. }
  1543. }
  1544. for _, v := range listEndData {
  1545. expiredContractMoney += v.Money
  1546. if !mapexpiredContractCompany[v.CompanyId] {
  1547. expiredContractCompany++
  1548. mapexpiredContractCompany[v.CompanyId] = true
  1549. }
  1550. }
  1551. item := new(statistic_report.RaiDataSummaryDetailResp)
  1552. item.TbaleNameAText = "金额不续约率"
  1553. item.RenewedContractMoney = fmt.Sprint(utils.SubFloatToString(norenewedContractMoney, 2))
  1554. item.ExpiredContractMoney = fmt.Sprint(utils.SubFloatToString(expiredContractMoney, 2))
  1555. if norenewedContractMoney == 0 || expiredContractMoney == 0 {
  1556. item.RenewalRate = "0%"
  1557. } else {
  1558. item.RenewalRate = fmt.Sprint(utils.SubFloatToString(norenewedContractMoney/expiredContractMoney*100, 2), "%")
  1559. }
  1560. listResp = append(listResp, item)
  1561. item2 := new(statistic_report.RaiDataSummaryDetailResp)
  1562. item2.TbaleNameAText = "客户不续约率"
  1563. item2.RenewedContractMoney = fmt.Sprint(norenewedContractCompany)
  1564. item2.ExpiredContractMoney = fmt.Sprint(expiredContractCompany)
  1565. if norenewedContractCompany == 0 || expiredContractCompany == 0 {
  1566. item2.RenewalRate = "0%"
  1567. } else {
  1568. item2.RenewalRate = fmt.Sprint(utils.SubFloatToString(norenewedContractCompany/expiredContractCompany*100, 2), "%")
  1569. }
  1570. listResp = append(listResp, item2)
  1571. case "签约客户数量":
  1572. var conditionInherit string
  1573. var parsInherit []interface{}
  1574. if sellerId != "" {
  1575. if isServerSeller {
  1576. condition += ` AND a.share_seller_id_init IN (` + sellerId + `) `
  1577. conditionInherit += ` AND a.share_seller_id_last IN (` + sellerId + `) `
  1578. } else {
  1579. condition += ` AND a.seller_id_init IN (` + sellerId + `) `
  1580. conditionInherit += ` AND a.seller_id_last IN (` + sellerId + `) `
  1581. }
  1582. }
  1583. condition += " AND a.product_id = 2 AND a.status = 1 AND a.start_date >= ? AND a.start_date <= ? AND a.rai_contract_type = '新签合同' AND a.contract_type != '打分1派点' "
  1584. pars = append(pars, startDate, endDate)
  1585. listRaiData, err := statistic_report.GetRaiDataSummaryList(condition, pars)
  1586. if err != nil {
  1587. br.Msg = "获取数据信息失败"
  1588. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1589. return
  1590. }
  1591. //续约部分的数据
  1592. conditionInherit += ` AND a.product_id = 2 AND a.status = 1 AND a.inherit_end_date >= ? AND a.inherit_end_date <= ? AND a.inherit_company_contract_id > 0 AND a.rai_contract_type = '续约合同' AND a.contract_type != '打分1派点' AND a.company_contract_id NOT IN (` + utils.GetOrmInReplace(lenArrCompany) + `) `
  1593. parsInherit = append(parsInherit, startDate, endDate, companyContractIdsNew)
  1594. listInheritData, err := statistic_report.GetRaiDataSummaryInheritList(conditionInherit, parsInherit)
  1595. if err != nil {
  1596. br.Msg = "获取数据信息失败"
  1597. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1598. return
  1599. }
  1600. var renewedContractCompany int // 续约客户数
  1601. var renewedContract int // 续约合同数
  1602. maprenewedContractCompany := make(map[int]bool)
  1603. var newContractCompany int // 新签客户数
  1604. var newContract int // 新签合同数
  1605. mapenewContractCompany := make(map[int]bool)
  1606. for _, v := range listRaiData {
  1607. if v.RaiContractType == "新签合同" {
  1608. newContract++
  1609. if !mapenewContractCompany[v.CompanyId] {
  1610. newContractCompany++
  1611. mapenewContractCompany[v.CompanyId] = true
  1612. }
  1613. }
  1614. //else if v.RaiContractType == "续约合同" {
  1615. // renewedContract++
  1616. // if !maprenewedContractCompany[v.CompanyId] {
  1617. // renewedContractCompany++
  1618. // maprenewedContractCompany[v.CompanyId] = true
  1619. // }
  1620. //}
  1621. }
  1622. for _, v := range listInheritData {
  1623. renewedContract++
  1624. if !maprenewedContractCompany[v.CompanyId] {
  1625. renewedContractCompany++
  1626. maprenewedContractCompany[v.CompanyId] = true
  1627. }
  1628. }
  1629. item := new(statistic_report.RaiDataSummaryDetailResp)
  1630. item.RenewedContractCompany = renewedContractCompany
  1631. item.RenewedContract = renewedContract
  1632. item.NewContractCompany = newContractCompany
  1633. item.NewContract = newContract
  1634. listResp = append(listResp, item)
  1635. case "客单价":
  1636. //续约部分的数据
  1637. var conditionInherit string
  1638. var parsInherit []interface{}
  1639. if sellerId != "" {
  1640. if isServerSeller {
  1641. condition += ` AND a.share_seller_id_init IN (` + sellerId + `) `
  1642. conditionInherit += ` AND a.share_seller_id_last IN (` + sellerId + `) `
  1643. } else {
  1644. condition += ` AND a.seller_id_init IN (` + sellerId + `) `
  1645. conditionInherit += ` AND a.seller_id_last IN (` + sellerId + `) `
  1646. }
  1647. }
  1648. condition += " AND a.product_id = 2 AND a.status = 1 AND a.start_date >= ? AND a.start_date <= ? AND a.rai_contract_type = '新签合同' AND a.contract_type != '打分1派点' "
  1649. pars = append(pars, startDate, endDate)
  1650. listRaiData, err := statistic_report.GetRaiDataSummaryList(condition, pars)
  1651. if err != nil {
  1652. br.Msg = "获取数据信息失败"
  1653. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1654. return
  1655. }
  1656. var ontractMoney float64 // 签约总金额
  1657. var contractNum int // 签约客户数
  1658. mapCompany := make(map[int]bool)
  1659. for _, v := range listRaiData {
  1660. if v.RaiContractType != "新签合同" {
  1661. continue
  1662. }
  1663. ontractMoney += v.Money
  1664. if !mapCompany[v.CompanyId] {
  1665. contractNum++
  1666. mapCompany[v.CompanyId] = true
  1667. }
  1668. }
  1669. conditionInherit += ` AND a.product_id = 2 AND a.status = 1 AND a.inherit_end_date >= ? AND a.inherit_end_date <= ? AND a.rai_contract_type = '续约合同' AND a.contract_type != '打分1派点' AND a.company_contract_id NOT IN (` + utils.GetOrmInReplace(lenArrCompany) + `) `
  1670. parsInherit = append(parsInherit, startDate, endDate, companyContractIdsNew)
  1671. listInheritData, err := statistic_report.GetRaiDataSummaryInheritList(conditionInherit, parsInherit)
  1672. if err != nil {
  1673. br.Msg = "获取数据信息失败"
  1674. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1675. return
  1676. }
  1677. for _, v := range listInheritData {
  1678. ontractMoney += v.Money
  1679. if !mapCompany[v.CompanyId] && v.RaiContractType == "续约合同" {
  1680. contractNum++
  1681. mapCompany[v.CompanyId] = true
  1682. }
  1683. }
  1684. item := new(statistic_report.RaiDataSummaryDetailResp)
  1685. item.ContractMoney = fmt.Sprint(utils.SubFloatToString(ontractMoney, 2))
  1686. item.ContractNum = contractNum
  1687. listResp = append(listResp, item)
  1688. case "开票金额":
  1689. if sellerId != "" {
  1690. condition += ` AND a.seller_id IN (` + sellerId + `) `
  1691. }
  1692. condition += " AND a.is_deleted = 0 AND a.invoice_type IN (1,3) AND a.invoice_time >= ? AND a.invoice_time <= ? "
  1693. pars = append(pars, startDate, endDate)
  1694. total, err := fms.GetContractInvoiceCount(condition, pars)
  1695. if err != nil && err.Error() != utils.ErrNoRow() {
  1696. br.Msg = "获取失败"
  1697. br.ErrMsg = "获取失败,Err:" + err.Error()
  1698. return
  1699. }
  1700. trialTotal = total
  1701. condition += " GROUP BY a.contract_invoice_id ORDER BY a.invoice_time DESC ,a.contract_register_id DESC "
  1702. listFmsData, err := fms.GetContractRegisterList(condition, pars, startSize, pageSize)
  1703. if err != nil {
  1704. br.Msg = "获取数据信息失败"
  1705. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1706. return
  1707. }
  1708. if len(listFmsData) > 0 {
  1709. for _, v := range listFmsData {
  1710. item := new(statistic_report.RaiDataSummaryDetailResp)
  1711. item.CompanyName = v.CompanyName
  1712. item.SellerName = v.SellerName
  1713. item.ContractCode = v.ContractCode
  1714. item.InvoicedAmount = v.Amount
  1715. item.CreateTime = v.InvoiceTime
  1716. listResp = append(listResp, item)
  1717. }
  1718. }
  1719. case "到款金额":
  1720. if sellerId != "" {
  1721. condition += ` AND a.seller_id IN (` + sellerId + `) `
  1722. }
  1723. condition += " AND a.is_deleted = 0 AND a.invoice_type IN (2,4) AND a.invoice_time >= ? AND a.invoice_time <= ? "
  1724. pars = append(pars, startDate, endDate)
  1725. total, err := fms.GetContractInvoiceCount(condition, pars)
  1726. if err != nil && err.Error() != utils.ErrNoRow() {
  1727. br.Msg = "获取失败"
  1728. br.ErrMsg = "获取失败,Err:" + err.Error()
  1729. return
  1730. }
  1731. trialTotal = total
  1732. condition += " GROUP BY a.contract_invoice_id ORDER BY invoice_time DESC ,a.contract_register_id DESC "
  1733. listFmsData, err := fms.GetContractRegisterList(condition, pars, startSize, pageSize)
  1734. if err != nil {
  1735. br.Msg = "获取数据信息失败"
  1736. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1737. return
  1738. }
  1739. if len(listFmsData) > 0 {
  1740. for _, v := range listFmsData {
  1741. item := new(statistic_report.RaiDataSummaryDetailResp)
  1742. item.CompanyName = v.CompanyName
  1743. item.SellerName = v.SellerName
  1744. item.ContractCode = v.ContractCode
  1745. item.PaymentAmount = v.Amount
  1746. item.CreateTime = v.InvoiceTime
  1747. listResp = append(listResp, item)
  1748. }
  1749. }
  1750. case "未到款比例":
  1751. if sellerId != "" {
  1752. condition += ` AND a.seller_id IN (` + sellerId + `) `
  1753. }
  1754. var condition2 string
  1755. var pars2 []interface{}
  1756. condition2 = condition + " AND a.is_deleted = 0 AND a.invoice_type IN (2,4) AND a.invoice_time >= ? AND a.invoice_time <= ? "
  1757. pars2 = append(pars2, startDate, endDate)
  1758. condition += " AND a.is_deleted = 0 AND a.invoice_type IN (1,3) AND a.invoice_time >= ? AND a.invoice_time <= ? "
  1759. pars = append(pars, startDate, endDate)
  1760. amount1, err := fms.GetContractInvoiceAmountCount(condition, pars) //开票金额总计
  1761. if err != nil {
  1762. br.Msg = "获取数据信息失败"
  1763. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1764. return
  1765. }
  1766. amount2, err := fms.GetContractInvoiceAmountCount(condition2, pars2) //到款金额总计
  1767. if err != nil {
  1768. br.Msg = "获取数据信息失败"
  1769. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1770. return
  1771. }
  1772. item := new(statistic_report.RaiDataSummaryDetailResp)
  1773. item.InvoicedAmount = amount1
  1774. item.PaymentAmount = amount2
  1775. item.NotReceivedtAmount = amount1 - amount2
  1776. listResp = append(listResp, item)
  1777. case "新客开票":
  1778. if sellerId != "" {
  1779. condition += ` AND a.seller_id IN (` + sellerId + `) `
  1780. }
  1781. condition += ` AND a.is_deleted = 0 AND b.contract_type = 1 AND a.invoice_type IN (1,3) AND a.invoice_time >= ? AND a.invoice_time <= ? `
  1782. pars = append(pars, startDate, endDate)
  1783. total, err := fms.GetContractInvoiceCount(condition, pars)
  1784. if err != nil && err.Error() != utils.ErrNoRow() {
  1785. br.Msg = "获取失败"
  1786. br.ErrMsg = "获取失败,Err:" + err.Error()
  1787. return
  1788. }
  1789. trialTotal = total
  1790. condition += " GROUP BY a.contract_invoice_id ORDER BY a.invoice_time DESC ,a.contract_register_id DESC "
  1791. listFmsData, err := fms.GetContractRegisterList(condition, pars, startSize, pageSize)
  1792. if err != nil {
  1793. br.Msg = "获取数据信息失败"
  1794. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1795. return
  1796. }
  1797. if len(listFmsData) > 0 {
  1798. for _, v := range listFmsData {
  1799. item := new(statistic_report.RaiDataSummaryDetailResp)
  1800. item.CompanyName = v.CompanyName
  1801. item.SellerName = v.SellerName
  1802. item.ContractCode = v.ContractCode
  1803. item.InvoicedAmount = v.Amount
  1804. item.CreateTime = v.InvoiceTime
  1805. listResp = append(listResp, item)
  1806. }
  1807. }
  1808. case "新客到款":
  1809. if sellerId != "" {
  1810. condition += ` AND a.seller_id IN (` + sellerId + `) `
  1811. }
  1812. condition += ` AND a.is_deleted = 0 AND b.contract_type = 1 AND a.invoice_type IN (2,4) AND a.invoice_time >= ? AND a.invoice_time <= ? `
  1813. pars = append(pars, startDate, endDate)
  1814. total, err := fms.GetContractInvoiceCount(condition, pars)
  1815. if err != nil && err.Error() != utils.ErrNoRow() {
  1816. br.Msg = "获取失败"
  1817. br.ErrMsg = "获取失败,Err:" + err.Error()
  1818. return
  1819. }
  1820. trialTotal = total
  1821. condition += ` GROUP BY a.contract_invoice_id ORDER BY a.invoice_time DESC ,a.contract_register_id DESC `
  1822. listFmsData, err := fms.GetContractRegisterList(condition, pars, startSize, pageSize)
  1823. if err != nil {
  1824. br.Msg = "获取数据信息失败"
  1825. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1826. return
  1827. }
  1828. if len(listFmsData) > 0 {
  1829. for _, v := range listFmsData {
  1830. item := new(statistic_report.RaiDataSummaryDetailResp)
  1831. item.CompanyName = v.CompanyName
  1832. item.SellerName = v.SellerName
  1833. item.ContractCode = v.ContractCode
  1834. item.PaymentAmount = v.Amount
  1835. item.CreateTime = v.InvoiceTime
  1836. listResp = append(listResp, item)
  1837. }
  1838. }
  1839. case "标红覆盖率":
  1840. if sellerId != "" && !isAmountTo {
  1841. condition += ` AND share_seller_id IN (` + sellerId + `) `
  1842. }
  1843. condition += ` AND end_date = ? `
  1844. pars = append(pars, endDate)
  1845. listCoverageRateData, err := cygx.GetCygxRaiServeCompanyCoverageRateLast(condition, pars, 0, 1)
  1846. if err != nil {
  1847. br.Msg = "获取数据信息失败"
  1848. br.ErrMsg = "获取数据信息失败,Err:" + err.Error()
  1849. return
  1850. }
  1851. if len(listCoverageRateData) > 0 {
  1852. for _, v := range listCoverageRateData {
  1853. item := new(statistic_report.RaiDataSummaryDetailResp)
  1854. if isAmountTo {
  1855. item.SellerServeCountRed = v.ShareTotalServeCountRed
  1856. item.TotalServeCount = v.ShareTotalServeCount
  1857. } else {
  1858. item.SellerServeCountRed = v.ShareSellerServeCountRed
  1859. item.TotalServeCount = v.ShareSellerServeCount
  1860. }
  1861. listResp = append(listResp, item)
  1862. }
  1863. }
  1864. }
  1865. if len(listResp) == 0 {
  1866. listResp = make([]*statistic_report.RaiDataSummaryDetailResp, 0)
  1867. }
  1868. if len(listGroup) > 0 {
  1869. for _, v := range listGroup {
  1870. if v.CompanyCount > 1 {
  1871. resp.CompanyMultiple++
  1872. }
  1873. }
  1874. resp.CompanyNum = len(listGroup)
  1875. }
  1876. resp.List = listResp
  1877. page := paging.GetPaging(currentIndex, pageSize, trialTotal)
  1878. resp.Paging = page
  1879. br.Ret = 200
  1880. br.Success = true
  1881. br.Msg = "获取成功"
  1882. br.Data = resp
  1883. }
  1884. // 时间筛选项的转换
  1885. func getYearStar(startDate time.Time, dataType string, isCustomizeDate bool) (yearStr string) {
  1886. if isCustomizeDate {
  1887. return //如果有自定的时间,就传空值
  1888. }
  1889. startDateTime := startDate
  1890. monthNum := startDateTime.Month()
  1891. yearStr = strconv.Itoa(startDateTime.Year())
  1892. if dataType == "季度" {
  1893. if monthNum < 4 {
  1894. yearStr += "Q1"
  1895. } else if monthNum > 3 && monthNum < 7 {
  1896. yearStr += "Q2"
  1897. } else if monthNum > 6 && monthNum < 10 {
  1898. yearStr += "Q3"
  1899. } else if monthNum > 9 {
  1900. yearStr += "Q4"
  1901. }
  1902. } else if dataType == "半年度" {
  1903. if monthNum < 7 {
  1904. yearStr += "H1"
  1905. } else {
  1906. yearStr += "H2"
  1907. }
  1908. }
  1909. return
  1910. }