rai_data_summary.go 81 KB

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