rai_data_summary.go 72 KB

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