rai_data_summary.go 72 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779
  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') ) `
  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. }