rai_data_summary.go 80 KB

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