rai_data_summary.go 65 KB

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