statistic_company_merge.go 76 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312
  1. package controllers
  2. import (
  3. "fmt"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "github.com/tealeg/xlsx"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/company"
  8. "hongze/hz_crm_api/models/response"
  9. "hongze/hz_crm_api/models/system"
  10. "hongze/hz_crm_api/services"
  11. cygxService "hongze/hz_crm_api/services/cygx"
  12. "os"
  13. "path/filepath"
  14. "strconv"
  15. "strings"
  16. //"hongze/hz_crm_api/services"
  17. "hongze/hz_crm_api/utils"
  18. //"strings"
  19. "time"
  20. )
  21. // 统计报表模块下权益合同合并
  22. // StatisticReportController 统计报告基类
  23. type StatisticCompanyMergerController struct {
  24. BaseAuthController
  25. }
  26. // MergeCompanyList
  27. // @Title 权益客户统计列表(合同进行合并之后的)
  28. // @Description 权益客户统计列表接口
  29. // @Param PageSize query int true "每页数据条数"
  30. // @Param CurrentIndex query int true "当前页页码,从1开始"
  31. // @Param Keyword query string true "客户名称"
  32. // @Param CompanyType query string true "客户类型:传空字符串或者不传为全部,'ficc','权益'"
  33. // @Param AdminId query string true "销售id,多个用英文逗号隔开,空字符串为全部"
  34. // @Param RegionType query string false "所属区域:传空字符串或者不传为全部,'国内','海外'"
  35. // @Param StartDate query string false "开始日期"
  36. // @Param EndDate query string false "结束日期"
  37. // @Param DataType query string false "报表类型,枚举值:`新增试用`,`新签客户`,`续约客户`,`未续约客户`"
  38. // @Param TryOutType query string false " '试用', '非试用' 非试用即为冻结/流失"
  39. // @Param IsExport query bool false "是否导出excel,默认是false"
  40. // @Param IsConfirm query int false "是否确认续约: -1-默认全部; 0-待确认; 1-已确认 ;2-到期合同"
  41. // @Param CompanyAscribeId query int false "归因ID"
  42. // @Param PackageDifference query string false "和上一份合同的区别,枚举值:`增加套餐`,`减少套餐`,`维持套餐`"
  43. // @Success 200 {object} response.IncrementalCompanyListResp
  44. // @router /merge_company_list [get]
  45. func (this *StatisticCompanyMergerController) MergeCompanyList() {
  46. br := new(models.BaseResponse).Init()
  47. defer func() {
  48. this.Data["json"] = br
  49. this.ServeJSON()
  50. }()
  51. sysUser := this.SysUser
  52. if sysUser == nil {
  53. br.Msg = "请登录"
  54. br.ErrMsg = "请登录,SysUser Is Empty"
  55. br.Ret = 408
  56. return
  57. }
  58. pageSize, _ := this.GetInt("PageSize")
  59. currentIndex, _ := this.GetInt("CurrentIndex")
  60. adminId := this.GetString("AdminId")
  61. regionType := this.GetString("RegionType")
  62. //companyType := this.GetString("CompanyType")
  63. dataType := this.GetString("DataType")
  64. tryOutType := this.GetString("TryOutType")
  65. keyword := this.GetString("Keyword")
  66. packageDifference := this.GetString("PackageDifference")
  67. startDate := this.GetString("StartDate")
  68. endDate := this.GetString("EndDate")
  69. isConfirm, _ := this.GetInt("IsConfirm", -1)
  70. companyAscribeId, _ := this.GetInt("CompanyAscribeId", -1)
  71. if dataType != "续约客户" {
  72. packageDifference = "" // 只有续约客户才会有值,过滤前端传过来的脏数据
  73. }
  74. if startDate == "" {
  75. startDate = "2015-01-01"
  76. }
  77. if endDate == "" {
  78. endDate = time.Now().Format(utils.FormatDate)
  79. }
  80. var startSize int
  81. if pageSize <= 0 {
  82. pageSize = utils.PageSize20
  83. }
  84. if currentIndex <= 0 {
  85. currentIndex = 1
  86. }
  87. startSize = utils.StartIndex(currentIndex, pageSize)
  88. //是否导出报表
  89. isExport, _ := this.GetBool("IsExport")
  90. if isExport {
  91. pageSize = 10000
  92. currentIndex = 1
  93. }
  94. var condition string
  95. var pars []interface{}
  96. //条件
  97. if adminId != "" {
  98. //condition += ` AND a.seller_id_init in (` + adminId + `) `
  99. //condition += ` AND c.seller_id in (` + adminId + `) `
  100. //pars = append(pars, adminId)
  101. } else {
  102. //根据当前角色来获取查询条件
  103. condition, pars = getQueryParams(condition, pars, sysUser, "c.")
  104. }
  105. if regionType != "" {
  106. condition += ` AND b.region_type = ? `
  107. pars = append(pars, regionType)
  108. }
  109. //关键字搜索
  110. if keyword != "" {
  111. condition += ` and b.company_name like "%` + keyword + `%" `
  112. }
  113. var conditionAscribRai string // 处理权益未续约客户检索列表SQL查询条件
  114. var conditionAscribRaiTotal string // 处理权益未续约客户总量查询条件
  115. var conditionAscribRaiToBeTotal string // 处理权益未续约客户待确认总量查询条件
  116. var parsAscribeRai []interface{}
  117. var parsAscribeRaiTotal []interface{} // 处理权益未续约客户总量查询条件
  118. var parsAscribeRaiTobeTotal []interface{} // 处理权益未续约客户待确认总量查询条件
  119. var conditionConfirm string
  120. var parsConfirm []interface{}
  121. companyConfirmList, err := company.GetCompanyContractNoRenewedAscribeList(conditionConfirm, parsConfirm, 0, 0)
  122. if err != nil && err.Error() != utils.ErrNoRow() {
  123. br.Msg = "获取失败"
  124. br.ErrMsg = "获取失败,GetCompanyNoRenewedAscribeList Err:" + err.Error()
  125. return
  126. }
  127. var noRenewedcompanyContractIds []int //已经确定未续约的公司ID
  128. if len(companyConfirmList) == 0 {
  129. noRenewedcompanyContractIds = append(noRenewedcompanyContractIds, 0) // 给一个不存在的ID
  130. } else {
  131. for _, v := range companyConfirmList {
  132. noRenewedcompanyContractIds = append(noRenewedcompanyContractIds, v.CompanyContractId)
  133. }
  134. }
  135. //是否确认续约 CRM 13.9
  136. conditionAscribRaiTotal += ` AND a.company_contract_id IN (` + utils.GetOrmInReplace(len(noRenewedcompanyContractIds)) + `) ` // 已确认
  137. parsAscribeRaiTotal = append(parsAscribeRaiTotal, noRenewedcompanyContractIds)
  138. conditionAscribRaiToBeTotal += ` AND a.company_contract_id NOT IN (` + utils.GetOrmInReplace(len(noRenewedcompanyContractIds)) + `) ` // 待确认
  139. parsAscribeRaiTobeTotal = append(parsAscribeRaiTobeTotal, noRenewedcompanyContractIds)
  140. if isConfirm != -1 {
  141. if isConfirm == 0 {
  142. conditionAscribRai += ` AND a.company_contract_id NOT IN (` + utils.GetOrmInReplace(len(noRenewedcompanyContractIds)) + `) ` // 待确认
  143. parsAscribeRai = append(parsAscribeRai, noRenewedcompanyContractIds)
  144. } else if isConfirm == 1 {
  145. conditionAscribRai += ` AND a.company_contract_id IN (` + utils.GetOrmInReplace(len(noRenewedcompanyContractIds)) + `) ` // 已确认
  146. parsAscribeRai = append(parsAscribeRai, noRenewedcompanyContractIds)
  147. } else if isConfirm == 2 {
  148. conditionAscribRai += ` AND a.start_date < ? ` // 已确认
  149. parsAscribeRai = append(parsAscribeRai, time.Now().Format(utils.FormatDate))
  150. }
  151. }
  152. //归因ID CRM 13.9
  153. if companyAscribeId > 0 {
  154. var conditionAscribe string
  155. var parsAscribe []interface{}
  156. conditionAscribe = " AND company_ascribe_id = ? "
  157. parsAscribe = append(parsAscribe, companyAscribeId)
  158. companyNoRenewedAscribeList, err := company.GetCompanyContractNoRenewedAscribeList(conditionAscribe, parsAscribe, 0, 0)
  159. if err != nil && err.Error() != utils.ErrNoRow() {
  160. br.Msg = "获取失败"
  161. br.ErrMsg = "获取失败,GetCompanyNoRenewedAscribeList Err:" + err.Error()
  162. return
  163. }
  164. var noRenewedcompanyContractIds []int
  165. if len(companyNoRenewedAscribeList) == 0 {
  166. noRenewedcompanyContractIds = append(noRenewedcompanyContractIds, 0) // 给一个不存在的ID
  167. } else {
  168. for _, v := range companyNoRenewedAscribeList {
  169. noRenewedcompanyContractIds = append(noRenewedcompanyContractIds, v.CompanyContractId)
  170. }
  171. }
  172. conditionAscribRai += ` AND a.company_contract_id IN (` + utils.GetOrmInReplace(len(noRenewedcompanyContractIds)) + `)`
  173. parsAscribeRai = append(parsAscribeRai, noRenewedcompanyContractIds)
  174. }
  175. condition += ` AND c.product_id = ? `
  176. pars = append(pars, 2)
  177. var list []*models.IncrementalList
  178. //moreListMap := make(map[int][]*models.IncrementalList)
  179. var newCompanyTotal int //新签合同数量
  180. var notRenewalCompanyTotal int //未续约客户数已确认
  181. var notRenewalCompanyToBeConfirmTotal int //未续约客户数待确认
  182. var dataTotal, trialTotal, renewalCompanyTotal int
  183. var notRenewalTryOut, notRenewalNotTryOut int
  184. //试用客户数
  185. {
  186. condition1 := condition
  187. pars1 := pars
  188. condition1 += ` AND a.create_time >= ? AND a.create_time <= ? AND a.operation in ("add","receive") AND b.company_id NOT IN ( SELECT company_id FROM company_operation_record WHERE product_id = 2 AND operation ="loss" GROUP BY company_id ) `
  189. pars1 = append(pars1, startDate, endDate)
  190. //销售筛选条件
  191. if adminId != "" {
  192. condition1 += ` AND c.seller_id in (` + adminId + `) `
  193. }
  194. total, err := models.GetIncrementalCompanyCountByOperationRecord(condition1, pars1)
  195. if err != nil && err.Error() != utils.ErrNoRow() {
  196. br.Msg = "获取失败"
  197. br.ErrMsg = "获取失败,Err:" + err.Error()
  198. return
  199. }
  200. trialTotal = total
  201. if dataType == "新增试用" {
  202. //列表数据数量
  203. total, err := models.GetIncrementalCompanyProductCountByOperationRecord(condition1, pars1)
  204. if err != nil && err.Error() != utils.ErrNoRow() {
  205. br.Msg = "获取失败"
  206. br.ErrMsg = "获取失败,Err:" + err.Error()
  207. return
  208. }
  209. //列表页数据
  210. tmpList, err := models.GetIncrementalCompanyListByOperationRecord(condition1, pars1, startSize, pageSize)
  211. if err != nil {
  212. br.Msg = "获取失败"
  213. br.ErrMsg = "获取失败,Err:" + err.Error()
  214. return
  215. }
  216. list = tmpList
  217. dataTotal = total
  218. }
  219. }
  220. //新签客户数
  221. {
  222. condition += ` AND a.status = 1 `
  223. condition1 := condition
  224. pars1 := pars
  225. condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
  226. pars1 = append(pars1, startDate, endDate)
  227. condition1 += ` AND a.rai_contract_type = ? `
  228. pars1 = append(pars1, "新签合同")
  229. //销售筛选条件
  230. if adminId != "" {
  231. condition1 += ` AND a.seller_id_init in (` + adminId + `) `
  232. }
  233. newCompanyTotal, err = company.GetIncrementalNewCompanyProductMergeCount(condition1, pars1)
  234. if err != nil && err.Error() != utils.ErrNoRow() {
  235. br.Msg = "获取失败"
  236. br.ErrMsg = "获取失败,Err:" + err.Error()
  237. return
  238. }
  239. if dataType == "新签客户" {
  240. //列表数据数量
  241. total, err := company.GetIncrementalNewCompanyProductMergeCount(condition1, pars1)
  242. if err != nil && err.Error() != utils.ErrNoRow() {
  243. br.Msg = "获取失败"
  244. br.ErrMsg = "获取失败,Err:" + err.Error()
  245. return
  246. }
  247. //列表页数据
  248. tmpList, err := models.GetIncrementalCompanyMergeList(condition1, pars1, startSize, pageSize)
  249. if err != nil {
  250. br.Msg = "获取失败"
  251. br.ErrMsg = "获取失败,Err:" + err.Error()
  252. return
  253. }
  254. list = tmpList
  255. dataTotal = total
  256. }
  257. }
  258. //续约客户数
  259. {
  260. condition += ` AND a.status = 1 `
  261. condition1 := condition
  262. pars1 := pars
  263. condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
  264. pars1 = append(pars1, startDate, endDate)
  265. condition1 += ` AND a.rai_contract_type = ? `
  266. pars1 = append(pars1, "续约合同")
  267. ////额外条件(续约合同的起始日期包含在所选时间段内且不包含在新签合同存续期内的客户)
  268. //pars1 = append(pars1, endDate)
  269. total, err := company.GetIncrementalNewCompanyProductMergeCount(condition1, pars1)
  270. if err != nil && err.Error() != utils.ErrNoRow() {
  271. br.Msg = "获取失败"
  272. br.ErrMsg = "获取失败,Err:" + err.Error()
  273. return
  274. }
  275. renewalCompanyTotal = total
  276. if dataType == "续约客户" {
  277. //续约的客户才会查询
  278. if packageDifference != "" {
  279. condition1 += ` AND a.package_difference = ? `
  280. pars1 = append(pars1, packageDifference)
  281. }
  282. //列表数据数量
  283. total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
  284. if err != nil && err.Error() != utils.ErrNoRow() {
  285. br.Msg = "获取失败"
  286. br.ErrMsg = "获取失败,Err:" + err.Error()
  287. return
  288. }
  289. //列表页数据
  290. tmpList, err := models.GetIncrementalCompanyMergeList(condition1, pars1, startSize, pageSize)
  291. if err != nil {
  292. br.Msg = "获取失败"
  293. br.ErrMsg = "获取失败,Err:" + err.Error()
  294. return
  295. }
  296. list = tmpList
  297. dataTotal = total
  298. }
  299. }
  300. //未续约客户数
  301. {
  302. condition1 := condition
  303. pars1 := pars
  304. condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
  305. pars1 = append(pars1, startDate, endDate)
  306. //condition1 += ` AND a.operation = ? `
  307. //pars1 = append(pars1, "try_out")
  308. condition1 += ` AND c.status not in ("永续","正式","关闭") `
  309. //未续约已确认数量
  310. notRenewalCondition := condition1
  311. notRenewalPars := pars1
  312. notRenewalCondition += conditionAscribRaiTotal
  313. notRenewalPars = append(notRenewalPars, parsAscribeRaiTotal)
  314. total, err := company.GetIncrementalRenewalCompanyProductMergeCount(notRenewalCondition, notRenewalPars)
  315. if err != nil && err.Error() != utils.ErrNoRow() {
  316. br.Msg = "获取失败"
  317. br.ErrMsg = "获取失败,Err:" + err.Error()
  318. return
  319. }
  320. notRenewalCompanyTotal = total
  321. //未续约待确认数量
  322. notRenewalToBeCondition := condition1
  323. notRenewalToBePars := pars1
  324. notRenewalToBeCondition += conditionAscribRaiToBeTotal
  325. notRenewalToBePars = append(notRenewalToBePars, parsAscribeRaiTobeTotal)
  326. notRenewalCompanyToBeConfirmTotal, err = company.GetIncrementalRenewalCompanyProductMergeCount(notRenewalToBeCondition, notRenewalToBePars)
  327. if err != nil && err.Error() != utils.ErrNoRow() {
  328. br.Msg = "获取失败"
  329. br.ErrMsg = "获取失败,Err:" + err.Error()
  330. return
  331. }
  332. condition1 += conditionAscribRai
  333. pars1 = append(pars1, parsAscribeRai)
  334. if dataType == "未续约客户" {
  335. //统计数据
  336. for _, v := range []string{"试用", "非试用"} {
  337. totalCondition1 := condition1
  338. totalPars1 := pars1
  339. var tmpTotal int
  340. if v == "试用" {
  341. totalCondition1 += ` AND c.status = "试用" `
  342. tmpTotal, err = company.GetIncrementalRenewalCompanyProductMergeCount(totalCondition1, totalPars1)
  343. if err != nil && err.Error() != utils.ErrNoRow() {
  344. br.Msg = "获取失败"
  345. br.ErrMsg = "获取失败,Err:" + err.Error()
  346. return
  347. }
  348. notRenewalTryOut = tmpTotal
  349. } else if v == "非试用" {
  350. totalCondition1 += ` AND c.status IN ("冻结","流失") `
  351. tmpTotal, err = company.GetIncrementalRenewalCompanyProductMergeCount(totalCondition1, totalPars1)
  352. if err != nil && err.Error() != utils.ErrNoRow() {
  353. br.Msg = "获取失败"
  354. br.ErrMsg = "获取失败,Err:" + err.Error()
  355. return
  356. }
  357. notRenewalNotTryOut = tmpTotal
  358. }
  359. }
  360. //列表数据数量
  361. if tryOutType == "试用" {
  362. condition1 += ` AND c.status = "试用" `
  363. total = notRenewalTryOut
  364. } else if tryOutType == "非试用" {
  365. condition1 += ` AND c.status IN ("冻结","流失") `
  366. total = notRenewalNotTryOut
  367. }
  368. //分页total单独计算
  369. total, err = company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
  370. if err != nil && err.Error() != utils.ErrNoRow() {
  371. br.Msg = "获取失败"
  372. br.ErrMsg = "获取失败,Err:" + err.Error()
  373. return
  374. }
  375. //return
  376. //列表页数据
  377. tmpList, err := models.GetIncrementalCompanyListByOperationRecordMerge(condition1, pars1, startSize, pageSize)
  378. if err != nil {
  379. br.Msg = "获取失败"
  380. br.ErrMsg = "获取失败,Err:" + err.Error()
  381. return
  382. }
  383. var ascribecompanyIds []int
  384. var companyContractIds []int
  385. for _, item := range tmpList {
  386. //endDateTime, _ := time.Parse(utils.FormatDateTime, item.CreateTime)
  387. //item.EndDate = endDateTime.Format(utils.FormatDate)
  388. ascribecompanyIds = append(ascribecompanyIds, item.CompanyId)
  389. companyContractIds = append(companyContractIds, item.CompanyContractId)
  390. }
  391. //合同归因标签
  392. mapGetCompanyAscribeContent, mapContent := services.GetCompanyContractAscribeContentMap(companyContractIds)
  393. mapNoRenewedNote := services.GetCompanyNoRenewedNoteMap(ascribecompanyIds)
  394. for _, item := range tmpList {
  395. item.AscribeContent = mapGetCompanyAscribeContent[item.CompanyContractId]
  396. item.Content = mapContent[item.CompanyContractId]
  397. item.IsShowNoRenewedNote = mapNoRenewedNote[fmt.Sprint("CID_", item.CompanyId, "PID_", item.ProductId)]
  398. }
  399. list = tmpList
  400. dataTotal = total
  401. }
  402. }
  403. listLen := len(list)
  404. if listLen == 0 {
  405. list = make([]*models.IncrementalList, 0)
  406. }
  407. var companyContractIds []int
  408. var companyIds []int
  409. for i := 0; i < listLen; i++ {
  410. item := list[i]
  411. companyContractIds = append(companyContractIds, item.CompanyContractId)
  412. //新增试用不需要计算剩余日期
  413. if dataType != "新增试用" {
  414. //剩余可用天数
  415. endDateTime, _ := time.Parse(utils.FormatDate, item.EndDate)
  416. endDateTime = endDateTime.AddDate(0, 0, 1)
  417. sub := endDateTime.Sub(time.Now())
  418. expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
  419. list[i].ExpireDay = expireDay
  420. }
  421. companyIds = append(companyIds, item.CompanyId)
  422. }
  423. //合并合同所对应的权限
  424. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  425. if err != nil {
  426. br.Msg = "获取失败"
  427. br.ErrMsg = "获取失败,Err:" + err.Error()
  428. return
  429. }
  430. mapIsUserMaker := cygxService.GetCompanyProductIsUserMakerByCompanyIds(companyIds) //根据公司ID获取近四周之内有决策人互动的客户
  431. for _, v := range list {
  432. v.PermissionName = mappermissionName[v.CompanyContractId]
  433. v.IsUserMaker = mapIsUserMaker[v.CompanyId]
  434. }
  435. page := paging.GetPaging(currentIndex, pageSize, dataTotal)
  436. resp := response.IncrementalCompanyListResp{
  437. Paging: page,
  438. List: list,
  439. TrialTotal: trialTotal,
  440. NewCompanyTotal: newCompanyTotal,
  441. RenewalCompanyTotal: renewalCompanyTotal,
  442. NotRenewalCompanyTotal: notRenewalCompanyTotal,
  443. NotRenewalCompanyToBeConfirmTotal: notRenewalCompanyToBeConfirmTotal,
  444. NotRenewalTryOut: notRenewalTryOut,
  445. NotRenewalNotTryOut: notRenewalNotTryOut,
  446. }
  447. //fmt.Println()
  448. //导出excel
  449. if isExport {
  450. MergeCompanyListListExport(this, dataType, resp, br)
  451. return
  452. }
  453. br.Ret = 200
  454. br.Success = true
  455. br.Msg = "获取成功"
  456. br.Data = resp
  457. }
  458. // IncrementalCompanyListExport 导出增量客户数据报表excel
  459. func MergeCompanyListListExport(this *StatisticCompanyMergerController, dataType string, resp response.IncrementalCompanyListResp, br *models.BaseResponse) {
  460. dir, err := os.Executable()
  461. exPath := filepath.Dir(dir)
  462. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  463. xlsxFile := xlsx.NewFile()
  464. if err != nil {
  465. br.Msg = "生成文件失败"
  466. br.ErrMsg = "生成文件失败"
  467. return
  468. }
  469. style := xlsx.NewStyle()
  470. alignment := xlsx.Alignment{
  471. Horizontal: "center",
  472. Vertical: "center",
  473. WrapText: true,
  474. }
  475. style.Alignment = alignment
  476. style.ApplyAlignment = true
  477. sheel, err := xlsxFile.AddSheet("增量客户数据")
  478. if err != nil {
  479. br.Msg = "新增Sheet失败"
  480. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  481. return
  482. }
  483. sheel.SetColWidth(0, 0, 30)
  484. sheel.SetColWidth(1, 1, 15)
  485. sheel.SetColWidth(2, 2, 15)
  486. sheel.SetColWidth(3, 3, 18)
  487. sheel.SetColWidth(4, 4, 40)
  488. sheel.SetColWidth(5, 5, 18)
  489. //统计数据
  490. statisticRow := sheel.AddRow()
  491. cell1 := statisticRow.AddCell()
  492. cell1.SetStyle(style)
  493. cell1.SetValue(fmt.Sprint("新增试用客户数:", resp.TrialTotal))
  494. cell2 := statisticRow.AddCell()
  495. cell2.SetStyle(style)
  496. cell2.SetValue(fmt.Sprint("新签客户数:", resp.NewCompanyTotal))
  497. cell3 := statisticRow.AddCell()
  498. cell3.SetStyle(style)
  499. cell3.SetValue(fmt.Sprint("续约客户数:", resp.RenewalCompanyTotal))
  500. cell4 := statisticRow.AddCell()
  501. cell4.SetStyle(style)
  502. cell4.SetValue(fmt.Sprint("未续约客户数:", resp.NotRenewalCompanyTotal))
  503. //表头
  504. titleRow := sheel.AddRow()
  505. cellName := titleRow.AddCell()
  506. cellName.SetStyle(style)
  507. cellName.SetValue("客户名称")
  508. //cellProName := titleRow.AddCell()
  509. //cellProName.SetStyle(style)
  510. //cellProName.SetValue("客户类型")
  511. cellSellerName := titleRow.AddCell()
  512. cellSellerName.SetStyle(style)
  513. cellSellerName.SetValue("所属销售")
  514. if dataType != "新增试用" {
  515. cellShareSeller := titleRow.AddCell()
  516. cellShareSeller.SetStyle(style)
  517. cellShareSeller.SetValue("服务销售")
  518. cellMoney := titleRow.AddCell()
  519. cellMoney.SetStyle(style)
  520. cellMoney.SetValue("合同金额")
  521. }
  522. cellTime := titleRow.AddCell()
  523. cellTime.SetStyle(style)
  524. switch dataType {
  525. case "新增试用":
  526. cellTime.SetValue("新增时间")
  527. case "新签客户":
  528. cellTime.SetValue("签约时间")
  529. case "续约客户":
  530. cellTime.SetValue("续约时间")
  531. case "未续约客户":
  532. cellTime.SetValue("合同期限")
  533. cellAscribeContent := titleRow.AddCell()
  534. cellAscribeContent.SetStyle(style)
  535. cellAscribeContent.SetValue("不续约归因")
  536. cellContent := titleRow.AddCell()
  537. cellContent.SetStyle(style)
  538. cellContent.SetValue("详细原因")
  539. }
  540. if dataType != "新增试用" {
  541. cellPermissionName := titleRow.AddCell()
  542. cellPermissionName.SetStyle(style)
  543. cellPermissionName.SetValue("签约套餐")
  544. }
  545. for _, v := range resp.List {
  546. dataRow := sheel.AddRow()
  547. dataRow.SetHeight(20)
  548. cellDataName := dataRow.AddCell()
  549. cellDataName.SetStyle(style)
  550. cellDataName.SetValue(v.CompanyName)
  551. //cellDataProName := dataRow.AddCell()
  552. //cellDataProName.SetStyle(style)
  553. //cellDataProName.SetValue(v.ProductName)
  554. cellDataSellerName := dataRow.AddCell()
  555. cellDataSellerName.SetStyle(style)
  556. cellDataSellerName.SetValue(v.SellerName)
  557. if dataType != "新增试用" {
  558. cellDataShareSeller := dataRow.AddCell()
  559. cellDataShareSeller.SetStyle(style)
  560. cellDataShareSeller.SetValue(v.ShareSeller)
  561. cellDataMoney := dataRow.AddCell()
  562. cellDataMoney.SetStyle(style)
  563. cellDataMoney.SetValue(v.Money)
  564. }
  565. //if dataType == "新签客户" || dataType == "续约客户" {
  566. //}
  567. cellDataTime := dataRow.AddCell()
  568. cellDataTime.SetStyle(style)
  569. switch dataType {
  570. case "新增试用":
  571. cellDataTime.SetValue(v.CreateTime)
  572. case "新签客户":
  573. cellDataTime.SetValue(fmt.Sprint(v.StartDate, " ~ ", v.EndDate))
  574. case "续约客户":
  575. cellDataTime.SetValue(fmt.Sprint(v.StartDate, " ~ ", v.EndDate))
  576. case "未续约客户":
  577. cellDataTime.SetValue(fmt.Sprint(v.StartDate, " ~ ", v.EndDate))
  578. cellAscribeContent := dataRow.AddCell()
  579. cellAscribeContent.SetStyle(style)
  580. cellAscribeContent.SetValue(v.AscribeContent)
  581. cellContent := dataRow.AddCell()
  582. cellContent.SetStyle(style)
  583. cellContent.SetValue(v.Content)
  584. }
  585. cellDataPermissionName := dataRow.AddCell()
  586. cellDataPermissionName.SetStyle(style)
  587. cellDataPermissionName.SetValue(v.PermissionName)
  588. }
  589. err = xlsxFile.Save(downLoadnFilePath)
  590. if err != nil {
  591. br.Msg = "保存文件失败"
  592. br.ErrMsg = "保存文件失败"
  593. return
  594. }
  595. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  596. downloadFileName := dataType + "数据_" + randStr + ".xlsx"
  597. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  598. defer func() {
  599. os.Remove(downLoadnFilePath)
  600. }()
  601. br.Ret = 200
  602. br.Success = true
  603. br.Msg = "导出成功"
  604. }
  605. // @Title 上一份合同详情
  606. // @Description 上一份合同详情接口
  607. // @Param CompanyContractId query int true "合同ID"
  608. // @Success Ret=200 {object} company.GetCompanyContractMergeDetailResp
  609. // @router /merge_company_previous/detail [get]
  610. func (this *StatisticCompanyMergerController) CompanyPreviousDetail() {
  611. br := new(models.BaseResponse).Init()
  612. defer func() {
  613. this.Data["json"] = br
  614. this.ServeJSON()
  615. }()
  616. AdminUser := this.SysUser
  617. if AdminUser == nil {
  618. br.Msg = "请登录"
  619. br.ErrMsg = "请登录,用户信息为空"
  620. br.Ret = 408
  621. return
  622. }
  623. resp := new(company.GetCompanyContractDetailResp)
  624. companyContractId, _ := this.GetInt("CompanyContractId")
  625. if companyContractId < 1 {
  626. br.Msg = "请输入合同ID"
  627. return
  628. }
  629. var condition string
  630. var pars []interface{}
  631. //获取最新的一条到期的合同信息
  632. condition = " AND company_contract_id = ? "
  633. pars = append(pars, companyContractId)
  634. detail, err := company.GetCompanyContracDetail(condition, pars)
  635. if err != nil {
  636. br.Msg = "详情不存在"
  637. br.ErrMsg = "获取失败,Err:" + err.Error()
  638. return
  639. }
  640. //获取前一份合同的信息
  641. pars = make([]interface{}, 0)
  642. condition = " AND company_id = ? AND company_contract_id < ? AND status = 1 AND product_id = 2 ORDER BY company_contract_id DESC LIMIT 1 "
  643. pars = append(pars, detail.CompanyId, companyContractId)
  644. detailPrevious, err := company.GetCompanyContracDetail(condition, pars)
  645. if err != nil {
  646. br.Msg = "详情不存在"
  647. br.ErrMsg = "获取失败,Err:" + err.Error()
  648. return
  649. }
  650. //合并合同所对应的权限
  651. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById([]int{detailPrevious.CompanyContractId})
  652. if err != nil {
  653. br.Msg = "获取失败"
  654. br.ErrMsg = "获取失败,Err:" + err.Error()
  655. return
  656. }
  657. detailPrevious.PermissionName = mappermissionName[detailPrevious.CompanyContractId]
  658. resp.Detail = detailPrevious
  659. br.Ret = 200
  660. br.Success = true
  661. br.Msg = "获取成功"
  662. br.Data = resp
  663. }
  664. // @Title 权益行业套餐统计
  665. // @Description 权益客户统计列表接口
  666. // @Param PageSize query int true "每页数据条数"
  667. // @Param CurrentIndex query int true "当前页页码,从1开始"
  668. // @Param Keyword query string true "客户名称"
  669. // @Param AdminId query string true "销售id,多个用英文逗号隔开,空字符串为全部"
  670. // @Param StartDate query string false "开始日期"
  671. // @Param EndDate query string false "结束日期"
  672. // @Param DataType query string false "报表类型,枚举值:`行业新签`,`行业续约`,`行业未续约`"
  673. // @Param PermissionName query string false "行业权限名称"
  674. // @Param IsExport query bool false "是否导出excel,默认是false"
  675. // @Success 200 {object} response.IncrementalCompanyListResp
  676. // @router /merge_company/company_contract_permission/list [get]
  677. func (this *StatisticCompanyMergerController) CompanyContractPermissionList() {
  678. br := new(models.BaseResponse).Init()
  679. defer func() {
  680. this.Data["json"] = br
  681. this.ServeJSON()
  682. }()
  683. sysUser := this.SysUser
  684. if sysUser == nil {
  685. br.Msg = "请登录"
  686. br.ErrMsg = "请登录,SysUser Is Empty"
  687. br.Ret = 408
  688. return
  689. }
  690. pageSize, _ := this.GetInt("PageSize")
  691. currentIndex, _ := this.GetInt("CurrentIndex")
  692. adminId := this.GetString("AdminId")
  693. regionType := this.GetString("RegionType")
  694. //companyType := this.GetString("CompanyType")
  695. dataType := this.GetString("DataType")
  696. keyword := this.GetString("Keyword")
  697. startDate := this.GetString("StartDate")
  698. endDate := this.GetString("EndDate")
  699. permissionName := this.GetString("PermissionName")
  700. if permissionName == "" { //默认所筛选行业为医药
  701. permissionName = "医药"
  702. }
  703. //if startDate == "" || endDate == "" {
  704. // br.Msg = "获取失败,开始日期或结束日期未传"
  705. // br.ErrMsg = "获取失败,开始日期或结束日期未传"
  706. // return
  707. //}
  708. if startDate == "" {
  709. startDate = "2015-01-01"
  710. }
  711. if endDate == "" {
  712. endDate = time.Now().Format(utils.FormatDate)
  713. }
  714. var startSize int
  715. if pageSize <= 0 {
  716. pageSize = utils.PageSize20
  717. }
  718. if currentIndex <= 0 {
  719. currentIndex = 1
  720. }
  721. startSize = utils.StartIndex(currentIndex, pageSize)
  722. //是否导出报表
  723. isExport, _ := this.GetBool("IsExport")
  724. if isExport {
  725. pageSize = 10000
  726. currentIndex = 1
  727. permissionName = "" //点击下载的时候不做行业筛选
  728. }
  729. var condition string
  730. var pars []interface{}
  731. //条件
  732. if adminId != "" {
  733. condition += ` AND c.seller_id in (` + adminId + `) `
  734. //pars = append(pars, adminId)
  735. } else {
  736. //根据当前角色来获取查询条件
  737. condition, pars = getQueryParams(condition, pars, sysUser, "c.")
  738. }
  739. if regionType != "" {
  740. condition += ` AND b.region_type = ? `
  741. pars = append(pars, regionType)
  742. }
  743. //关键字搜索
  744. if keyword != "" {
  745. condition += ` and b.company_name like "%` + keyword + `%" `
  746. }
  747. var conditionAscribRai string // 处理权益未续约客户检索列表SQL查询条件
  748. var conditionAscribRaiTotal string // 处理权益未续约客户总量查询条件
  749. var parsAscribeRai []interface{}
  750. var parsAscribeRaiTotal []interface{} // 处理权益未续约客户总量查询条件
  751. condition += ` AND c.product_id = ? AND a.status = 1 `
  752. pars = append(pars, 2)
  753. var list []*models.IncrementalList
  754. var listPessionGroup []*models.CompanyContractPermissionNameGroupCountResp
  755. var newCompanyTotal int //新签合同数量
  756. var notRenewalCompanyTotal int //未续约客户数已确认
  757. var notRenewalCompanyToBeConfirmTotal int //未续约客户数待确认
  758. var dataTotal, trialTotal, renewalCompanyTotal int
  759. var notRenewalTryOut, notRenewalNotTryOut int
  760. //if dataType == "行业未续约" {
  761. // condition += ` AND a.end_date >= ? AND a.end_date <= ? `
  762. // pars = append(pars, startDate, endDate)
  763. //} else {
  764. // condition += ` AND a.start_date >= ? AND a.start_date <= ? `
  765. // pars = append(pars, startDate, endDate)
  766. //}
  767. //
  768. //conditionPerssion := condition
  769. //parsPerssion := pars
  770. //conditionPerssion += ` AND d.permission_name IN ('医药','消费','科技','智造','策略','买方研选')`
  771. //
  772. //listPessionGroup, err := models.GetCompanyContractPermissionNameGroupCount(conditionPerssion, parsPerssion)
  773. //if err != nil && err.Error() != utils.ErrNoRow() {
  774. // br.Msg = "获取失败"
  775. // br.ErrMsg = "获取失败,Err:" + err.Error()
  776. // return
  777. //}
  778. //if permissionName == "" {
  779. condition += ` AND d.permission_name IN ('医药','消费','科技','智造','策略','研选订阅','研选扣点包')`
  780. //}
  781. var err error
  782. //新签客户数
  783. {
  784. condition1 := condition
  785. pars1 := pars
  786. condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
  787. pars1 = append(pars1, startDate, endDate)
  788. condition1 += ` AND d.contract_type = ? `
  789. pars1 = append(pars1, "行业新签")
  790. newCompanyTotal, err = company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
  791. if err != nil && err.Error() != utils.ErrNoRow() {
  792. br.Msg = "获取失败"
  793. br.ErrMsg = "获取失败,Err:" + err.Error()
  794. return
  795. }
  796. if dataType == "行业新签" {
  797. conditionPerssion := condition1
  798. parsPerssion := pars1
  799. conditionPerssion += ` AND d.permission_name IN ('医药','消费','科技','智造','策略','研选订阅','研选扣点包')`
  800. listPessionGroup, err = models.GetCompanyContractPermissionNameGroupCount(conditionPerssion, parsPerssion)
  801. if err != nil && err.Error() != utils.ErrNoRow() {
  802. br.Msg = "获取失败"
  803. br.ErrMsg = "获取失败,Err:" + err.Error()
  804. return
  805. }
  806. //行业筛选查询
  807. if permissionName != "" {
  808. condition1 += ` AND d.permission_name = ? `
  809. pars1 = append(pars1, permissionName)
  810. }
  811. total, err := company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
  812. if err != nil && err.Error() != utils.ErrNoRow() {
  813. br.Msg = "获取失败"
  814. br.ErrMsg = "获取失败,Err:" + err.Error()
  815. return
  816. }
  817. //列表页数据
  818. tmpList, err := models.GetIncrementalCompanyPermissionList(condition1, pars1, startSize, pageSize)
  819. if err != nil {
  820. br.Msg = "获取失败"
  821. br.ErrMsg = "获取失败,Err:" + err.Error()
  822. return
  823. }
  824. list = tmpList
  825. dataTotal = total
  826. }
  827. }
  828. //续约客户数
  829. {
  830. condition1 := condition
  831. pars1 := pars
  832. condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
  833. pars1 = append(pars1, startDate, endDate)
  834. condition1 += ` AND d.contract_type = ? `
  835. pars1 = append(pars1, "行业续约")
  836. ////额外条件(续约合同的起始日期包含在所选时间段内且不包含在新签合同存续期内的客户)
  837. //pars1 = append(pars1, endDate)
  838. total, err := company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
  839. if err != nil && err.Error() != utils.ErrNoRow() {
  840. br.Msg = "获取失败"
  841. br.ErrMsg = "获取失败,Err:" + err.Error()
  842. return
  843. }
  844. renewalCompanyTotal = total
  845. if dataType == "行业续约" {
  846. conditionPerssion := condition1
  847. parsPerssion := pars1
  848. conditionPerssion += ` AND d.permission_name IN ('医药','消费','科技','智造','策略','研选订阅','研选扣点包')`
  849. listPessionGroup, err = models.GetCompanyContractPermissionNameGroupCount(conditionPerssion, parsPerssion)
  850. if err != nil && err.Error() != utils.ErrNoRow() {
  851. br.Msg = "获取失败"
  852. br.ErrMsg = "获取失败,Err:" + err.Error()
  853. return
  854. }
  855. //行业筛选查询
  856. if permissionName != "" {
  857. condition1 += ` AND d.permission_name = ? `
  858. pars1 = append(pars1, permissionName)
  859. }
  860. //列表数据数量
  861. total, err := company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
  862. if err != nil && err.Error() != utils.ErrNoRow() {
  863. br.Msg = "获取失败"
  864. br.ErrMsg = "获取失败,Err:" + err.Error()
  865. return
  866. }
  867. //列表页数据
  868. tmpList, err := models.GetIncrementalCompanyPermissionList(condition1, pars1, startSize, pageSize)
  869. if err != nil {
  870. br.Msg = "获取失败"
  871. br.ErrMsg = "获取失败,Err:" + err.Error()
  872. return
  873. }
  874. list = tmpList
  875. dataTotal = total
  876. }
  877. }
  878. //return
  879. //行业未续约
  880. {
  881. condition1 := condition
  882. pars1 := pars
  883. condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
  884. pars1 = append(pars1, startDate, endDate)
  885. condition1 += ` AND c.status not in ("永续","正式","关闭") `
  886. //未续约数量
  887. notRenewalCondition := condition1
  888. notRenewalPars := pars1
  889. notRenewalCondition += conditionAscribRaiTotal
  890. notRenewalPars = append(notRenewalPars, parsAscribeRaiTotal)
  891. total, err := company.GetIncrementalNewCompanyProductPermissionCount(notRenewalCondition, notRenewalPars)
  892. if err != nil && err.Error() != utils.ErrNoRow() {
  893. br.Msg = "获取失败"
  894. br.ErrMsg = "获取失败,Err:" + err.Error()
  895. return
  896. }
  897. notRenewalCompanyTotal = total
  898. condition1 += conditionAscribRai
  899. pars1 = append(pars1, parsAscribeRai)
  900. if dataType == "行业未续约" {
  901. conditionPerssion := condition1
  902. parsPerssion := pars1
  903. conditionPerssion += ` AND d.permission_name IN ('医药','消费','科技','智造','策略','研选订阅','研选扣点包')`
  904. listPessionGroup, err = models.GetCompanyContractPermissionNameGroupCount(conditionPerssion, parsPerssion)
  905. if err != nil && err.Error() != utils.ErrNoRow() {
  906. br.Msg = "获取失败"
  907. br.ErrMsg = "获取失败,Err:" + err.Error()
  908. return
  909. }
  910. //行业筛选查询
  911. if permissionName != "" {
  912. condition1 += ` AND d.permission_name = ? `
  913. pars1 = append(pars1, permissionName)
  914. }
  915. //分页total单独计算
  916. total, err = company.GetIncrementalNewCompanyProductPermissionCount(condition1, pars1)
  917. if err != nil && err.Error() != utils.ErrNoRow() {
  918. br.Msg = "获取失败"
  919. br.ErrMsg = "获取失败,Err:" + err.Error()
  920. return
  921. }
  922. //return
  923. //列表页数据
  924. tmpList, err := models.GetIncrementalCompanyPermissionList(condition1, pars1, startSize, pageSize)
  925. if err != nil {
  926. br.Msg = "获取失败"
  927. br.ErrMsg = "获取失败,Err:" + err.Error()
  928. return
  929. }
  930. list = tmpList
  931. dataTotal = total
  932. }
  933. }
  934. listLen := len(list)
  935. if listLen == 0 {
  936. list = make([]*models.IncrementalList, 0)
  937. }
  938. var companyContractIds []int
  939. var companyIds []int
  940. for i := 0; i < listLen; i++ {
  941. item := list[i]
  942. companyContractIds = append(companyContractIds, item.CompanyContractId)
  943. companyIds = append(companyIds, item.CompanyId)
  944. //新增试用不需要计算剩余日期
  945. if dataType != "新增试用" {
  946. //剩余可用天数
  947. endDateTime, _ := time.Parse(utils.FormatDate, item.EndDate)
  948. endDateTime = endDateTime.AddDate(0, 0, 1)
  949. sub := endDateTime.Sub(time.Now())
  950. expireDay := fmt.Sprintf("%v", int(sub.Hours()/24))
  951. list[i].ExpireDay = expireDay
  952. }
  953. }
  954. //行业未续约 需要处理公司对应行业权限下的权限状态
  955. if dataType == "行业未续约" {
  956. mappermissionNameStatus, err := cygxService.GetCompanyPermissionNameStatusMapByCompanyId(companyIds)
  957. if err != nil {
  958. br.Msg = "获取失败"
  959. br.ErrMsg = "获取失败,Err:" + err.Error()
  960. return
  961. }
  962. for _, v := range list {
  963. v.PermissionNameStatus = mappermissionNameStatus[fmt.Sprint(v.CompanyId, v.PermissionNameExport)]
  964. }
  965. }
  966. //合并合同所对应的权限
  967. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  968. if err != nil {
  969. br.Msg = "获取失败"
  970. br.ErrMsg = "获取失败,Err:" + err.Error()
  971. return
  972. }
  973. for _, v := range list {
  974. v.PermissionName = mappermissionName[v.CompanyContractId]
  975. }
  976. //处理展示顺序
  977. permissionNameSlice := []string{"医药", "消费", "科技", "智造", "策略", utils.CHART_PERMISSION_NAME_MF_YANXUAN, utils.YAN_XUAN_KOU_DIAN_BAO_NAME}
  978. var itemspermissionNameSlice []*models.CompanyContractPermissionNameGroupCountResp
  979. for _, vName := range permissionNameSlice {
  980. item := new(models.CompanyContractPermissionNameGroupCountResp)
  981. for _, v := range listPessionGroup {
  982. if v.PermissionName != vName {
  983. continue
  984. }
  985. item.Total = v.Total
  986. }
  987. item.PermissionName = vName
  988. itemspermissionNameSlice = append(itemspermissionNameSlice, item)
  989. }
  990. page := paging.GetPaging(currentIndex, pageSize, dataTotal)
  991. resp := response.IncrementalCompanyListResp{
  992. Paging: page,
  993. ListPermissionName: itemspermissionNameSlice,
  994. List: list,
  995. TrialTotal: trialTotal,
  996. NewCompanyTotal: newCompanyTotal,
  997. RenewalCompanyTotal: renewalCompanyTotal,
  998. NotRenewalCompanyTotal: notRenewalCompanyTotal,
  999. NotRenewalCompanyToBeConfirmTotal: notRenewalCompanyToBeConfirmTotal,
  1000. NotRenewalTryOut: notRenewalTryOut,
  1001. NotRenewalNotTryOut: notRenewalNotTryOut,
  1002. }
  1003. //fmt.Println()
  1004. //导出excel
  1005. if isExport {
  1006. PermissionCompanyListListExport(this, dataType, resp, br)
  1007. return
  1008. }
  1009. br.Ret = 200
  1010. br.Success = true
  1011. br.Msg = "获取成功"
  1012. br.Data = resp
  1013. }
  1014. // PermissionCompanyListListExport 导出增量客户数据报表excel
  1015. func PermissionCompanyListListExport(this *StatisticCompanyMergerController, dataType string, resp response.IncrementalCompanyListResp, br *models.BaseResponse) {
  1016. dir, err := os.Executable()
  1017. exPath := filepath.Dir(dir)
  1018. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1019. xlsxFile := xlsx.NewFile()
  1020. if err != nil {
  1021. br.Msg = "生成文件失败"
  1022. br.ErrMsg = "生成文件失败"
  1023. return
  1024. }
  1025. style := xlsx.NewStyle()
  1026. alignment := xlsx.Alignment{
  1027. Horizontal: "center",
  1028. Vertical: "center",
  1029. WrapText: true,
  1030. }
  1031. permissionNameSlice := []string{"医药", "消费", "科技", "智造", "策略", "买方研选"}
  1032. mapExport := make(map[string][]*models.IncrementalList)
  1033. type IncrementalCompanyListExport struct {
  1034. PermissionName string `description:"权限名"`
  1035. List []*models.IncrementalList
  1036. }
  1037. for _, v := range resp.List {
  1038. if v.PermissionNameExport == "" {
  1039. continue
  1040. }
  1041. mapExport[v.PermissionNameExport] = append(mapExport[v.PermissionNameExport], v)
  1042. }
  1043. style.Alignment = alignment
  1044. style.ApplyAlignment = true
  1045. for _, vName := range permissionNameSlice {
  1046. sheel, err := xlsxFile.AddSheet(vName)
  1047. if err != nil {
  1048. br.Msg = "新增Sheet失败"
  1049. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1050. return
  1051. }
  1052. sheel.SetColWidth(0, 0, 30)
  1053. sheel.SetColWidth(1, 1, 15)
  1054. sheel.SetColWidth(2, 2, 15)
  1055. sheel.SetColWidth(3, 3, 18)
  1056. sheel.SetColWidth(4, 4, 40)
  1057. sheel.SetColWidth(5, 5, 18)
  1058. //表头
  1059. titleRow := sheel.AddRow()
  1060. cellName := titleRow.AddCell()
  1061. cellName.SetStyle(style)
  1062. cellName.SetValue("客户名称")
  1063. cellSellerName := titleRow.AddCell()
  1064. cellSellerName.SetStyle(style)
  1065. cellSellerName.SetValue("所属销售")
  1066. cellMoney := titleRow.AddCell()
  1067. cellMoney.SetStyle(style)
  1068. cellMoney.SetValue("合同金额")
  1069. cellTime := titleRow.AddCell()
  1070. cellTime.SetStyle(style)
  1071. cellTime.SetValue("合同期限")
  1072. cellPermissionName := titleRow.AddCell()
  1073. cellPermissionName.SetStyle(style)
  1074. cellPermissionName.SetValue("签约套餐")
  1075. if dataType == "行业未续约" {
  1076. cellPermissionNameStatus := titleRow.AddCell()
  1077. cellPermissionNameStatus.SetStyle(style)
  1078. cellPermissionNameStatus.SetValue("当前行业状态")
  1079. cellCompanyProductStatus := titleRow.AddCell()
  1080. cellCompanyProductStatus.SetStyle(style)
  1081. cellCompanyProductStatus.SetValue("当前客户状态")
  1082. }
  1083. for _, v := range mapExport[vName] {
  1084. dataRow := sheel.AddRow()
  1085. dataRow.SetHeight(20)
  1086. cellDataName := dataRow.AddCell()
  1087. cellDataName.SetStyle(style)
  1088. cellDataName.SetValue(v.CompanyName)
  1089. cellDataSellerName := dataRow.AddCell()
  1090. cellDataSellerName.SetStyle(style)
  1091. cellDataSellerName.SetValue(v.SellerName)
  1092. cellDataMoney := dataRow.AddCell()
  1093. cellDataMoney.SetStyle(style)
  1094. cellDataMoney.SetValue(v.Money)
  1095. cellDataTime := dataRow.AddCell()
  1096. cellDataTime.SetStyle(style)
  1097. cellDataTime.SetValue(v.StartDate + "~" + v.EndDate)
  1098. cellDataPermissionName := dataRow.AddCell()
  1099. cellDataPermissionName.SetStyle(style)
  1100. cellDataPermissionName.SetValue(v.PermissionName)
  1101. if dataType == "行业未续约" {
  1102. cellDataPermissionNameStatus := dataRow.AddCell()
  1103. cellDataPermissionNameStatus.SetStyle(style)
  1104. cellDataPermissionNameStatus.SetValue(v.PermissionNameStatus)
  1105. cellDataCompanyProductStatus := dataRow.AddCell()
  1106. cellDataCompanyProductStatus.SetStyle(style)
  1107. cellDataCompanyProductStatus.SetValue(v.CompanyProductStatus)
  1108. }
  1109. }
  1110. }
  1111. err = xlsxFile.Save(downLoadnFilePath)
  1112. if err != nil {
  1113. br.Msg = "保存文件失败"
  1114. br.ErrMsg = "保存文件失败"
  1115. return
  1116. }
  1117. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1118. downloadFileName := dataType + "数据_" + randStr + ".xlsx"
  1119. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1120. defer func() {
  1121. os.Remove(downLoadnFilePath)
  1122. }()
  1123. br.Ret = 200
  1124. br.Success = true
  1125. br.Msg = "导出成功"
  1126. }
  1127. // @Title 权益客户续约率统计
  1128. // @Description 权益客户续约率统计接口
  1129. // @Param PageSize query int true "每页数据条数"
  1130. // @Param CurrentIndex query int true "当前页页码,从1开始"
  1131. // @Param AdminId query string true "销售id,多个用英文逗号隔开,空字符串为全部"
  1132. // @Param StartDate query string false "开始日期"
  1133. // @Param EndDate query string false "结束日期"
  1134. // @Param ContractDataType query string false "合同类型,枚举值:`续约合同`,`到期合同`"
  1135. // @Success 200 {object} response.IncrementalCompanyListResp
  1136. // @router /merge_company/company_contract_percentage/list [get]
  1137. func (this *StatisticCompanyMergerController) CompanyContractPercentageList() {
  1138. br := new(models.BaseResponse).Init()
  1139. defer func() {
  1140. this.Data["json"] = br
  1141. this.ServeJSON()
  1142. }()
  1143. sysUser := this.SysUser
  1144. if sysUser == nil {
  1145. br.Msg = "请登录"
  1146. br.ErrMsg = "请登录,SysUser Is Empty"
  1147. br.Ret = 408
  1148. return
  1149. }
  1150. pageSize, _ := this.GetInt("PageSize")
  1151. currentIndex, _ := this.GetInt("CurrentIndex")
  1152. adminId := this.GetString("AdminId")
  1153. contractDataType := this.GetString("ContractDataType")
  1154. startDate := this.GetString("StartDate")
  1155. endDate := this.GetString("EndDate")
  1156. initendDate := this.GetString("EndDate")
  1157. if startDate == "" || endDate == "" {
  1158. br.Msg = "开始时间或结束时间不能为空"
  1159. return
  1160. }
  1161. //如果传的查询方式是今年,那么就以当前时间作为截止时间
  1162. //if endDate == strconv.Itoa(time.Now().Year())+"-12-31" {
  1163. // endDate = time.Now().Format(utils.FormatDate)
  1164. //}
  1165. //判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。
  1166. endDateTime, _ := time.Parse(utils.FormatDate, endDate)
  1167. if endDateTime.After(time.Now()) {
  1168. endDate = time.Now().Format(utils.FormatDate)
  1169. }
  1170. //fmt.Println("endDate", endDate)
  1171. if contractDataType == "" {
  1172. contractDataType = "续约合同"
  1173. }
  1174. var startSize int
  1175. if pageSize <= 0 {
  1176. pageSize = utils.PageSize20
  1177. }
  1178. if currentIndex <= 0 {
  1179. currentIndex = 1
  1180. }
  1181. startSize = utils.StartIndex(currentIndex, pageSize)
  1182. var condition string
  1183. var pars []interface{}
  1184. //条件
  1185. if adminId != "" {
  1186. condition += ` AND c.seller_id in (` + adminId + `) `
  1187. } else {
  1188. //根据当前角色来获取查询条件
  1189. condition, pars = getQueryParams(condition, pars, sysUser, "c.")
  1190. }
  1191. //权益有效合同
  1192. condition += ` AND c.product_id = 2 AND a.status = 1 `
  1193. var list []*models.IncrementalList
  1194. var renewalRateMoney string //合同金额续约率
  1195. var renewalRateMoneyContent string //合同金额续约率详情
  1196. var renewalRateTotal string //合同数量续约率
  1197. var renewalRateTotalContent string //合同数量续约率详情
  1198. var renewalContractTotal int //续约合同数量
  1199. var renewalContractMoney int //续约合同数量
  1200. var expireRenewalContractTotal int //到期合同数量
  1201. var expireRenewalContractMoney int //到期合同数量
  1202. var dataTotal int //分页数据
  1203. conditionRenewal := condition // 续约合同查询条件查询条件
  1204. parsRenewal := pars
  1205. conditionRenewal += ` AND a.start_date >= ? AND a.start_date <= ? `
  1206. parsRenewal = append(parsRenewal, startDate, endDate)
  1207. conditionRenewal += ` AND a.rai_contract_type = ? `
  1208. parsRenewal = append(parsRenewal, "续约合同")
  1209. totalRenewal, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewal, parsRenewal)
  1210. if err != nil {
  1211. br.Msg = "获取失败"
  1212. br.ErrMsg = "获取失败,Err:" + err.Error()
  1213. return
  1214. }
  1215. totalMoneyRenewal, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewal, parsRenewal)
  1216. if err != nil {
  1217. br.Msg = "获取失败"
  1218. br.ErrMsg = "获取失败,Err:" + err.Error()
  1219. return
  1220. }
  1221. //续约合同查询条件查询条件 end
  1222. conditionRenewalEnd := condition // 今年结束的续约合同查询条件
  1223. parsRenewalEnd := pars
  1224. conditionRenewalEnd += ` AND a.end_date >= ? AND a.end_date <= ? `
  1225. parsRenewalEnd = append(parsRenewalEnd, startDate, endDate)
  1226. conditionRenewalEnd += ` AND a.rai_contract_type = ? `
  1227. parsRenewalEnd = append(parsRenewalEnd, "续约合同")
  1228. totalRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewalEnd, parsRenewalEnd)
  1229. if err != nil && err.Error() != utils.ErrNoRow() {
  1230. br.Msg = "获取失败"
  1231. br.ErrMsg = "获取失败,Err:" + err.Error()
  1232. return
  1233. }
  1234. totalMoneyRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewalEnd, parsRenewalEnd)
  1235. if err != nil {
  1236. br.Msg = "获取失败"
  1237. br.ErrMsg = "获取失败,Err:" + err.Error()
  1238. return
  1239. } // 今年结束的续约合同查询条件end
  1240. conditionNew := condition // 新签合同查询条件
  1241. parsNew := pars
  1242. conditionNew += ` AND a.end_date >= ? AND a.end_date <= ? `
  1243. parsNew = append(parsNew, startDate, endDate)
  1244. conditionNew += ` AND a.rai_contract_type = ? `
  1245. parsNew = append(parsNew, "新签合同")
  1246. totalNew, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionNew, parsNew)
  1247. if err != nil && err.Error() != utils.ErrNoRow() {
  1248. br.Msg = "获取失败"
  1249. br.ErrMsg = "获取失败,Err:" + err.Error()
  1250. return
  1251. }
  1252. totalMoneyNew, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionNew, parsNew)
  1253. if err != nil {
  1254. br.Msg = "获取失败"
  1255. br.ErrMsg = "获取失败,Err:" + err.Error()
  1256. return
  1257. } // 新签合同查询条件 end
  1258. //分子或者分母为零的时候,不做计算
  1259. if totalRenewal == 0 || totalNew+totalRenewalEnd == 0 {
  1260. renewalRateMoney = "0%"
  1261. renewalRateTotal = "0%"
  1262. } else {
  1263. renewalRateMoney = fmt.Sprint(utils.SubFloatToString(float64(totalMoneyRenewal)/float64(totalMoneyNew+totalMoneyRenewalEnd)*100, 2), "%")
  1264. renewalRateTotal = fmt.Sprint(utils.SubFloatToString(float64(totalRenewal)/float64(totalNew+totalRenewalEnd)*100, 2), "%")
  1265. }
  1266. renewalRateTotalContent = fmt.Sprint(int(totalMoneyRenewal), "/", int(totalMoneyNew+totalMoneyRenewalEnd))
  1267. renewalRateMoneyContent = fmt.Sprint(totalRenewal, "份/", totalNew+totalRenewalEnd, "份")
  1268. if contractDataType == "续约合同" {
  1269. condition1 := condition
  1270. pars1 := pars
  1271. condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
  1272. pars1 = append(pars1, startDate, endDate)
  1273. condition1 += ` AND a.rai_contract_type = ? `
  1274. pars1 = append(pars1, "续约合同")
  1275. total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
  1276. if err != nil && err.Error() != utils.ErrNoRow() {
  1277. br.Msg = "获取失败"
  1278. br.ErrMsg = "获取失败,Err:" + err.Error()
  1279. return
  1280. }
  1281. totalMoney, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(condition1, pars1)
  1282. if err != nil && err.Error() != utils.ErrNoRow() {
  1283. br.Msg = "获取失败"
  1284. br.ErrMsg = "获取失败,Err:" + err.Error()
  1285. return
  1286. }
  1287. renewalContractTotal = total
  1288. renewalContractMoney = int(totalMoney)
  1289. //列表页数据
  1290. tmpList, err := models.GetIncrementalCompanyMergeList(condition1, pars1, startSize, pageSize)
  1291. if err != nil {
  1292. br.Msg = "获取失败"
  1293. br.ErrMsg = "获取失败,Err:" + err.Error()
  1294. return
  1295. }
  1296. list = tmpList
  1297. dataTotal = total
  1298. }
  1299. if contractDataType == "到期合同" {
  1300. condition1 := condition
  1301. pars1 := pars
  1302. //判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。并且当前这天的到期的合同,不查询
  1303. endDateTime, _ := time.Parse(utils.FormatDate, initendDate)
  1304. if endDateTime.After(time.Now()) {
  1305. endDate = time.Now().Format(utils.FormatDate)
  1306. condition1 += ` AND a.end_date >= ? AND a.end_date < ? `
  1307. } else {
  1308. condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
  1309. }
  1310. //condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
  1311. pars1 = append(pars1, startDate, endDate)
  1312. total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
  1313. if err != nil && err.Error() != utils.ErrNoRow() {
  1314. br.Msg = "获取失败"
  1315. br.ErrMsg = "获取失败,Err:" + err.Error()
  1316. return
  1317. }
  1318. totalMoney, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(condition1, pars1)
  1319. if err != nil && err.Error() != utils.ErrNoRow() {
  1320. br.Msg = "获取失败"
  1321. br.ErrMsg = "获取失败,Err:" + err.Error()
  1322. return
  1323. }
  1324. expireRenewalContractTotal = total
  1325. expireRenewalContractMoney = int(totalMoney)
  1326. //列表页数据
  1327. tmpList, err := models.GetIncrementalCompanyMergeListEnd(condition1, pars1, startSize, pageSize)
  1328. if err != nil {
  1329. br.Msg = "获取失败"
  1330. br.ErrMsg = "获取失败,Err:" + err.Error()
  1331. return
  1332. }
  1333. list = tmpList
  1334. dataTotal = total
  1335. }
  1336. listLen := len(list)
  1337. if listLen == 0 {
  1338. list = make([]*models.IncrementalList, 0)
  1339. }
  1340. var companyContractIds []int
  1341. for i := 0; i < listLen; i++ {
  1342. item := list[i]
  1343. companyContractIds = append(companyContractIds, item.CompanyContractId)
  1344. }
  1345. //合并合同所对应的权限
  1346. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  1347. if err != nil {
  1348. br.Msg = "获取失败"
  1349. br.ErrMsg = "获取失败,Err:" + err.Error()
  1350. return
  1351. }
  1352. for _, v := range list {
  1353. v.PermissionName = mappermissionName[v.CompanyContractId]
  1354. }
  1355. page := paging.GetPaging(currentIndex, pageSize, dataTotal)
  1356. resp := response.IncrementalCompanyPercentageListResp{
  1357. Paging: page,
  1358. RenewalContractTotal: renewalContractTotal,
  1359. RenewalContractMoney: renewalContractMoney,
  1360. ExpireRenewalContractTotal: expireRenewalContractTotal,
  1361. ExpireRenewalContractMoney: expireRenewalContractMoney,
  1362. RenewalRateMoney: renewalRateMoney,
  1363. RenewalRateMoneyContent: renewalRateMoneyContent,
  1364. RenewalRateTotal: renewalRateTotal,
  1365. RenewalRateTotalContent: renewalRateTotalContent,
  1366. List: list,
  1367. }
  1368. br.Ret = 200
  1369. br.Success = true
  1370. br.Msg = "获取成功"
  1371. br.Data = resp
  1372. }
  1373. // @Title 权益客户续约率统计所能查询的年份
  1374. // @Description权益客户续约率统计所能查询的年份接口
  1375. // @Success 200 {object} response.IncrementalCompanyListResp
  1376. // @router /merge_company/get_year_list [get]
  1377. func (this *StatisticCompanyMergerController) GetYearList() {
  1378. br := new(models.BaseResponse).Init()
  1379. defer func() {
  1380. this.Data["json"] = br
  1381. this.ServeJSON()
  1382. }()
  1383. sysUser := this.SysUser
  1384. if sysUser == nil {
  1385. br.Msg = "请登录"
  1386. br.ErrMsg = "请登录,SysUser Is Empty"
  1387. br.Ret = 408
  1388. return
  1389. }
  1390. thisYear := time.Now().Year()
  1391. startYear := 2022 //初始查询年份
  1392. resp := new(company.SearchYearListResp)
  1393. var yearList []int
  1394. for i := startYear; i <= thisYear; i++ {
  1395. yearList = append(yearList, i)
  1396. }
  1397. resp.List = yearList
  1398. br.Ret = 200
  1399. br.Success = true
  1400. br.Msg = "获取成功"
  1401. br.Data = resp
  1402. }
  1403. // @Title 权益客户续约率统计
  1404. // @Description 权益客户续约率统计接口
  1405. // @Param PageSize query int true "每页数据条数"
  1406. // @Param CurrentIndex query int true "当前页页码,从1开始"
  1407. // @Param AdminId query string true "销售id,多个用英文逗号隔开,空字符串为全部"
  1408. // @Param StartDate query string false "开始日期"
  1409. // @Param EndDate query string false "结束日期"
  1410. // @Param ContractDataType query string false "合同类型,枚举值:`续约合同`,`到期合同`"
  1411. // @Success 200 {object} response.IncrementalCompanyListResp
  1412. // @router /merge_company/company_contract_percentage/listV2 [get]
  1413. func (this *StatisticCompanyMergerController) CompanyContractPercentageListV2() {
  1414. br := new(models.BaseResponse).Init()
  1415. defer func() {
  1416. this.Data["json"] = br
  1417. this.ServeJSON()
  1418. }()
  1419. sysUser := this.SysUser
  1420. if sysUser == nil {
  1421. br.Msg = "请登录"
  1422. br.ErrMsg = "请登录,SysUser Is Empty"
  1423. br.Ret = 408
  1424. return
  1425. }
  1426. pageSize, _ := this.GetInt("PageSize")
  1427. currentIndex, _ := this.GetInt("CurrentIndex")
  1428. adminId := this.GetString("AdminId")
  1429. contractDataType := this.GetString("ContractDataType")
  1430. startDate := this.GetString("StartDate")
  1431. endDate := this.GetString("EndDate")
  1432. //initendDate := this.GetString("EndDate")
  1433. if startDate == "" || endDate == "" {
  1434. br.Msg = "开始时间或结束时间不能为空"
  1435. return
  1436. }
  1437. //如果传的查询方式是今年,那么就以当前时间作为截止时间
  1438. //if endDate == strconv.Itoa(time.Now().Year())+"-12-31" {
  1439. // endDate = time.Now().Format(utils.FormatDate)
  1440. //}
  1441. //判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。
  1442. endDateTime, _ := time.Parse(utils.FormatDate, endDate)
  1443. if endDateTime.After(time.Now()) {
  1444. endDate = time.Now().Format(utils.FormatDate)
  1445. }
  1446. //fmt.Println("endDate", endDate)
  1447. if contractDataType == "" {
  1448. contractDataType = "续约合同"
  1449. }
  1450. var startSize int
  1451. if pageSize <= 0 {
  1452. pageSize = utils.PageSize20
  1453. }
  1454. if currentIndex <= 0 {
  1455. currentIndex = 1
  1456. }
  1457. startSize = utils.StartIndex(currentIndex, pageSize)
  1458. var condition string
  1459. var pars []interface{}
  1460. //条件
  1461. if adminId != "" {
  1462. condition += ` AND c.seller_id in (` + adminId + `) `
  1463. } else {
  1464. //根据当前角色来获取查询条件
  1465. condition, pars = getQueryParams(condition, pars, sysUser, "c.")
  1466. }
  1467. //权益有效合同
  1468. condition += ` AND c.product_id = 2 AND a.status = 1 `
  1469. var list []*models.IncrementalList
  1470. var renewalRateMoney string //合同金额续约率
  1471. var renewalRateMoneyContent string //合同金额续约率详情
  1472. var renewalRateTotal string //合同数量续约率
  1473. var renewalRateTotalContent string //合同数量续约率详情
  1474. var renewalContractTotal int //续约合同数量
  1475. var renewalContractMoney int //续约合同数量
  1476. var expireRenewalContractTotal int //到期合同数量
  1477. var expireRenewalContractMoney int //到期合同数量
  1478. var dataTotal int //分页数据
  1479. //conditionRenewal := condition // 续约合同查询条件查询条件
  1480. //parsRenewal := pars
  1481. //conditionRenewal += ` AND a.start_date >= ? AND a.start_date <= ? `
  1482. //conditionRenewal += ` AND a.end_date >= ? AND a.end_date <= ? `
  1483. //parsRenewal = append(parsRenewal, startDate, endDate)
  1484. ////conditionRenewal += ` AND a.rai_contract_type = ? `
  1485. ////parsRenewal = append(parsRenewal, "续约合同")
  1486. //
  1487. //conditionRenewal += ` AND a.company_ascribe_id > 0 AND a.company_ascribe_id !=9 ` // 已确认未续约
  1488. //totalRenewal, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewal, parsRenewal)
  1489. //if err != nil {
  1490. // br.Msg = "获取失败"
  1491. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1492. // return
  1493. //}
  1494. //
  1495. //totalMoneyRenewal, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewal, parsRenewal)
  1496. //if err != nil {
  1497. // br.Msg = "获取失败"
  1498. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1499. // return
  1500. //}
  1501. //续约合同查询条件查询条件 end
  1502. //conditionRenewalEnd := condition // 今年结束的续约合同查询条件
  1503. //parsRenewalEnd := pars
  1504. //
  1505. ////startDateTime, _ := time.Parse(utils.FormatDate, endDate)
  1506. ////startDateTime = startDateTime.AddDate(-1, 0, 2) //合同开始时间,与查询的结束时间,之间相差的天数大于 365天。
  1507. ////fmt.Println("startDateTime", startDateTime)
  1508. //conditionRenewalEnd += ` AND a.end_date >= ? AND a.end_date <= ? `
  1509. //parsRenewalEnd = append(parsRenewalEnd, startDate, endDate)
  1510. //conditionRenewalEnd += ` AND a.rai_contract_type = ? `
  1511. //parsRenewalEnd = append(parsRenewalEnd, "续约合同")
  1512. //
  1513. //totalRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewalEnd, parsRenewalEnd)
  1514. //if err != nil && err.Error() != utils.ErrNoRow() {
  1515. // br.Msg = "获取失败"
  1516. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1517. // return
  1518. //}
  1519. ////return
  1520. //totalMoneyRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewalEnd, parsRenewalEnd)
  1521. //if err != nil {
  1522. // br.Msg = "获取失败"
  1523. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1524. // return
  1525. //} // 今年结束的续约合同查询条件end
  1526. //
  1527. //conditionNew := condition // 新签合同查询条件
  1528. //parsNew := pars
  1529. //conditionNew += ` AND a.end_date >= ? AND a.end_date <= ? `
  1530. //parsNew = append(parsNew, startDate, endDate)
  1531. //conditionNew += ` AND a.rai_contract_type = ? `
  1532. //parsNew = append(parsNew, "新签合同")
  1533. //totalNew, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionNew, parsNew)
  1534. //if err != nil && err.Error() != utils.ErrNoRow() {
  1535. // br.Msg = "获取失败"
  1536. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1537. // return
  1538. //}
  1539. //totalMoneyNew, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionNew, parsNew)
  1540. //if err != nil {
  1541. // br.Msg = "获取失败"
  1542. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1543. // return
  1544. //} // 新签合同查询条件 end
  1545. //fmt.Println("totalNew", totalNew)
  1546. //fmt.Println("totalRenewalEnd", totalRenewalEnd)
  1547. condition1 := condition
  1548. pars1 := pars
  1549. //condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
  1550. condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
  1551. pars1 = append(pars1, startDate, endDate)
  1552. //condition1 += ` AND a.rai_contract_type = ? `
  1553. //pars1 = append(pars1, "续约合同")
  1554. condition1 += ` AND a.company_ascribe_id > 0 AND a.company_ascribe_id !=9 ` // 已确认未续约
  1555. totalNo, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
  1556. if err != nil && err.Error() != utils.ErrNoRow() {
  1557. br.Msg = "获取失败"
  1558. br.ErrMsg = "获取失败,Err:" + err.Error()
  1559. return
  1560. }
  1561. totalMoney, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(condition1, pars1)
  1562. if err != nil && err.Error() != utils.ErrNoRow() {
  1563. br.Msg = "获取失败"
  1564. br.ErrMsg = "获取失败,Err:" + err.Error()
  1565. return
  1566. }
  1567. renewalContractTotal = totalNo
  1568. renewalContractMoney = int(totalMoney)
  1569. if contractDataType == "续约合同" || contractDataType == "确认不续约合同" {
  1570. //列表页数据
  1571. tmpList, err := models.GetIncrementalCompanyMergeListEnd(condition1, pars1, startSize, pageSize)
  1572. if err != nil {
  1573. br.Msg = "获取失败"
  1574. br.ErrMsg = "获取失败,Err:" + err.Error()
  1575. return
  1576. }
  1577. list = tmpList
  1578. dataTotal = totalNo
  1579. }
  1580. conditionEnd1 := condition
  1581. parsEnd1 := pars
  1582. //判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。并且当前这天的到期的合同,不查询
  1583. //endDateTime, _ := time.Parse(utils.FormatDate, initendDate)
  1584. //if endDateTime.After(time.Now()) {
  1585. // endDate = time.Now().Format(utils.FormatDate)
  1586. // condition1 += ` AND a.end_date >= ? AND a.end_date < ? `
  1587. //} else {
  1588. // condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
  1589. //}
  1590. conditionEnd1 += ` AND a.end_date >= ? AND a.end_date <= ? AND a.company_ascribe_id !=9 `
  1591. parsEnd1 = append(parsEnd1, startDate, endDate)
  1592. //condition1 += ` AND a.start_date < ? `
  1593. //pars1 = append(pars1, startDateTime)
  1594. totalEnd, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionEnd1, parsEnd1)
  1595. if err != nil && err.Error() != utils.ErrNoRow() {
  1596. br.Msg = "获取失败"
  1597. br.ErrMsg = "获取失败,Err:" + err.Error()
  1598. return
  1599. }
  1600. totalMoneyEnd, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionEnd1, parsEnd1)
  1601. if err != nil && err.Error() != utils.ErrNoRow() {
  1602. br.Msg = "获取失败"
  1603. br.ErrMsg = "获取失败,Err:" + err.Error()
  1604. return
  1605. }
  1606. expireRenewalContractTotal = totalEnd
  1607. expireRenewalContractMoney = int(totalMoneyEnd)
  1608. if contractDataType == "到期合同" {
  1609. //列表页数据
  1610. tmpList, err := models.GetIncrementalCompanyMergeListEnd(conditionEnd1, parsEnd1, startSize, pageSize)
  1611. if err != nil {
  1612. br.Msg = "获取失败"
  1613. br.ErrMsg = "获取失败,Err:" + err.Error()
  1614. return
  1615. }
  1616. list = tmpList
  1617. dataTotal = totalEnd
  1618. }
  1619. //分子或者分母为零的时候,不做计算
  1620. if totalNo == 0 || totalEnd == 0 {
  1621. renewalRateMoney = "0%"
  1622. renewalRateTotal = "0%"
  1623. } else {
  1624. renewalRateMoney = fmt.Sprint(utils.SubFloatToString(float64(totalMoney)/float64(totalMoneyEnd)*100, 2), "%")
  1625. renewalRateTotal = fmt.Sprint(utils.SubFloatToString(float64(totalNo)/float64(totalEnd)*100, 2), "%")
  1626. }
  1627. renewalRateTotalContent = fmt.Sprint(int(totalMoney), "/", int(totalMoneyEnd))
  1628. renewalRateMoneyContent = fmt.Sprint(totalNo, "份/", totalEnd, "份")
  1629. listLen := len(list)
  1630. if listLen == 0 {
  1631. list = make([]*models.IncrementalList, 0)
  1632. }
  1633. var companyContractIds []int
  1634. for i := 0; i < listLen; i++ {
  1635. item := list[i]
  1636. companyContractIds = append(companyContractIds, item.CompanyContractId)
  1637. }
  1638. //合同归因标签
  1639. mapGetCompanyAscribeContent, mapContent := services.GetCompanyContractAscribeContentMap(companyContractIds)
  1640. //合并合同所对应的权限
  1641. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  1642. if err != nil {
  1643. br.Msg = "获取失败"
  1644. br.ErrMsg = "获取失败,Err:" + err.Error()
  1645. return
  1646. }
  1647. for _, v := range list {
  1648. v.PermissionName = mappermissionName[v.CompanyContractId]
  1649. if mapGetCompanyAscribeContent[v.CompanyContractId] != "" {
  1650. v.Content = mapContent[v.CompanyContractId]
  1651. v.AscribeContent = mapGetCompanyAscribeContent[v.CompanyContractId]
  1652. v.IsShowNoRenewedNote = true
  1653. }
  1654. }
  1655. page := paging.GetPaging(currentIndex, pageSize, dataTotal)
  1656. resp := response.IncrementalCompanyPercentageListResp{
  1657. Paging: page,
  1658. RenewalContractTotal: renewalContractTotal,
  1659. RenewalContractMoney: renewalContractMoney,
  1660. ExpireRenewalContractTotal: expireRenewalContractTotal,
  1661. ExpireRenewalContractMoney: expireRenewalContractMoney,
  1662. RenewalRateMoney: renewalRateMoney,
  1663. RenewalRateMoneyContent: renewalRateMoneyContent,
  1664. RenewalRateTotal: renewalRateTotal,
  1665. RenewalRateTotalContent: renewalRateTotalContent,
  1666. List: list,
  1667. }
  1668. br.Ret = 200
  1669. br.Success = true
  1670. br.Msg = "获取成功"
  1671. br.Data = resp
  1672. }
  1673. // @Title 权益客户未续约率下载
  1674. // @Description 权益客户未续约率下载接口
  1675. // @Param AdminId query string true "销售id,多个用英文逗号隔开,空字符串为全部"
  1676. // @Param StartDate query string false "开始日期"
  1677. // @Param EndDate query string false "结束日期"
  1678. // @Param ExportType query int true "下载类型 1:下载当前销售的合同明细数据;2:下载所有销售未续约数据列表"
  1679. // @Success 200 {object} response.IncrementalCompanyListResp
  1680. // @router /merge_company/company_contract_percentage/list_export [get]
  1681. func (this *StatisticCompanyMergerController) CompanyContractPercentageListExport() {
  1682. br := new(models.BaseResponse).Init()
  1683. defer func() {
  1684. this.Data["json"] = br
  1685. this.ServeJSON()
  1686. }()
  1687. sysUser := this.SysUser
  1688. if sysUser == nil {
  1689. br.Msg = "请登录"
  1690. br.ErrMsg = "请登录,SysUser Is Empty"
  1691. br.Ret = 408
  1692. return
  1693. }
  1694. pageSize, _ := this.GetInt("PageSize")
  1695. currentIndex, _ := this.GetInt("CurrentIndex")
  1696. exportType, _ := this.GetInt("ExportType")
  1697. adminId := this.GetString("AdminId")
  1698. contractDataType := this.GetString("ContractDataType")
  1699. startDate := this.GetString("StartDate")
  1700. endDate := this.GetString("EndDate")
  1701. //initendDate := this.GetString("EndDate")
  1702. if startDate == "" || endDate == "" {
  1703. br.Msg = "开始时间或结束时间不能为空"
  1704. return
  1705. }
  1706. //判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。
  1707. endDateTime, _ := time.Parse(utils.FormatDate, endDate)
  1708. if endDateTime.After(time.Now()) {
  1709. endDate = time.Now().Format(utils.FormatDate)
  1710. }
  1711. //fmt.Println("endDate", endDate)
  1712. if contractDataType == "" {
  1713. contractDataType = "续约合同"
  1714. }
  1715. var startSize int
  1716. if pageSize <= 0 {
  1717. pageSize = 10000
  1718. }
  1719. if currentIndex <= 0 {
  1720. currentIndex = 1
  1721. }
  1722. startSize = utils.StartIndex(currentIndex, pageSize)
  1723. var condition string
  1724. var pars []interface{}
  1725. if exportType == 1 {
  1726. //条件
  1727. if adminId != "" {
  1728. condition += ` AND a.seller_id_init in (` + adminId + `) `
  1729. }
  1730. }
  1731. //权益有效合同
  1732. condition += ` AND c.product_id = 2 AND a.status = 1 `
  1733. condition += ` AND c.status not in ("永续","正式","关闭") `
  1734. //var list []*models.IncrementalList
  1735. condition1 := condition
  1736. pars1 := pars
  1737. condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
  1738. pars1 = append(pars1, startDate, endDate)
  1739. condition1 += ` AND a.company_ascribe_id > 0 AND a.company_ascribe_id !=9 ` // 已确认未续约
  1740. //if contractDataType == "续约合同" || contractDataType == "确认不续约合同" {
  1741. //不续约列表数据
  1742. listRenewal, err := models.GetIncrementalCompanyMergeListEnd(condition1, pars1, startSize, pageSize)
  1743. if err != nil {
  1744. br.Msg = "获取失败"
  1745. br.ErrMsg = "获取失败,Err:" + err.Error()
  1746. return
  1747. }
  1748. conditionEnd1 := condition
  1749. parsEnd1 := pars
  1750. conditionEnd1 += ` AND a.end_date >= ? AND a.end_date <= ? AND a.company_ascribe_id !=9 `
  1751. parsEnd1 = append(parsEnd1, startDate, endDate)
  1752. //if contractDataType == "到期合同" {
  1753. //到期列表数据
  1754. listEndDate, err := models.GetIncrementalCompanyMergeListEnd(conditionEnd1, parsEnd1, startSize, pageSize)
  1755. if err != nil {
  1756. br.Msg = "获取失败"
  1757. br.ErrMsg = "获取失败,Err:" + err.Error()
  1758. return
  1759. }
  1760. var companyContractIds []int
  1761. for _, v := range listRenewal {
  1762. companyContractIds = append(companyContractIds, v.CompanyContractId)
  1763. v.SellerId = v.SellerIdInit
  1764. }
  1765. for _, v := range listEndDate {
  1766. companyContractIds = append(companyContractIds, v.CompanyContractId)
  1767. v.SellerId = v.SellerIdInit
  1768. }
  1769. //合同归因标签
  1770. mapGetCompanyAscribeContent, mapContent := services.GetCompanyContractAscribeContentMap(companyContractIds)
  1771. //合并合同所对应的权限
  1772. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  1773. if err != nil {
  1774. br.Msg = "获取失败"
  1775. br.ErrMsg = "获取失败,Err:" + err.Error()
  1776. return
  1777. }
  1778. for _, v := range listRenewal {
  1779. v.PermissionName = mappermissionName[v.CompanyContractId]
  1780. if mapGetCompanyAscribeContent[v.CompanyContractId] != "" {
  1781. v.Content = mapContent[v.CompanyContractId]
  1782. v.AscribeContent = mapGetCompanyAscribeContent[v.CompanyContractId]
  1783. v.IsShowNoRenewedNote = true
  1784. }
  1785. }
  1786. for _, v := range listEndDate {
  1787. v.PermissionName = mappermissionName[v.CompanyContractId]
  1788. if mapGetCompanyAscribeContent[v.CompanyContractId] != "" {
  1789. v.Content = mapContent[v.CompanyContractId]
  1790. v.AscribeContent = mapGetCompanyAscribeContent[v.CompanyContractId]
  1791. v.IsShowNoRenewedNote = true
  1792. }
  1793. }
  1794. //创建excel
  1795. dir, err := os.Executable()
  1796. exPath := filepath.Dir(dir)
  1797. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1798. xlsxFile := xlsx.NewFile()
  1799. if err != nil {
  1800. br.Msg = "生成文件失败"
  1801. br.ErrMsg = "生成文件失败"
  1802. return
  1803. }
  1804. style := xlsx.NewStyle()
  1805. alignment := xlsx.Alignment{
  1806. Horizontal: "center",
  1807. Vertical: "center",
  1808. WrapText: true,
  1809. }
  1810. style.Alignment = alignment
  1811. style.ApplyAlignment = true
  1812. if exportType == 1 {
  1813. for pidIndex := 0; pidIndex <= 1; pidIndex++ {
  1814. var sheetName string
  1815. var listDate []*models.IncrementalList
  1816. if pidIndex == 0 {
  1817. sheetName = "确认不续约合同"
  1818. listDate = listRenewal
  1819. } else {
  1820. sheetName = "到期合同"
  1821. listDate = listEndDate
  1822. }
  1823. sheet, err := xlsxFile.AddSheet(sheetName)
  1824. if err != nil {
  1825. br.Msg = "新增Sheet失败"
  1826. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1827. return
  1828. }
  1829. //标头
  1830. rowTitle := sheet.AddRow()
  1831. cellA := rowTitle.AddCell()
  1832. cellA.Value = "客户名称"
  1833. cellB := rowTitle.AddCell()
  1834. cellB.Value = "客户状态"
  1835. cellC := rowTitle.AddCell()
  1836. cellC.Value = "所属销售"
  1837. cellCSeller := rowTitle.AddCell()
  1838. cellCSeller.Value = "服务销售"
  1839. cellD := rowTitle.AddCell()
  1840. cellD.Value = "合同期限"
  1841. cellE := rowTitle.AddCell()
  1842. cellE.Value = "签约套餐"
  1843. cellF := rowTitle.AddCell()
  1844. cellF.Value = "合同金额"
  1845. if pidIndex == 0 {
  1846. cellG := rowTitle.AddCell()
  1847. cellG.Value = "不续约归因"
  1848. }
  1849. for _, item := range listDate {
  1850. row := sheet.AddRow()
  1851. cellAData := row.AddCell()
  1852. cellAData.Value = item.CompanyName
  1853. cellBData := row.AddCell()
  1854. cellBData.Value = item.ProductStatus
  1855. cellCData := row.AddCell()
  1856. cellCData.Value = item.SellerName
  1857. cellCSellerData := row.AddCell()
  1858. cellCSellerData.Value = item.ShareSeller
  1859. cellDData := row.AddCell()
  1860. cellDData.Value = item.StartDate + "~" + item.EndDate
  1861. cellEData := row.AddCell()
  1862. cellEData.Value = item.PermissionName
  1863. cellFData := row.AddCell()
  1864. cellFData.Value = fmt.Sprint(item.Money)
  1865. if pidIndex == 0 {
  1866. cellGData := row.AddCell()
  1867. cellGData.Value = item.Content
  1868. }
  1869. }
  1870. }
  1871. err = xlsxFile.Save(downLoadnFilePath)
  1872. if err != nil {
  1873. br.Msg = "保存文件失败"
  1874. br.ErrMsg = "保存文件失败"
  1875. return
  1876. }
  1877. } else {
  1878. var sheetName string
  1879. //var listDate []*models.IncrementalList
  1880. sheetName = "未续约率"
  1881. sheet, err := xlsxFile.AddSheet(sheetName)
  1882. if err != nil {
  1883. br.Msg = "新增Sheet失败"
  1884. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1885. return
  1886. }
  1887. //标头
  1888. rowTitle := sheet.AddRow()
  1889. cellA := rowTitle.AddCell()
  1890. cellA.Value = "姓名"
  1891. cellB := rowTitle.AddCell()
  1892. cellB.Value = "确认不续约合同数"
  1893. cellC := rowTitle.AddCell()
  1894. cellC.Value = "确认不续约合同金额"
  1895. cellD := rowTitle.AddCell()
  1896. cellD.Value = "到期合同数"
  1897. cellE := rowTitle.AddCell()
  1898. cellE.Value = "到期合同金额"
  1899. cellF := rowTitle.AddCell()
  1900. cellF.Value = "确认不续约率"
  1901. listRaiSeller, err := system.GetSysuserRaiListNoServer()
  1902. if err != nil {
  1903. br.Msg = "获取失败"
  1904. br.ErrMsg = "获取权益销售信息失败,Err:" + err.Error()
  1905. return
  1906. }
  1907. //NoRenewalContractTotal int `description:"确认不续约合同数"`
  1908. //NoRenewalContractMoney int `description:"确认不续约合同金额"`
  1909. //ExpireRenewalContractTotal int `description:"到期合同数量"`
  1910. //ExpireRenewalContractMoney int `description:"到期合同总金额"`
  1911. //NoRenewalContractPercentage string `description:"确认不续约率"`
  1912. mapNoRenewalContractTotal := make(map[int]int)
  1913. mapNoRenewalContractMoney := make(map[int]float64)
  1914. mapExpireRenewalContractTotal := make(map[int]int)
  1915. mapExpireRenewalContractMoney := make(map[int]float64)
  1916. //mapData := make(map[int]*response.IncrementalCompanyPercentageExportResp)
  1917. for _, v := range listRenewal {
  1918. mapNoRenewalContractTotal[v.SellerId]++
  1919. mapNoRenewalContractMoney[v.SellerId] += v.Money
  1920. }
  1921. for _, v := range listEndDate {
  1922. mapExpireRenewalContractTotal[v.SellerId]++
  1923. mapExpireRenewalContractMoney[v.SellerId] += v.Money
  1924. }
  1925. for _, item := range listRaiSeller {
  1926. row := sheet.AddRow()
  1927. cellAData := row.AddCell()
  1928. cellAData.Value = item.RealName
  1929. cellBData := row.AddCell()
  1930. cellBData.Value = fmt.Sprint(mapNoRenewalContractTotal[item.AdminId])
  1931. cellCData := row.AddCell()
  1932. cellCData.Value = fmt.Sprint(mapNoRenewalContractMoney[item.AdminId])
  1933. cellEData := row.AddCell()
  1934. cellEData.Value = fmt.Sprint(mapExpireRenewalContractTotal[item.AdminId])
  1935. cellFData := row.AddCell()
  1936. cellFData.Value = fmt.Sprint(mapExpireRenewalContractMoney[item.AdminId])
  1937. cellGData := row.AddCell()
  1938. //分子或者分母为零的时候,不做计算
  1939. if mapNoRenewalContractMoney[item.AdminId] == 0 || mapExpireRenewalContractMoney[item.AdminId] == 0 {
  1940. cellGData.Value = "0%"
  1941. } else {
  1942. cellGData.Value = fmt.Sprint(utils.SubFloatToString(float64(mapNoRenewalContractMoney[item.AdminId])/float64(mapExpireRenewalContractMoney[item.AdminId])*100, 2), "%")
  1943. }
  1944. }
  1945. err = xlsxFile.Save(downLoadnFilePath)
  1946. if err != nil {
  1947. br.Msg = "保存文件失败"
  1948. br.ErrMsg = "保存文件失败"
  1949. return
  1950. }
  1951. }
  1952. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1953. downloadFileName := "未续约率明细" + randStr + ".xlsx"
  1954. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1955. defer func() {
  1956. os.Remove(downLoadnFilePath)
  1957. }()
  1958. br.Ret = 200
  1959. br.Success = true
  1960. br.Msg = "导出成功"
  1961. }
  1962. func init213() {
  1963. var condition string
  1964. var pars []interface{}
  1965. condition = " AND rai_contract_type = '续约合同' AND product_id = 2 "
  1966. var companyContractIds []string
  1967. companyContractList, e := company.GetCompanyContractList(condition, pars)
  1968. if e != nil && e.Error() != utils.ErrNoRow() {
  1969. fmt.Println(e)
  1970. return
  1971. }
  1972. for _, v := range companyContractList {
  1973. fmt.Println(v.CompanyContractId)
  1974. startDateTime, _ := time.Parse(utils.FormatDate, v.StartDate)
  1975. startDateTime = startDateTime.AddDate(-1, 0, 0)
  1976. totalLastYear, err := company.GetCompanyContractCountRaiByLastYear(v.CompanyId, startDateTime.Format(utils.FormatDate))
  1977. if err != nil {
  1978. fmt.Println(err)
  1979. return
  1980. }
  1981. if totalLastYear > 0 {
  1982. companyContractIds = append(companyContractIds, strconv.Itoa(v.CompanyContractId))
  1983. }
  1984. }
  1985. fmt.Println("companyContractIds", len(companyContractIds))
  1986. fmt.Println(strings.Join(companyContractIds, ","))
  1987. err := company.UpdateCompanyContractRaiContractTypeInit(strings.Join(companyContractIds, ","))
  1988. fmt.Println(err)
  1989. return
  1990. }
  1991. func init323() {
  1992. var conditionConfirm string
  1993. var parsConfirm []interface{}
  1994. companyConfirmList, err := company.GetCompanyContractNoRenewedAscribeList(conditionConfirm, parsConfirm, 0, 0)
  1995. if err != nil && err.Error() != utils.ErrNoRow() {
  1996. fmt.Println(err)
  1997. return
  1998. }
  1999. for _, v := range companyConfirmList {
  2000. err = company.UpdateCompanyContractCompanyAscribeId(v.CompanyAscribeId, v.CompanyContractId)
  2001. if err != nil && err.Error() != utils.ErrNoRow() {
  2002. fmt.Println(err)
  2003. return
  2004. }
  2005. }
  2006. }
  2007. //func init() {
  2008. // init16_1_02()
  2009. //}
  2010. func init16_1_01() {
  2011. var condition string
  2012. var pars []interface{}
  2013. condition = " AND product_id = 2 "
  2014. var companyIds []int
  2015. companyContractList, e := company.GetCompanyContractList(condition, pars)
  2016. if e != nil && e.Error() != utils.ErrNoRow() {
  2017. fmt.Println(e)
  2018. return
  2019. }
  2020. for _, v := range companyContractList {
  2021. if utils.InArrayByInt(companyIds, v.CompanyId) {
  2022. continue
  2023. }
  2024. companyIds = append(companyIds, v.CompanyId)
  2025. }
  2026. condition = " AND company_id IN (" + (utils.GetOrmInReplace(len(companyIds))) + ") AND product_id = 2 AND share_seller_id > 0 "
  2027. pars = append(pars, companyIds)
  2028. listCompanyProduct, e := company.GetCompanyProductList(condition, pars)
  2029. if e != nil {
  2030. fmt.Println(e)
  2031. return
  2032. }
  2033. for _, v := range listCompanyProduct {
  2034. fmt.Println(v.ShareSellerId, v.ShareSeller)
  2035. e = company.UpdateCompanyContractTypeinit16_1_01(v.ShareSeller, v.ShareSellerId, v.CompanyId)
  2036. if e != nil {
  2037. fmt.Println(e)
  2038. return
  2039. }
  2040. }
  2041. }
  2042. func init16_1_02() {
  2043. var condition string
  2044. var pars []interface{}
  2045. condition = " AND product_id = 2 AND company_contract_id > 0 "
  2046. CompanyApprovalList, e := company.GetCompanyApprovalList(condition, pars)
  2047. if e != nil && e.Error() != utils.ErrNoRow() {
  2048. fmt.Println(e)
  2049. return
  2050. }
  2051. for _, v := range CompanyApprovalList {
  2052. fmt.Println(v.CompanyId, v.CompanyContractId, "__", v.CompanyApprovalId)
  2053. e = company.UpdateCompanyContractTypeinit16_1_02(v.ApplyRealName, v.ApplyUserId, v.CompanyContractId)
  2054. if e != nil {
  2055. fmt.Println(e)
  2056. return
  2057. }
  2058. }
  2059. }