rai_data_summary.go 84 KB

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