report_article.go 208 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302
  1. package cygx
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "github.com/tealeg/xlsx"
  7. "hongze/hz_crm_api/controllers"
  8. "hongze/hz_crm_api/models"
  9. "hongze/hz_crm_api/models/company"
  10. "hongze/hz_crm_api/models/cygx"
  11. "hongze/hz_crm_api/models/roadshow"
  12. "hongze/hz_crm_api/models/system"
  13. "hongze/hz_crm_api/services"
  14. cygxService "hongze/hz_crm_api/services/cygx"
  15. "hongze/hz_crm_api/utils"
  16. "html"
  17. "os"
  18. "path/filepath"
  19. "strconv"
  20. "strings"
  21. "time"
  22. )
  23. // 报告管理
  24. type ReportArticleController struct {
  25. controllers.BaseAuthController
  26. }
  27. // @Title 主题列表
  28. // @Description 获取主题列表接口
  29. // @Param ChartPermissionId query int true "分类ID"
  30. // @Success 200 {object} cygx.CygxReportMappingListRep
  31. // @router /reportMappingist/list [get]
  32. func (this *ReportArticleController) CygxReportMappingist() {
  33. br := new(models.BaseResponse).Init()
  34. defer func() {
  35. this.Data["json"] = br
  36. this.ServeJSON()
  37. }()
  38. sysUser := this.SysUser
  39. if sysUser == nil {
  40. br.Msg = "请登录"
  41. br.ErrMsg = "请登录,SysUser Is Empty"
  42. return
  43. }
  44. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  45. if chartPermissionId < 1 {
  46. br.Msg = "请输入分类ID"
  47. return
  48. }
  49. list, err := cygx.CygxReportMappingist(chartPermissionId)
  50. if err != nil {
  51. br.Msg = "获取失败"
  52. br.ErrMsg = "获取失败,Err:" + err.Error()
  53. return
  54. }
  55. resp := new(cygx.CygxReportMappingListRep)
  56. resp.List = list
  57. br.Ret = 200
  58. br.Success = true
  59. br.Msg = "获取成功"
  60. br.Data = resp
  61. }
  62. // @Title 报告匹配类型列表
  63. // @Description 获取报告匹配类型列表接口
  64. // @Success 200 {object} cygx.CygxReportMappingMatchTypeRep
  65. // @Param ChartPermissionId query int true "分类ID"
  66. // @router /reportMappingMatchTypeRep/list [get]
  67. func (this *ReportArticleController) CygxReportMappingMatchTypeList() {
  68. br := new(models.BaseResponse).Init()
  69. defer func() {
  70. this.Data["json"] = br
  71. this.ServeJSON()
  72. }()
  73. sysUser := this.SysUser
  74. if sysUser == nil {
  75. br.Msg = "请登录"
  76. br.ErrMsg = "请登录,SysUser Is Empty"
  77. return
  78. }
  79. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  80. var condition string
  81. var pars []interface{}
  82. if chartPermissionId > 0 {
  83. condition += ` AND chart_permission_id = ? `
  84. pars = append(pars, chartPermissionId)
  85. }
  86. list, err := cygx.GetCygxReportMappingCygxList(condition, pars, 0, 0)
  87. if err != nil {
  88. br.Msg = "获取失败"
  89. br.ErrMsg = "获取失败,Err:" + err.Error()
  90. return
  91. }
  92. resp := new(cygx.CygxCygxReportMappingCygxResp)
  93. resp.List = list
  94. br.Ret = 200
  95. br.Success = true
  96. br.Msg = "获取成功"
  97. br.Data = resp
  98. }
  99. // @Title 报告列表
  100. // @Description 报告列表接口
  101. // @Param PageSize query int true "每页数据条数"
  102. // @Param CurrentIndex query int true "当前页页码,从1开始"
  103. // @Param IsFilter query int true "是否过滤 ,1是,0否,不传默认为0"
  104. // @Param IsClass query int true "是否归类 ,1是,0否 ,不传默认为0"
  105. // @Param ChartPermissionId query int true "行业ID --> 一级分类列表中 ChartPermissionId"
  106. // @Param SubCategoryName query string true "主题"
  107. // @Param MatchTypeName query string true "报告匹配类型"
  108. // @Param IndustrialManagementId int string true "产业ID"
  109. // @Param StartDate query string true "开始时间用0 补齐,列如2021-03-06 08:09:01"
  110. // @Param EndDate query string true "结束时间用0 补齐,列如2021-03-06 08:09:01"
  111. // @Param KeyWord query string true "搜索关键词"
  112. // @Param KeyWordStock query string true "搜索关键词.个股标签,关联标的部分"
  113. // @Success 200 {object} cygx.GetReportArticleListRep
  114. // @router /reportArticle/list [get]
  115. func (this *ReportArticleController) ReportArticleList() {
  116. br := new(models.BaseResponse).Init()
  117. defer func() {
  118. this.Data["json"] = br
  119. this.ServeJSON()
  120. }()
  121. sysUser := this.SysUser
  122. if sysUser == nil {
  123. br.Msg = "请登录"
  124. br.ErrMsg = "请登录,SysUser Is Empty"
  125. return
  126. }
  127. pageSize, _ := this.GetInt("PageSize")
  128. currentIndex, _ := this.GetInt("CurrentIndex")
  129. isFilter, _ := this.GetInt("IsFilter")
  130. isClass, _ := this.GetInt("IsClass")
  131. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  132. subCategoryName := this.GetString("SubCategoryName")
  133. matchTypeName := this.GetString("MatchTypeName")
  134. industrialManagementId, _ := this.GetInt("IndustrialManagementId")
  135. startDate := this.GetString("StartDate")
  136. endDate := this.GetString("EndDate")
  137. keyWord := this.GetString("KeyWord")
  138. keyWordStock := this.GetString("KeyWordStock")
  139. reportLabel := this.GetString("ReportLabel") // 查研观向7.4-报告标签
  140. var startSize int
  141. if pageSize <= 0 {
  142. pageSize = utils.PageSize20
  143. }
  144. if currentIndex <= 0 {
  145. currentIndex = 1
  146. }
  147. startSize = utils.StartIndex(currentIndex, pageSize)
  148. var condition string
  149. var pars []interface{}
  150. listPermission, errper := cygx.GetPermissionMappingCategoryID()
  151. if errper != nil {
  152. br.Msg = "获取失败"
  153. br.ErrMsg = "获取失败,Err:" + errper.Error()
  154. return
  155. }
  156. condition += ` AND art.is_report = 1 AND re.id !=28 `
  157. if isClass == 0 {
  158. condition += ` AND art.is_class = 0 `
  159. } else {
  160. condition += ` AND art.is_class = 1 `
  161. if industrialManagementId > 0 {
  162. condition += ` AND man.industrial_management_id = ` + strconv.Itoa(industrialManagementId)
  163. }
  164. }
  165. if keyWord != "" {
  166. condition += ` AND (art.title LIKE '%` + keyWord + `%' ) `
  167. }
  168. //个股标签跟标的的搜索
  169. if keyWordStock != "" {
  170. condition += ` AND (art.stock LIKE '%` + keyWordStock + `%' OR art.article_id IN (SELECT article_id FROM cygx_industrial_article_group_subject WHERE industrial_subject_id IN (SELECT industrial_subject_id FROM cygx_industrial_subject WHERE subject_name LIKE '%` + keyWordStock + `%')) ) `
  171. }
  172. if isFilter == 0 {
  173. condition += ` AND art.is_filter = 0 `
  174. } else {
  175. condition += ` AND art.is_filter = 1 `
  176. }
  177. //行业
  178. if chartPermissionId > 0 {
  179. condition += ` AND re.chart_permission_id = ` + strconv.Itoa(chartPermissionId)
  180. }
  181. //主题
  182. if subCategoryName != "" {
  183. condition += ` AND art.sub_category_name = ` + "'" + subCategoryName + "' "
  184. }
  185. //发布时间
  186. if startDate != "" {
  187. condition += ` AND art.publish_date >= ` + "'" + startDate + " 00:00:00'"
  188. }
  189. if endDate != "" {
  190. condition += ` AND art.publish_date <= ` + "'" + endDate + " 23:59:59'"
  191. }
  192. //报告匹配类型
  193. if matchTypeName != "" && chartPermissionId > 0 {
  194. //condition += ` AND re.match_type_name = ` + "'" + matchTypeName + "' "
  195. //mappingCygxDetai, err := cygx.GetCygxReportMappingCygxDetailByNameAndChartPermissionId(matchTypeName, chartPermissionId)
  196. //if err != nil && err.Error() != utils.ErrNoRow() {
  197. // br.Msg = "获取失败"
  198. // br.ErrMsg = "获取失败,Err:" + err.Error()
  199. // return
  200. //}
  201. //if mappingCygxDetai == nil {
  202. // resp := new(cygx.GetReportArticleListRep)
  203. // resp.List = make([]*cygx.CygxReportArticle, 0)
  204. // page := paging.GetPaging(currentIndex, pageSize, 0)
  205. // resp.Paging = page
  206. // br.Ret = 200
  207. // br.Success = true
  208. // br.Msg = "获取成功"
  209. // br.Data = resp
  210. // return
  211. //}
  212. //这里量不大,走一下子查询
  213. //condition += ` AND art.category_id IN ( SELECT category_id_celue FROM cygx_report_mapping_group WHERE id_cygx = ` + strconv.Itoa(mappingCygxDetai.Id) + ` ) `
  214. condition += ` AND art.category_id IN ( SELECT category_id FROM cygx_report_mapping WHERE match_type_name = ` + "'" + matchTypeName + "'" + ` ) `
  215. }
  216. // 报告标签
  217. if reportLabel != "" {
  218. keywords := "%" + reportLabel + "%"
  219. // 查询包含关键词的产业/标的所关联的报告IDs
  220. artIds, e := cygx.GetArticleIdsFromIndustryAndSubjectGroupByKeyword(keywords)
  221. if e != nil {
  222. br.Msg = "获取失败"
  223. br.ErrMsg = "产业/标的关键词获取文章IDs失败, Err:" + e.Error()
  224. return
  225. }
  226. if len(artIds) > 0 {
  227. condition += ` AND art.article_id IN (` + utils.GetOrmInReplace(len(artIds)) + `)`
  228. pars = append(pars, artIds)
  229. }
  230. }
  231. total, err := cygx.GetReportArticleCount(condition, pars)
  232. if err != nil {
  233. br.Msg = "获取失败"
  234. br.ErrMsg = "获取失败,Err:" + err.Error()
  235. return
  236. }
  237. //return
  238. condition += ` GROUP BY art.article_id ORDER BY art.publish_date DESC `
  239. //fmt.Println(condition)
  240. list, err := cygx.GetReportArticleList(condition, pars, startSize, pageSize, isClass)
  241. if err != nil {
  242. br.Msg = "获取失败"
  243. br.ErrMsg = "获取失败,Err:" + err.Error()
  244. return
  245. }
  246. reportMap := make(map[int]string)
  247. listMap, err := cygx.GetReportMapping()
  248. if err != nil {
  249. br.Msg = "获取失败"
  250. br.ErrMsg = "获取映射分类失败,Err:" + err.Error()
  251. return
  252. }
  253. for _, v := range listMap {
  254. reportMap[v.CategoryId] = v.MatchTypeName
  255. }
  256. var articleIds string
  257. for k, v := range list {
  258. var isShowButton bool
  259. if sysUser.RoleTypeCode == "rai_admin" || sysUser.RoleTypeCode == "rai_researcher" || sysUser.RoleTypeCode == "admin" {
  260. isShowButton = true
  261. } else {
  262. isShowButton = false
  263. }
  264. list[k].MatchTypeName = reportMap[v.CategoryId]
  265. list[k].ShowButton = true
  266. for _, vper := range listPermission {
  267. if v.CategoryId == vper.CategoryId {
  268. isShowButton = false
  269. }
  270. list[k].ShowButton = isShowButton
  271. }
  272. articleIds += strconv.Itoa(v.ArticleId) + ","
  273. }
  274. mapCommment := make(map[int]int)
  275. if articleIds != "" {
  276. articleIds = strings.TrimRight(articleIds, ",")
  277. condition = ` AND art.article_id IN (` + articleIds + `)`
  278. listPv, err := cygx.GetReportArticleListPvUv(condition)
  279. if err != nil {
  280. br.Msg = "获取失败"
  281. br.ErrMsg = "获取PV,Uv 失败,Err:" + err.Error()
  282. return
  283. }
  284. var condition string
  285. var pars []interface{}
  286. condition = ` AND k.article_id IN (` + articleIds + `)`
  287. listComment, err := cygx.GetArticleCommentListSearch(condition, pars)
  288. if err != nil {
  289. br.Msg = "获取失败"
  290. br.ErrMsg = "获取失败,Err:" + err.Error()
  291. return
  292. }
  293. for _, v := range listComment {
  294. mapCommment[v.ArticleId]++
  295. }
  296. if len(listPv) > 0 {
  297. for _, pv := range listPv {
  298. for k, v := range list {
  299. if v.ArticleId == pv.ArticleId {
  300. list[k].Pv = pv.Pv
  301. list[k].Uv = pv.Uv
  302. list[k].ClPv = pv.ClPv
  303. list[k].ClUv = pv.ClUv
  304. list[k].CollectionNum = pv.CollectionNum
  305. }
  306. }
  307. }
  308. }
  309. }
  310. //ListIndustrial []*IndustrialActivityGroupManagementRep
  311. //ListSubject []*SubjectActivityGroupManagementRep
  312. mapIndustrial := make(map[int]string)
  313. mapSubject := make(map[string]string)
  314. mapIndustrialList := make(map[int][]*cygx.IndustrialActivityGroupManagementRep)
  315. mapSubjectList := make(map[int][]*cygx.SubjectActivityGroupManagementRep)
  316. if articleIds != "" {
  317. industrialList, err := cygx.GetIndustrialArticleGroupListByarticleIds(articleIds)
  318. if err != nil {
  319. br.Msg = "获取失败"
  320. br.ErrMsg = "获取失败,GetIndustrialArticleGroupListByarticleIds Err:" + err.Error()
  321. return
  322. }
  323. subjectList, err := cygx.GetSubjectArticleGroupListByarticleIds(articleIds)
  324. if err != nil {
  325. br.Msg = "获取失败"
  326. br.ErrMsg = "获取失败,GetSubjectArticleGroupListByarticleIds Err:" + err.Error()
  327. return
  328. }
  329. //合并活动对应的多个标的
  330. for _, v := range subjectList {
  331. mapSubject[fmt.Sprint(v.ArticleId, "_", v.IndustrialManagementId)] += v.SubjectName + "/"
  332. itemSubject := new(cygx.SubjectActivityGroupManagementRep)
  333. itemSubject.SubjectName = v.SubjectName
  334. itemSubject.IndustrialSubjectId = v.IndustrialSubjectId
  335. mapSubjectList[v.ArticleId] = append(mapSubjectList[v.ArticleId], itemSubject)
  336. }
  337. //活动对应的产业
  338. for _, v := range industrialList {
  339. var labelSubject string
  340. labelSubject = mapSubject[fmt.Sprint(v.ArticleId, "_", v.IndustrialManagementId)]
  341. if labelSubject != "" {
  342. mapIndustrial[v.ArticleId] += v.IndustryName + "--" + strings.TrimRight(labelSubject, "/") + ","
  343. } else {
  344. mapIndustrial[v.ArticleId] += v.IndustryName + ","
  345. }
  346. itemindustrial := new(cygx.IndustrialActivityGroupManagementRep)
  347. itemindustrial.IndustryName = v.IndustryName
  348. itemindustrial.IndustrialManagementId = v.IndustrialManagementId
  349. mapIndustrialList[v.ArticleId] = append(mapIndustrialList[v.ArticleId], itemindustrial)
  350. }
  351. }
  352. for k, v := range list {
  353. if mapIndustrial[v.ArticleId] != "" {
  354. list[k].Label = strings.TrimRight(mapIndustrial[v.ArticleId], ",")
  355. }
  356. if v.SubCategoryName == "专项调研" {
  357. v.PublishDate = cygxService.ArticlePublishDate(v.PublishDate)
  358. }
  359. list[k].CommentNum = mapCommment[v.ArticleId]
  360. list[k].ListIndustrial = mapIndustrialList[v.ArticleId]
  361. list[k].ListSubject = mapSubjectList[v.ArticleId]
  362. if v.ReportId > 0 {
  363. list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/ricc/yb/report/" + strconv.Itoa(v.ReportId)
  364. } else {
  365. list[k].HttpUrl = utils.CYGX_WEB_URL + "/material/info/" + strconv.Itoa(v.ArticleId)
  366. list[k].ReportId = v.Id
  367. }
  368. }
  369. page := paging.GetPaging(currentIndex, pageSize, total)
  370. resp := new(cygx.GetReportArticleListRep)
  371. resp.List = list
  372. resp.Paging = page
  373. br.Ret = 200
  374. br.Success = true
  375. br.Msg = "获取成功"
  376. br.Data = resp
  377. }
  378. // @Title 过滤报告
  379. // @Description 过滤报告接口
  380. // @Param ReportId query int true "报告ID"
  381. // @Success Ret=200
  382. // @router /reportArticle/filter [post]
  383. func (this *IndustrialSubjectController) ReportArticleFilter() {
  384. br := new(models.BaseResponse).Init()
  385. defer func() {
  386. this.Data["json"] = br
  387. this.ServeJSON()
  388. }()
  389. sysUser := this.SysUser
  390. if sysUser == nil {
  391. br.Msg = "请登录"
  392. br.ErrMsg = "请登录,SysUser Is Empty"
  393. br.Ret = 408
  394. return
  395. }
  396. //if sysUser.RoleTypeCode != "rai_admin" && sysUser.RoleTypeCode != "rai_researcher" && sysUser.RoleTypeCode != "admin" {
  397. // br.Msg = "你没有操作权限请联系管理员"
  398. // return
  399. //}
  400. var req cygx.CygxReportArticleID
  401. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  402. if err != nil {
  403. br.Msg = "参数解析异常!"
  404. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  405. return
  406. }
  407. reportId := req.ReportId
  408. reportInfo, err := cygx.GetReportArticleId(reportId)
  409. if reportInfo == nil {
  410. br.Msg = "报告ID不存在!"
  411. return
  412. }
  413. if err != nil {
  414. br.Msg = "过滤失败!"
  415. br.ErrMsg = "过滤失败,Err:" + err.Error()
  416. return
  417. }
  418. if reportInfo.IsFilter == 1 {
  419. br.Msg = "您已过滤请勿重复操作!"
  420. return
  421. }
  422. if reportInfo.ReportType != 2 {
  423. br.Msg = "操作失败!"
  424. br.ErrMsg = "报告类型不属于产业报告!"
  425. return
  426. }
  427. err = cygx.FilterReportArticle(reportId)
  428. if err != nil {
  429. br.Msg = "过滤失败"
  430. br.ErrMsg = "过滤失败,Err:" + err.Error()
  431. return
  432. }
  433. br.Ret = 200
  434. br.Success = true
  435. br.Msg = "过滤成功"
  436. br.IsAddLog = true
  437. }
  438. // @Title 报告归类
  439. // @Description 报告归类接口
  440. // @Param request body cygx.ReportArticleClassificationResp true "type json string"
  441. // @Success Ret=200
  442. // @router /reportArticle/classification [post]
  443. func (this *IndustrialSubjectController) ReportArticleClassification() {
  444. br := new(models.BaseResponse).Init()
  445. defer func() {
  446. this.Data["json"] = br
  447. this.ServeJSON()
  448. }()
  449. sysUser := this.SysUser
  450. if sysUser == nil {
  451. br.Msg = "请登录"
  452. br.ErrMsg = "请登录,SysUser Is Empty"
  453. br.Ret = 408
  454. return
  455. }
  456. //if sysUser.RoleTypeCode != "rai_admin" && sysUser.RoleTypeCode != "rai_researcher" && sysUser.RoleTypeCode != "admin" {
  457. // br.Msg = "你没有操作权限请联系管理员"
  458. // return
  459. //}
  460. var req cygx.ReportArticleClassificationResp
  461. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  462. if err != nil {
  463. br.Msg = "参数解析异常!"
  464. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  465. return
  466. }
  467. var pars []interface{}
  468. var condition string
  469. reportId := req.ReportId
  470. industrialManagementIdStr := req.IndustrialManagementId
  471. reportInfo, _ := cygx.GetReportArticleId(reportId)
  472. if reportInfo == nil {
  473. br.Msg = "报告ID不存在!"
  474. return
  475. }
  476. if reportInfo.ReportType != 2 {
  477. br.Msg = "操作失败!"
  478. br.ErrMsg = "报告类型不属于产业报告!"
  479. return
  480. }
  481. detailIndustryNameList, err := cygx.GetIndustrialManagemenDetailByAaticleID(reportInfo.ArticleId)
  482. if err != nil {
  483. br.Msg = "分类失败"
  484. br.ErrMsg = "获取报告原有分类失败,Err:" + err.Error()
  485. return
  486. }
  487. var industryId []string
  488. for _, v := range detailIndustryNameList {
  489. industryId = append(industryId, strconv.Itoa(v.IndustrialManagementId))
  490. }
  491. industrialStrList := strings.Split(industrialManagementIdStr, ",")
  492. for _, v := range industrialStrList {
  493. condition = `AND industrial_management_id = ` + v
  494. totalIndustrialManagement, _ := cygx.GetIndustrialManagementCount(condition, pars)
  495. if totalIndustrialManagement < 1 {
  496. br.Msg = "操作失败"
  497. br.ErrMsg = "操作失败,产业不存在IndustrialManagementId:" + v
  498. return
  499. }
  500. industryId = append(industryId, v)
  501. }
  502. if req.IndustrialSubjectIdStr != "0" && req.IndustrialSubjectIdStr != "" {
  503. strList := strings.Split(req.IndustrialSubjectIdStr, ",")
  504. for _, v := range strList {
  505. condition = `AND industrial_subject_id = ` + v + ` AND industrial_management_id IN ( ` + industrialManagementIdStr + `)`
  506. totalIndustrialSubject, _ := cygx.GetIndustrialSubjectCount(condition, pars)
  507. if totalIndustrialSubject < 1 {
  508. br.Msg = "操作失败"
  509. br.ErrMsg = "操作失败,标的不存在IndustrialSubjectId:" + v
  510. return
  511. }
  512. }
  513. }
  514. err = cygx.ReportArticleClassificationEditNew(req.ReportId, industrialManagementIdStr, reportInfo.ArticleId, req.IndustrialSubjectIdStr)
  515. if err != nil {
  516. br.Msg = "分类失败"
  517. br.ErrMsg = "分类失败,Err:" + err.Error()
  518. return
  519. }
  520. go cygxService.DoArticleOnenIdWxTemplateMsg(reportInfo.ArticleId, 2)
  521. go cygxService.UpdateIndustrialsourceHzResourceDataById(industryId, "Hz") //修改相关产业关联的报告信息
  522. br.Ret = 200
  523. br.Success = true
  524. br.Msg = "分类成功"
  525. br.IsAddLog = true
  526. }
  527. // @Title 是否展示操作按钮
  528. // @Description 获取是否展示操作按钮接口
  529. // @Success Ret=200 {object} cygx.ShowButton
  530. // @router /reportArticle/showButton [get]
  531. func (this *IndustrialSubjectController) ShowButton() {
  532. br := new(models.BaseResponse).Init()
  533. defer func() {
  534. this.Data["json"] = br
  535. this.ServeJSON()
  536. }()
  537. sysUser := this.SysUser
  538. if sysUser == nil {
  539. br.Msg = "请登录"
  540. br.ErrMsg = "请登录,SysUser Is Empty"
  541. return
  542. }
  543. resp := new(cygx.ShowButton)
  544. if sysUser.RoleTypeCode == "rai_admin" || sysUser.RoleTypeCode == "rai_researcher" || sysUser.RoleTypeCode == "admin" {
  545. resp.IsShowButton = true
  546. }
  547. br.Ret = 200
  548. br.Success = true
  549. br.Msg = "获取成功"
  550. br.Data = resp
  551. }
  552. // @Title 下载阅读明细
  553. // @Description 获取下载阅读明细接口
  554. // @Param ReportId query int true "报告ID"
  555. // @Success Ret=200
  556. // @router /reportArticle/export [get]
  557. func (this *IndustrialSubjectController) Export() {
  558. br := new(models.BaseResponse).Init()
  559. defer func() {
  560. this.Data["json"] = br
  561. this.ServeJSON()
  562. }()
  563. sysUser := this.SysUser
  564. if sysUser == nil {
  565. br.Msg = "请登录"
  566. br.ErrMsg = "请登录,SysUser Is Empty"
  567. return
  568. }
  569. reportId, _ := this.GetInt("ReportId")
  570. //超级管理员和权益管理员、权益研究员可以下载所有客户,销售组长能下载本组客户,销售只能下载本人名下客户
  571. resp := new(cygx.CanDownload)
  572. adminInfo, errAdmin := system.GetSysUserById(sysUser.AdminId)
  573. if errAdmin != nil {
  574. br.Msg = "获取失败"
  575. br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
  576. return
  577. }
  578. if adminInfo.Role == "admin" || adminInfo.Role == "researcher" {
  579. resp.IsCanDownload = true
  580. }
  581. var list []*cygx.ReportExportRep
  582. var err error
  583. if resp.IsCanDownload == false {
  584. //权益申请销售只能看到自己名下的客户的申请
  585. companyIds, err := cygxService.GetAdminLookUserCompanyIds(sysUser)
  586. if err != nil {
  587. br.Msg = "获取失败"
  588. br.ErrMsg = "获取失败,GetAdminLookUserCompanyIds Err:" + err.Error()
  589. return
  590. }
  591. var companyIdstr []string
  592. for _, v := range companyIds {
  593. companyIdstr = append(companyIdstr, strconv.Itoa(v))
  594. }
  595. sqlStr := ` AND h.company_id IN (` + strings.Join(companyIdstr, ",") + `) `
  596. listSeller, errSeller := cygx.GetReportExportRep(reportId, sqlStr)
  597. list = listSeller
  598. err = errSeller
  599. } else {
  600. sqlStr := ""
  601. listAdmin, errAdmin := cygx.GetReportExportRep(reportId, sqlStr)
  602. list = listAdmin
  603. err = errAdmin
  604. }
  605. if err != nil {
  606. br.Msg = "获取失败"
  607. br.ErrMsg = "获取失败,Err:" + err.Error()
  608. return
  609. }
  610. var listNew []*cygx.ReportExportRep
  611. for k, v := range list {
  612. if k > 0 && list[k].Id == list[k-1].Id {
  613. list[k-1].SellerName = list[k-1].SellerName + "/" + v.SellerName
  614. }
  615. }
  616. for k, v := range list {
  617. if k > 0 && list[k].Id != list[k-1].Id {
  618. listNew = append(listNew, v)
  619. }
  620. }
  621. //创建excel
  622. dir, err := os.Executable()
  623. exPath := filepath.Dir(dir)
  624. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  625. xlsxFile := xlsx.NewFile()
  626. if err != nil {
  627. br.Msg = "生成文件失败"
  628. br.ErrMsg = "生成文件失败"
  629. return
  630. }
  631. style := xlsx.NewStyle()
  632. alignment := xlsx.Alignment{
  633. Horizontal: "center",
  634. Vertical: "center",
  635. WrapText: true,
  636. }
  637. style.Alignment = alignment
  638. style.ApplyAlignment = true
  639. sheet, err := xlsxFile.AddSheet("关键词搜索统计")
  640. if err != nil {
  641. br.Msg = "新增Sheet失败"
  642. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  643. return
  644. }
  645. //标头
  646. rowTitle := sheet.AddRow()
  647. cellA := rowTitle.AddCell()
  648. cellA.Value = "姓名"
  649. cellB := rowTitle.AddCell()
  650. cellB.Value = "公司名"
  651. cellC := rowTitle.AddCell()
  652. cellC.Value = "销售名称"
  653. cellD := rowTitle.AddCell()
  654. cellD.Value = "阅读时间"
  655. cellE := rowTitle.AddCell()
  656. cellE.Value = "停留时间(s)"
  657. for _, item := range listNew {
  658. row := sheet.AddRow()
  659. cellA := row.AddCell()
  660. cellA.Value = item.RealName
  661. cellB := row.AddCell()
  662. cellB.Value = item.CompanyName
  663. cellC := row.AddCell()
  664. cellC.Value = item.SellerName
  665. cellD := row.AddCell()
  666. cellD.Value = item.CreateTime
  667. cellE := row.AddCell()
  668. cellE.Value = item.StopTime
  669. }
  670. err = xlsxFile.Save(downLoadnFilePath)
  671. if err != nil {
  672. br.Msg = "保存文件失败"
  673. br.ErrMsg = "保存文件失败"
  674. return
  675. }
  676. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  677. downloadFileName := "阅读明细统计列表" + randStr + ".xlsx"
  678. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  679. defer func() {
  680. os.Remove(downLoadnFilePath)
  681. }()
  682. br.Ret = 200
  683. br.Success = true
  684. br.Msg = "导出成功"
  685. }
  686. // @Title 通过报告ID获取对应的匹配类型
  687. // @Description 通过报告ID获取对应的匹配类型接口
  688. // @Param ReportId query int true "报告ID"
  689. // @Success 200 {object} cygx.ReportMatchTypeNameList
  690. // @router /reportArticle/getMatchTypeName [get]
  691. func (this *IndustrialSubjectController) GetMatchTypeNameByReportId() {
  692. br := new(models.BaseResponse).Init()
  693. defer func() {
  694. this.Data["json"] = br
  695. this.ServeJSON()
  696. }()
  697. sysUser := this.SysUser
  698. if sysUser == nil {
  699. br.Msg = "请登录"
  700. br.ErrMsg = "请登录,SysUser Is Empty"
  701. return
  702. }
  703. reportId, _ := this.GetInt("ReportId")
  704. detail, err := cygx.GetArticleDetailById(reportId)
  705. if err != nil {
  706. br.Msg = "获取信息失败"
  707. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  708. return
  709. }
  710. list, err := cygx.GetMatchTypeName(detail.CategoryId)
  711. if err != nil {
  712. br.Msg = "获取信息失败"
  713. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  714. return
  715. }
  716. resp := new(cygx.ReportMatchTypeNameList)
  717. resp.List = list
  718. br.Ret = 200
  719. br.Success = true
  720. br.Msg = "获取成功"
  721. br.Data = resp
  722. }
  723. // @Title 修改报告的匹配类型
  724. // @Description 修改报告的匹配类型接口
  725. // @Param request body cygx.UpdateReportMatchTypeNameRep true "type json string"
  726. // @Success Ret=200
  727. // @router /reportArticle/updateMatchTypeName [post]
  728. func (this *IndustrialSubjectController) UpdateMatchTypeName() {
  729. br := new(models.BaseResponse).Init()
  730. defer func() {
  731. this.Data["json"] = br
  732. this.ServeJSON()
  733. }()
  734. sysUser := this.SysUser
  735. if sysUser == nil {
  736. br.Msg = "请登录"
  737. br.ErrMsg = "请登录,SysUser Is Empty"
  738. return
  739. }
  740. var req cygx.UpdateReportMatchTypeNameRep
  741. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  742. reportId := req.ReportId
  743. if err != nil {
  744. br.Msg = "参数解析异常!"
  745. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  746. return
  747. }
  748. detail, err := cygx.GetMatchTypeNameById(req.MatchID)
  749. if err != nil {
  750. br.Msg = "获取信息失败"
  751. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  752. return
  753. }
  754. detailArt, err := cygx.GetArticleDetailById(reportId)
  755. if err != nil {
  756. br.Msg = "获取信息失败"
  757. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  758. return
  759. }
  760. err = cygx.UpdateReportMatchTypeName(detail.MatchTypeName, detail.ReportType, detail.CategoryId, req.ReportId, detailArt.IsSummary, detailArt.IsClass)
  761. if err != nil {
  762. br.Msg = "修改失败"
  763. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  764. return
  765. }
  766. go cygxService.DoArticleOnenIdWxTemplateMsg(detailArt.ArticleId, 2)
  767. go cygxService.AddCygxReportMappingCategoryGroupByArticleId(detailArt.ArticleId) // 手动修改报告归类
  768. go cygxService.UpdateArticleResourceData(detailArt.ArticleId) //写入首页最新 cygx_resource_data 表
  769. br.Ret = 200
  770. br.Success = true
  771. br.Msg = "修改成功"
  772. br.IsAddLog = true
  773. }
  774. // @Title 报告内容的保存与发布
  775. // @Description 报告内容的保存与发布接口
  776. // @Param request body cygx.ReportAddRep true "type json string"
  777. // @Success 200 操作成功
  778. // @router /reportArticle/PreserveAndPublish [post]
  779. func (this *ReportArticleController) PreserveAndPublish() {
  780. br := new(models.BaseResponse).Init()
  781. defer func() {
  782. this.Data["json"] = br
  783. this.ServeJSON()
  784. }()
  785. AdminUser := this.SysUser
  786. if AdminUser == nil {
  787. br.Msg = "请登录"
  788. br.ErrMsg = "请登录,用户信息为空"
  789. br.Ret = 408
  790. return
  791. }
  792. var req cygx.ReportAddRep
  793. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  794. if err != nil {
  795. br.Msg = "参数解析异常!"
  796. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  797. return
  798. }
  799. if req.Title == "" {
  800. br.Msg = "标题不可为空"
  801. br.ErrMsg = "标题不可为空"
  802. return
  803. }
  804. if req.Abstract == "" {
  805. br.Msg = "摘要不可为空"
  806. br.ErrMsg = "摘要不可为空"
  807. return
  808. }
  809. var articleId int
  810. industrialManagementIds := req.IndustrialManagementIds
  811. industrialSubjectIds := req.IndustrialSubjectIds
  812. chartPermissionId := req.ChartPermissionId
  813. publishDate := req.PublishDate
  814. if industrialManagementIds == "" {
  815. br.Msg = "请选择产业"
  816. return
  817. }
  818. if publishDate == "" {
  819. br.Msg = "请选择发布时间"
  820. return
  821. }
  822. industryIds := make([]int, 0)
  823. industrialManagementIdList := strings.Split(industrialManagementIds, ",")
  824. for _, v := range industrialManagementIdList {
  825. i, err := strconv.Atoi(v)
  826. if err != nil {
  827. br.Msg = "参数解析异常!"
  828. br.ErrMsg = "产业ID不规范,Err:" + err.Error() + industrialManagementIds
  829. return
  830. }
  831. industryIds = append(industryIds, i)
  832. }
  833. if industrialSubjectIds != "" {
  834. industrialSubjectIdList := strings.Split(industrialSubjectIds, ",")
  835. for _, v := range industrialSubjectIdList {
  836. _, err := strconv.Atoi(v)
  837. if err != nil {
  838. br.Msg = "参数解析异常!"
  839. br.ErrMsg = "标的ID不规范,Err:" + err.Error() + industrialSubjectIds
  840. return
  841. }
  842. }
  843. }
  844. var pars []interface{}
  845. var condition string
  846. condition += ` AND chart_permission_id = ? AND sub_category_name = '专项调研' `
  847. pars = append(pars, chartPermissionId)
  848. charInfo, err := cygx.GetReportMappingDetail(condition, pars)
  849. if err != nil {
  850. br.Msg = "请选择所属行业"
  851. br.ErrMsg = "获取所属行业信息失败,Err:" + err.Error()
  852. return
  853. }
  854. var articleIdNew int
  855. if articleId == 0 {
  856. maxArticleIdArticleInfo, errMax := cygx.GetMaxArticleIdInfo()
  857. if errMax != nil {
  858. br.Msg = "发布失败"
  859. br.ErrMsg = "发布失败,Err:" + errMax.Error()
  860. return
  861. }
  862. if maxArticleIdArticleInfo.ArticleId < utils.SummaryArticleId {
  863. articleIdNew = utils.SummaryArticleId
  864. } else {
  865. articleIdNew = maxArticleIdArticleInfo.ArticleId + 1
  866. }
  867. }
  868. expertNumStr, expertContentStr, interviewDateStr, fileLink := cygx.BodyAnalysis(req.Body)
  869. item := new(cygx.CygxArticle)
  870. item.AdminId = AdminUser.AdminId
  871. item.AdminName = AdminUser.AdminName
  872. item.Title = req.Title
  873. item.Body = cygxService.GetRichtext(req.Body)
  874. item.BodyText, _ = cygx.GetReportContentTextSub(item.Body)
  875. item.Abstract = req.Abstract
  876. item.CategoryName = charInfo.MatchTypeName
  877. item.SubCategoryName = charInfo.SubCategoryName
  878. item.ArticleId = articleId
  879. item.CreateDate = time.Now()
  880. item.LastUpdatedTime = time.Now()
  881. item.IsReport = 1
  882. item.IsSummary = 1
  883. item.Source = 1
  884. item.IsClass = 1
  885. item.IsReport = 1
  886. item.ReportType = 2
  887. item.ArticleIdMd5 = utils.MD5(strconv.Itoa(articleIdNew))
  888. item.UpdateFrequency = "unknow"
  889. item.SellerAndMobile = req.SellerAndMobile
  890. item.ExpertBackground = expertContentStr
  891. item.ExpertNumber = expertNumStr
  892. item.InterviewDate = interviewDateStr
  893. item.FileLink = fileLink
  894. item.CategoryId = charInfo.CategoryId
  895. item.CategoryIdTwo = charInfo.CategoryId
  896. item.ChartPermissionIds = strconv.Itoa(chartPermissionId)
  897. item.PublishDate = utils.StrTimeToTime(publishDate + " 00:00:00") //时间字符串格式转时间格式
  898. //处理作者内容的格式信息
  899. if req.DoType == 1 {
  900. item.PublishStatus = 1
  901. }
  902. itemDepartment := new(cygx.CygxArticleDepartment)
  903. if req.ArticleId == 0 {
  904. item.ArticleId = articleIdNew
  905. //需求修改纪要的新增与修改与报告一致
  906. _, err := cygx.AddAReportrticle(item, 0, "", "", itemDepartment, industrialManagementIds, industrialSubjectIds)
  907. if err != nil {
  908. br.Msg = "发布失败"
  909. br.ErrMsg = "发布失败,Err:" + err.Error()
  910. return
  911. }
  912. } else {
  913. articleInfo, err := cygx.GetArticleIdInfoByArticleId(req.ArticleId)
  914. if err != nil {
  915. br.Msg = "文章不存在"
  916. return
  917. }
  918. if item.PublishStatus == 0 {
  919. item.PublishStatus = articleInfo.PublishStatus
  920. }
  921. item.ArticleId = req.ArticleId
  922. err = cygx.EditReportrticle(item, 0, "", "", articleInfo.PublishStatus, itemDepartment, industrialManagementIds, industrialSubjectIds)
  923. if err != nil {
  924. br.Msg = "发布失败"
  925. br.ErrMsg = "发布失败,Err:" + err.Error()
  926. return
  927. }
  928. }
  929. //if req.DoType == 1 {
  930. // go cygxService.DoArticleOnenIdWxTemplateMsg(articleId, 1)
  931. //}
  932. //{|1|}表示报告类型,{|2|}表示纪要类型
  933. //cygx.UpdateSubjecIds(subjectIds+"—"+strconv.Itoa(industrialDetail.IndustrialManagementId)+"{|2|}", industrialDetail.IndustrialManagementId, articleId)
  934. if item.PublishStatus == 1 {
  935. services.EsAddOrEditData(item)
  936. //go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
  937. go cygxService.UpdateArticleResourceData(item.ArticleId) //写入首页最新 cygx_resource_data 表
  938. }
  939. // 查研观向7.4-更新产业布局时间
  940. if len(industryIds) > 0 {
  941. go cygxService.UpdateIndustryLayoutTime(industryIds, false)
  942. }
  943. if len(industryIds) > 0 && req.DoType == 1 {
  944. //查研观向8.2.1专项调研报告模板消息推送
  945. cygxService.SendWxMsgWithCygxActivitySpecialArticle(item.ArticleId)
  946. }
  947. go cygxService.AddCygxReportMappingCategoryGroupByArticleId(item.ArticleId) // 手动修改报告归类
  948. br.Ret = 200
  949. br.Success = true
  950. br.Msg = "操作成功"
  951. br.IsAddLog = true
  952. }
  953. // @Title 报告详情
  954. // @Description 获取报告详情接口
  955. // @Param ReportId query int true "报告ID"
  956. // @Success Ret=200 {object} cygx.CygxArticleReport
  957. // @router /reportArticle/detail [get]
  958. func (this *ReportArticleController) Detail() {
  959. br := new(models.BaseResponse).Init()
  960. defer func() {
  961. this.Data["json"] = br
  962. this.ServeJSON()
  963. }()
  964. AdminUser := this.SysUser
  965. if AdminUser == nil {
  966. br.Msg = "请登录"
  967. br.ErrMsg = "请登录,用户信息为空"
  968. br.Ret = 408
  969. return
  970. }
  971. //reportId, _ := this.GetInt("ReportId")
  972. //if reportId < 1 {
  973. // br.Msg = "请输入报告ID"
  974. // return
  975. //}
  976. //articleInfo, err := cygx.GetArticleIdInfoByreportIdEdit(reportId)
  977. //if err != nil {
  978. // br.Msg = "报告不存在"
  979. // br.ErrMsg = "报告ID错误,Err:" + err.Error()
  980. // return
  981. //}
  982. articleId, _ := this.GetInt("ArticleId")
  983. if articleId < 1 {
  984. br.Msg = "请输入文章ID"
  985. return
  986. }
  987. articleInfo, err := cygx.GetArticleIdInfoByreportIdEdit(articleId)
  988. if err != nil {
  989. br.Msg = "文章内容不存在"
  990. br.ErrMsg = "纪要ID错误,Err:" + err.Error()
  991. return
  992. }
  993. industrialList, err := cygx.GetIndustrialArticleGroupManagementList(articleInfo.ArticleId)
  994. if err != nil && err.Error() != utils.ErrNoRow() {
  995. br.Msg = "获取信息失败"
  996. br.ErrMsg = "获取活动关联的产业列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(articleInfo.ArticleId)
  997. return
  998. }
  999. subjectList, err := cygx.GetSubjectArticleGroupManagementList(articleInfo.ArticleId)
  1000. if err != nil && err.Error() != utils.ErrNoRow() {
  1001. br.Msg = "获取信息失败"
  1002. br.ErrMsg = "获取活动关联的标的列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(articleInfo.ArticleId)
  1003. return
  1004. }
  1005. articleInfo.PublishDate = cygxService.ArticlePublishDate(articleInfo.PublishDate)
  1006. articleInfo.ListIndustrial = industrialList
  1007. articleInfo.ListSubject = subjectList
  1008. if articleInfo.ChartPermissionIds != "" {
  1009. chartPermissionIdArr := strings.Split(articleInfo.ChartPermissionIds, ",")
  1010. if len(chartPermissionIdArr) > 0 {
  1011. articleInfo.ChartPermissionId, _ = strconv.Atoi(chartPermissionIdArr[0])
  1012. }
  1013. }
  1014. if articleId < utils.SummaryArticleId {
  1015. articleInfo.Abstract, _ = cygx.GetReportContentTextSub(articleInfo.Abstract)
  1016. articleInfo.Body = html.UnescapeString(articleInfo.Body)
  1017. }
  1018. br.Ret = 200
  1019. br.Success = true
  1020. br.Msg = "获取成功"
  1021. br.Data = articleInfo
  1022. }
  1023. // @Title 获取作者列表
  1024. // @Description 获取作者列表接口
  1025. // @Param KeyWord query string true "搜索关键词"
  1026. // @Success Ret=200 {object} cygx.CygxArticleDepartmentList
  1027. // @router /reportArticle/departmentList [get]
  1028. func (this *ReportArticleController) DepartmentList() {
  1029. br := new(models.BaseResponse).Init()
  1030. defer func() {
  1031. this.Data["json"] = br
  1032. this.ServeJSON()
  1033. }()
  1034. sysUser := this.SysUser
  1035. if sysUser == nil {
  1036. br.Msg = "请登录"
  1037. br.ErrMsg = "请登录,SysUser Is Empty"
  1038. br.Ret = 408
  1039. return
  1040. }
  1041. var condition string
  1042. keyWord := this.GetString("KeyWord")
  1043. if keyWord != "" {
  1044. condition = `WHERE nick_name LIKE'%` + keyWord + `%' ORDER BY create_time DESC `
  1045. } else {
  1046. condition += ` ORDER BY create_time DESC`
  1047. }
  1048. list, err := cygx.GetCygxArticleDepartmentList(condition)
  1049. if err != nil {
  1050. br.Msg = "获取失败"
  1051. br.ErrMsg = "获取失败,Err:" + err.Error()
  1052. return
  1053. }
  1054. resp := new(cygx.CygxArticleDepartmentList)
  1055. resp.List = list
  1056. br.Ret = 200
  1057. br.Success = true
  1058. br.Msg = "获取成功"
  1059. br.Data = resp
  1060. }
  1061. // @Title 下载客户阅读记录
  1062. // @Description 下载客户阅读记录接口
  1063. // @Param CompanyId query int true "公司ID"
  1064. // @Success Ret=200
  1065. // @router /reportArticle/companyHistory [get]
  1066. func (this *IndustrialSubjectController) CompanyHistory() {
  1067. br := new(models.BaseResponse).Init()
  1068. defer func() {
  1069. this.Data["json"] = br
  1070. this.ServeJSON()
  1071. }()
  1072. sysUser := this.SysUser
  1073. if sysUser == nil {
  1074. br.Msg = "请登录"
  1075. br.ErrMsg = "请登录,SysUser Is Empty"
  1076. return
  1077. }
  1078. companyId, _ := this.GetInt("CompanyId")
  1079. if companyId < 1 {
  1080. br.Msg = "请输入公司ID"
  1081. return
  1082. }
  1083. //超级管理员和权益管理员、权益研究员可以下载所有客户,销售组长能下载本组客户,销售只能下载本人名下客户
  1084. var isCanDownload bool
  1085. adminInfo, err := system.GetSysUserById(sysUser.AdminId)
  1086. if err != nil {
  1087. br.Msg = "获取失败"
  1088. br.ErrMsg = "获取失败,Err:" + err.Error()
  1089. return
  1090. }
  1091. if adminInfo.Role == "admin" || strings.Index(adminInfo.RoleTypeCode, "rai") > -1 {
  1092. isCanDownload = true
  1093. }
  1094. if !isCanDownload {
  1095. br.Msg = "暂无下载权限"
  1096. return
  1097. }
  1098. //获取企业客户信息
  1099. companyInfo, err := company.GetCompanyById(companyId)
  1100. if err != nil {
  1101. br.Msg = "获取失败"
  1102. br.ErrMsg = "获取企业客户信息失败,Err:" + err.Error()
  1103. return
  1104. }
  1105. mapChartPermissionName := make(map[int]string)
  1106. listMap, err := cygx.GetPermissionMappingCategoryAll()
  1107. if err != nil {
  1108. br.Msg = "获取失败"
  1109. br.ErrMsg = "获取失败,Err:" + err.Error()
  1110. return
  1111. }
  1112. for _, v := range listMap {
  1113. mapChartPermissionName[v.CategoryId] = v.ChartPermissionName
  1114. }
  1115. mobiles, err := models.GetCompanyUserMobilesByCompanyId(companyId)
  1116. if err != nil && err.Error() != utils.ErrNoRow() {
  1117. br.Msg = "获取信息失败"
  1118. br.ErrMsg = "获取客户手机号信息失败,Err:" + err.Error()
  1119. return
  1120. }
  1121. if mobiles != "" {
  1122. mobiles = strings.Replace(mobiles, ",", "','", -1)
  1123. mobiles = "'" + mobiles + "'"
  1124. } else {
  1125. mobiles = "'1'"
  1126. }
  1127. emails, err := models.GetCompanyUserEmailsByCompanyId(companyId)
  1128. if err != nil && err.Error() != utils.ErrNoRow() {
  1129. br.Msg = "获取信息失败"
  1130. br.ErrMsg = "获取客户邮箱信息失败,Err:" + err.Error()
  1131. return
  1132. }
  1133. if emails != "" {
  1134. emails = strings.Replace(emails, ",", "','", -1)
  1135. emails = "'" + emails + "'"
  1136. } else {
  1137. emails = "'1'"
  1138. }
  1139. list, err := cygx.GetCompanyHistoryRecordNewPv(mobiles, emails)
  1140. if err != nil {
  1141. br.Msg = "获取失败"
  1142. br.ErrMsg = "获取失败,Err:" + err.Error()
  1143. return
  1144. }
  1145. for k, v := range list {
  1146. list[k].PermissionName = mapChartPermissionName[v.CategoryId]
  1147. }
  1148. //创建excel
  1149. dir, err := os.Executable()
  1150. exPath := filepath.Dir(dir)
  1151. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1152. xlsxFile := xlsx.NewFile()
  1153. if err != nil {
  1154. br.Msg = "生成文件失败"
  1155. br.ErrMsg = "生成文件失败"
  1156. return
  1157. }
  1158. style := xlsx.NewStyle()
  1159. alignment := xlsx.Alignment{
  1160. Horizontal: "center",
  1161. Vertical: "center",
  1162. WrapText: true,
  1163. }
  1164. style.Alignment = alignment
  1165. style.ApplyAlignment = true
  1166. sheet, err := xlsxFile.AddSheet("客户阅读记录")
  1167. if err != nil {
  1168. br.Msg = "新增Sheet失败"
  1169. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1170. return
  1171. }
  1172. //标头
  1173. rowTitle := sheet.AddRow()
  1174. cellA := rowTitle.AddCell()
  1175. cellA.Value = "姓名"
  1176. cellB := rowTitle.AddCell()
  1177. cellB.Value = "手机号/邮箱"
  1178. cellC := rowTitle.AddCell()
  1179. cellC.Value = "报告标题"
  1180. cellD := rowTitle.AddCell()
  1181. cellD.Value = "所属行业"
  1182. cellE := rowTitle.AddCell()
  1183. cellE.Value = "所属产业"
  1184. cellF := rowTitle.AddCell()
  1185. cellF.Value = "关联标的"
  1186. cellG := rowTitle.AddCell()
  1187. cellG.Value = "发布时间"
  1188. cellH := rowTitle.AddCell()
  1189. cellH.Value = "阅读时间"
  1190. cellI := rowTitle.AddCell()
  1191. cellI.Value = "阅读时长"
  1192. for _, item := range list {
  1193. row := sheet.AddRow()
  1194. cellA := row.AddCell()
  1195. cellA.Value = item.RealName
  1196. cellB := row.AddCell()
  1197. cellB.Value = item.Mobile
  1198. if item.Mobile == "" {
  1199. cellB.Value = item.Email
  1200. }
  1201. cellC := row.AddCell()
  1202. cellC.Value = item.Title
  1203. cellD := row.AddCell()
  1204. if item.CategoryId == 0 {
  1205. cellD.Value = "研选"
  1206. } else {
  1207. cellD.Value = item.PermissionName
  1208. }
  1209. cellE := row.AddCell()
  1210. cellE.Value = item.IndustryName
  1211. cellF := row.AddCell()
  1212. cellF.Value = item.SubjectNameStr
  1213. cellG := row.AddCell()
  1214. cellG.Value = item.PublishDate
  1215. cellH := row.AddCell()
  1216. cellH.Value = item.CreateTime
  1217. cellI := row.AddCell()
  1218. cellI.Value = item.StopTime
  1219. }
  1220. err = xlsxFile.Save(downLoadnFilePath)
  1221. if err != nil {
  1222. br.Msg = "保存文件失败"
  1223. br.ErrMsg = "保存文件失败"
  1224. return
  1225. }
  1226. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1227. downloadFileName := companyInfo.CompanyName + "阅读记录" + randStr + ".xlsx"
  1228. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1229. defer func() {
  1230. os.Remove(downLoadnFilePath)
  1231. }()
  1232. br.Ret = 200
  1233. br.Success = true
  1234. br.Msg = "导出成功"
  1235. }
  1236. // @Title 客户其他行为数据
  1237. // @Description 下载客户其他行为数据接口
  1238. // @Param CompanyId query int true "公司ID"
  1239. // @Success Ret=200
  1240. // @router /reportArticle/companyOtherHistory [get]
  1241. func (this *IndustrialSubjectController) CompanyOtherHistory() {
  1242. br := new(models.BaseResponse).Init()
  1243. defer func() {
  1244. this.Data["json"] = br
  1245. this.ServeJSON()
  1246. }()
  1247. sysUser := this.SysUser
  1248. if sysUser == nil {
  1249. br.Msg = "请登录"
  1250. br.ErrMsg = "请登录,SysUser Is Empty"
  1251. return
  1252. }
  1253. companyId, _ := this.GetInt("CompanyId")
  1254. if companyId <= 0 {
  1255. br.Msg = "请选择客户"
  1256. br.ErrMsg = "客户参数错误"
  1257. return
  1258. }
  1259. //获取企业客户信息
  1260. companyInfo, err := company.GetCompanyById(companyId)
  1261. if err != nil {
  1262. br.Msg = "获取失败"
  1263. br.ErrMsg = "获取企业客户信息失败,Err:" + err.Error()
  1264. return
  1265. }
  1266. var condition string
  1267. var pars []interface{}
  1268. //非管理员,那么只能看到该产品下的联系人
  1269. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
  1270. productId := services.GetProductId(sysUser.RoleTypeCode)
  1271. condition += ` AND b.product_id = ? `
  1272. pars = append(pars, productId)
  1273. //流失客户(除非是超级管理员或者是部门管理员,要不然不允许看对应的联系人)
  1274. var companyProduct *company.CompanyProduct
  1275. if productId == 2 && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN {
  1276. // 当前是权益权限,且非 权益管理员
  1277. tmpCompanyProduct, _ := company.GetCompanyProductByCompanyIdAndProductId(companyId, 2)
  1278. companyProduct = tmpCompanyProduct
  1279. if companyProduct != nil && companyProduct.Status == utils.COMPANY_STATUS_LOSE {
  1280. condition += ` AND seller_id=? `
  1281. pars = append(pars, sysUser.AdminId)
  1282. }
  1283. }
  1284. }
  1285. list, err := company.GetCompanyUserListV2(condition, pars, companyId, 0, 1000)
  1286. if err != nil {
  1287. br.Msg = "获取失败"
  1288. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1289. return
  1290. }
  1291. var userIdstr string
  1292. for _, v := range list {
  1293. userIdstr += strconv.Itoa(int(v.UserId)) + ","
  1294. }
  1295. userIdstr = strings.TrimRight(userIdstr, ",")
  1296. resp := new(cygx.CompanyOtherHistoryListResp)
  1297. condition = ` AND user_id IN (` + userIdstr + `)`
  1298. listArticle, err := cygx.GetArticleCollectList(condition)
  1299. if err != nil {
  1300. br.Msg = "获取失败"
  1301. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1302. return
  1303. }
  1304. listIndustry, err := cygx.GetCygxIndustryList(companyId)
  1305. if err != nil {
  1306. br.Msg = "获取失败"
  1307. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1308. return
  1309. }
  1310. listDepartment, err := cygx.GetArticleDepartmentList(companyId)
  1311. if err != nil {
  1312. br.Msg = "获取失败"
  1313. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1314. return
  1315. }
  1316. //listkeyWord, err := cygx.GetCygxUserSearchKeyWordList(userIdstr)
  1317. //if err != nil {
  1318. // br.Msg = "获取失败"
  1319. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1320. // return
  1321. //}
  1322. //listkeyWord, err := cygx.GetCygxUserSearchKeyWordList(userIdstr)
  1323. //if err != nil {
  1324. // br.Msg = "获取失败"
  1325. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1326. // return
  1327. //}
  1328. for _, v := range list {
  1329. userItem := new(cygx.CompanyOtherHistoryList)
  1330. var artItems []*cygx.CygxArticleCollect
  1331. var industryItems []*cygx.CygxArticleIndustry
  1332. var departmentItems []*cygx.ArticleDepartment
  1333. //var keyWordItems []*cygx.KeyWord
  1334. for _, vArt := range listArticle {
  1335. if vArt.UserId == int(v.UserId) {
  1336. artItems = append(artItems, vArt)
  1337. }
  1338. }
  1339. for _, vIn := range listIndustry {
  1340. if vIn.UserId == int(v.UserId) {
  1341. industryItems = append(industryItems, vIn)
  1342. }
  1343. }
  1344. for _, vDe := range listDepartment {
  1345. if vDe.UserId == int(v.UserId) {
  1346. departmentItems = append(departmentItems, vDe)
  1347. }
  1348. }
  1349. //for _, vKw := range listkeyWord {
  1350. // if vKw.UserId == int(v.UserId) {
  1351. // keyWordItems = append(keyWordItems, vKw)
  1352. // }
  1353. //}
  1354. if len(artItems) > 0 || len(industryItems) > 0 || len(departmentItems) > 0 {
  1355. userItem.RealName = v.RealName
  1356. userItem.Email = v.Email
  1357. userItem.Mobile = v.Mobile
  1358. userItem.ListArticle = artItems
  1359. userItem.ListIndustrial = industryItems
  1360. userItem.ListDepartment = departmentItems
  1361. //userItem.ListKeyWord = keyWordItems
  1362. resp.List = append(resp.List, userItem)
  1363. }
  1364. }
  1365. //创建excel
  1366. dir, err := os.Executable()
  1367. exPath := filepath.Dir(dir)
  1368. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1369. xlsxFile := xlsx.NewFile()
  1370. if err != nil {
  1371. br.Msg = "生成文件失败"
  1372. br.ErrMsg = "生成文件失败"
  1373. return
  1374. }
  1375. style := xlsx.NewStyle()
  1376. alignment := xlsx.Alignment{
  1377. Horizontal: "center",
  1378. Vertical: "center",
  1379. WrapText: true,
  1380. }
  1381. style.Alignment = alignment
  1382. style.ApplyAlignment = true
  1383. sheet, err := xlsxFile.AddSheet("客户其他行为数据(收藏,关注)")
  1384. if err != nil {
  1385. br.Msg = "新增Sheet失败"
  1386. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1387. return
  1388. }
  1389. //标题样式
  1390. titleStyle := xlsx.NewStyle()
  1391. titleFont := xlsx.NewFont(16, "宋体")
  1392. titleFont.Bold = true
  1393. titleStyle.Font = *titleFont
  1394. titleStyle.Alignment = alignment
  1395. sheet.SetColWidth(0, 0, 20)
  1396. sheet.SetColWidth(1, 1, 20)
  1397. sheet.SetColWidth(2, 2, 20)
  1398. sheet.SetColWidth(3, 3, 20)
  1399. sheet.SetColWidth(4, 4, 20)
  1400. titleSonStyle := xlsx.NewStyle()
  1401. titleSonFont := xlsx.NewFont(16, "宋体")
  1402. titleSonFont.Bold = true
  1403. titleSonStyle.Font = *titleSonFont
  1404. for _, item := range resp.List {
  1405. rowTitle := sheet.AddRow()
  1406. //标题列
  1407. titleCell := rowTitle.AddCell()
  1408. titleCell.HMerge = 6 //向右合并列数,不包括自身列
  1409. titleCell.SetValue("客户姓名:" + item.RealName + " 手机号/邮箱:" + item.Mobile)
  1410. titleCell.SetStyle(titleStyle)
  1411. //文章
  1412. if len(item.ListArticle) > 0 {
  1413. rowArticle := sheet.AddRow()
  1414. cellA := rowArticle.AddCell()
  1415. cellA.Value = "收藏报告"
  1416. cellB := rowArticle.AddCell()
  1417. cellB.Value = "收藏时间"
  1418. cellC := rowArticle.AddCell()
  1419. cellC.Value = "发布时间"
  1420. cellD := rowArticle.AddCell()
  1421. cellD.Value = "报告类型"
  1422. cellE := rowArticle.AddCell()
  1423. cellE.Value = "所属产业"
  1424. cellF := rowArticle.AddCell()
  1425. cellF.Value = "关联标的"
  1426. cellA.SetStyle(titleSonStyle)
  1427. cellB.SetStyle(titleSonStyle)
  1428. cellC.SetStyle(titleSonStyle)
  1429. cellD.SetStyle(titleSonStyle)
  1430. cellE.SetStyle(titleSonStyle)
  1431. cellF.SetStyle(titleSonStyle)
  1432. for _, vArt := range item.ListArticle {
  1433. rowArticleVal := sheet.AddRow()
  1434. cellA := rowArticleVal.AddCell()
  1435. cellA.Value = vArt.Title
  1436. cellB := rowArticleVal.AddCell()
  1437. cellB.Value = vArt.CreateTime
  1438. cellC := rowArticleVal.AddCell()
  1439. cellC.Value = vArt.PublishDate
  1440. cellD := rowArticleVal.AddCell()
  1441. cellD.Value = vArt.MatchTypeName
  1442. cellE := rowArticleVal.AddCell()
  1443. cellE.Value = vArt.IndustryName
  1444. cellF := rowArticleVal.AddCell()
  1445. cellF.Value = vArt.SubjectName
  1446. }
  1447. }
  1448. //产业
  1449. if len(item.ListIndustrial) > 0 {
  1450. rowIndustrial := sheet.AddRow()
  1451. cellA := rowIndustrial.AddCell()
  1452. cellA.Value = "关注产业"
  1453. cellB := rowIndustrial.AddCell()
  1454. cellB.Value = "关注时间"
  1455. cellA.SetStyle(titleSonStyle)
  1456. cellB.SetStyle(titleSonStyle)
  1457. for _, vArt := range item.ListIndustrial {
  1458. rowIndustrialVal := sheet.AddRow()
  1459. cellA := rowIndustrialVal.AddCell()
  1460. cellA.Value = vArt.IndustryName
  1461. cellB := rowIndustrialVal.AddCell()
  1462. cellB.Value = vArt.CreateTime
  1463. }
  1464. }
  1465. //作者
  1466. if len(item.ListDepartment) > 0 {
  1467. rowDepartment := sheet.AddRow()
  1468. cellA := rowDepartment.AddCell()
  1469. cellA.Value = "关注作者"
  1470. cellB := rowDepartment.AddCell()
  1471. cellB.Value = "关注时间"
  1472. cellC := rowDepartment.AddCell()
  1473. cellC.Value = "作者相关产业"
  1474. cellA.SetStyle(titleSonStyle)
  1475. cellB.SetStyle(titleSonStyle)
  1476. cellC.SetStyle(titleSonStyle)
  1477. for _, vArt := range item.ListDepartment {
  1478. rowDepartmentVal := sheet.AddRow()
  1479. cellA := rowDepartmentVal.AddCell()
  1480. cellA.Value = vArt.NickName
  1481. cellB := rowDepartmentVal.AddCell()
  1482. cellB.Value = vArt.CreateTime
  1483. cellC := rowDepartmentVal.AddCell()
  1484. cellC.Value = vArt.IndustryName
  1485. }
  1486. }
  1487. }
  1488. err = xlsxFile.Save(downLoadnFilePath)
  1489. if err != nil {
  1490. br.Msg = "保存文件失败"
  1491. br.ErrMsg = "保存文件失败"
  1492. return
  1493. }
  1494. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1495. downloadFileName := companyInfo.CompanyName + "其他行为数据(收藏,关注)" + randStr + ".xlsx"
  1496. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1497. defer func() {
  1498. os.Remove(downLoadnFilePath)
  1499. }()
  1500. br.Ret = 200
  1501. br.Data = resp
  1502. br.Success = true
  1503. br.Msg = "导出成功"
  1504. }
  1505. // @Title 客户阅读量月度统计
  1506. // @Description 客户阅读量月度统计
  1507. // @Param CompanyId query int true "公司ID"
  1508. // @Success Ret=200
  1509. // @router /reportArticle/companyCount [get]
  1510. func (this *IndustrialSubjectController) CompanyCount() {
  1511. br := new(models.BaseResponse).Init()
  1512. defer func() {
  1513. this.Data["json"] = br
  1514. this.ServeJSON()
  1515. }()
  1516. sysUser := this.SysUser
  1517. if sysUser == nil {
  1518. br.Msg = "请登录"
  1519. br.ErrMsg = "请登录,SysUser Is Empty"
  1520. return
  1521. }
  1522. companyId, _ := this.GetInt("CompanyId")
  1523. if companyId < 1 {
  1524. br.Msg = "请输入公司ID"
  1525. return
  1526. }
  1527. //超级管理员和权益管理员、权益研究员可以下载所有客户,销售组长能下载本组客户,销售只能下载本人名下客户
  1528. var isCanDownload bool
  1529. adminInfo, err := system.GetSysUserById(sysUser.AdminId)
  1530. if err != nil {
  1531. br.Msg = "获取失败"
  1532. br.ErrMsg = "获取失败,Err:" + err.Error()
  1533. return
  1534. }
  1535. if adminInfo.Role == "admin" || strings.Index(adminInfo.RoleTypeCode, "rai") > -1 {
  1536. isCanDownload = true
  1537. }
  1538. if !isCanDownload {
  1539. br.Msg = "暂无下载权限"
  1540. return
  1541. }
  1542. //获取企业客户信息
  1543. companyInfo, err := company.GetCompanyById(companyId)
  1544. if err != nil {
  1545. br.Msg = "获取失败"
  1546. br.ErrMsg = "获取企业客户信息失败,Err:" + err.Error()
  1547. return
  1548. }
  1549. mobiles, err := models.GetCompanyUserMobilesByCompanyId(companyId)
  1550. if err != nil && err.Error() != utils.ErrNoRow() {
  1551. br.Msg = "获取信息失败"
  1552. br.ErrMsg = "获取客户手机号信息失败,Err:" + err.Error()
  1553. return
  1554. }
  1555. if mobiles != "" {
  1556. mobiles = strings.Replace(mobiles, ",", "','", -1)
  1557. mobiles = "'" + mobiles + "'"
  1558. } else {
  1559. mobiles = "'1'"
  1560. }
  1561. emails, err := models.GetCompanyUserEmailsByCompanyId(companyId)
  1562. if err != nil && err.Error() != utils.ErrNoRow() {
  1563. br.Msg = "获取信息失败"
  1564. br.ErrMsg = "获取客户邮箱信息失败,Err:" + err.Error()
  1565. return
  1566. }
  1567. if emails != "" {
  1568. emails = strings.Replace(emails, ",", "','", -1)
  1569. emails = "'" + emails + "'"
  1570. } else {
  1571. emails = "'1'"
  1572. }
  1573. listDate, err := cygx.GetCompanyHistoryRecordPvGroupDate(mobiles, emails)
  1574. if err != nil {
  1575. br.Msg = "获取失败"
  1576. br.ErrMsg = "获取失败,Err:" + err.Error()
  1577. return
  1578. }
  1579. dateMap := make(map[string]int)
  1580. permissionNameMap := make(map[string]int)
  1581. list, err := cygx.GetCompanyHistoryRecordPv(mobiles, emails)
  1582. if err != nil {
  1583. br.Msg = "获取失败"
  1584. br.ErrMsg = "获取失败,Err:" + err.Error()
  1585. return
  1586. }
  1587. for _, v := range list {
  1588. if dateMap[v.CreateTime] == 0 {
  1589. dateMap[v.CreateTime] = 1
  1590. } else {
  1591. dateMap[v.CreateTime] += 1
  1592. }
  1593. if v.CategoryId == 0 {
  1594. v.PermissionName = "研选"
  1595. }
  1596. if permissionNameMap[v.CreateTime+v.PermissionName] == 0 {
  1597. permissionNameMap[v.CreateTime+v.PermissionName] = 1
  1598. } else {
  1599. permissionNameMap[v.CreateTime+v.PermissionName] += 1
  1600. }
  1601. }
  1602. //创建excel
  1603. dir, err := os.Executable()
  1604. exPath := filepath.Dir(dir)
  1605. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1606. xlsxFile := xlsx.NewFile()
  1607. if err != nil {
  1608. br.Msg = "生成文件失败"
  1609. br.ErrMsg = "生成文件失败"
  1610. return
  1611. }
  1612. style := xlsx.NewStyle()
  1613. alignment := xlsx.Alignment{
  1614. Horizontal: "center",
  1615. Vertical: "center",
  1616. WrapText: true,
  1617. }
  1618. style.Alignment = alignment
  1619. style.ApplyAlignment = true
  1620. sheet, err := xlsxFile.AddSheet("客户阅读量月度统计")
  1621. if err != nil {
  1622. br.Msg = "新增Sheet失败"
  1623. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1624. return
  1625. }
  1626. //标头
  1627. rowTitle := sheet.AddRow()
  1628. cellA := rowTitle.AddCell()
  1629. cellA.Value = "月份"
  1630. cellB := rowTitle.AddCell()
  1631. cellB.Value = "总阅读数"
  1632. cellC := rowTitle.AddCell()
  1633. cellC.Value = "医药"
  1634. cellD := rowTitle.AddCell()
  1635. cellD.Value = "消费"
  1636. cellE := rowTitle.AddCell()
  1637. cellE.Value = "科技"
  1638. cellF := rowTitle.AddCell()
  1639. cellF.Value = "智造"
  1640. cellG := rowTitle.AddCell()
  1641. cellG.Value = "策略"
  1642. cellH := rowTitle.AddCell()
  1643. cellH.Value = "研选"
  1644. for _, item := range listDate {
  1645. row := sheet.AddRow()
  1646. cellA := row.AddCell()
  1647. cellA.Value = item.CreateTimes
  1648. cellB := row.AddCell()
  1649. cellB.Value = strconv.Itoa(dateMap[item.CreateTimes])
  1650. cellC := row.AddCell()
  1651. cellC.Value = strconv.Itoa(permissionNameMap[item.CreateTimes+"医药"])
  1652. cellD := row.AddCell()
  1653. cellD.Value = strconv.Itoa(permissionNameMap[item.CreateTimes+"消费"])
  1654. cellE := row.AddCell()
  1655. cellE.Value = strconv.Itoa(permissionNameMap[item.CreateTimes+"科技"])
  1656. cellF := row.AddCell()
  1657. cellF.Value = strconv.Itoa(permissionNameMap[item.CreateTimes+"智造"])
  1658. cellG := row.AddCell()
  1659. cellG.Value = strconv.Itoa(permissionNameMap[item.CreateTimes+"策略"])
  1660. cellH := row.AddCell()
  1661. cellH.Value = strconv.Itoa(permissionNameMap[item.CreateTimes+"研选"])
  1662. }
  1663. err = xlsxFile.Save(downLoadnFilePath)
  1664. if err != nil {
  1665. br.Msg = "保存文件失败"
  1666. br.ErrMsg = "保存文件失败"
  1667. return
  1668. }
  1669. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1670. downloadFileName := companyInfo.CompanyName + "客户阅读量月度统计" + randStr + ".xlsx"
  1671. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1672. defer func() {
  1673. os.Remove(downLoadnFilePath)
  1674. }()
  1675. br.Ret = 200
  1676. br.Success = true
  1677. br.Msg = "导出成功"
  1678. }
  1679. // @Title 客户导出文件种类
  1680. // @Description 客户导出文件种类接口
  1681. // @Success Ret=200 {object} cygx.NameAndUrlList
  1682. // @router /company/exportList [get]
  1683. func (this *ReportArticleController) ExportList() {
  1684. br := new(models.BaseResponse).Init()
  1685. defer func() {
  1686. this.Data["json"] = br
  1687. this.ServeJSON()
  1688. }()
  1689. sysUser := this.SysUser
  1690. if sysUser == nil {
  1691. br.Msg = "请登录"
  1692. br.ErrMsg = "请登录,SysUser Is Empty"
  1693. br.Ret = 408
  1694. return
  1695. }
  1696. detail, err := cygx.GetCygxConfigDetailByCode("export_list")
  1697. if err != nil {
  1698. br.Msg = "获取失败"
  1699. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1700. return
  1701. }
  1702. resp := new(cygx.NameAndUrlList)
  1703. exportList := strings.Split(detail.ConfigValue, "{|}")
  1704. for _, v := range exportList {
  1705. item := new(cygx.NameAndUrl)
  1706. vslice := strings.Split(v, "_")
  1707. item.Name = vslice[0]
  1708. item.Url = vslice[len(vslice)-1]
  1709. resp.List = append(resp.List, item)
  1710. }
  1711. br.Ret = 200
  1712. br.Success = true
  1713. br.Msg = "获取成功"
  1714. br.Data = resp
  1715. }
  1716. // @Title 留言列表详情
  1717. // @Description 获取留言列表详情接口
  1718. // @Param ArticleId query int true "文章ID"
  1719. // @Success 200 {object} cygx.ArticleCommentListResp
  1720. // @router /reportArticle/commentList [get]
  1721. func (this *ReportArticleController) CommentList() {
  1722. br := new(models.BaseResponse).Init()
  1723. defer func() {
  1724. this.Data["json"] = br
  1725. this.ServeJSON()
  1726. }()
  1727. sysUser := this.SysUser
  1728. if sysUser == nil {
  1729. br.Msg = "请登录"
  1730. br.ErrMsg = "请登录,SysUser Is Empty"
  1731. return
  1732. }
  1733. articleId, _ := this.GetInt("ArticleId")
  1734. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  1735. if articleInfo == nil {
  1736. br.Msg = "操作失败"
  1737. br.ErrMsg = "报告ID错误"
  1738. return
  1739. }
  1740. list, err := cygx.GetArticleCommentList(articleInfo.ArticleId)
  1741. resp := new(cygx.ArticleCommentListResp)
  1742. if err != nil {
  1743. br.Msg = "获取留言失败"
  1744. br.ErrMsg = "获取留言失败,Err:" + err.Error()
  1745. return
  1746. }
  1747. resp.List = list
  1748. br.Ret = 200
  1749. br.Success = true
  1750. br.Msg = "获取成功"
  1751. br.Data = resp
  1752. }
  1753. // @Title 提问详情excel表格下载
  1754. // @Description 提问详情excel表格下载接口
  1755. // @Param SummaryManageId query int true "纪要ID"
  1756. // @Success 200 导出成功
  1757. // @router /reportArticle/commnetListExport [get]
  1758. func (this *ReportArticleController) CommentListExport() {
  1759. br := new(models.BaseResponse).Init()
  1760. defer func() {
  1761. this.Data["json"] = br
  1762. this.ServeJSON()
  1763. }()
  1764. sysUser := this.SysUser
  1765. if sysUser == nil {
  1766. br.Msg = "请登录"
  1767. br.ErrMsg = "请登录,SysUser Is Empty"
  1768. return
  1769. }
  1770. articleId, _ := this.GetInt("ArticleId")
  1771. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  1772. if articleInfo == nil {
  1773. br.Msg = "操作失败"
  1774. br.ErrMsg = "报告ID错误"
  1775. return
  1776. }
  1777. list, err := cygx.GetArticleCommentList(articleInfo.ArticleId)
  1778. if err != nil {
  1779. br.Msg = "获取失败"
  1780. br.ErrMsg = "获取失败,Err:" + err.Error()
  1781. return
  1782. }
  1783. //创建excel
  1784. dir, err := os.Executable()
  1785. exPath := filepath.Dir(dir)
  1786. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1787. xlsxFile := xlsx.NewFile()
  1788. if err != nil {
  1789. br.Msg = "生成文件失败"
  1790. br.ErrMsg = "生成文件失败"
  1791. return
  1792. }
  1793. style := xlsx.NewStyle()
  1794. alignment := xlsx.Alignment{
  1795. Horizontal: "center",
  1796. Vertical: "center",
  1797. WrapText: true,
  1798. }
  1799. style.Alignment = alignment
  1800. style.ApplyAlignment = true
  1801. sheet, err := xlsxFile.AddSheet("名单")
  1802. if err != nil {
  1803. br.Msg = "新增Sheet失败"
  1804. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1805. return
  1806. }
  1807. //标头
  1808. rowTitle := sheet.AddRow()
  1809. cellA := rowTitle.AddCell()
  1810. cellA.Value = "姓名"
  1811. cellB := rowTitle.AddCell()
  1812. cellB.Value = "公司名称"
  1813. cellC := rowTitle.AddCell()
  1814. cellC.Value = "留言"
  1815. cellD := rowTitle.AddCell()
  1816. cellD.Value = "提交时间"
  1817. for _, item := range list {
  1818. row := sheet.AddRow()
  1819. cellA := row.AddCell()
  1820. cellA.Value = item.RealName
  1821. cellB := row.AddCell()
  1822. cellB.Value = item.CompanyName
  1823. cellC := row.AddCell()
  1824. cellC.Value = item.Content
  1825. cellD := row.AddCell()
  1826. cellD.Value = item.CreateTime
  1827. }
  1828. err = xlsxFile.Save(downLoadnFilePath)
  1829. if err != nil {
  1830. br.Msg = "保存文件失败"
  1831. br.ErrMsg = "保存文件失败"
  1832. return
  1833. }
  1834. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1835. downloadFileName := "留言列表" + randStr + ".xlsx"
  1836. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1837. defer func() {
  1838. os.Remove(downLoadnFilePath)
  1839. }()
  1840. br.Success = true
  1841. br.Ret = 200
  1842. br.Msg = "导出成功"
  1843. }
  1844. // @Title 新建报告类型
  1845. // @Description 新建报告类型接口
  1846. // @Param request body cygx.CygxReportMappingCygxAdd true "type json string"
  1847. // @Success Ret=200 {object} cygx.CygxReportMappingCygx
  1848. // @router /reportMapping/add [post]
  1849. func (this *IndustrialSubjectController) ReportMappingAdd() {
  1850. br := new(models.BaseResponse).Init()
  1851. defer func() {
  1852. this.Data["json"] = br
  1853. this.ServeJSON()
  1854. }()
  1855. sysUser := this.SysUser
  1856. if sysUser == nil {
  1857. br.Msg = "请登录"
  1858. br.ErrMsg = "请登录,SysUser Is Empty"
  1859. br.Ret = 408
  1860. return
  1861. }
  1862. var req cygx.CygxReportMappingCygxAdd
  1863. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1864. if err != nil {
  1865. br.Msg = "参数解析异常!"
  1866. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1867. return
  1868. }
  1869. var condition string
  1870. var pars []interface{}
  1871. reportType := req.ReportType
  1872. chartPermissionId := req.ChartPermissionId
  1873. chartPermissionName := req.ChartPermissionName
  1874. matchTypeName := req.MatchTypeName
  1875. condition = ` AND match_type_name = ? AND chart_permission_id = ? `
  1876. pars = append(pars, matchTypeName, chartPermissionId)
  1877. total, err := cygx.GetCygxReportMappingCygxCount(condition, pars)
  1878. if err != nil {
  1879. br.Msg = "新建报告类型失败"
  1880. br.ErrMsg = "新建报告类型失败,Err:" + err.Error()
  1881. return
  1882. }
  1883. if total > 0 {
  1884. br.Msg = "名称已存在"
  1885. br.ErrMsg = "名称已存在,Err:" + matchTypeName
  1886. return
  1887. }
  1888. maxDeatil, err := cygx.GetCygxReportMappingCelueMaxDetail()
  1889. if err != nil {
  1890. br.Msg = "新建报告类型失败"
  1891. br.ErrMsg = "GetCygxReportMappingCelueMaxDetail,Err:" + err.Error()
  1892. return
  1893. }
  1894. itemCygx := new(cygx.CygxReportMappingCygx)
  1895. itemCygx.ChartPermissionId = chartPermissionId
  1896. itemCygx.ChartPermissionName = chartPermissionName
  1897. itemCygx.MatchTypeName = matchTypeName
  1898. itemCygx.ReportType = reportType
  1899. itemCygx.IsReport = 1
  1900. itemCygx.CreateTime = time.Now()
  1901. itemCygx.ModifyTime = time.Now()
  1902. itemCelue := new(cygx.CygxReportMappingCelue)
  1903. itemCelue.ChartPermissionId = chartPermissionId
  1904. itemCelue.ChartPermissionName = chartPermissionName
  1905. itemCelue.SubCategoryName = matchTypeName
  1906. itemCelue.ReportType = reportType
  1907. itemCelue.IsReport = 1
  1908. itemCelue.CategoryId = maxDeatil.CategoryId + 1
  1909. itemCelue.CreateTime = time.Now()
  1910. itemCelue.ModifyTime = time.Now()
  1911. itemCygxId, err := cygx.AddCygxReportMappingCygx(itemCygx, itemCelue)
  1912. if err != nil {
  1913. br.Msg = "新建报告类型失败"
  1914. br.ErrMsg = "AddCygxReportMappingCygx,Err:" + err.Error()
  1915. return
  1916. }
  1917. resp := new(cygx.CygxReportMappingCygx)
  1918. resp.Id = int(itemCygxId)
  1919. resp.MatchTypeName = matchTypeName
  1920. br.Ret = 200
  1921. br.Success = true
  1922. br.Data = resp
  1923. br.Msg = "分类成功"
  1924. br.IsAddLog = true
  1925. }
  1926. //func init() {
  1927. // initAct()
  1928. //}
  1929. func initart() {
  1930. //行业
  1931. var condition string
  1932. var pars []interface{}
  1933. condition += ` AND re.chart_permission_id = 62 AND art.publish_date >= '2025.03.10' AND art.publish_date < '2025.04.11' `
  1934. //报告匹配类型
  1935. //9.5 13:52
  1936. condition += ` GROUP BY art.article_id ORDER BY art.publish_date DESC `
  1937. listart, err := cygx.GetReportArticleList(condition, pars, 0, 2000, 1)
  1938. if err != nil {
  1939. fmt.Println(err)
  1940. return
  1941. }
  1942. //创建excel
  1943. dir, err := os.Executable()
  1944. exPath := filepath.Dir(dir)
  1945. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1946. xlsxFile := xlsx.NewFile()
  1947. if err != nil {
  1948. fmt.Println(err)
  1949. return
  1950. }
  1951. style := xlsx.NewStyle()
  1952. alignment := xlsx.Alignment{
  1953. Horizontal: "center",
  1954. Vertical: "center",
  1955. WrapText: true,
  1956. }
  1957. style.Alignment = alignment
  1958. style.ApplyAlignment = true
  1959. redStyle := xlsx.NewStyle()
  1960. redStyle.Alignment = alignment
  1961. redStyle.ApplyAlignment = true
  1962. redStyle.Font.Color = "ff0000"
  1963. //定义底色需要标黄的 单元格颜色
  1964. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  1965. redStyle.Fill = redFill
  1966. //redStyle.Border = *border
  1967. var sheetName string
  1968. sheetName = "PV"
  1969. sheet, err := xlsxFile.AddSheet(sheetName)
  1970. if err != nil {
  1971. fmt.Println(err)
  1972. return
  1973. }
  1974. //标头
  1975. rowTitle := sheet.AddRow()
  1976. cellAt := rowTitle.AddCell()
  1977. cellAt.Value = "标题"
  1978. cellPd := rowTitle.AddCell()
  1979. cellPd.Value = "发布时间"
  1980. cellA := rowTitle.AddCell()
  1981. cellA.Value = "姓名"
  1982. cellB := rowTitle.AddCell()
  1983. cellB.Value = "手机号"
  1984. cellC := rowTitle.AddCell()
  1985. cellC.Value = "公司名称"
  1986. cellD := rowTitle.AddCell()
  1987. cellD.Value = "所属销售"
  1988. cellDfw := rowTitle.AddCell()
  1989. cellDfw.Value = "服务销售"
  1990. cellDCreatedTime := rowTitle.AddCell()
  1991. cellDCreatedTime.Value = "阅读时间(最后一次)"
  1992. cellE := rowTitle.AddCell()
  1993. cellE.Value = "停留时长(多次合计))"
  1994. cellF := rowTitle.AddCell()
  1995. cellF.Value = "阅读来源"
  1996. cellStatus := rowTitle.AddCell()
  1997. cellStatus.Value = "客户状态"
  1998. cellTc := rowTitle.AddCell()
  1999. cellTc.Value = "签约套餐"
  2000. hasmobile := make(map[string]bool)
  2001. for _, v := range listart {
  2002. articleId := v.ArticleId
  2003. condition = ` AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) // 过滤弘则
  2004. list, err := cygx.GetArticleHistoryList(articleId, condition)
  2005. if err != nil {
  2006. fmt.Println(err)
  2007. return
  2008. }
  2009. //上一次的阅读记录
  2010. list_H, err := cygx.GetArticleHistoryList_H(articleId, condition)
  2011. if err != nil {
  2012. fmt.Println(err)
  2013. return
  2014. }
  2015. mapArticle_H := make(map[string]bool)
  2016. for _, vPv := range list_H {
  2017. if !utils.ValidateMobileFormatat(vPv.Mobile) {
  2018. continue
  2019. }
  2020. mapArticle_H[fmt.Sprint("m_", vPv.Mobile)] = true
  2021. }
  2022. listClPv, err := cygx.GetCygxCelueArticleHistoryRecordPvAll(strconv.Itoa(articleId))
  2023. if err != nil && err.Error() != utils.ErrNoRow() {
  2024. fmt.Println(err)
  2025. return
  2026. }
  2027. listClPv_H, err := cygx.GetCygxCelueArticleHistoryRecordPvAll_H(strconv.Itoa(articleId))
  2028. if err != nil && err.Error() != utils.ErrNoRow() {
  2029. fmt.Println(err)
  2030. return
  2031. }
  2032. for _, vPv := range listClPv_H {
  2033. if !utils.ValidateMobileFormatat(vPv.Mobile) {
  2034. continue
  2035. }
  2036. mapArticle_H[fmt.Sprint("m_", vPv.Mobile)] = true
  2037. }
  2038. var listDate []*cygx.ArticleHistoryRep
  2039. var mobiles []string
  2040. var mapMobileCy = make(map[string]bool)
  2041. var mapMobileCl = make(map[string]bool)
  2042. mapstopTime := make(map[string]int)
  2043. if len(list) > 0 {
  2044. for _, vPv := range list {
  2045. if !utils.ValidateMobileFormatat(vPv.Mobile) {
  2046. continue
  2047. }
  2048. if mapArticle_H[fmt.Sprint("m_", vPv.Mobile)] {
  2049. continue
  2050. }
  2051. mobiles = append(mobiles, vPv.Mobile)
  2052. stopTime, _ := strconv.Atoi(vPv.StopTime)
  2053. mapstopTime[vPv.Mobile] += stopTime
  2054. }
  2055. }
  2056. if len(listClPv) > 0 {
  2057. for _, vPv := range listClPv {
  2058. if !utils.ValidateMobileFormatat(vPv.Mobile) {
  2059. continue
  2060. }
  2061. vPv.Ly = "1"
  2062. //if vPv.Mobile != "" {
  2063. mobiles = append(mobiles, vPv.Mobile)
  2064. //}
  2065. if mapArticle_H[fmt.Sprint("m_", vPv.Mobile)] {
  2066. continue
  2067. }
  2068. }
  2069. }
  2070. listUser, err := models.GetWxUserRaiSllerListByUserMobile(mobiles)
  2071. if err != nil {
  2072. fmt.Println(err)
  2073. return
  2074. }
  2075. listUserFicc, err := models.GetWxUserRaiSllerListByUserMobileFiic(mobiles)
  2076. if err != nil {
  2077. fmt.Println(err)
  2078. return
  2079. }
  2080. mapuserMapbil := make(map[string]*models.WxUserSller)
  2081. var companyIds []int
  2082. for _, vuser := range listUser {
  2083. //mapuserMapbil[vuser.Mobile] = vuser
  2084. companyIds = append(companyIds, vuser.CompanyId)
  2085. }
  2086. //合并合同所对应的权限
  2087. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapByIds(companyIds)
  2088. if err != nil {
  2089. fmt.Println(err)
  2090. return
  2091. }
  2092. //fmt.Println(companyIds)
  2093. //for k, vuser := range mappermissionName {
  2094. // fmt.Println(k, vuser)
  2095. //}
  2096. //fmt.Println(mappermissionName)
  2097. for _, vuser := range listUser {
  2098. vuser.ChartPermissionName = mappermissionName[vuser.CompanyId]
  2099. mapuserMapbil[vuser.Mobile] = vuser
  2100. }
  2101. for _, vuser := range listUserFicc {
  2102. vuser.Status = ""
  2103. vuser.SellerName = ""
  2104. if mapuserMapbil[vuser.Mobile] == nil {
  2105. mapuserMapbil[vuser.Mobile] = vuser
  2106. }
  2107. }
  2108. if len(list) > 0 {
  2109. for _, vPv := range list {
  2110. if !utils.ValidateMobileFormatat(vPv.Mobile) || mapMobileCy[vPv.Mobile] {
  2111. continue
  2112. }
  2113. if mapArticle_H[fmt.Sprint("m_", vPv.Mobile)] {
  2114. continue
  2115. }
  2116. if hasmobile[vPv.Mobile] {
  2117. continue
  2118. }
  2119. hasmobile[vPv.Mobile] = true
  2120. mapMobileCy[vPv.Mobile] = true
  2121. listDate = append(listDate, vPv)
  2122. }
  2123. }
  2124. if len(listClPv) > 0 {
  2125. for _, vPv := range listClPv {
  2126. if !utils.ValidateMobileFormatat(vPv.Mobile) || mapMobileCl[vPv.Mobile] {
  2127. continue
  2128. }
  2129. if mapArticle_H[fmt.Sprint("m_", vPv.Mobile)] {
  2130. continue
  2131. }
  2132. if hasmobile[vPv.Mobile] {
  2133. continue
  2134. }
  2135. hasmobile[vPv.Mobile] = true
  2136. mapMobileCl[vPv.Mobile] = true
  2137. listDate = append(listDate, vPv)
  2138. }
  2139. }
  2140. //rowtitle := sheet.AddRow()
  2141. //cellADatatitle := rowtitle.AddCell()
  2142. //cellADatatitle.Value = v.Title
  2143. for _, item := range listDate {
  2144. row := sheet.AddRow()
  2145. cellADatatitle := row.AddCell()
  2146. cellADatatitle.Value = v.Title
  2147. cellADataPd := row.AddCell()
  2148. cellADataPd.Value = v.PublishDate
  2149. cellAData := row.AddCell()
  2150. cellAData.Value = item.RealName
  2151. //if item.Ly == "1" {
  2152. // cellAData.SetStyle(redStyle)
  2153. //}
  2154. cellBData := row.AddCell()
  2155. cellBData.Value = item.Mobile
  2156. cellCData := row.AddCell()
  2157. //cellCData.Value = item.CompanyName
  2158. cellDData := row.AddCell()
  2159. cellDDataFw := row.AddCell()
  2160. //cellDData.Value = item.SellerName
  2161. cellEData := row.AddCell()
  2162. cellEData.Value = item.CreateTime
  2163. cellFData := row.AddCell()
  2164. if item.Ly == "" {
  2165. cellFData.Value = strconv.Itoa(mapstopTime[item.Mobile])
  2166. }
  2167. //fmt.Println(item.Source)
  2168. cellLyData := row.AddCell()
  2169. switch item.Source {
  2170. case "MOBILE":
  2171. cellLyData.Value = "小程序"
  2172. case "WEB":
  2173. cellLyData.Value = "网页版"
  2174. case "CELUE":
  2175. cellLyData.Value = "vmp"
  2176. }
  2177. cellStatusData := row.AddCell()
  2178. cellermissionNameData := row.AddCell()
  2179. if mapuserMapbil[item.Mobile] != nil {
  2180. cellCData.Value = mapuserMapbil[item.Mobile].CompanyName
  2181. cellDData.Value = mapuserMapbil[item.Mobile].SellerName
  2182. cellDDataFw.Value = mapuserMapbil[item.Mobile].ShareSeller
  2183. cellStatusData.Value = mapuserMapbil[item.Mobile].Status
  2184. cellermissionNameData.Value = mapuserMapbil[item.Mobile].ChartPermissionName
  2185. if mapuserMapbil[item.Mobile].RealName != "" {
  2186. cellAData.Value = mapuserMapbil[item.Mobile].RealName
  2187. }
  2188. }
  2189. }
  2190. err = xlsxFile.Save(downLoadnFilePath)
  2191. if err != nil {
  2192. fmt.Println(err)
  2193. return
  2194. }
  2195. }
  2196. }
  2197. func initAct() {
  2198. var condition string
  2199. mapMobile := make(map[string]bool)
  2200. mapuserMapbil := make(map[int]*models.WxUserSller)
  2201. //var activityIds []int
  2202. //activityIds = []int{5590, 5658, 5734, 5747, 5805, 5833, 5832, 5865, 5887, 5872, 5889, 5870, 5892, 5890, 5935, 5976, 5946, 6005,6062} // 2024-12-26 15:55
  2203. //activityIds = []int{6005} // 2024-10-31 17:15
  2204. //activityIds = []int{6052} // 2024-11-07 16:45
  2205. //activity_ids := " 5590, 5658, 5734, 5747, 5805, 5833, 5832, 5865, 5887, 5872, 5889, 5870, 5892, 5890, 5935, 5976, 5946, 6005,6062,6174,6224,6254,6278 "
  2206. activity_ids := " 6525, 6528,6571,6572,6576,6621 "
  2207. condition = " AND s.activity_id IN (" + activity_ids + ") AND ( is_meeting = 1 OR duration != '' ) AND s.create_time < '2024-12-19 15:55' "
  2208. listH, err := cygx.GetActivityMeetByUser(condition, 0, 9999)
  2209. if err != nil {
  2210. fmt.Println(err)
  2211. return
  2212. }
  2213. mobileMap := make(map[string]bool)
  2214. for _, v := range listH {
  2215. mobileMap[v.Mobile] = true
  2216. }
  2217. fmt.Println(mobileMap)
  2218. condition = " AND s.activity_id IN (" + activity_ids + ") AND ( is_meeting = 1 OR duration != '' ) AND s.create_time > '2024-12-19 15:55' "
  2219. list, err := cygx.GetActivityMeetByUser(condition, 0, 1000)
  2220. fmt.Println(list)
  2221. fmt.Println()
  2222. if err != nil && err.Error() != utils.ErrNoRow() {
  2223. fmt.Println(err)
  2224. return
  2225. }
  2226. var listData []*cygx.UserInteraction
  2227. //for _, vid := range activityIds {
  2228. // activityId := strconv.Itoa(vid)
  2229. //
  2230. // //activityId := "5865"
  2231. // //condition = " AND s.activity_id = " + activityId + " AND duration != '' AND s.create_time < '2024-09-06 09:20' "
  2232. // //condition = " AND s.activity_id = " + activityId + " AND (is_meeting = 1 OR AND duration != '' ) AND s.create_time < '2024-09-13 10:30' "
  2233. // //list_H, err := cygx.GetActivityMeetByUser(condition, 0, 1000)
  2234. // //if err != nil && err.Error() != utils.ErrNoRow() {
  2235. // // fmt.Println(err)
  2236. // // return
  2237. // //}
  2238. // //
  2239. // //for _, v := range list_H {
  2240. // // mapMobile[v.Mobile+"_"+activityId] = true
  2241. // //}
  2242. //
  2243. // //condition = " AND s.activity_id = 5833 AND duration != '' "
  2244. // //condition = " AND s.activity_id = " + activityId + " AND duration != '' " // 2024-09-06 09:20
  2245. // condition = " AND s.activity_id = " + activityId + " AND ( is_meeting = 1 OR duration != '' ) AND s.create_time > '2024-10-31 17:15' "
  2246. // list, err := cygx.GetActivityMeetByUser(condition, 0, 1000)
  2247. // if err != nil && err.Error() != utils.ErrNoRow() {
  2248. // fmt.Println(err)
  2249. // return
  2250. // }
  2251. //
  2252. // var companyIds []int
  2253. // for _, vuser := range list {
  2254. // //mapuserMapbil[vuser.Mobile] = vuser
  2255. // companyIds = append(companyIds, vuser.CompanyId)
  2256. // listData = append(listData, vuser)
  2257. // }
  2258. //
  2259. // listCompany, err := models.GetWxUserRaiSllerListByUserComapnyId(companyIds)
  2260. // if err != nil {
  2261. // fmt.Println(err)
  2262. // return
  2263. // }
  2264. //
  2265. // //合并合同所对应的权限
  2266. // mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapByIds(companyIds)
  2267. // if err != nil {
  2268. // fmt.Println(err)
  2269. // return
  2270. // }
  2271. // for _, v := range listCompany {
  2272. // v.ChartPermissionName = mappermissionName[v.CompanyId]
  2273. // mapuserMapbil[v.CompanyId] = v
  2274. // }
  2275. //
  2276. // listCompanyFicc, err := models.GetWxUserRaiSllerListByUserComapnyIdFicc(companyIds)
  2277. // if err != nil {
  2278. // fmt.Println(err)
  2279. // return
  2280. // }
  2281. //
  2282. // for _, v := range listCompanyFicc {
  2283. // if mapuserMapbil[v.CompanyId] != nil {
  2284. // continue
  2285. // }
  2286. // v.Status = ""
  2287. // v.SellerName = ""
  2288. // mapuserMapbil[v.CompanyId] = v
  2289. // }
  2290. //}
  2291. var companyIds []int
  2292. for _, vuser := range list {
  2293. fmt.Println(vuser.Mobile)
  2294. if mobileMap[vuser.Mobile] {
  2295. continue
  2296. }
  2297. companyIds = append(companyIds, vuser.CompanyId)
  2298. listData = append(listData, vuser)
  2299. }
  2300. listCompany, err := models.GetWxUserRaiSllerListByUserComapnyId(companyIds)
  2301. if err != nil {
  2302. fmt.Println(err)
  2303. return
  2304. }
  2305. //合并合同所对应的权限
  2306. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapByIds(companyIds)
  2307. if err != nil {
  2308. fmt.Println(err)
  2309. return
  2310. }
  2311. for _, v := range listCompany {
  2312. v.ChartPermissionName = mappermissionName[v.CompanyId]
  2313. mapuserMapbil[v.CompanyId] = v
  2314. }
  2315. listCompanyFicc, err := models.GetWxUserRaiSllerListByUserComapnyIdFicc(companyIds)
  2316. if err != nil {
  2317. fmt.Println(err)
  2318. return
  2319. }
  2320. for _, v := range listCompanyFicc {
  2321. if mapuserMapbil[v.CompanyId] != nil {
  2322. continue
  2323. }
  2324. v.Status = ""
  2325. v.SellerName = ""
  2326. mapuserMapbil[v.CompanyId] = v
  2327. }
  2328. //创建excel
  2329. dir, err := os.Executable()
  2330. exPath := filepath.Dir(dir)
  2331. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  2332. xlsxFile := xlsx.NewFile()
  2333. if err != nil {
  2334. fmt.Println(err)
  2335. return
  2336. }
  2337. style := xlsx.NewStyle()
  2338. alignment := xlsx.Alignment{
  2339. Horizontal: "center",
  2340. Vertical: "center",
  2341. WrapText: true,
  2342. }
  2343. style.Alignment = alignment
  2344. style.ApplyAlignment = true
  2345. redStyle := xlsx.NewStyle()
  2346. redStyle.Alignment = alignment
  2347. redStyle.ApplyAlignment = true
  2348. redStyle.Font.Color = "ff0000"
  2349. //定义底色需要标黄的 单元格颜色
  2350. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  2351. redStyle.Fill = redFill
  2352. //redStyle.Border = *border
  2353. var sheetName string
  2354. sheetName = "到会信息"
  2355. sheet, err := xlsxFile.AddSheet(sheetName)
  2356. if err != nil {
  2357. fmt.Println(err)
  2358. return
  2359. }
  2360. //标头
  2361. rowTitle := sheet.AddRow()
  2362. cellAct := rowTitle.AddCell()
  2363. cellAct.Value = "活动名称/报告标题"
  2364. cellActime := rowTitle.AddCell()
  2365. cellActime.Value = " 活动时间/发布时间"
  2366. cellA := rowTitle.AddCell()
  2367. cellA.Value = "姓名"
  2368. cellB := rowTitle.AddCell()
  2369. cellB.Value = "手机号"
  2370. cellC := rowTitle.AddCell()
  2371. cellC.Value = "公司名称"
  2372. cellD := rowTitle.AddCell()
  2373. cellD.Value = "所属销售"
  2374. cellDfw := rowTitle.AddCell()
  2375. cellDfw.Value = "服务销售"
  2376. cellYd := rowTitle.AddCell()
  2377. cellYd.Value = "阅读时间"
  2378. cellstopTime := rowTitle.AddCell()
  2379. cellstopTime.Value = "停留时长"
  2380. cellLy := rowTitle.AddCell()
  2381. cellLy.Value = "阅读来源"
  2382. cellStatus := rowTitle.AddCell()
  2383. cellStatus.Value = "客户状态"
  2384. cellTc := rowTitle.AddCell()
  2385. cellTc.Value = "签约套餐"
  2386. for _, item := range listData {
  2387. if mapMobile[item.Mobile] {
  2388. continue
  2389. }
  2390. row := sheet.AddRow()
  2391. cellActData := row.AddCell()
  2392. cellActData.Value = item.ActivityName
  2393. cellActimeData := row.AddCell()
  2394. cellActimeData.Value = item.ActivityTime
  2395. cellAData := row.AddCell()
  2396. cellAData.Value = item.RealName
  2397. //if item.Ly == "1" {
  2398. // cellAData.SetStyle(redStyle)
  2399. //}
  2400. cellBData := row.AddCell()
  2401. cellBData.Value = item.Mobile
  2402. cellCData := row.AddCell()
  2403. //cellCData.Value = item.CompanyName
  2404. cellDData := row.AddCell()
  2405. cellDDatafw := row.AddCell()
  2406. //cellDData.Value = item.SellerName
  2407. cellYdData := row.AddCell()
  2408. cellYdData.Value = ""
  2409. cellstopTimeData := row.AddCell()
  2410. cellstopTimeData.Value = ""
  2411. cellLyData := row.AddCell()
  2412. cellLyData.Value = ""
  2413. cellStatusData := row.AddCell()
  2414. cellermissionNameData := row.AddCell()
  2415. if mapuserMapbil[item.CompanyId] != nil {
  2416. cellCData.Value = mapuserMapbil[item.CompanyId].CompanyName
  2417. cellDData.Value = mapuserMapbil[item.CompanyId].SellerName
  2418. cellDDatafw.Value = mapuserMapbil[item.CompanyId].ShareSeller
  2419. cellStatusData.Value = mapuserMapbil[item.CompanyId].Status
  2420. cellermissionNameData.Value = mapuserMapbil[item.CompanyId].ChartPermissionName
  2421. }
  2422. }
  2423. err = xlsxFile.Save(downLoadnFilePath)
  2424. if err != nil {
  2425. fmt.Println(err)
  2426. return
  2427. }
  2428. }
  2429. func initarta() {
  2430. //行业
  2431. var condition string
  2432. var pars []interface{}
  2433. condition += ` AND share_seller_id In (702,703,704,707) `
  2434. listProduct, err := company.GetCompanyProductList(condition, pars)
  2435. if err != nil {
  2436. fmt.Println(err)
  2437. return
  2438. }
  2439. var companyIds []int
  2440. mapSeller := make(map[int]string)
  2441. for _, v := range listProduct {
  2442. companyIds = append(companyIds, v.CompanyId)
  2443. mapSeller[v.CompanyId] = v.ShareSeller
  2444. }
  2445. //报告匹配类型
  2446. pars = make([]interface{}, 0)
  2447. condition = ` AND re.chart_permission_id IN (23,53) `
  2448. listart, err := cygx.GetReportArticleList(condition, pars, 0, 4000, 1)
  2449. if err != nil {
  2450. fmt.Println(err)
  2451. return
  2452. }
  2453. mapArticleTitle := make(map[int]string)
  2454. mapchart_permission_name := make(map[int]string)
  2455. var articleIds []int
  2456. for _, v := range listart {
  2457. mapArticleTitle[v.ArticleId] = v.Title
  2458. mapchart_permission_name[v.ArticleId] = v.ChartPermissionName
  2459. articleIds = append(articleIds, v.ArticleId)
  2460. }
  2461. //创建excel
  2462. dir, err := os.Executable()
  2463. exPath := filepath.Dir(dir)
  2464. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  2465. xlsxFile := xlsx.NewFile()
  2466. if err != nil {
  2467. fmt.Println(err)
  2468. return
  2469. }
  2470. style := xlsx.NewStyle()
  2471. alignment := xlsx.Alignment{
  2472. Horizontal: "center",
  2473. Vertical: "center",
  2474. WrapText: true,
  2475. }
  2476. style.Alignment = alignment
  2477. style.ApplyAlignment = true
  2478. redStyle := xlsx.NewStyle()
  2479. redStyle.Alignment = alignment
  2480. redStyle.ApplyAlignment = true
  2481. redStyle.Font.Color = "ff0000"
  2482. //定义底色需要标黄的 单元格颜色
  2483. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  2484. redStyle.Fill = redFill
  2485. //redStyle.Border = *border
  2486. var sheetName string
  2487. sheetName = "PV"
  2488. sheet, err := xlsxFile.AddSheet(sheetName)
  2489. if err != nil {
  2490. fmt.Println(err)
  2491. return
  2492. }
  2493. //标头
  2494. rowTitle := sheet.AddRow()
  2495. cellA := rowTitle.AddCell()
  2496. cellA.Value = "姓名"
  2497. cellB := rowTitle.AddCell()
  2498. cellB.Value = "手机号"
  2499. cellC := rowTitle.AddCell()
  2500. cellC.Value = "公司名称"
  2501. cellD := rowTitle.AddCell()
  2502. cellD.Value = "服务销售"
  2503. cellDCreatedTime := rowTitle.AddCell()
  2504. cellDCreatedTime.Value = "最近阅读时间"
  2505. cellE := rowTitle.AddCell()
  2506. cellE.Value = "行业"
  2507. cellF := rowTitle.AddCell()
  2508. cellF.Value = "报告标题"
  2509. //articleId := v.ArticleId
  2510. //condition = ` AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) // 过滤弘则
  2511. list, err := cygx.GetArticleHistoryListInit(articleIds, companyIds)
  2512. if err != nil {
  2513. fmt.Println(err)
  2514. return
  2515. }
  2516. mapMobile := make(map[string]bool)
  2517. for _, item := range list {
  2518. if mapMobile[item.Mobile] {
  2519. continue
  2520. }
  2521. row := sheet.AddRow()
  2522. cellAData := row.AddCell()
  2523. cellAData.Value = item.RealName
  2524. cellBData := row.AddCell()
  2525. cellBData.Value = item.Mobile
  2526. cellCData := row.AddCell()
  2527. cellCData.Value = item.CompanyName
  2528. cellDData := row.AddCell()
  2529. cellDData.Value = mapSeller[item.CompanyId]
  2530. cellEData := row.AddCell()
  2531. cellEData.Value = item.CreateTime
  2532. cellEcData := row.AddCell()
  2533. cellEcData.Value = mapchart_permission_name[item.ArticleId]
  2534. cellFData := row.AddCell()
  2535. cellFData.Value = mapArticleTitle[item.ArticleId]
  2536. mapMobile[item.Mobile] = true
  2537. }
  2538. err = xlsxFile.Save(downLoadnFilePath)
  2539. if err != nil {
  2540. fmt.Println(err)
  2541. return
  2542. }
  2543. }
  2544. func initActList() {
  2545. var condition string
  2546. var pars []interface{}
  2547. condition = " AND chart_permission_id = 31 AND activity_time >= '2024-03-01' AND activity_time <= '2024-09-21' AND activity_type_id = 3 AND publish_status = 1 AND yidong_activity_id = '' ORDER BY activity_time ASC "
  2548. list, errList := cygx.GetActivityListAll(condition, pars, 0, 999)
  2549. if errList != nil {
  2550. fmt.Println(errList)
  2551. return
  2552. }
  2553. //创建excel
  2554. dir, err := os.Executable()
  2555. exPath := filepath.Dir(dir)
  2556. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  2557. xlsxFile := xlsx.NewFile()
  2558. if err != nil {
  2559. fmt.Println(err)
  2560. return
  2561. }
  2562. style := xlsx.NewStyle()
  2563. alignment := xlsx.Alignment{
  2564. Horizontal: "center",
  2565. Vertical: "center",
  2566. WrapText: true,
  2567. }
  2568. style.Alignment = alignment
  2569. style.ApplyAlignment = true
  2570. redStyle := xlsx.NewStyle()
  2571. redStyle.Alignment = alignment
  2572. redStyle.ApplyAlignment = true
  2573. redStyle.Font.Color = "ff0000"
  2574. //定义底色需要标黄的 单元格颜色
  2575. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  2576. redStyle.Fill = redFill
  2577. //redStyle.Border = *border
  2578. var sheetName string
  2579. sheetName = "到会信息"
  2580. sheet, err := xlsxFile.AddSheet(sheetName)
  2581. if err != nil {
  2582. fmt.Println(err)
  2583. return
  2584. }
  2585. //标头
  2586. rowTitle := sheet.AddRow()
  2587. cellA := rowTitle.AddCell()
  2588. cellA.Value = "活动名称"
  2589. cellB := rowTitle.AddCell()
  2590. cellB.Value = "活动时间"
  2591. cellC := rowTitle.AddCell()
  2592. cellC.Value = "活动标签"
  2593. for _, item := range list {
  2594. row := sheet.AddRow()
  2595. cellAData := row.AddCell()
  2596. cellAData.Value = item.ActivityName
  2597. cellBData := row.AddCell()
  2598. cellBData.Value = item.ActivityTime
  2599. cellCData := row.AddCell()
  2600. cellCData.Value = item.Label
  2601. }
  2602. err = xlsxFile.Save(downLoadnFilePath)
  2603. if err != nil {
  2604. fmt.Println(err)
  2605. return
  2606. }
  2607. }
  2608. func initOrder() {
  2609. var condition string
  2610. var pars []interface{}
  2611. //condition = " WHERE 1 = 1 AND source In ('article','yanxuanspecial') AND order_status = 2 GROUP BY order_id ASC "
  2612. condition = " AND source In ('activity') AND order_status = 2 GROUP BY order_id DESC "
  2613. list, errList := cygx.GetCygxOrderList(condition, pars, 0, 9999)
  2614. if errList != nil {
  2615. fmt.Println(errList)
  2616. return
  2617. }
  2618. //创建excel
  2619. dir, err := os.Executable()
  2620. exPath := filepath.Dir(dir)
  2621. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  2622. xlsxFile := xlsx.NewFile()
  2623. if err != nil {
  2624. fmt.Println(err)
  2625. return
  2626. }
  2627. style := xlsx.NewStyle()
  2628. alignment := xlsx.Alignment{
  2629. Horizontal: "center",
  2630. Vertical: "center",
  2631. WrapText: true,
  2632. }
  2633. style.Alignment = alignment
  2634. style.ApplyAlignment = true
  2635. redStyle := xlsx.NewStyle()
  2636. redStyle.Alignment = alignment
  2637. redStyle.ApplyAlignment = true
  2638. redStyle.Font.Color = "ff0000"
  2639. //定义底色需要标黄的 单元格颜色
  2640. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  2641. redStyle.Fill = redFill
  2642. //redStyle.Border = *border
  2643. var sheetName string
  2644. sheetName = "活动"
  2645. sheet, err := xlsxFile.AddSheet(sheetName)
  2646. if err != nil {
  2647. fmt.Println(err)
  2648. return
  2649. }
  2650. //标头
  2651. //rowTitle := sheet.AddRow()
  2652. //cellA := rowTitle.AddCell()
  2653. //cellA.Value = "姓名"
  2654. //cellB := rowTitle.AddCell()
  2655. //cellB.Value = "手机号"
  2656. //cellC := rowTitle.AddCell()
  2657. //cellC.Value = "公司名称"
  2658. //
  2659. //cellMoney := rowTitle.AddCell()
  2660. //cellMoney.Value = "金额"
  2661. //
  2662. //cellname := rowTitle.AddCell()
  2663. //cellname.Value = "活动名称"
  2664. //
  2665. //cellTime := rowTitle.AddCell()
  2666. //cellTime.Value = "支付时间"
  2667. //
  2668. //for _, item := range list {
  2669. //
  2670. // row := sheet.AddRow()
  2671. // cellAData := row.AddCell()
  2672. // cellAData.Value = item.RealName
  2673. //
  2674. // cellBData := row.AddCell()
  2675. // cellBData.Value = item.Mobile
  2676. // cellCData := row.AddCell()
  2677. // cellCData.Value = item.CompanyName
  2678. //
  2679. // cellCMoneyData := row.AddCell()
  2680. // cellCMoneyData.Value = fmt.Sprint(item.PayMoney)
  2681. //
  2682. // cellCnameData := row.AddCell()
  2683. // cellCnameData.Value = item.SourceTitle
  2684. //
  2685. // cellTimeata := row.AddCell()
  2686. // cellTimeata.Value = item.PayTime.Format(utils.FormatDateTime)
  2687. //}
  2688. var mobiles []string
  2689. var activityIds []int
  2690. for _, v := range list {
  2691. mobiles = append(mobiles, v.Mobile)
  2692. activityIds = append(activityIds, v.SourceId)
  2693. }
  2694. pars = make([]interface{}, 0)
  2695. inviteNameMap := cygxService.GetCygxUserBusinessCardMap(mobiles) // 根据手机号获取邀请人
  2696. condition = ` AND activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `) `
  2697. pars = append(pars, activityIds)
  2698. listActivity, errList := cygx.GetActivityListAllInit(condition, pars)
  2699. if errList != nil {
  2700. fmt.Println(errList)
  2701. return
  2702. }
  2703. mapHost := make(map[int]string)
  2704. for _, v := range listActivity {
  2705. mapHost[v.ActivityId] = v.Host
  2706. }
  2707. rowTitle := sheet.AddRow()
  2708. cellA := rowTitle.AddCell()
  2709. cellA.Value = "姓名"
  2710. cellB := rowTitle.AddCell()
  2711. cellB.Value = "手机号"
  2712. cellC := rowTitle.AddCell()
  2713. cellC.Value = "公司名称"
  2714. cellSeller := rowTitle.AddCell()
  2715. cellSeller.Value = "所属销售"
  2716. cellInviteName := rowTitle.AddCell()
  2717. cellInviteName.Value = "推荐人"
  2718. cellMoney := rowTitle.AddCell()
  2719. cellMoney.Value = "金额"
  2720. cellname := rowTitle.AddCell()
  2721. cellname.Value = "报告标题"
  2722. cellNickename := rowTitle.AddCell()
  2723. cellNickename.Value = "作者"
  2724. cellTime := rowTitle.AddCell()
  2725. cellTime.Value = "支付时间"
  2726. for _, item := range list {
  2727. row := sheet.AddRow()
  2728. cellAData := row.AddCell()
  2729. cellAData.Value = item.RealName
  2730. cellBData := row.AddCell()
  2731. cellBData.Value = item.Mobile
  2732. cellCData := row.AddCell()
  2733. cellCData.Value = item.CompanyName
  2734. cellSellerData := row.AddCell()
  2735. cellSellerData.Value = item.SellerName
  2736. cellInviteNameData := row.AddCell()
  2737. if item.ShareName != "" {
  2738. cellInviteNameData.Value = item.ShareName
  2739. } else {
  2740. cellInviteNameData.Value = inviteNameMap[item.Mobile]
  2741. }
  2742. cellCMoneyData := row.AddCell()
  2743. cellCMoneyData.Value = fmt.Sprint(item.PayMoney)
  2744. cellCnameData := row.AddCell()
  2745. cellCnameData.Value = item.SourceTitle
  2746. cellNickenameData := row.AddCell()
  2747. cellNickenameData.Value = mapHost[item.SourceId]
  2748. cellTimeata := row.AddCell()
  2749. cellTimeata.Value = item.PayTime.Format(utils.FormatDateTime)
  2750. }
  2751. err = xlsxFile.Save(downLoadnFilePath)
  2752. if err != nil {
  2753. fmt.Println(err)
  2754. return
  2755. }
  2756. }
  2757. func initOrderArticle() {
  2758. var condition string
  2759. var pars []interface{}
  2760. condition = " AND source In ('article','yanxuanspecial') AND order_status = 2 GROUP BY order_id DESC "
  2761. list, errList := cygx.GetCygxOrderList(condition, pars, 0, 9999)
  2762. if errList != nil {
  2763. fmt.Println(errList)
  2764. return
  2765. }
  2766. var articleIds []int
  2767. var yanxuanArticleids []int
  2768. for _, v := range list {
  2769. if v.Source == "article" {
  2770. articleIds = append(articleIds, v.SourceId)
  2771. }
  2772. if v.Source == "yanxuanspecial" {
  2773. yanxuanArticleids = append(yanxuanArticleids, v.SourceId)
  2774. }
  2775. }
  2776. pars = make([]interface{}, 0)
  2777. condition = " AND art.article_id IN (" + utils.GetOrmInReplace(len(articleIds)) + ") GROUP BY art.article_id "
  2778. pars = append(pars, articleIds)
  2779. mapArtcileNickName := make(map[int]string)
  2780. listartcile, errList := cygx.GetSummaryManageListInit(condition, pars, 0, 999)
  2781. if errList != nil {
  2782. fmt.Println(errList)
  2783. return
  2784. }
  2785. for _, v := range listartcile {
  2786. mapArtcileNickName[v.ArticleId] = v.NickName
  2787. }
  2788. //fmt.Println(mapArtcileNickName)
  2789. //return
  2790. pars = make([]interface{}, 0)
  2791. condition = " AND a.id IN (" + utils.GetOrmInReplace(len(yanxuanArticleids)) + ") "
  2792. pars = append(pars, yanxuanArticleids)
  2793. mapArtcileNickNameYx := make(map[int]string)
  2794. listartcileYx, errList := cygx.GetYanxuanSpecialList(condition, pars, 0, 999)
  2795. if errList != nil {
  2796. fmt.Println(errList)
  2797. return
  2798. }
  2799. for _, v := range listartcileYx {
  2800. mapArtcileNickNameYx[v.Id] = v.NickName
  2801. }
  2802. var mobiles []string
  2803. for _, v := range list {
  2804. mobiles = append(mobiles, v.Mobile)
  2805. }
  2806. inviteNameMap := cygxService.GetCygxUserBusinessCardMap(mobiles) // 根据手机号获取邀请人
  2807. //创建excel
  2808. dir, err := os.Executable()
  2809. exPath := filepath.Dir(dir)
  2810. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  2811. xlsxFile := xlsx.NewFile()
  2812. if err != nil {
  2813. fmt.Println(err)
  2814. return
  2815. }
  2816. style := xlsx.NewStyle()
  2817. alignment := xlsx.Alignment{
  2818. Horizontal: "center",
  2819. Vertical: "center",
  2820. WrapText: true,
  2821. }
  2822. style.Alignment = alignment
  2823. style.ApplyAlignment = true
  2824. redStyle := xlsx.NewStyle()
  2825. redStyle.Alignment = alignment
  2826. redStyle.ApplyAlignment = true
  2827. redStyle.Font.Color = "ff0000"
  2828. //定义底色需要标黄的 单元格颜色
  2829. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  2830. redStyle.Fill = redFill
  2831. //redStyle.Border = *border
  2832. var sheetName string
  2833. sheetName = "活动"
  2834. sheet, err := xlsxFile.AddSheet(sheetName)
  2835. if err != nil {
  2836. fmt.Println(err)
  2837. return
  2838. }
  2839. //标头
  2840. rowTitle := sheet.AddRow()
  2841. cellA := rowTitle.AddCell()
  2842. cellA.Value = "姓名"
  2843. cellB := rowTitle.AddCell()
  2844. cellB.Value = "手机号"
  2845. cellC := rowTitle.AddCell()
  2846. cellC.Value = "公司名称"
  2847. cellSeller := rowTitle.AddCell()
  2848. cellSeller.Value = "所属销售"
  2849. cellInviteName := rowTitle.AddCell()
  2850. cellInviteName.Value = "推荐人"
  2851. cellMoney := rowTitle.AddCell()
  2852. cellMoney.Value = "金额"
  2853. cellname := rowTitle.AddCell()
  2854. cellname.Value = "报告标题"
  2855. cellNickename := rowTitle.AddCell()
  2856. cellNickename.Value = "作者"
  2857. cellTime := rowTitle.AddCell()
  2858. cellTime.Value = "支付时间"
  2859. for _, item := range list {
  2860. row := sheet.AddRow()
  2861. cellAData := row.AddCell()
  2862. cellAData.Value = item.RealName
  2863. cellBData := row.AddCell()
  2864. cellBData.Value = item.Mobile
  2865. cellCData := row.AddCell()
  2866. cellCData.Value = item.CompanyName
  2867. cellSellerData := row.AddCell()
  2868. cellSellerData.Value = item.SellerName
  2869. cellInviteNameData := row.AddCell()
  2870. if item.ShareName != "" {
  2871. cellInviteNameData.Value = item.ShareName
  2872. } else {
  2873. cellInviteNameData.Value = inviteNameMap[item.Mobile]
  2874. }
  2875. cellCMoneyData := row.AddCell()
  2876. cellCMoneyData.Value = fmt.Sprint(item.PayMoney)
  2877. cellCnameData := row.AddCell()
  2878. cellCnameData.Value = item.SourceTitle
  2879. cellNickenameData := row.AddCell()
  2880. if item.Source == "article" {
  2881. fmt.Println(mapArtcileNickName[item.SourceId])
  2882. cellNickenameData.Value = mapArtcileNickName[item.SourceId]
  2883. }
  2884. if item.Source == "yanxuanspecial" {
  2885. cellNickenameData.Value = mapArtcileNickNameYx[item.SourceId]
  2886. }
  2887. cellTimeata := row.AddCell()
  2888. cellTimeata.Value = item.PayTime.Format(utils.FormatDateTime)
  2889. }
  2890. err = xlsxFile.Save(downLoadnFilePath)
  2891. if err != nil {
  2892. fmt.Println(err)
  2893. return
  2894. }
  2895. }
  2896. func initRsList() {
  2897. list, errList := roadshow.GetCalendarDetailListinit()
  2898. if errList != nil {
  2899. fmt.Println(errList)
  2900. return
  2901. }
  2902. //创建excel
  2903. dir, err := os.Executable()
  2904. exPath := filepath.Dir(dir)
  2905. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  2906. xlsxFile := xlsx.NewFile()
  2907. if err != nil {
  2908. fmt.Println(err)
  2909. return
  2910. }
  2911. style := xlsx.NewStyle()
  2912. alignment := xlsx.Alignment{
  2913. Horizontal: "center",
  2914. Vertical: "center",
  2915. WrapText: true,
  2916. }
  2917. style.Alignment = alignment
  2918. style.ApplyAlignment = true
  2919. redStyle := xlsx.NewStyle()
  2920. redStyle.Alignment = alignment
  2921. redStyle.ApplyAlignment = true
  2922. redStyle.Font.Color = "ff0000"
  2923. //定义底色需要标黄的 单元格颜色
  2924. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  2925. redStyle.Fill = redFill
  2926. //redStyle.Border = *border
  2927. var sheetName string
  2928. sheetName = "活动"
  2929. sheet, err := xlsxFile.AddSheet(sheetName)
  2930. if err != nil {
  2931. fmt.Println(err)
  2932. return
  2933. }
  2934. //标头
  2935. rowTitle := sheet.AddRow()
  2936. cellA := rowTitle.AddCell()
  2937. cellA.Value = "研究员"
  2938. cellB := rowTitle.AddCell()
  2939. cellB.Value = "路演时间"
  2940. cellC := rowTitle.AddCell()
  2941. cellC.Value = "公司名"
  2942. cellMoney := rowTitle.AddCell()
  2943. cellMoney.Value = "销售"
  2944. for _, item := range list {
  2945. row := sheet.AddRow()
  2946. cellAData := row.AddCell()
  2947. cellAData.Value = item.ResearcherName
  2948. cellBData := row.AddCell()
  2949. cellBData.Value = item.StartDate + " " + item.StartTime
  2950. cellCData := row.AddCell()
  2951. cellCData.Value = item.CompanyName
  2952. cellCnameData := row.AddCell()
  2953. cellCnameData.Value = item.SysUserRealName
  2954. }
  2955. err = xlsxFile.Save(downLoadnFilePath)
  2956. if err != nil {
  2957. fmt.Println(err)
  2958. return
  2959. }
  2960. }
  2961. func initHistoryRemarList() {
  2962. remarkList, err := company.GetCompanyHistoryRemarkListInitExport()
  2963. if err != nil {
  2964. fmt.Println(err)
  2965. return
  2966. }
  2967. var companyids []int
  2968. //var companyidsMap +
  2969. resp := new(company.CompanyHistoryRemarkListResp)
  2970. for _, v := range remarkList {
  2971. item := new(company.CompanyHistoryRemarkResp)
  2972. item.CompanyId = v.CompanyId
  2973. if !utils.InArrayByInt(companyids, v.CompanyId) {
  2974. companyids = append(companyids, v.CompanyId)
  2975. }
  2976. item.Content = v.Content
  2977. item.SysAdminName = v.SysAdminName
  2978. //item.SysAdminName = v.C
  2979. item.CreateTime = v.ShowTime.Format(utils.FormatDateTime)
  2980. switch v.TableName {
  2981. case "company_service_record":
  2982. item.RemarkType = "沟通记录"
  2983. case "company_product_remark":
  2984. item.RemarkType = "备注"
  2985. case "company_no_renewed_note":
  2986. item.RemarkType = "未续约备注"
  2987. case "company_renewal_reason":
  2988. item.RemarkType = "未续约说明"
  2989. case "cygx_user_feedback":
  2990. item.RemarkType = "交流反馈(" + v.RealName + ")"
  2991. default:
  2992. item.RemarkType = "备注"
  2993. }
  2994. resp.List = append(resp.List, item)
  2995. }
  2996. listCompany, err := company.GetOverseasCompanysByCompanyIds(companyids)
  2997. if err != nil {
  2998. fmt.Println(err)
  2999. return
  3000. }
  3001. mapCompamyName := make(map[int]string)
  3002. for _, v := range listCompany {
  3003. mapCompamyName[v.CompanyId] = v.CompanyName
  3004. }
  3005. //创建excel
  3006. dir, err := os.Executable()
  3007. exPath := filepath.Dir(dir)
  3008. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3009. xlsxFile := xlsx.NewFile()
  3010. if err != nil {
  3011. fmt.Println(err)
  3012. return
  3013. }
  3014. style := xlsx.NewStyle()
  3015. alignment := xlsx.Alignment{
  3016. Horizontal: "center",
  3017. Vertical: "center",
  3018. WrapText: true,
  3019. }
  3020. style.Alignment = alignment
  3021. style.ApplyAlignment = true
  3022. redStyle := xlsx.NewStyle()
  3023. redStyle.Alignment = alignment
  3024. redStyle.ApplyAlignment = true
  3025. redStyle.Font.Color = "ff0000"
  3026. //定义底色需要标黄的 单元格颜色
  3027. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  3028. redStyle.Fill = redFill
  3029. //redStyle.Border = *border
  3030. var sheetName string
  3031. sheetName = "备注"
  3032. sheet, err := xlsxFile.AddSheet(sheetName)
  3033. if err != nil {
  3034. fmt.Println(err)
  3035. return
  3036. }
  3037. //标头
  3038. rowTitle := sheet.AddRow()
  3039. cellA := rowTitle.AddCell()
  3040. cellA.Value = "录入人"
  3041. cellB := rowTitle.AddCell()
  3042. cellB.Value = " 录入时间"
  3043. cellC := rowTitle.AddCell()
  3044. cellC.Value = " 客户名称"
  3045. cellMoney := rowTitle.AddCell()
  3046. cellMoney.Value = "录入类型"
  3047. cellConct := rowTitle.AddCell()
  3048. cellConct.Value = "录入内容"
  3049. for _, item := range resp.List {
  3050. row := sheet.AddRow()
  3051. cellAData := row.AddCell()
  3052. cellAData.Value = item.SysAdminName
  3053. cellBData := row.AddCell()
  3054. cellBData.Value = item.CreateTime
  3055. cellCData := row.AddCell()
  3056. cellCData.Value = mapCompamyName[item.CompanyId]
  3057. cellCnameData := row.AddCell()
  3058. cellCnameData.Value = item.RemarkType
  3059. cellContentData := row.AddCell()
  3060. cellContentData.Value = item.Content
  3061. }
  3062. err = xlsxFile.Save(downLoadnFilePath)
  3063. if err != nil {
  3064. fmt.Println(err)
  3065. return
  3066. }
  3067. }
  3068. func initcygx_user_feedback() {
  3069. remarkList, err := cygx.GetCygxUserFeedbackListIni2t()
  3070. if err != nil {
  3071. fmt.Println(err)
  3072. return
  3073. }
  3074. var companyids []int
  3075. var sellerIds []int
  3076. var adminIds []int
  3077. //var companyidsMap
  3078. for _, v := range remarkList {
  3079. item := new(company.CompanyHistoryRemarkResp)
  3080. item.CompanyId = v.CompanyId
  3081. if !utils.InArrayByInt(companyids, v.CompanyId) {
  3082. companyids = append(companyids, v.CompanyId)
  3083. }
  3084. if !utils.InArrayByInt(sellerIds, v.SellerId) {
  3085. sellerIds = append(sellerIds, v.SellerId)
  3086. }
  3087. if !utils.InArrayByInt(adminIds, v.AdminId) {
  3088. adminIds = append(adminIds, v.AdminId)
  3089. }
  3090. }
  3091. sysUserList, err := system.GetAdminList()
  3092. if err != nil {
  3093. fmt.Println(err)
  3094. return
  3095. }
  3096. adminMap := make(map[int]*system.Admin, 0)
  3097. for _, v := range sysUserList {
  3098. adminMap[v.AdminId] = v
  3099. }
  3100. listCompany, err := company.GetCompanyProductsByCompanyIdsAndProductIdinit(companyids)
  3101. if err != nil {
  3102. fmt.Println(err)
  3103. return
  3104. }
  3105. mapCompamyName := make(map[int]*company.CompanyProduct)
  3106. for _, v := range listCompany {
  3107. mapCompamyName[v.CompanyId] = v
  3108. }
  3109. //创建excel
  3110. dir, err := os.Executable()
  3111. exPath := filepath.Dir(dir)
  3112. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3113. xlsxFile := xlsx.NewFile()
  3114. if err != nil {
  3115. fmt.Println(err)
  3116. return
  3117. }
  3118. style := xlsx.NewStyle()
  3119. alignment := xlsx.Alignment{
  3120. Horizontal: "center",
  3121. Vertical: "center",
  3122. WrapText: true,
  3123. }
  3124. style.Alignment = alignment
  3125. style.ApplyAlignment = true
  3126. redStyle := xlsx.NewStyle()
  3127. redStyle.Alignment = alignment
  3128. redStyle.ApplyAlignment = true
  3129. redStyle.Font.Color = "ff0000"
  3130. //定义底色需要标黄的 单元格颜色
  3131. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  3132. redStyle.Fill = redFill
  3133. //redStyle.Border = *border
  3134. var sheetName string
  3135. sheetName = "针对kp的交流反馈"
  3136. sheet, err := xlsxFile.AddSheet(sheetName)
  3137. if err != nil {
  3138. fmt.Println(err)
  3139. return
  3140. }
  3141. //标头
  3142. rowTitle := sheet.AddRow()
  3143. cellA := rowTitle.AddCell()
  3144. cellA.Value = "服务销售姓名"
  3145. cellB := rowTitle.AddCell()
  3146. cellB.Value = " kp姓名"
  3147. cellC := rowTitle.AddCell()
  3148. cellC.Value = " 公司名称"
  3149. cellMoney := rowTitle.AddCell()
  3150. cellMoney.Value = "原销售"
  3151. cellConct := rowTitle.AddCell()
  3152. cellConct.Value = "交流反馈内容"
  3153. cellTime := rowTitle.AddCell()
  3154. cellTime.Value = "录入时间"
  3155. var SellerNameArr []string
  3156. for _, item := range sysUserList {
  3157. if !utils.InArrayByStr(SellerNameArr, item.RealName) {
  3158. SellerNameArr = append(SellerNameArr, item.RealName)
  3159. }
  3160. }
  3161. fmt.Println(SellerNameArr)
  3162. for _, v := range SellerNameArr {
  3163. fmt.Println(v)
  3164. }
  3165. //return
  3166. for _, v := range adminIds {
  3167. for _, item := range remarkList {
  3168. if item.AdminId != v {
  3169. //fmt.Println(v)
  3170. continue
  3171. }
  3172. fmt.Println(v)
  3173. row := sheet.AddRow()
  3174. cellAData := row.AddCell()
  3175. cellAData.Value = adminMap[item.AdminId].RealName
  3176. cellBData := row.AddCell()
  3177. cellBData.Value = item.RealName
  3178. cellCData := row.AddCell()
  3179. cellCData.Value = item.CompanyName
  3180. cellCnameData := row.AddCell()
  3181. cellCnameData.Value = mapCompamyName[item.CompanyId].SellerName
  3182. cellContentData := row.AddCell()
  3183. cellContentData.Value = item.Content
  3184. cellTimeData := row.AddCell()
  3185. cellTimeData.Value = item.CreateTime.Format(utils.FormatDateTime)
  3186. }
  3187. }
  3188. err = xlsxFile.Save(downLoadnFilePath)
  3189. if err != nil {
  3190. fmt.Println(err)
  3191. return
  3192. }
  3193. }
  3194. func initcompany_history_remark() {
  3195. remarkList, err := company.GetCompanyHistoryRemarkListInitExportinit()
  3196. if err != nil {
  3197. fmt.Println(err)
  3198. return
  3199. }
  3200. var companyids []int
  3201. var adminIds []int
  3202. //var companyidsMap
  3203. for _, v := range remarkList {
  3204. item := new(company.CompanyHistoryRemarkResp)
  3205. item.CompanyId = v.CompanyId
  3206. if !utils.InArrayByInt(companyids, v.CompanyId) {
  3207. companyids = append(companyids, v.CompanyId)
  3208. }
  3209. if !utils.InArrayByInt(adminIds, v.SysAdminId) {
  3210. adminIds = append(adminIds, v.SysAdminId)
  3211. }
  3212. switch v.TableName {
  3213. case "company_service_record":
  3214. item.RemarkType = "沟通记录"
  3215. case "company_product_remark":
  3216. item.RemarkType = "历史备注"
  3217. case "company_no_renewed_note":
  3218. item.RemarkType = "未续约备注"
  3219. case "company_renewal_reason":
  3220. item.RemarkType = "未续约说明"
  3221. case "cygx_user_feedback":
  3222. item.RemarkType = "交流反馈(" + v.RealName + ")"
  3223. default:
  3224. item.RemarkType = "备注"
  3225. }
  3226. }
  3227. listCompany, err := company.GetCompanyProductsByCompanyIdsAndProductIdinit(companyids)
  3228. if err != nil {
  3229. fmt.Println(err)
  3230. return
  3231. }
  3232. sysUserList, err := system.GetAdminList()
  3233. if err != nil {
  3234. fmt.Println(err)
  3235. return
  3236. }
  3237. adminMap := make(map[int]*system.Admin, 0)
  3238. for _, v := range sysUserList {
  3239. adminMap[v.AdminId] = v
  3240. }
  3241. mapCompamyName := make(map[int]*company.CompanyProduct)
  3242. for _, v := range listCompany {
  3243. mapCompamyName[v.CompanyId] = v
  3244. }
  3245. //创建excel
  3246. dir, err := os.Executable()
  3247. exPath := filepath.Dir(dir)
  3248. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3249. xlsxFile := xlsx.NewFile()
  3250. if err != nil {
  3251. fmt.Println(err)
  3252. return
  3253. }
  3254. style := xlsx.NewStyle()
  3255. alignment := xlsx.Alignment{
  3256. Horizontal: "center",
  3257. Vertical: "center",
  3258. WrapText: true,
  3259. }
  3260. style.Alignment = alignment
  3261. style.ApplyAlignment = true
  3262. redStyle := xlsx.NewStyle()
  3263. redStyle.Alignment = alignment
  3264. redStyle.ApplyAlignment = true
  3265. redStyle.Font.Color = "ff0000"
  3266. //定义底色需要标黄的 单元格颜色
  3267. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  3268. redStyle.Fill = redFill
  3269. //redStyle.Border = *border
  3270. var sheetName string
  3271. sheetName = "针对kp的交流反馈"
  3272. sheet, err := xlsxFile.AddSheet(sheetName)
  3273. if err != nil {
  3274. fmt.Println(err)
  3275. return
  3276. }
  3277. //标头
  3278. rowTitle := sheet.AddRow()
  3279. cellA := rowTitle.AddCell()
  3280. cellA.Value = "服务销售姓名"
  3281. cellC := rowTitle.AddCell()
  3282. cellC.Value = " 公司名称"
  3283. cellMoney := rowTitle.AddCell()
  3284. cellMoney.Value = "原销售"
  3285. cellConct := rowTitle.AddCell()
  3286. cellConct.Value = "交流反馈内容"
  3287. cellType := rowTitle.AddCell()
  3288. cellType.Value = "记录类型"
  3289. cellTime := rowTitle.AddCell()
  3290. cellTime.Value = "录入时间"
  3291. var SellerNameArr []string
  3292. for _, item := range remarkList {
  3293. if !utils.InArrayByStr(SellerNameArr, mapCompamyName[item.CompanyId].ShareSeller) {
  3294. SellerNameArr = append(SellerNameArr, mapCompamyName[item.CompanyId].ShareSeller)
  3295. }
  3296. }
  3297. fmt.Println(SellerNameArr)
  3298. for _, v := range SellerNameArr {
  3299. fmt.Println(v)
  3300. }
  3301. //return
  3302. for _, v := range adminIds {
  3303. for _, item := range remarkList {
  3304. if item.SysAdminId != v {
  3305. //fmt.Println(v)
  3306. continue
  3307. }
  3308. fmt.Println(v)
  3309. row := sheet.AddRow()
  3310. cellAData := row.AddCell()
  3311. cellAData.Value = item.SysAdminName
  3312. cellCData := row.AddCell()
  3313. cellCData.Value = mapCompamyName[item.CompanyId].CompanyName
  3314. cellCnameData := row.AddCell()
  3315. cellCnameData.Value = mapCompamyName[item.CompanyId].SellerName
  3316. cellContentData := row.AddCell()
  3317. cellContentData.Value = item.Content
  3318. celltypeData := row.AddCell()
  3319. switch item.TableName {
  3320. case "company_service_record":
  3321. celltypeData.Value = "沟通记录"
  3322. case "company_product_remark":
  3323. celltypeData.Value = "历史备注"
  3324. default:
  3325. celltypeData.Value = "历史备注"
  3326. }
  3327. cellTimeData := row.AddCell()
  3328. cellTimeData.Value = item.CreateTime.Format(utils.FormatDateTime)
  3329. }
  3330. }
  3331. err = xlsxFile.Save(downLoadnFilePath)
  3332. if err != nil {
  3333. fmt.Println(err)
  3334. return
  3335. }
  3336. }
  3337. func initRsListinit() {
  3338. list, errList := roadshow.GetRsCalendarMeetingUserByRaiinit()
  3339. if errList != nil {
  3340. fmt.Println(errList)
  3341. return
  3342. }
  3343. var companyids []int
  3344. //var companyidsMap
  3345. var rsCalendarIds []int
  3346. for _, v := range list {
  3347. if !utils.InArrayByInt(companyids, v.CompanyId) {
  3348. companyids = append(companyids, v.CompanyId)
  3349. }
  3350. rsCalendarIds = append(rsCalendarIds, v.RsCalendarId)
  3351. }
  3352. listCompany, err := company.GetCompanyProductsByCompanyIdsAndProductIdinit(companyids)
  3353. if err != nil {
  3354. fmt.Println(err)
  3355. return
  3356. }
  3357. mapCompamyName := make(map[int]*company.CompanyProduct)
  3358. for _, v := range listCompany {
  3359. mapCompamyName[v.CompanyId] = v
  3360. }
  3361. mapRsCalendarLabel := make(map[int][]string) //1v1 路演标签
  3362. mapRsCalendarLabel = cygxService.GetRsCalendarLabelByRsCalendarIds(rsCalendarIds)
  3363. //创建excel
  3364. dir, err := os.Executable()
  3365. exPath := filepath.Dir(dir)
  3366. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3367. xlsxFile := xlsx.NewFile()
  3368. if err != nil {
  3369. fmt.Println(err)
  3370. return
  3371. }
  3372. style := xlsx.NewStyle()
  3373. alignment := xlsx.Alignment{
  3374. Horizontal: "center",
  3375. Vertical: "center",
  3376. WrapText: true,
  3377. }
  3378. style.Alignment = alignment
  3379. style.ApplyAlignment = true
  3380. redStyle := xlsx.NewStyle()
  3381. redStyle.Alignment = alignment
  3382. redStyle.ApplyAlignment = true
  3383. redStyle.Font.Color = "ff0000"
  3384. //定义底色需要标黄的 单元格颜色
  3385. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  3386. redStyle.Fill = redFill
  3387. //redStyle.Border = *border
  3388. var sheetName string
  3389. sheetName = "活动"
  3390. sheet, err := xlsxFile.AddSheet(sheetName)
  3391. if err != nil {
  3392. fmt.Println(err)
  3393. return
  3394. }
  3395. //标头
  3396. rowTitle := sheet.AddRow()
  3397. cellA := rowTitle.AddCell()
  3398. cellA.Value = "公司名称"
  3399. cellB := rowTitle.AddCell()
  3400. cellB.Value = "所属服务销售"
  3401. cellC := rowTitle.AddCell()
  3402. cellC.Value = "原销售"
  3403. cellD := rowTitle.AddCell()
  3404. cellD.Value = "姓名"
  3405. cellE := rowTitle.AddCell()
  3406. cellE.Value = "手机号"
  3407. cellF := rowTitle.AddCell()
  3408. cellF.Value = "路演时间"
  3409. cellG := rowTitle.AddCell()
  3410. cellG.Value = "研究员"
  3411. cellH := rowTitle.AddCell()
  3412. cellH.Value = "路演形式"
  3413. cellI := rowTitle.AddCell()
  3414. cellI.Value = "路演主题"
  3415. cellJ := rowTitle.AddCell()
  3416. cellJ.Value = "主题标签"
  3417. for _, v := range companyids {
  3418. for _, item := range list {
  3419. if item.CompanyId != v {
  3420. //fmt.Println(v)
  3421. continue
  3422. }
  3423. row := sheet.AddRow()
  3424. cellAData := row.AddCell()
  3425. cellAData.Value = item.CompanyName
  3426. cellBData := row.AddCell()
  3427. cellCData := row.AddCell()
  3428. if mapCompamyName[item.CompanyId] != nil {
  3429. cellBData.Value = mapCompamyName[item.CompanyId].ShareSeller
  3430. cellCData.Value = mapCompamyName[item.CompanyId].SellerName
  3431. }
  3432. cellDData := row.AddCell()
  3433. cellDData.Value = item.RealName
  3434. cellEData := row.AddCell()
  3435. cellEData.Value = item.Mobile
  3436. cellFData := row.AddCell()
  3437. cellFData.Value = item.StartDate + " " + item.StartTime
  3438. cellGData := row.AddCell()
  3439. cellGData.Value = item.ResearcherName
  3440. cellHData := row.AddCell()
  3441. cellHData.Value = item.RoadshowType
  3442. cellIData := row.AddCell()
  3443. cellIData.Value = item.RoadShowTheme
  3444. cellJData := row.AddCell()
  3445. cellJData.Value = strings.Join(mapRsCalendarLabel[item.RsCalendarId], ",")
  3446. }
  3447. }
  3448. err = xlsxFile.Save(downLoadnFilePath)
  3449. if err != nil {
  3450. fmt.Println(err)
  3451. return
  3452. }
  3453. }
  3454. //func init() {
  3455. // initAct22()
  3456. //}
  3457. func initYaxuan() {
  3458. udi := 121323
  3459. var nickname = "鱼与塘"
  3460. listYax, errList := cygx.GetYanxuanSpecialListByconditioninit(udi)
  3461. if errList != nil {
  3462. fmt.Println(errList)
  3463. return
  3464. }
  3465. //创建excel
  3466. dir, err := os.Executable()
  3467. exPath := filepath.Dir(dir)
  3468. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3469. xlsxFile := xlsx.NewFile()
  3470. if err != nil {
  3471. fmt.Println(err)
  3472. return
  3473. }
  3474. style := xlsx.NewStyle()
  3475. alignment := xlsx.Alignment{
  3476. Horizontal: "center",
  3477. Vertical: "center",
  3478. WrapText: true,
  3479. }
  3480. style.Alignment = alignment
  3481. style.ApplyAlignment = true
  3482. redStyle := xlsx.NewStyle()
  3483. redStyle.Alignment = alignment
  3484. redStyle.ApplyAlignment = true
  3485. redStyle.Font.Color = "ff0000"
  3486. //定义底色需要标黄的 单元格颜色
  3487. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  3488. redStyle.Fill = redFill
  3489. //redStyle.Border = *border
  3490. var sheetName string
  3491. sheetName = "活动"
  3492. sheet, err := xlsxFile.AddSheet(sheetName)
  3493. if err != nil {
  3494. fmt.Println(err)
  3495. return
  3496. }
  3497. //标头
  3498. rowTitle := sheet.AddRow()
  3499. cellA := rowTitle.AddCell()
  3500. cellA.Value = "文章标题"
  3501. cellB := rowTitle.AddCell()
  3502. cellB.Value = "发布时间"
  3503. cellC := rowTitle.AddCell()
  3504. cellC.Value = "作者昵称"
  3505. cellD := rowTitle.AddCell()
  3506. cellD.Value = "读者手机号"
  3507. cellE := rowTitle.AddCell()
  3508. cellE.Value = "姓名"
  3509. cellF := rowTitle.AddCell()
  3510. cellF.Value = "公司名"
  3511. for _, v := range listYax {
  3512. var condition string
  3513. var pars []interface{}
  3514. condition = ` AND yanxuan_special_id = ? AND company_id != 16 GROUP BY mobile ORDER BY create_time DESC `
  3515. pars = append(pars, v.Id)
  3516. list, err := cygx.GetCygxYanxuanSpecialRecordList(condition, pars)
  3517. if err != nil {
  3518. fmt.Println(err)
  3519. return
  3520. }
  3521. for _, item := range list {
  3522. row := sheet.AddRow()
  3523. cellAData := row.AddCell()
  3524. cellAData.Value = v.Title
  3525. cellBData := row.AddCell()
  3526. cellBData.Value = v.PublishTime.Format(utils.FormatDateTime)
  3527. cellCData := row.AddCell()
  3528. cellCData.Value = nickname
  3529. cellDData := row.AddCell()
  3530. cellDData.Value = item.RealName
  3531. cellEData := row.AddCell()
  3532. cellEData.Value = item.Mobile
  3533. cellFData := row.AddCell()
  3534. cellFData.Value = item.CompanyName
  3535. }
  3536. }
  3537. err = xlsxFile.Save(downLoadnFilePath)
  3538. if err != nil {
  3539. fmt.Println(err)
  3540. return
  3541. }
  3542. }
  3543. func initart22() {
  3544. //行业
  3545. var condition string
  3546. var pars []interface{}
  3547. condition += ` AND art.publish_date >= '2024-10-01'
  3548. AND art.publish_status = 1
  3549. AND art.article_type_id = 0 `
  3550. //return
  3551. condition += ` GROUP BY art.article_id ORDER BY art.publish_date DESC `
  3552. //fmt.Println(condition)
  3553. list, err := cygx.GetReportArticleList(condition, pars, 0, 9999, 1)
  3554. if err != nil {
  3555. fmt.Println(err)
  3556. return
  3557. }
  3558. fmt.Println("list", len(list))
  3559. //return
  3560. reportMap := make(map[int]string)
  3561. listMap, err := cygx.GetReportMapping()
  3562. if err != nil {
  3563. fmt.Println(err)
  3564. return
  3565. }
  3566. for _, v := range listMap {
  3567. reportMap[v.CategoryId] = v.MatchTypeName
  3568. }
  3569. //创建excel
  3570. dir, err := os.Executable()
  3571. exPath := filepath.Dir(dir)
  3572. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3573. xlsxFile := xlsx.NewFile()
  3574. if err != nil {
  3575. fmt.Println(err)
  3576. return
  3577. }
  3578. style := xlsx.NewStyle()
  3579. alignment := xlsx.Alignment{
  3580. Horizontal: "center",
  3581. Vertical: "center",
  3582. WrapText: true,
  3583. }
  3584. style.Alignment = alignment
  3585. style.ApplyAlignment = true
  3586. redStyle := xlsx.NewStyle()
  3587. redStyle.Alignment = alignment
  3588. redStyle.ApplyAlignment = true
  3589. redStyle.Font.Color = "ff0000"
  3590. //定义底色需要标黄的 单元格颜色
  3591. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  3592. redStyle.Fill = redFill
  3593. //redStyle.Border = *border
  3594. var sheetName string
  3595. sheetName = "数据"
  3596. sheet, err := xlsxFile.AddSheet(sheetName)
  3597. if err != nil {
  3598. fmt.Println(err)
  3599. return
  3600. }
  3601. //标头
  3602. rowTitle := sheet.AddRow()
  3603. cellAt := rowTitle.AddCell()
  3604. cellAt.Value = " 发布时间 "
  3605. cellPd := rowTitle.AddCell()
  3606. cellPd.Value = "行业"
  3607. //cellA := rowTitle.AddCell()
  3608. //cellA.Value = "系列"
  3609. cellB := rowTitle.AddCell()
  3610. cellB.Value = "报告名称"
  3611. for _, v := range list {
  3612. //if v.SubCategoryName != "行业深度" {
  3613. // continue
  3614. //}
  3615. row := sheet.AddRow()
  3616. cellADatatitle := row.AddCell()
  3617. cellADatatitle.Value = v.PublishDate
  3618. cellADataPd := row.AddCell()
  3619. if v.ChartPermissionName == "" {
  3620. cellADataPd.Value = v.CategoryName
  3621. } else {
  3622. cellADataPd.Value = v.ChartPermissionName
  3623. }
  3624. //cellAData := row.AddCell()
  3625. //cellAData.Value = v.SubCategoryName
  3626. cellBData := row.AddCell()
  3627. cellBData.Value = v.Title
  3628. }
  3629. err = xlsxFile.Save(downLoadnFilePath)
  3630. if err != nil {
  3631. fmt.Println(err)
  3632. return
  3633. }
  3634. }
  3635. func initAct22() {
  3636. //行业
  3637. var condition string
  3638. var pars []interface{}
  3639. condition += ` AND chart_permission_id != 31 AND activity_time > '2024-10-01' AND activity_time < '2024-12-24' AND publish_status = 1 ORDER BY activity_time DESC `
  3640. //fmt.Println(condition)
  3641. list, err := cygx.GetActivityListAll(condition, pars, 0, 9999)
  3642. if err != nil {
  3643. fmt.Println(err)
  3644. return
  3645. }
  3646. fmt.Println("list", len(list))
  3647. //创建excel
  3648. dir, err := os.Executable()
  3649. exPath := filepath.Dir(dir)
  3650. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3651. xlsxFile := xlsx.NewFile()
  3652. if err != nil {
  3653. fmt.Println(err)
  3654. return
  3655. }
  3656. style := xlsx.NewStyle()
  3657. alignment := xlsx.Alignment{
  3658. Horizontal: "center",
  3659. Vertical: "center",
  3660. WrapText: true,
  3661. }
  3662. style.Alignment = alignment
  3663. style.ApplyAlignment = true
  3664. redStyle := xlsx.NewStyle()
  3665. redStyle.Alignment = alignment
  3666. redStyle.ApplyAlignment = true
  3667. redStyle.Font.Color = "ff0000"
  3668. //定义底色需要标黄的 单元格颜色
  3669. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  3670. redStyle.Fill = redFill
  3671. //redStyle.Border = *border
  3672. var sheetName string
  3673. sheetName = "数据"
  3674. sheet, err := xlsxFile.AddSheet(sheetName)
  3675. if err != nil {
  3676. fmt.Println(err)
  3677. return
  3678. }
  3679. //标头
  3680. rowTitle := sheet.AddRow()
  3681. cellAt := rowTitle.AddCell()
  3682. cellAt.Value = " 活动时间 "
  3683. cellPd := rowTitle.AddCell()
  3684. cellPd.Value = "行业"
  3685. //cellA := rowTitle.AddCell()
  3686. //cellA.Value = "系列"
  3687. cellB := rowTitle.AddCell()
  3688. cellB.Value = " 活动名称"
  3689. for _, v := range list {
  3690. //if v.SubCategoryName != "行业深度" {
  3691. // continue
  3692. //}
  3693. row := sheet.AddRow()
  3694. cellADatatitle := row.AddCell()
  3695. cellADatatitle.Value = v.ActivityTime
  3696. cellADataPd := row.AddCell()
  3697. cellADataPd.Value = v.ChartPermissionName
  3698. //cellAData := row.AddCell()
  3699. //cellAData.Value = v.SubCategoryName
  3700. cellBData := row.AddCell()
  3701. cellBData.Value = v.ActivityName
  3702. }
  3703. err = xlsxFile.Save(downLoadnFilePath)
  3704. if err != nil {
  3705. fmt.Println(err)
  3706. return
  3707. }
  3708. }
  3709. //func init() {
  3710. // initQuanyi()
  3711. //}
  3712. func initLuyan() {
  3713. listEmail, err := cygx.GetAskEmail()
  3714. if err != nil {
  3715. fmt.Println(err)
  3716. return
  3717. }
  3718. var adminIds []int
  3719. mapchart_permission_name := make(map[string]bool)
  3720. var arrchart_permission_name []string
  3721. for _, v := range listEmail {
  3722. if v.AdminId > 0 {
  3723. adminIds = append(adminIds, v.AdminId)
  3724. }
  3725. if mapchart_permission_name[v.ChartPermissionName] || v.ChartPermissionName == "" {
  3726. continue
  3727. }
  3728. mapchart_permission_name[v.ChartPermissionName] = true
  3729. arrchart_permission_name = append(arrchart_permission_name, v.ChartPermissionName)
  3730. }
  3731. var condition string
  3732. var pars []interface{}
  3733. condition = " AND r.researcher_id IN (" + utils.GetOrmInReplace(len(adminIds)) + ") "
  3734. pars = append(pars, adminIds)
  3735. listRoadShow, err := roadshow.GetCalendarListInit(condition, pars)
  3736. if err != nil {
  3737. fmt.Println(err)
  3738. return
  3739. }
  3740. var companyIds []int
  3741. mapCompanyId := make(map[int]bool)
  3742. for _, v := range listRoadShow {
  3743. if mapCompanyId[v.CompanyId] || v.CompanyId == 0 {
  3744. continue
  3745. }
  3746. companyIds = append(companyIds, v.CompanyId)
  3747. mapCompanyId[v.CompanyId] = true
  3748. }
  3749. companyProductItems, err := company.GetCompanyProductByCompanyIdSAndProductId(companyIds, 2)
  3750. if err != nil {
  3751. fmt.Println(err)
  3752. return
  3753. }
  3754. fmt.Println(111)
  3755. mapCompanyStatus := make(map[int]string)
  3756. for _, v := range companyProductItems {
  3757. mapCompanyStatus[v.CompanyId] = v.Status
  3758. }
  3759. permissionList, err := company.GetCompanyProductReportPermissionLists(companyIds, 2)
  3760. if err != nil {
  3761. fmt.Println(err)
  3762. return
  3763. }
  3764. permissionArr := make(map[int][]string)
  3765. mappermissionArr := make(map[string]bool)
  3766. for _, v := range permissionList {
  3767. if mappermissionArr[fmt.Sprint(v.CompanyId, v.PermissionName)] {
  3768. continue
  3769. }
  3770. if mapCompanyStatus[v.CompanyId] == "正式" && v.Status != "正式" {
  3771. continue
  3772. }
  3773. permissionArr[v.CompanyId] = append(permissionArr[v.CompanyId], v.PermissionName)
  3774. mappermissionArr[fmt.Sprint(v.CompanyId, v.PermissionName)] = true
  3775. }
  3776. fmt.Println(len(listRoadShow))
  3777. fmt.Println(arrchart_permission_name)
  3778. //return
  3779. //创建excel
  3780. dir, err := os.Executable()
  3781. exPath := filepath.Dir(dir)
  3782. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3783. xlsxFile := xlsx.NewFile()
  3784. if err != nil {
  3785. fmt.Println(err)
  3786. return
  3787. }
  3788. style := xlsx.NewStyle()
  3789. alignment := xlsx.Alignment{
  3790. Horizontal: "center",
  3791. Vertical: "center",
  3792. WrapText: true,
  3793. }
  3794. style.Alignment = alignment
  3795. style.ApplyAlignment = true
  3796. for _, v := range arrchart_permission_name {
  3797. var sheetName string
  3798. sheetName = v
  3799. sheet, err := xlsxFile.AddSheet(sheetName)
  3800. if err != nil {
  3801. fmt.Println(err)
  3802. return
  3803. }
  3804. //标头
  3805. rowTitle := sheet.AddRow()
  3806. cellA := rowTitle.AddCell()
  3807. cellA.Value = "研究员"
  3808. cellB := rowTitle.AddCell()
  3809. cellB.Value = "行业"
  3810. cellC := rowTitle.AddCell()
  3811. cellC.Value = "路演时间"
  3812. cellCSeller := rowTitle.AddCell()
  3813. cellCSeller.Value = "客户名称"
  3814. cellD := rowTitle.AddCell()
  3815. cellD.Value = "申请销售"
  3816. cellE := rowTitle.AddCell()
  3817. cellE.Value = "当前客户状态"
  3818. cellF := rowTitle.AddCell()
  3819. cellF.Value = "当前行业权限"
  3820. for _, vE := range listEmail {
  3821. if vE.ChartPermissionName != v {
  3822. continue
  3823. }
  3824. for _, vS := range listRoadShow {
  3825. if vS.ResearcherId != strconv.Itoa(vE.AdminId) {
  3826. continue
  3827. }
  3828. row := sheet.AddRow()
  3829. cellAData := row.AddCell()
  3830. cellAData.Value = vE.Name
  3831. cellBData := row.AddCell()
  3832. cellBData.Value = v
  3833. cellCData := row.AddCell()
  3834. cellCData.Value = vS.StartDate + " " + vS.StartTime
  3835. cellDData := row.AddCell()
  3836. cellDData.Value = vS.CompanyName
  3837. cellEData := row.AddCell()
  3838. cellEData.Value = vS.SysUserRealName
  3839. cellFData := row.AddCell()
  3840. cellFData.Value = mapCompanyStatus[vS.CompanyId]
  3841. cellGData := row.AddCell()
  3842. cellGData.Value = strings.Join(permissionArr[vS.CompanyId], "/")
  3843. }
  3844. }
  3845. }
  3846. err = xlsxFile.Save(downLoadnFilePath)
  3847. if err != nil {
  3848. fmt.Println(err)
  3849. return
  3850. }
  3851. }
  3852. func initQuanyi() {
  3853. var condition string
  3854. var pars []interface{}
  3855. condition = ` AND product_id = 2 AND industry_id > 0 GROUP BY industry_id `
  3856. productList, err := company.GetCompanyProductList(condition, pars)
  3857. if err != nil {
  3858. fmt.Println(err)
  3859. return
  3860. }
  3861. condition = ` AND product_id = 2 AND industry_id > 0 `
  3862. productListData, err := company.GetCompanyProductList(condition, pars)
  3863. if err != nil {
  3864. fmt.Println(err)
  3865. return
  3866. }
  3867. //return
  3868. //创建excel
  3869. dir, err := os.Executable()
  3870. exPath := filepath.Dir(dir)
  3871. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3872. xlsxFile := xlsx.NewFile()
  3873. if err != nil {
  3874. fmt.Println(err)
  3875. return
  3876. }
  3877. style := xlsx.NewStyle()
  3878. alignment := xlsx.Alignment{
  3879. Horizontal: "center",
  3880. Vertical: "center",
  3881. WrapText: true,
  3882. }
  3883. style.Alignment = alignment
  3884. style.ApplyAlignment = true
  3885. for _, v := range productList {
  3886. var sheetName string
  3887. sheetName = v.IndustryName
  3888. sheet, err := xlsxFile.AddSheet(sheetName)
  3889. if err != nil {
  3890. fmt.Println(err)
  3891. return
  3892. }
  3893. //标头
  3894. rowTitle := sheet.AddRow()
  3895. cellA := rowTitle.AddCell()
  3896. cellA.Value = "客户名称"
  3897. cellB := rowTitle.AddCell()
  3898. cellB.Value = "行业"
  3899. cellC := rowTitle.AddCell()
  3900. cellC.Value = "状态"
  3901. cellCSeller := rowTitle.AddCell()
  3902. cellCSeller.Value = "销售"
  3903. for _, vE := range productListData {
  3904. if vE.IndustryId != v.IndustryId {
  3905. continue
  3906. }
  3907. row := sheet.AddRow()
  3908. cellAData := row.AddCell()
  3909. cellAData.Value = vE.CompanyName
  3910. cellBData := row.AddCell()
  3911. cellBData.Value = vE.IndustryName
  3912. cellCData := row.AddCell()
  3913. cellCData.Value = vE.Status
  3914. cellDData := row.AddCell()
  3915. cellDData.Value = vE.SellerName
  3916. }
  3917. }
  3918. err = xlsxFile.Save(downLoadnFilePath)
  3919. if err != nil {
  3920. fmt.Println(err)
  3921. return
  3922. }
  3923. fmt.Println("end")
  3924. }
  3925. func initBeizhu() {
  3926. productList, err := company.GetCompanyHistoryRemarkListInit()
  3927. if err != nil {
  3928. fmt.Println(err)
  3929. return
  3930. }
  3931. var companyids []int
  3932. for _, v := range productList {
  3933. companyids = append(companyids, v.CompanyId)
  3934. }
  3935. listCompany, err := company.GetOverseasCompanysByCompanyIds(companyids)
  3936. if err != nil {
  3937. fmt.Println(err)
  3938. return
  3939. }
  3940. mapCompamyName := make(map[int]string)
  3941. for _, v := range listCompany {
  3942. mapCompamyName[v.CompanyId] = v.CompanyName
  3943. }
  3944. //创建excel
  3945. dir, err := os.Executable()
  3946. exPath := filepath.Dir(dir)
  3947. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  3948. xlsxFile := xlsx.NewFile()
  3949. if err != nil {
  3950. fmt.Println(err)
  3951. return
  3952. }
  3953. style := xlsx.NewStyle()
  3954. alignment := xlsx.Alignment{
  3955. Horizontal: "center",
  3956. Vertical: "center",
  3957. WrapText: true,
  3958. }
  3959. style.Alignment = alignment
  3960. style.ApplyAlignment = true
  3961. var sheetName string
  3962. sheetName = "备注"
  3963. sheet, err := xlsxFile.AddSheet(sheetName)
  3964. if err != nil {
  3965. fmt.Println(err)
  3966. return
  3967. }
  3968. //标头
  3969. rowTitle := sheet.AddRow()
  3970. cellA := rowTitle.AddCell()
  3971. cellA.Value = "客户名称"
  3972. cellB := rowTitle.AddCell()
  3973. cellB.Value = "内容"
  3974. cellC := rowTitle.AddCell()
  3975. cellC.Value = "类型"
  3976. cellCSeller := rowTitle.AddCell()
  3977. cellCSeller.Value = "创建人"
  3978. cellTime := rowTitle.AddCell()
  3979. cellTime.Value = "创建时间"
  3980. for _, vE := range productList {
  3981. row := sheet.AddRow()
  3982. cellAData := row.AddCell()
  3983. cellAData.Value = mapCompamyName[vE.CompanyId]
  3984. cellBData := row.AddCell()
  3985. cellBData.Value = vE.Content
  3986. cellCData := row.AddCell()
  3987. switch vE.TableName {
  3988. case "company_service_record":
  3989. cellCData.Value = "沟通记录"
  3990. case "company_product_remark":
  3991. cellCData.Value = "备注"
  3992. case "company_no_renewed_note":
  3993. cellCData.Value = "未续约备注"
  3994. case "company_renewal_reason":
  3995. cellCData.Value = "未续约说明"
  3996. case "cygx_user_feedback":
  3997. cellCData.Value = "交流反馈(" + vE.RealName + ")"
  3998. default:
  3999. cellCData.Value = "备注"
  4000. }
  4001. cellNameData := row.AddCell()
  4002. cellNameData.Value = vE.SysAdminName
  4003. cellDData := row.AddCell()
  4004. cellDData.Value = vE.ShowTime.Format(utils.FormatDateTime)
  4005. }
  4006. err = xlsxFile.Save(downLoadnFilePath)
  4007. if err != nil {
  4008. fmt.Println(err)
  4009. return
  4010. }
  4011. fmt.Println("end")
  4012. }
  4013. func initUserbill() {
  4014. //研选阅读明细
  4015. var conditionBill string
  4016. var parsBill []interface{}
  4017. monthArr := []string{"08", "09", "10", "11", "12"}
  4018. conditionBill = " AND view_time > '2024-07-01' AND view_time < '2025-01-01' "
  4019. listBill, e := cygx.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  4020. if e != nil {
  4021. fmt.Println(e)
  4022. return
  4023. }
  4024. mapCompanyIds := make(map[int]bool)
  4025. mapSellerServerCountTotal := make(map[int]float64)
  4026. mapSellerServerCount := make(map[string]float64)
  4027. var companyids []int
  4028. for _, v := range listBill {
  4029. if mapCompanyIds[v.CompanyId] {
  4030. continue
  4031. }
  4032. companyids = append(companyids, v.CompanyId)
  4033. mapCompanyIds[v.CompanyId] = true
  4034. }
  4035. //listCompany, err := company.GetOverseasCompanysByCompanyIds(companyids)
  4036. //if err != nil {
  4037. // fmt.Println(err)
  4038. // return
  4039. //}
  4040. //mapCompamyName := make(map[int]string)
  4041. //
  4042. //for _, v := range listCompany {
  4043. // mapCompamyName[v.CompanyId] = v.CompanyName
  4044. //}
  4045. companyProductItems, err := company.GetCompanyProductByCompanyIdSAndProductId(companyids, 2)
  4046. if err != nil {
  4047. fmt.Println(err)
  4048. return
  4049. }
  4050. mapCompamySeller := make(map[int]int)
  4051. for _, v := range companyProductItems {
  4052. mapCompamySeller[v.CompanyId] = v.ShareSellerId
  4053. }
  4054. for _, v := range listBill {
  4055. for _, m := range monthArr {
  4056. vM := v.ViewTime[5:7]
  4057. if m != vM {
  4058. continue
  4059. }
  4060. //fmt.Println(vM)
  4061. mapSellerServerCount[fmt.Sprint(mapCompamySeller[v.CompanyId], "_", m)] += v.ServeCount
  4062. }
  4063. mapSellerServerCountTotal[(mapCompamySeller[v.CompanyId])] += v.ServeCount
  4064. }
  4065. adminUserList, err := system.GetRaiAdminInit()
  4066. if err != nil {
  4067. fmt.Println(err)
  4068. return
  4069. }
  4070. //创建excel
  4071. dir, err := os.Executable()
  4072. exPath := filepath.Dir(dir)
  4073. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  4074. xlsxFile := xlsx.NewFile()
  4075. if err != nil {
  4076. fmt.Println(err)
  4077. return
  4078. }
  4079. style := xlsx.NewStyle()
  4080. alignment := xlsx.Alignment{
  4081. Horizontal: "center",
  4082. Vertical: "center",
  4083. WrapText: true,
  4084. }
  4085. style.Alignment = alignment
  4086. style.ApplyAlignment = true
  4087. var sheetName string
  4088. sheetName = "备注"
  4089. sheet, err := xlsxFile.AddSheet(sheetName)
  4090. if err != nil {
  4091. fmt.Println(err)
  4092. return
  4093. }
  4094. //标头
  4095. rowTitle := sheet.AddRow()
  4096. cellA := rowTitle.AddCell()
  4097. cellA.Value = "服务销售名称"
  4098. cellB8 := rowTitle.AddCell()
  4099. cellB8.Value = "8月份服务量"
  4100. cellB9 := rowTitle.AddCell()
  4101. cellB9.Value = "9月份服务量"
  4102. cellB10 := rowTitle.AddCell()
  4103. cellB10.Value = "10月份服务量"
  4104. cellB11 := rowTitle.AddCell()
  4105. cellB11.Value = "11月份服务量"
  4106. cellB12 := rowTitle.AddCell()
  4107. cellB12.Value = "12月份服务量"
  4108. cellB := rowTitle.AddCell()
  4109. cellB.Value = "总服务量"
  4110. for _, vE := range adminUserList {
  4111. row := sheet.AddRow()
  4112. cellAData := row.AddCell()
  4113. cellAData.Value = vE.RealName
  4114. cellBData8 := row.AddCell()
  4115. cellBData8.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.AdminId, "_08")])
  4116. cellBData9 := row.AddCell()
  4117. cellBData9.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.AdminId, "_09")])
  4118. cellBData10 := row.AddCell()
  4119. cellBData10.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.AdminId, "_10")])
  4120. cellBData11 := row.AddCell()
  4121. cellBData11.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.AdminId, "_11")])
  4122. cellBData12 := row.AddCell()
  4123. cellBData12.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.AdminId, "_12")])
  4124. cellBData := row.AddCell()
  4125. cellBData.Value = fmt.Sprint(mapSellerServerCountTotal[vE.AdminId])
  4126. }
  4127. err = xlsxFile.Save(downLoadnFilePath)
  4128. if err != nil {
  4129. fmt.Println(err)
  4130. return
  4131. }
  4132. fmt.Println("end")
  4133. }
  4134. func initUserCompanybill() {
  4135. //研选阅读明细
  4136. var conditionBill string
  4137. var parsBill []interface{}
  4138. conditionBill = " AND view_time > '2024-07-01' AND view_time < '2025-01-01' AND company_id IN (98, 1444, 1585, 5332, 6351, 8354, 8683, 9310, 13500) "
  4139. companyIdsArr := []int{98, 1444, 1585, 5332, 6351, 8354, 8683, 9310, 13500}
  4140. listBill, e := cygx.GetCygxRaiCompanyUserBillListAll(conditionBill, parsBill)
  4141. if e != nil {
  4142. fmt.Println(e)
  4143. return
  4144. }
  4145. mapCompanyIds := make(map[int]bool)
  4146. mapSellerServerCountTotal := make(map[int]float64)
  4147. mapSellerServerCount := make(map[string]float64)
  4148. var companyids []int
  4149. for _, v := range listBill {
  4150. if mapCompanyIds[v.CompanyId] {
  4151. continue
  4152. }
  4153. companyids = append(companyids, v.CompanyId)
  4154. mapCompanyIds[v.CompanyId] = true
  4155. }
  4156. listCompany, err := company.GetOverseasCompanysByCompanyIds(companyIdsArr)
  4157. if err != nil {
  4158. fmt.Println(err)
  4159. return
  4160. }
  4161. mapCompamyName := make(map[int]string)
  4162. for _, v := range listCompany {
  4163. mapCompamyName[v.CompanyId] = v.CompanyName
  4164. }
  4165. monthArr := []string{"08", "09", "10", "11", "12"}
  4166. companyProductItems, err := company.GetCompanyProductByCompanyIdSAndProductId(companyids, 2)
  4167. if err != nil {
  4168. fmt.Println(err)
  4169. return
  4170. }
  4171. mapCompamySeller := make(map[int]int)
  4172. for _, v := range companyProductItems {
  4173. mapCompamySeller[v.CompanyId] = v.ShareSellerId
  4174. }
  4175. //for _, v := range listBill {
  4176. // mapSellerServerCount[v.CompanyId] += v.ServeCount
  4177. //}
  4178. for _, v := range listBill {
  4179. for _, m := range monthArr {
  4180. vM := v.ViewTime[5:7]
  4181. if m != vM {
  4182. continue
  4183. }
  4184. //fmt.Println(vM)
  4185. mapSellerServerCount[fmt.Sprint(v.CompanyId, "_", m)] += v.ServeCount
  4186. }
  4187. mapSellerServerCountTotal[v.CompanyId] += v.ServeCount
  4188. }
  4189. fmt.Println(mapSellerServerCount)
  4190. //
  4191. ////ficc 研究员
  4192. //adminUserList, err := system.GetRaiAdminInit()
  4193. //if err != nil {
  4194. // fmt.Println(err)
  4195. // return
  4196. //}
  4197. //创建excel
  4198. dir, err := os.Executable()
  4199. exPath := filepath.Dir(dir)
  4200. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  4201. xlsxFile := xlsx.NewFile()
  4202. if err != nil {
  4203. fmt.Println(err)
  4204. return
  4205. }
  4206. style := xlsx.NewStyle()
  4207. alignment := xlsx.Alignment{
  4208. Horizontal: "center",
  4209. Vertical: "center",
  4210. WrapText: true,
  4211. }
  4212. style.Alignment = alignment
  4213. style.ApplyAlignment = true
  4214. var sheetName string
  4215. sheetName = "公司互动统计"
  4216. sheet, err := xlsxFile.AddSheet(sheetName)
  4217. if err != nil {
  4218. fmt.Println(err)
  4219. return
  4220. }
  4221. //标头
  4222. rowTitle := sheet.AddRow()
  4223. cellA := rowTitle.AddCell()
  4224. cellA.Value = "服务销售名称"
  4225. cellB8 := rowTitle.AddCell()
  4226. cellB8.Value = "8月份服务量"
  4227. cellB9 := rowTitle.AddCell()
  4228. cellB9.Value = "9月份服务量"
  4229. cellB10 := rowTitle.AddCell()
  4230. cellB10.Value = "10月份服务量"
  4231. cellB11 := rowTitle.AddCell()
  4232. cellB11.Value = "11月份服务量"
  4233. cellB12 := rowTitle.AddCell()
  4234. cellB12.Value = "12月份服务量"
  4235. cellB := rowTitle.AddCell()
  4236. cellB.Value = "总服务量"
  4237. for _, vE := range listCompany {
  4238. row := sheet.AddRow()
  4239. cellAData := row.AddCell()
  4240. cellAData.Value = vE.CompanyName
  4241. cellBData8 := row.AddCell()
  4242. cellBData8.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.CompanyId, "_08")])
  4243. cellBData9 := row.AddCell()
  4244. cellBData9.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.CompanyId, "_09")])
  4245. cellBData10 := row.AddCell()
  4246. cellBData10.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.CompanyId, "_10")])
  4247. cellBData11 := row.AddCell()
  4248. cellBData11.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.CompanyId, "_11")])
  4249. cellBData12 := row.AddCell()
  4250. cellBData12.Value = fmt.Sprint(mapSellerServerCount[fmt.Sprint(vE.CompanyId, "_12")])
  4251. cellBData := row.AddCell()
  4252. cellBData.Value = fmt.Sprint(mapSellerServerCountTotal[vE.CompanyId])
  4253. }
  4254. err = xlsxFile.Save(downLoadnFilePath)
  4255. if err != nil {
  4256. fmt.Println(err)
  4257. return
  4258. }
  4259. fmt.Println("end")
  4260. }
  4261. func initQuanyiXiaoShou() {
  4262. adminUserList, err := system.GetRaiAdminInitRai()
  4263. if err != nil {
  4264. fmt.Println(err)
  4265. return
  4266. }
  4267. adminMap := make(map[int]bool)
  4268. for _, vE := range adminUserList {
  4269. adminMap[vE.AdminId] = true
  4270. }
  4271. //研选阅读明细
  4272. var conditionBill string
  4273. var parsBill []interface{}
  4274. //列表页数据
  4275. tmpList, err := models.GetIncrementalCompanyListByOperationRecordIniut(conditionBill, parsBill, 0, 9999)
  4276. if err != nil {
  4277. fmt.Println(err)
  4278. return
  4279. }
  4280. ////列表页数据
  4281. //tmpList3, err := models.GetIncrementalCompanyListByOperationRecordIniut3(conditionBill, parsBill, 0, 9999)
  4282. //if err != nil {
  4283. // fmt.Println(err)
  4284. // return
  4285. //}
  4286. //
  4287. ////列表页数据
  4288. //tmpList4, err := models.GetIncrementalCompanyListByOperationRecordIniut4(conditionBill, parsBill, 0, 9999)
  4289. //if err != nil {
  4290. // fmt.Println(err)
  4291. // return
  4292. //}
  4293. //mapId := make(map[int]bool)
  4294. //for _, v := range tmpList3 {
  4295. // mapId[v.Id] = true
  4296. //}
  4297. //
  4298. //for _, v := range tmpList4 {
  4299. // mapId[v.Id] = true
  4300. //}
  4301. //for _, v := range tmpList {
  4302. // if !mapId[v.Id] {
  4303. // fmt.Println(v.Id)
  4304. // }
  4305. //}
  4306. //
  4307. //return
  4308. mapOperationadd := make(map[int]int)
  4309. mapOperationreceive := make(map[int]int)
  4310. for _, v := range tmpList {
  4311. if !adminMap[v.SellerId] {
  4312. fmt.Println("v.CompanyId", v.CompanyId)
  4313. return
  4314. }
  4315. if v.Operation == "add" {
  4316. mapOperationadd[v.SysUserId]++
  4317. } else {
  4318. mapOperationreceive[v.SysUserId]++
  4319. }
  4320. }
  4321. //创建excel
  4322. dir, err := os.Executable()
  4323. exPath := filepath.Dir(dir)
  4324. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  4325. xlsxFile := xlsx.NewFile()
  4326. if err != nil {
  4327. fmt.Println(err)
  4328. return
  4329. }
  4330. style := xlsx.NewStyle()
  4331. alignment := xlsx.Alignment{
  4332. Horizontal: "center",
  4333. Vertical: "center",
  4334. WrapText: true,
  4335. }
  4336. style.Alignment = alignment
  4337. style.ApplyAlignment = true
  4338. var sheetName string
  4339. sheetName = "2023年2季度"
  4340. sheet, err := xlsxFile.AddSheet(sheetName)
  4341. if err != nil {
  4342. fmt.Println(err)
  4343. return
  4344. }
  4345. //标头
  4346. rowTitle := sheet.AddRow()
  4347. cellA := rowTitle.AddCell()
  4348. cellA.Value = "销售"
  4349. cellB8 := rowTitle.AddCell()
  4350. cellB8.Value = "新增"
  4351. cellB9 := rowTitle.AddCell()
  4352. cellB9.Value = "新建"
  4353. cellB10 := rowTitle.AddCell()
  4354. cellB10.Value = "领取"
  4355. for _, vE := range adminUserList {
  4356. //if mapOperationadd[vE.AdminId]+mapOperationreceive[vE.AdminId] == 0 {
  4357. // continue
  4358. //}
  4359. row := sheet.AddRow()
  4360. cellAData := row.AddCell()
  4361. cellAData.Value = vE.RealName
  4362. cellBData8 := row.AddCell()
  4363. cellBData8.Value = fmt.Sprint(mapOperationadd[vE.AdminId] + mapOperationreceive[vE.AdminId])
  4364. cellBData9 := row.AddCell()
  4365. cellBData9.Value = fmt.Sprint(mapOperationadd[vE.AdminId])
  4366. cellBData10 := row.AddCell()
  4367. cellBData10.Value = fmt.Sprint(mapOperationreceive[vE.AdminId])
  4368. }
  4369. err = xlsxFile.Save(downLoadnFilePath)
  4370. if err != nil {
  4371. fmt.Println(err)
  4372. return
  4373. }
  4374. fmt.Println("end")
  4375. }
  4376. func initart121() {
  4377. //行业
  4378. var condition string
  4379. var pars []interface{}
  4380. condition += ` AND re.chart_permission_id = 22 AND art.publish_date > '2024-12-20' AND art.publish_date < '2025-01-21' `
  4381. //报告匹配类型
  4382. //9.5 13:52
  4383. condition += ` GROUP BY art.article_id ORDER BY art.publish_date DESC `
  4384. listart, err := cygx.GetReportArticleList(condition, pars, 0, 2000, 1)
  4385. if err != nil {
  4386. fmt.Println(err)
  4387. return
  4388. }
  4389. fmt.Println("listart", len(listart))
  4390. //创建excel
  4391. dir, err := os.Executable()
  4392. exPath := filepath.Dir(dir)
  4393. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  4394. xlsxFile := xlsx.NewFile()
  4395. if err != nil {
  4396. fmt.Println(err)
  4397. return
  4398. }
  4399. style := xlsx.NewStyle()
  4400. alignment := xlsx.Alignment{
  4401. Horizontal: "center",
  4402. Vertical: "center",
  4403. WrapText: true,
  4404. }
  4405. style.Alignment = alignment
  4406. style.ApplyAlignment = true
  4407. redStyle := xlsx.NewStyle()
  4408. redStyle.Alignment = alignment
  4409. redStyle.ApplyAlignment = true
  4410. redStyle.Font.Color = "ff0000"
  4411. //定义底色需要标黄的 单元格颜色
  4412. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  4413. redStyle.Fill = redFill
  4414. //redStyle.Border = *border
  4415. var sheetName string
  4416. sheetName = "PV"
  4417. sheet, err := xlsxFile.AddSheet(sheetName)
  4418. if err != nil {
  4419. fmt.Println(err)
  4420. return
  4421. }
  4422. //标头
  4423. rowTitle := sheet.AddRow()
  4424. cellAt := rowTitle.AddCell()
  4425. cellAt.Value = "标题"
  4426. cellXl := rowTitle.AddCell()
  4427. cellXl.Value = "系列"
  4428. cellPd := rowTitle.AddCell()
  4429. cellPd.Value = "发布时间"
  4430. cellA := rowTitle.AddCell()
  4431. cellA.Value = "姓名"
  4432. cellB := rowTitle.AddCell()
  4433. cellB.Value = "手机号"
  4434. cellC := rowTitle.AddCell()
  4435. cellC.Value = "公司名称"
  4436. cellD := rowTitle.AddCell()
  4437. cellD.Value = "分类"
  4438. cellDCreatedTime := rowTitle.AddCell()
  4439. cellDCreatedTime.Value = "阅读时间"
  4440. cellE := rowTitle.AddCell()
  4441. cellE.Value = "停留时长"
  4442. cellF := rowTitle.AddCell()
  4443. cellF.Value = "阅读来源"
  4444. for k, v := range listart {
  4445. fmt.Println("kkkk", k)
  4446. articleId := v.ArticleId
  4447. condition = ` AND h.mobile!= '' AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) // 过滤弘则
  4448. listPv, err := cygx.GetArticleHistoryList121(articleId, condition)
  4449. if err != nil {
  4450. fmt.Println(err)
  4451. return
  4452. }
  4453. //var listDate []*cygx.ArticleHistoryRep
  4454. var mobileArr []string
  4455. var companyIds []int
  4456. companyIdsMap := make(map[int]bool)
  4457. mapMobileUser := make(map[string]string)
  4458. for _, vuser := range listPv {
  4459. mobileArr = append(mobileArr, vuser.Mobile)
  4460. if companyIdsMap[vuser.CompanyId] {
  4461. continue
  4462. }
  4463. companyIds = append(companyIds, vuser.CompanyId)
  4464. companyIdsMap[vuser.CompanyId] = true
  4465. }
  4466. listUser, err := models.GetWxUserListByUserMobileHaveCompany(mobileArr)
  4467. if err != nil {
  4468. fmt.Println(err)
  4469. return
  4470. }
  4471. for _, vu := range listUser {
  4472. mapMobileUser[vu.Mobile] = vu.RealName
  4473. }
  4474. //合并合同所对应的权限
  4475. listCompany, err := company.GetCompanyProductsByCompanyIdsAndProductIdinit(companyIds)
  4476. if err != nil {
  4477. fmt.Println(err)
  4478. return
  4479. }
  4480. mapIndustryName := make(map[int]string)
  4481. for _, vC := range listCompany {
  4482. mapIndustryName[vC.CompanyId] = vC.IndustryName
  4483. }
  4484. //rowtitle := sheet.AddRow()
  4485. //cellADatatitle := rowtitle.AddCell()
  4486. //cellADatatitle.Value = v.Title
  4487. for _, item := range listPv {
  4488. //if mapIndustryName[item.CompanyId] ==""{
  4489. // continue
  4490. //}
  4491. row := sheet.AddRow()
  4492. cellADatatitle := row.AddCell()
  4493. cellADatatitle.Value = v.Title
  4494. cellXlData := row.AddCell()
  4495. cellXlData.Value = v.SubCategoryName
  4496. cellADataPd := row.AddCell()
  4497. cellADataPd.Value = v.PublishDate
  4498. cellAData := row.AddCell()
  4499. if item.RealName == "" {
  4500. cellAData.Value = mapMobileUser[item.Mobile]
  4501. } else {
  4502. cellAData.Value = item.RealName
  4503. }
  4504. cellBData := row.AddCell()
  4505. cellBData.Value = item.Mobile
  4506. cellCData := row.AddCell()
  4507. cellCData.Value = item.CompanyName
  4508. cellDData := row.AddCell()
  4509. cellDData.Value = mapIndustryName[item.CompanyId]
  4510. cellEData := row.AddCell()
  4511. cellEData.Value = item.CreateTime
  4512. cellFData := row.AddCell()
  4513. cellFData.Value = item.StopTime
  4514. //fmt.Println(item.Source)
  4515. cellLyData := row.AddCell()
  4516. switch item.Source {
  4517. case "MOBILE":
  4518. cellLyData.Value = "小程序"
  4519. case "WEB":
  4520. cellLyData.Value = "网页版"
  4521. case "CELUE":
  4522. cellLyData.Value = "vmp"
  4523. case "PC":
  4524. cellLyData.Value = "小程序"
  4525. }
  4526. }
  4527. err = xlsxFile.Save(downLoadnFilePath)
  4528. if err != nil {
  4529. fmt.Println(err)
  4530. return
  4531. }
  4532. }
  4533. }
  4534. func initart121_1() {
  4535. //行业
  4536. var condition string
  4537. var pars []interface{}
  4538. condition += ` AND re.chart_permission_id = 22 AND art.publish_date > '2023-01-01' AND art.publish_date < '2025-01-01' `
  4539. //报告匹配类型
  4540. //9.5 13:52
  4541. condition += ` GROUP BY art.article_id ORDER BY art.publish_date DESC `
  4542. listart, err := cygx.GetReportArticleList(condition, pars, 0, 2000, 1)
  4543. if err != nil {
  4544. fmt.Println(err)
  4545. return
  4546. }
  4547. fmt.Println("listart", len(listart))
  4548. //创建excel
  4549. dir, err := os.Executable()
  4550. exPath := filepath.Dir(dir)
  4551. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  4552. xlsxFile := xlsx.NewFile()
  4553. if err != nil {
  4554. fmt.Println(err)
  4555. return
  4556. }
  4557. style := xlsx.NewStyle()
  4558. alignment := xlsx.Alignment{
  4559. Horizontal: "center",
  4560. Vertical: "center",
  4561. WrapText: true,
  4562. }
  4563. style.Alignment = alignment
  4564. style.ApplyAlignment = true
  4565. redStyle := xlsx.NewStyle()
  4566. redStyle.Alignment = alignment
  4567. redStyle.ApplyAlignment = true
  4568. redStyle.Font.Color = "ff0000"
  4569. //定义底色需要标黄的 单元格颜色
  4570. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  4571. redStyle.Fill = redFill
  4572. //redStyle.Border = *border
  4573. var sheetName string
  4574. sheetName = "PV"
  4575. sheet, err := xlsxFile.AddSheet(sheetName)
  4576. if err != nil {
  4577. fmt.Println(err)
  4578. return
  4579. }
  4580. //标头
  4581. rowTitle := sheet.AddRow()
  4582. cellAt := rowTitle.AddCell()
  4583. cellAt.Value = "标题"
  4584. cellXl := rowTitle.AddCell()
  4585. cellXl.Value = "系列"
  4586. cellPd := rowTitle.AddCell()
  4587. cellPd.Value = "发布时间"
  4588. cellA := rowTitle.AddCell()
  4589. cellA.Value = "姓名"
  4590. cellB := rowTitle.AddCell()
  4591. cellB.Value = "手机号"
  4592. cellC := rowTitle.AddCell()
  4593. cellC.Value = "公司名称"
  4594. cellD := rowTitle.AddCell()
  4595. cellD.Value = "分类"
  4596. cellDCreatedTime := rowTitle.AddCell()
  4597. cellDCreatedTime.Value = "阅读时间"
  4598. cellE := rowTitle.AddCell()
  4599. cellE.Value = "停留时长"
  4600. cellF := rowTitle.AddCell()
  4601. cellF.Value = "阅读来源"
  4602. for k, v := range listart {
  4603. fmt.Println("kkkk", k)
  4604. articleId := v.ArticleId
  4605. condition = ` AND h.mobile!= '' AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) // 过滤弘则
  4606. listPv, err := cygx.GetArticleHistoryList121(articleId, condition)
  4607. if err != nil {
  4608. fmt.Println(err)
  4609. return
  4610. }
  4611. mapStopTime := make(map[string]int)
  4612. for _, vP := range listPv {
  4613. StopTime, _ := strconv.Atoi(vP.StopTime)
  4614. mapStopTime[vP.Mobile] += StopTime
  4615. }
  4616. haveMobile := make(map[string]bool)
  4617. //var listDate []*cygx.ArticleHistoryRep
  4618. var mobileArr []string
  4619. var companyIds []int
  4620. companyIdsMap := make(map[int]bool)
  4621. mapMobileUser := make(map[string]string)
  4622. for _, vuser := range listPv {
  4623. mobileArr = append(mobileArr, vuser.Mobile)
  4624. if companyIdsMap[vuser.CompanyId] {
  4625. continue
  4626. }
  4627. companyIds = append(companyIds, vuser.CompanyId)
  4628. companyIdsMap[vuser.CompanyId] = true
  4629. }
  4630. listUser, err := models.GetWxUserListByUserMobileHaveCompany(mobileArr)
  4631. if err != nil {
  4632. fmt.Println(err)
  4633. return
  4634. }
  4635. for _, vu := range listUser {
  4636. mapMobileUser[vu.Mobile] = vu.RealName
  4637. }
  4638. //合并合同所对应的权限
  4639. listCompany, err := company.GetCompanyProductsByCompanyIdsAndProductIdinit(companyIds)
  4640. if err != nil {
  4641. fmt.Println(err)
  4642. return
  4643. }
  4644. mapIndustryName := make(map[int]string)
  4645. for _, vC := range listCompany {
  4646. mapIndustryName[vC.CompanyId] = vC.IndustryName
  4647. }
  4648. //rowtitle := sheet.AddRow()
  4649. //cellADatatitle := rowtitle.AddCell()
  4650. //cellADatatitle.Value = v.Title
  4651. for _, item := range listPv {
  4652. //if mapIndustryName[item.CompanyId] ==""{
  4653. // continue
  4654. //}
  4655. if haveMobile[item.Mobile] {
  4656. continue
  4657. }
  4658. haveMobile[item.Mobile] = true
  4659. row := sheet.AddRow()
  4660. cellADatatitle := row.AddCell()
  4661. cellADatatitle.Value = v.Title
  4662. cellXlData := row.AddCell()
  4663. cellXlData.Value = v.SubCategoryName
  4664. cellADataPd := row.AddCell()
  4665. cellADataPd.Value = v.PublishDate
  4666. cellAData := row.AddCell()
  4667. if item.RealName == "" {
  4668. cellAData.Value = mapMobileUser[item.Mobile]
  4669. } else {
  4670. cellAData.Value = item.RealName
  4671. }
  4672. cellBData := row.AddCell()
  4673. cellBData.Value = item.Mobile
  4674. cellCData := row.AddCell()
  4675. cellCData.Value = item.CompanyName
  4676. cellDData := row.AddCell()
  4677. cellDData.Value = mapIndustryName[item.CompanyId]
  4678. cellEData := row.AddCell()
  4679. cellEData.Value = item.CreateTime
  4680. cellFData := row.AddCell()
  4681. cellFData.Value = strconv.Itoa(mapStopTime[item.Mobile])
  4682. //fmt.Println(item.Source)
  4683. cellLyData := row.AddCell()
  4684. switch item.Source {
  4685. case "MOBILE":
  4686. cellLyData.Value = "小程序"
  4687. case "WEB":
  4688. cellLyData.Value = "网页版"
  4689. case "CELUE":
  4690. cellLyData.Value = "vmp"
  4691. case "PC":
  4692. cellLyData.Value = "小程序"
  4693. }
  4694. }
  4695. err = xlsxFile.Save(downLoadnFilePath)
  4696. if err != nil {
  4697. fmt.Println(err)
  4698. return
  4699. }
  4700. }
  4701. }
  4702. //func init() {
  4703. // initartZhouqi()
  4704. //}
  4705. func initAct33() {
  4706. //行业
  4707. var condition string
  4708. var pars []interface{}
  4709. condition += ` AND chart_permission_id = 62 AND activity_time > '2025-03-10' AND activity_time < '2025-04-11' AND publish_status = 1 AND active_state = 3 OR activity_id =6576 ORDER BY activity_time DESC `
  4710. list, err := cygx.GetActivityListAll(condition, pars, 0, 9999)
  4711. if err != nil {
  4712. fmt.Println(err)
  4713. return
  4714. }
  4715. var activityIds []int
  4716. for _, v := range list {
  4717. activityIds = append(activityIds, v.ActivityId)
  4718. }
  4719. condition = ""
  4720. pars = make([]interface{}, 0)
  4721. condition += ` AND activity_id IN (` + utils.GetOrmInReplace(len(activityIds)) + `) AND ( is_meeting = 1 OR duration != "" ) `
  4722. pars = append(pars, activityIds)
  4723. signUpDetailList, err := cygx.GetSignupDetailList(condition, pars)
  4724. if err != nil {
  4725. fmt.Println(err)
  4726. return
  4727. }
  4728. mapUserNum := make(map[int]int)
  4729. for _, v := range signUpDetailList {
  4730. mapUserNum[v.ActivityId]++
  4731. }
  4732. fmt.Println("list", len(list))
  4733. //创建excel
  4734. dir, err := os.Executable()
  4735. exPath := filepath.Dir(dir)
  4736. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  4737. xlsxFile := xlsx.NewFile()
  4738. if err != nil {
  4739. fmt.Println(err)
  4740. return
  4741. }
  4742. style := xlsx.NewStyle()
  4743. alignment := xlsx.Alignment{
  4744. Horizontal: "center",
  4745. Vertical: "center",
  4746. WrapText: true,
  4747. }
  4748. style.Alignment = alignment
  4749. style.ApplyAlignment = true
  4750. redStyle := xlsx.NewStyle()
  4751. redStyle.Alignment = alignment
  4752. redStyle.ApplyAlignment = true
  4753. redStyle.Font.Color = "ff0000"
  4754. //定义底色需要标黄的 单元格颜色
  4755. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  4756. redStyle.Fill = redFill
  4757. //redStyle.Border = *border
  4758. var sheetName string
  4759. sheetName = "活动数据"
  4760. sheet, err := xlsxFile.AddSheet(sheetName)
  4761. if err != nil {
  4762. fmt.Println(err)
  4763. return
  4764. }
  4765. //标头
  4766. rowTitle := sheet.AddRow()
  4767. cellB := rowTitle.AddCell()
  4768. cellB.Value = "活动名称"
  4769. cellPd := rowTitle.AddCell()
  4770. cellPd.Value = "活动类型"
  4771. //cellA := rowTitle.AddCell()
  4772. //cellA.Value = "系列"
  4773. cellAt := rowTitle.AddCell()
  4774. cellAt.Value = "活动时间"
  4775. cellUser := rowTitle.AddCell()
  4776. cellUser.Value = "参会人数"
  4777. for _, v := range list {
  4778. row := sheet.AddRow()
  4779. cellADatatitle := row.AddCell()
  4780. cellADatatitle.Value = v.ActivityName
  4781. cellADataPd := row.AddCell()
  4782. cellADataPd.Value = v.ActivityTypeName
  4783. //cellAData := row.AddCell()
  4784. //cellAData.Value = v.SubCategoryName
  4785. cellBData := row.AddCell()
  4786. cellBData.Value = v.ActivityTime
  4787. cellUserData := row.AddCell()
  4788. cellUserData.Value = strconv.Itoa(mapUserNum[v.ActivityId])
  4789. }
  4790. err = xlsxFile.Save(downLoadnFilePath)
  4791. if err != nil {
  4792. fmt.Println(err)
  4793. return
  4794. }
  4795. }
  4796. func initart33() {
  4797. //行业
  4798. var condition string
  4799. var pars []interface{}
  4800. condition += ` AND re.chart_permission_id = 62 AND art.publish_date > '2025-01-01' AND art.publish_date < '2025-02-13' `
  4801. //报告匹配类型
  4802. //9.5 13:52
  4803. condition += ` GROUP BY art.article_id ORDER BY art.publish_date DESC `
  4804. listart, err := cygx.GetReportArticleList(condition, pars, 0, 2000, 1)
  4805. if err != nil {
  4806. fmt.Println(err)
  4807. return
  4808. }
  4809. //创建excel
  4810. dir, err := os.Executable()
  4811. exPath := filepath.Dir(dir)
  4812. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  4813. xlsxFile := xlsx.NewFile()
  4814. if err != nil {
  4815. fmt.Println(err)
  4816. return
  4817. }
  4818. style := xlsx.NewStyle()
  4819. alignment := xlsx.Alignment{
  4820. Horizontal: "center",
  4821. Vertical: "center",
  4822. WrapText: true,
  4823. }
  4824. style.Alignment = alignment
  4825. style.ApplyAlignment = true
  4826. redStyle := xlsx.NewStyle()
  4827. redStyle.Alignment = alignment
  4828. redStyle.ApplyAlignment = true
  4829. redStyle.Font.Color = "ff0000"
  4830. //定义底色需要标黄的 单元格颜色
  4831. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  4832. redStyle.Fill = redFill
  4833. //redStyle.Border = *border
  4834. var sheetName string
  4835. sheetName = "PV"
  4836. sheet, err := xlsxFile.AddSheet(sheetName)
  4837. if err != nil {
  4838. fmt.Println(err)
  4839. return
  4840. }
  4841. //标头
  4842. rowTitle := sheet.AddRow()
  4843. cellAt := rowTitle.AddCell()
  4844. cellAt.Value = "报告名称 "
  4845. cellTYpet := rowTitle.AddCell()
  4846. cellTYpet.Value = "报告类型"
  4847. cellPd := rowTitle.AddCell()
  4848. cellPd.Value = "发布时间"
  4849. cellTPv := rowTitle.AddCell()
  4850. cellTPv.Value = "Pv"
  4851. cellTUv := rowTitle.AddCell()
  4852. cellTUv.Value = "Uv"
  4853. var articleIds []string
  4854. for _, v := range listart {
  4855. articleIds = append(articleIds, strconv.Itoa(v.ArticleId))
  4856. }
  4857. if len(articleIds) > 0 {
  4858. condition = ` AND art.article_id IN (` + strings.Join(articleIds, ",") + `) `
  4859. listPv, err := cygx.GetReportArticleListPvUv(condition)
  4860. if err != nil {
  4861. fmt.Println(err)
  4862. return
  4863. }
  4864. if len(listPv) > 0 {
  4865. for _, pv := range listPv {
  4866. for k, v := range listart {
  4867. if v.ArticleId == pv.ArticleId {
  4868. listart[k].Pv = pv.Pv
  4869. listart[k].Uv = pv.Uv
  4870. listart[k].ClPv = pv.ClPv
  4871. listart[k].ClUv = pv.ClUv
  4872. }
  4873. }
  4874. }
  4875. }
  4876. }
  4877. for _, item := range listart {
  4878. row := sheet.AddRow()
  4879. cellADatatitle := row.AddCell()
  4880. cellADatatitle.Value = item.Title
  4881. cellADataPd := row.AddCell()
  4882. cellADataPd.Value = item.MatchTypeName
  4883. cellPublishDate := row.AddCell()
  4884. cellPublishDate.Value = item.PublishDate
  4885. cellPvata := row.AddCell()
  4886. cellPvata.Value = strconv.Itoa(item.Pv + item.ClPv)
  4887. cellUvata := row.AddCell()
  4888. cellUvata.Value = strconv.Itoa(item.Uv + item.ClUv)
  4889. }
  4890. err = xlsxFile.Save(downLoadnFilePath)
  4891. if err != nil {
  4892. fmt.Println(err)
  4893. return
  4894. }
  4895. return
  4896. }
  4897. func initUserKw() {
  4898. listKw, e := cygx.GetCygxSearchKeyWordListInit()
  4899. if e != nil {
  4900. fmt.Println(e)
  4901. return
  4902. }
  4903. mapCompanyIds := make(map[int]bool)
  4904. var companyids []int
  4905. for _, v := range listKw {
  4906. if mapCompanyIds[v.CompanyId] {
  4907. continue
  4908. }
  4909. companyids = append(companyids, v.CompanyId)
  4910. mapCompanyIds[v.CompanyId] = true
  4911. }
  4912. companyProductItems, err := company.GetCompanyProductByCompanyIdSAndProductId(companyids, 2)
  4913. if err != nil {
  4914. fmt.Println(err)
  4915. return
  4916. }
  4917. mapCompamyStatus := make(map[int]string)
  4918. for _, v := range companyProductItems {
  4919. mapCompamyStatus[v.CompanyId] = v.Status
  4920. }
  4921. //创建excel
  4922. dir, err := os.Executable()
  4923. exPath := filepath.Dir(dir)
  4924. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  4925. xlsxFile := xlsx.NewFile()
  4926. if err != nil {
  4927. fmt.Println(err)
  4928. return
  4929. }
  4930. style := xlsx.NewStyle()
  4931. alignment := xlsx.Alignment{
  4932. Horizontal: "center",
  4933. Vertical: "center",
  4934. WrapText: true,
  4935. }
  4936. style.Alignment = alignment
  4937. style.ApplyAlignment = true
  4938. var sheetName string
  4939. sheetName = "关键词搜索统计"
  4940. sheet, err := xlsxFile.AddSheet(sheetName)
  4941. if err != nil {
  4942. fmt.Println(err)
  4943. return
  4944. }
  4945. //标头
  4946. rowTitle := sheet.AddRow()
  4947. cellA := rowTitle.AddCell()
  4948. cellA.Value = "搜索词"
  4949. cellB8 := rowTitle.AddCell()
  4950. cellB8.Value = "手机号"
  4951. cellB9 := rowTitle.AddCell()
  4952. cellB9.Value = "姓名"
  4953. cellB10 := rowTitle.AddCell()
  4954. cellB10.Value = "公司"
  4955. cellB11 := rowTitle.AddCell()
  4956. cellB11.Value = "状态"
  4957. cellB12 := rowTitle.AddCell()
  4958. cellB12.Value = "搜索时间"
  4959. mapUserTimeDay := make(map[string]bool)
  4960. for _, vE := range listKw {
  4961. ctime := utils.StrTimeToTime(vE.CreateTime).Format(utils.FormatDate)
  4962. keyMap := fmt.Sprint(vE.Mobile, "_", ctime, vE.KeyWord)
  4963. if mapUserTimeDay[keyMap] {
  4964. continue
  4965. }
  4966. mapUserTimeDay[keyMap] = true
  4967. row := sheet.AddRow()
  4968. cellAData := row.AddCell()
  4969. cellAData.Value = vE.KeyWord
  4970. cellBData8 := row.AddCell()
  4971. cellBData8.Value = vE.Mobile
  4972. cellBData9 := row.AddCell()
  4973. cellBData9.Value = vE.RealName
  4974. cellBData10 := row.AddCell()
  4975. cellBData10.Value = vE.CompanyName
  4976. cellBData11 := row.AddCell()
  4977. cellBData11.Value = mapCompamyStatus[vE.CompanyId]
  4978. cellBData12 := row.AddCell()
  4979. cellBData12.Value = vE.CreateTime
  4980. }
  4981. err = xlsxFile.Save(downLoadnFilePath)
  4982. if err != nil {
  4983. fmt.Println(err)
  4984. return
  4985. }
  4986. fmt.Println("end")
  4987. }
  4988. func initContract() {
  4989. listContractList, e := company.CompanyContractListInit2()
  4990. if e != nil {
  4991. fmt.Println(e)
  4992. return
  4993. }
  4994. var condition string
  4995. var pars []interface{}
  4996. activitySpecialPermissionPointsList, e := cygx.GetCygxActivitySpecialPermissionPointsList(condition, pars)
  4997. if e != nil && e.Error() != utils.ErrNoRow() {
  4998. fmt.Println(e)
  4999. return
  5000. }
  5001. var companyIds []int
  5002. mapPointSpeial := make(map[int]float64)
  5003. for _, v := range activitySpecialPermissionPointsList {
  5004. companyIds = append(companyIds, v.CompanyId)
  5005. mapPointSpeial[v.CompanyId] += v.Pointsf
  5006. }
  5007. var companyContractIds []int
  5008. for _, v := range listContractList {
  5009. companyContractIds = append(companyContractIds, v.CompanyContractId)
  5010. }
  5011. //合并合同所对应的权限
  5012. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  5013. if err != nil {
  5014. fmt.Println(err)
  5015. return
  5016. }
  5017. //创建excel
  5018. dir, err := os.Executable()
  5019. exPath := filepath.Dir(dir)
  5020. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  5021. xlsxFile := xlsx.NewFile()
  5022. if err != nil {
  5023. fmt.Println(err)
  5024. return
  5025. }
  5026. style := xlsx.NewStyle()
  5027. alignment := xlsx.Alignment{
  5028. Horizontal: "center",
  5029. Vertical: "center",
  5030. WrapText: true,
  5031. }
  5032. style.Alignment = alignment
  5033. style.ApplyAlignment = true
  5034. var sheetName string
  5035. sheetName = "大套餐统计"
  5036. sheet, err := xlsxFile.AddSheet(sheetName)
  5037. if err != nil {
  5038. fmt.Println(err)
  5039. return
  5040. }
  5041. //标头
  5042. rowTitle := sheet.AddRow()
  5043. cellA := rowTitle.AddCell()
  5044. cellA.Value = "客户名称"
  5045. cellB8 := rowTitle.AddCell()
  5046. cellB8.Value = "销售"
  5047. cellB9 := rowTitle.AddCell()
  5048. cellB9.Value = "服务销售"
  5049. cellB10 := rowTitle.AddCell()
  5050. cellB10.Value = "合同金额"
  5051. cellPoint := rowTitle.AddCell()
  5052. cellPoint.Value = "调研点数"
  5053. cellB11 := rowTitle.AddCell()
  5054. cellB11.Value = "签约套餐"
  5055. for _, vE := range listContractList {
  5056. row := sheet.AddRow()
  5057. cellAData := row.AddCell()
  5058. cellAData.Value = vE.CompanyName
  5059. cellBData8 := row.AddCell()
  5060. cellBData8.Value = vE.SellerNameLast
  5061. cellBData9 := row.AddCell()
  5062. cellBData9.Value = vE.ShareSellerLast
  5063. cellBData10 := row.AddCell()
  5064. cellBData10.Value = fmt.Sprint(vE.Money)
  5065. cellBDataPoint := row.AddCell()
  5066. cellBDataPoint.Value = fmt.Sprint(mapPointSpeial[vE.CompanyId])
  5067. cellBData11 := row.AddCell()
  5068. cellBData11.Value = mappermissionName[vE.CompanyContractId]
  5069. }
  5070. err = xlsxFile.Save(downLoadnFilePath)
  5071. if err != nil {
  5072. fmt.Println(err)
  5073. return
  5074. }
  5075. fmt.Println("end")
  5076. }
  5077. //func init() {
  5078. // initActZHouqi()
  5079. //}
  5080. func initartZhouqi() {
  5081. //行业
  5082. var condition string
  5083. var pars []interface{}
  5084. condition += ` AND re.chart_permission_id = 62 AND art.publish_date >= '2025-03-10' AND art.publish_date < '2025-04-11' `
  5085. //报告匹配类型
  5086. //9.5 13:52
  5087. condition += ` GROUP BY art.article_id ORDER BY art.publish_date DESC `
  5088. listart, err := cygx.GetReportArticleList(condition, pars, 0, 2000, 1)
  5089. if err != nil {
  5090. fmt.Println(err)
  5091. return
  5092. }
  5093. fmt.Println("listart", len(listart))
  5094. //创建excel
  5095. dir, err := os.Executable()
  5096. exPath := filepath.Dir(dir)
  5097. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  5098. xlsxFile := xlsx.NewFile()
  5099. if err != nil {
  5100. fmt.Println(err)
  5101. return
  5102. }
  5103. style := xlsx.NewStyle()
  5104. alignment := xlsx.Alignment{
  5105. Horizontal: "center",
  5106. Vertical: "center",
  5107. WrapText: true,
  5108. }
  5109. style.Alignment = alignment
  5110. style.ApplyAlignment = true
  5111. redStyle := xlsx.NewStyle()
  5112. redStyle.Alignment = alignment
  5113. redStyle.ApplyAlignment = true
  5114. redStyle.Font.Color = "ff0000"
  5115. //定义底色需要标黄的 单元格颜色
  5116. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  5117. redStyle.Fill = redFill
  5118. //redStyle.Border = *border
  5119. var sheetName string
  5120. sheetName = "PV"
  5121. sheet, err := xlsxFile.AddSheet(sheetName)
  5122. if err != nil {
  5123. fmt.Println(err)
  5124. return
  5125. }
  5126. //标头
  5127. rowTitle := sheet.AddRow()
  5128. cellAt := rowTitle.AddCell()
  5129. cellAt.Value = "报告名称"
  5130. cellTp := rowTitle.AddCell()
  5131. cellTp.Value = "报告类型"
  5132. cellPd := rowTitle.AddCell()
  5133. cellPd.Value = "发布时间"
  5134. cellA := rowTitle.AddCell()
  5135. cellA.Value = "姓名"
  5136. cellC := rowTitle.AddCell()
  5137. cellC.Value = "公司名称"
  5138. cellDCreatedTime := rowTitle.AddCell()
  5139. cellDCreatedTime.Value = "阅读时间(最后一次)"
  5140. cellE := rowTitle.AddCell()
  5141. cellE.Value = "停留时长(多次合计))"
  5142. for _, v := range listart {
  5143. hasmobile := make(map[string]bool)
  5144. fmt.Println(v.ArticleId)
  5145. articleId := v.ArticleId
  5146. condition = ` AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) // 过滤弘则
  5147. condition += ` ORDER BY create_time DESC `
  5148. //上一次的阅读记录
  5149. list, err := cygx.GetArticleHistoryList_ZHouqi(articleId, condition)
  5150. if err != nil {
  5151. fmt.Println(err)
  5152. return
  5153. }
  5154. mapArticle_H := make(map[string]bool)
  5155. var listDate []*cygx.ArticleHistoryRep
  5156. var mobiles []string
  5157. var mapMobileCy = make(map[string]bool)
  5158. mapstopTime := make(map[string]int)
  5159. if len(list) > 0 {
  5160. for _, vPv := range list {
  5161. if !utils.ValidateMobileFormatat(vPv.Mobile) {
  5162. continue
  5163. }
  5164. if mapArticle_H[fmt.Sprint("m_", vPv.Mobile)] {
  5165. continue
  5166. }
  5167. mobiles = append(mobiles, vPv.Mobile)
  5168. mapArticle_H[fmt.Sprint("m_", vPv.Mobile)] = true
  5169. //listDate = append(listDate, vPv)
  5170. }
  5171. for _, vPv := range list {
  5172. stopTime, _ := strconv.Atoi(vPv.StopTime)
  5173. mapstopTime[vPv.Mobile] += stopTime
  5174. }
  5175. }
  5176. listUser, err := models.GetWxUserRaiSllerListByUserMobile(mobiles)
  5177. if err != nil {
  5178. fmt.Println(err)
  5179. return
  5180. }
  5181. listUserFicc, err := models.GetWxUserRaiSllerListByUserMobileFiic(mobiles)
  5182. if err != nil {
  5183. fmt.Println(err)
  5184. return
  5185. }
  5186. mapuserMapbil := make(map[string]*models.WxUserSller)
  5187. var companyIds []int
  5188. for _, vuser := range listUser {
  5189. //mapuserMapbil[vuser.Mobile] = vuser
  5190. companyIds = append(companyIds, vuser.CompanyId)
  5191. }
  5192. //fmt.Println(mappermissionName)
  5193. for _, vuser := range listUser {
  5194. mapuserMapbil[vuser.Mobile] = vuser
  5195. }
  5196. for _, vuser := range listUserFicc {
  5197. vuser.Status = ""
  5198. vuser.SellerName = ""
  5199. if mapuserMapbil[vuser.Mobile] == nil {
  5200. mapuserMapbil[vuser.Mobile] = vuser
  5201. }
  5202. }
  5203. fmt.Println("list", list)
  5204. if len(list) > 0 {
  5205. for _, vPv := range list {
  5206. if !utils.ValidateMobileFormatat(vPv.Mobile) {
  5207. continue
  5208. }
  5209. if hasmobile[vPv.Mobile] {
  5210. continue
  5211. }
  5212. hasmobile[vPv.Mobile] = true
  5213. mapMobileCy[vPv.Mobile] = true
  5214. listDate = append(listDate, vPv)
  5215. }
  5216. }
  5217. fmt.Println("listDate", listDate)
  5218. for _, item := range listDate {
  5219. row := sheet.AddRow()
  5220. cellADatatitle := row.AddCell()
  5221. cellADatatitle.Value = v.Title
  5222. cellADataTy := row.AddCell()
  5223. cellADataTy.Value = v.FieldName
  5224. cellADataPd := row.AddCell()
  5225. cellADataPd.Value = v.PublishDate
  5226. cellAData := row.AddCell()
  5227. cellAData.Value = item.RealName
  5228. //cellBData := row.AddCell()
  5229. //cellBData.Value = item.Mobile
  5230. cellCData := row.AddCell()
  5231. //cellCData.Value = item.CompanyName
  5232. if mapuserMapbil[item.Mobile] != nil {
  5233. cellCData.Value = mapuserMapbil[item.Mobile].CompanyName
  5234. if mapuserMapbil[item.Mobile].RealName != "" {
  5235. cellAData.Value = mapuserMapbil[item.Mobile].RealName
  5236. }
  5237. }
  5238. cellEData := row.AddCell()
  5239. cellEData.Value = item.CreateTime
  5240. cellStopData := row.AddCell()
  5241. cellStopData.Value = strconv.Itoa(mapstopTime[item.Mobile])
  5242. }
  5243. }
  5244. err = xlsxFile.Save(downLoadnFilePath)
  5245. if err != nil {
  5246. fmt.Println(err)
  5247. return
  5248. }
  5249. }
  5250. func initActZHouqi() {
  5251. //行业
  5252. var condition string
  5253. var pars []interface{}
  5254. condition += ` AND activity_id IN (6525,6528,6571,6572,6576,6621) ORDER BY activity_time DESC `
  5255. list, err := cygx.GetActivityListAll(condition, pars, 0, 9999)
  5256. if err != nil {
  5257. fmt.Println(err)
  5258. return
  5259. }
  5260. var activityIds []int
  5261. for _, v := range list {
  5262. activityIds = append(activityIds, v.ActivityId)
  5263. }
  5264. condition = ""
  5265. pars = make([]interface{}, 0)
  5266. fmt.Println("list", len(list))
  5267. //创建excel
  5268. dir, err := os.Executable()
  5269. exPath := filepath.Dir(dir)
  5270. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  5271. xlsxFile := xlsx.NewFile()
  5272. if err != nil {
  5273. fmt.Println(err)
  5274. return
  5275. }
  5276. style := xlsx.NewStyle()
  5277. alignment := xlsx.Alignment{
  5278. Horizontal: "center",
  5279. Vertical: "center",
  5280. WrapText: true,
  5281. }
  5282. style.Alignment = alignment
  5283. style.ApplyAlignment = true
  5284. redStyle := xlsx.NewStyle()
  5285. redStyle.Alignment = alignment
  5286. redStyle.ApplyAlignment = true
  5287. redStyle.Font.Color = "ff0000"
  5288. //定义底色需要标黄的 单元格颜色
  5289. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  5290. redStyle.Fill = redFill
  5291. //redStyle.Border = *border
  5292. var sheetName string
  5293. sheetName = "活动数据"
  5294. sheet, err := xlsxFile.AddSheet(sheetName)
  5295. if err != nil {
  5296. fmt.Println(err)
  5297. return
  5298. }
  5299. //标头
  5300. rowTitle := sheet.AddRow()
  5301. cellB := rowTitle.AddCell()
  5302. cellB.Value = "活动名称"
  5303. cellPd := rowTitle.AddCell()
  5304. cellPd.Value = "活动类型"
  5305. //cellA := rowTitle.AddCell()
  5306. //cellA.Value = "系列"
  5307. cellAt := rowTitle.AddCell()
  5308. cellAt.Value = "活动时间"
  5309. cellUser := rowTitle.AddCell()
  5310. cellUser.Value = "参会人姓名"
  5311. cellCompany := rowTitle.AddCell()
  5312. cellCompany.Value = "公司名"
  5313. cellTime := rowTitle.AddCell()
  5314. cellTime.Value = "参会时长(线上会议)"
  5315. for _, v := range list {
  5316. pars = make([]interface{}, 0)
  5317. condition = ` AND activity_id = ? AND ( is_meeting = 1 OR duration != "" ) `
  5318. pars = append(pars, v.ActivityId)
  5319. signUpDetailList, err := cygx.GetSignupDetailList(condition, pars)
  5320. if err != nil {
  5321. fmt.Println(err)
  5322. return
  5323. }
  5324. for _, vs := range signUpDetailList {
  5325. if vs.CompanyName == "弘则研究" {
  5326. continue
  5327. }
  5328. row := sheet.AddRow()
  5329. cellADatatitle := row.AddCell()
  5330. cellADatatitle.Value = v.ActivityName
  5331. cellADataPd := row.AddCell()
  5332. cellADataPd.Value = v.ActivityTypeName
  5333. cellBData := row.AddCell()
  5334. cellBData.Value = v.ActivityTime
  5335. cellUserData := row.AddCell()
  5336. cellUserData.Value = vs.RealName
  5337. cellCompanyData := row.AddCell()
  5338. cellCompanyData.Value = vs.CompanyName
  5339. cellTimeData := row.AddCell()
  5340. cellTimeData.Value = vs.Duration
  5341. }
  5342. }
  5343. err = xlsxFile.Save(downLoadnFilePath)
  5344. if err != nil {
  5345. fmt.Println(err)
  5346. return
  5347. }
  5348. fmt.Println("end")
  5349. }
  5350. //func init() {
  5351. // initRsCalendarCheck()
  5352. //}
  5353. // 研选扣点明细,与专项调研明细
  5354. func initPointBill() {
  5355. //行业
  5356. var condition string
  5357. var pars []interface{}
  5358. activitySpecialPermissionPointsList, e := cygx.GetCygxActivitySpecialPermissionPointsList(condition, pars)
  5359. if e != nil && e.Error() != utils.ErrNoRow() {
  5360. fmt.Println(e)
  5361. return
  5362. }
  5363. activityYxPermissionPointsList, e := cygx.GetCygxActivityPointsCompanyByCompanyList(condition, pars)
  5364. if e != nil && e.Error() != utils.ErrNoRow() {
  5365. fmt.Println(e)
  5366. return
  5367. }
  5368. var companyIds []int
  5369. mapPointSpeial := make(map[int]float64)
  5370. mapPointYx := make(map[int]float64)
  5371. for _, v := range activitySpecialPermissionPointsList {
  5372. companyIds = append(companyIds, v.CompanyId)
  5373. mapPointSpeial[v.CompanyId] += v.Pointsf
  5374. }
  5375. for _, v := range activityYxPermissionPointsList {
  5376. companyIds = append(companyIds, v.CompanyId)
  5377. mapPointYx[v.CompanyId] += v.Points
  5378. }
  5379. listCompanyProduct, err := company.GetCompanyProductsByCompanyIdsAndProductIdinit(companyIds)
  5380. if err != nil {
  5381. fmt.Println(err)
  5382. return
  5383. }
  5384. listCompany, err := company.GetOverseasCompanysByCompanyIds(companyIds)
  5385. if err != nil {
  5386. fmt.Println(err)
  5387. return
  5388. }
  5389. mapCompamyName := make(map[int]string)
  5390. for _, v := range listCompany {
  5391. mapCompamyName[v.CompanyId] = v.CompanyName
  5392. }
  5393. //创建excel
  5394. dir, err := os.Executable()
  5395. exPath := filepath.Dir(dir)
  5396. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  5397. xlsxFile := xlsx.NewFile()
  5398. if err != nil {
  5399. fmt.Println(err)
  5400. return
  5401. }
  5402. style := xlsx.NewStyle()
  5403. alignment := xlsx.Alignment{
  5404. Horizontal: "center",
  5405. Vertical: "center",
  5406. WrapText: true,
  5407. }
  5408. style.Alignment = alignment
  5409. style.ApplyAlignment = true
  5410. redStyle := xlsx.NewStyle()
  5411. redStyle.Alignment = alignment
  5412. redStyle.ApplyAlignment = true
  5413. redStyle.Font.Color = "ff0000"
  5414. //定义底色需要标黄的 单元格颜色
  5415. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  5416. redStyle.Fill = redFill
  5417. //redStyle.Border = *border
  5418. var sheetName string
  5419. sheetName = "点数明细"
  5420. sheet, err := xlsxFile.AddSheet(sheetName)
  5421. if err != nil {
  5422. fmt.Println(err)
  5423. return
  5424. }
  5425. //标头
  5426. rowTitle := sheet.AddRow()
  5427. cellB := rowTitle.AddCell()
  5428. cellB.Value = "客户名称"
  5429. cellPd := rowTitle.AddCell()
  5430. cellPd.Value = "销售"
  5431. //cellA := rowTitle.AddCell()
  5432. //cellA.Value = "系列"
  5433. cellAt := rowTitle.AddCell()
  5434. cellAt.Value = "服务销售"
  5435. cellUser := rowTitle.AddCell()
  5436. cellUser.Value = "客户状态"
  5437. cellCompany := rowTitle.AddCell()
  5438. cellCompany.Value = "研选点数"
  5439. cellTime := rowTitle.AddCell()
  5440. cellTime.Value = "专项调研点数"
  5441. for _, v := range listCompanyProduct {
  5442. if mapPointSpeial[v.CompanyId] == 0 && mapPointYx[v.CompanyId] == 0 {
  5443. continue
  5444. }
  5445. row := sheet.AddRow()
  5446. cellADatatitle := row.AddCell()
  5447. cellADatatitle.Value = mapCompamyName[v.CompanyId]
  5448. cellADataPd := row.AddCell()
  5449. cellADataPd.Value = v.SellerName
  5450. cellBData := row.AddCell()
  5451. cellBData.Value = v.ShareSeller
  5452. cellUserData := row.AddCell()
  5453. cellUserData.Value = v.Status
  5454. cellCompanyData := row.AddCell()
  5455. cellCompanyData.Value = fmt.Sprint(mapPointYx[v.CompanyId])
  5456. cellTimeData := row.AddCell()
  5457. cellTimeData.Value = fmt.Sprint(mapPointSpeial[v.CompanyId])
  5458. }
  5459. err = xlsxFile.Save(downLoadnFilePath)
  5460. if err != nil {
  5461. fmt.Println(err)
  5462. return
  5463. }
  5464. fmt.Println("end")
  5465. }
  5466. // 公司最后一份合同期间内参加的路演
  5467. func initRsCalendar() {
  5468. //行业
  5469. listcompany, e := company.GetOverseasCompanysByCompanyIdsInit()
  5470. if e != nil && e.Error() != utils.ErrNoRow() {
  5471. fmt.Println(e)
  5472. return
  5473. }
  5474. //创建excel
  5475. dir, err := os.Executable()
  5476. exPath := filepath.Dir(dir)
  5477. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  5478. xlsxFile := xlsx.NewFile()
  5479. if err != nil {
  5480. fmt.Println(err)
  5481. return
  5482. }
  5483. style := xlsx.NewStyle()
  5484. alignment := xlsx.Alignment{
  5485. Horizontal: "center",
  5486. Vertical: "center",
  5487. WrapText: true,
  5488. }
  5489. style.Alignment = alignment
  5490. style.ApplyAlignment = true
  5491. redStyle := xlsx.NewStyle()
  5492. redStyle.Alignment = alignment
  5493. redStyle.ApplyAlignment = true
  5494. redStyle.Font.Color = "ff0000"
  5495. //定义底色需要标黄的 单元格颜色
  5496. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  5497. redStyle.Fill = redFill
  5498. //redStyle.Border = *border
  5499. var sheetName string
  5500. sheetName = "点数明细"
  5501. sheet, err := xlsxFile.AddSheet(sheetName)
  5502. if err != nil {
  5503. fmt.Println(err)
  5504. return
  5505. }
  5506. //标头
  5507. rowTitle := sheet.AddRow()
  5508. cellB := rowTitle.AddCell()
  5509. cellB.Value = "客户名称"
  5510. cellPd := rowTitle.AddCell()
  5511. cellPd.Value = "最后一份合同开始时间"
  5512. //cellA := rowTitle.AddCell()
  5513. //cellA.Value = "系列"
  5514. cellAt := rowTitle.AddCell()
  5515. cellAt.Value = "最后一份合同结束时间"
  5516. cellUser := rowTitle.AddCell()
  5517. cellUser.Value = "路演次数"
  5518. //cellRsdate := rowTitle.AddCell()
  5519. //cellRsdate.Value = "路演时间"
  5520. //
  5521. //cellYjy := rowTitle.AddCell()
  5522. //cellYjy.Value = "路演研究员"
  5523. cellId := rowTitle.AddCell()
  5524. cellId.Value = "公司ID"
  5525. for _, v := range listcompany {
  5526. fmt.Println(v.CompanyId)
  5527. detail, err := company.GetCompanyContractDetailByCompanyContractIdInit(v.CompanyId)
  5528. if err != nil {
  5529. fmt.Println(err, v.CompanyId)
  5530. return
  5531. }
  5532. listRs, err := roadshow.GetRsCalendarResearcherListByCalendarResearcherIdInit(v.CompanyId, detail.StartDate, detail.EndDate)
  5533. if err != nil {
  5534. fmt.Println(err, "GetRsCalendarResearcherListByCalendarResearcherIdInit", v.CompanyId)
  5535. return
  5536. }
  5537. row := sheet.AddRow()
  5538. cellADatatitle := row.AddCell()
  5539. cellADatatitle.Value = v.CompanyName
  5540. cellADataPd := row.AddCell()
  5541. cellADataPd.Value = detail.StartDate
  5542. cellBData := row.AddCell()
  5543. cellBData.Value = detail.EndDate
  5544. cellUserData := row.AddCell()
  5545. cellUserData.Value = fmt.Sprint(len(listRs))
  5546. //cellRsdateData := row.AddCell()
  5547. //cellRsdateData.Value = vs.StartDate
  5548. //
  5549. //cellYjyData := row.AddCell()
  5550. //cellYjyData.Value = vs.ResearcherName
  5551. cellCompanyData := row.AddCell()
  5552. cellCompanyData.Value = fmt.Sprint(v.CompanyId)
  5553. //for _, vs := range listRs {
  5554. //
  5555. //}
  5556. }
  5557. err = xlsxFile.Save(downLoadnFilePath)
  5558. if err != nil {
  5559. fmt.Println(err)
  5560. return
  5561. }
  5562. fmt.Println("end")
  5563. }
  5564. // 公司最后一份合同期间内参加的路演
  5565. func initRsCalendarCheck() {
  5566. //行业
  5567. var condition string
  5568. var pars []interface{}
  5569. condition = " AND points > 0 GROUP BY company_id "
  5570. listcompany, e := cygx.GetCygxActivitySpecialPermissionPointsList(condition, pars)
  5571. if e != nil && e.Error() != utils.ErrNoRow() {
  5572. fmt.Println(e)
  5573. return
  5574. }
  5575. //创建excel
  5576. dir, err := os.Executable()
  5577. exPath := filepath.Dir(dir)
  5578. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  5579. xlsxFile := xlsx.NewFile()
  5580. if err != nil {
  5581. fmt.Println(err)
  5582. return
  5583. }
  5584. style := xlsx.NewStyle()
  5585. alignment := xlsx.Alignment{
  5586. Horizontal: "center",
  5587. Vertical: "center",
  5588. WrapText: true,
  5589. }
  5590. style.Alignment = alignment
  5591. style.ApplyAlignment = true
  5592. redStyle := xlsx.NewStyle()
  5593. redStyle.Alignment = alignment
  5594. redStyle.ApplyAlignment = true
  5595. redStyle.Font.Color = "ff0000"
  5596. //定义底色需要标黄的 单元格颜色
  5597. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  5598. redStyle.Fill = redFill
  5599. //redStyle.Border = *border
  5600. var sheetName string
  5601. sheetName = "点数明细"
  5602. sheet, err := xlsxFile.AddSheet(sheetName)
  5603. if err != nil {
  5604. fmt.Println(err)
  5605. return
  5606. }
  5607. //标头
  5608. rowTitle := sheet.AddRow()
  5609. cellB := rowTitle.AddCell()
  5610. cellB.Value = "客户名称"
  5611. cellPd := rowTitle.AddCell()
  5612. cellPd.Value = "剩余点数"
  5613. cellId := rowTitle.AddCell()
  5614. cellId.Value = "公司ID"
  5615. for _, v := range listcompany {
  5616. fmt.Println(v.CompanyId)
  5617. var conditionP string
  5618. var parsP []interface{}
  5619. detail, err := company.GetCompanyContractDetailByCompanyContractIdInit(v.CompanyId)
  5620. if err != nil {
  5621. fmt.Println(err, v.CompanyId)
  5622. continue
  5623. //return
  5624. }
  5625. conditionP = " AND company_id = ? AND product_id = 2 AND status = '正式' AND is_upgrade = 1 "
  5626. parsP = append(parsP, v.CompanyId)
  5627. //获取所有开通买方研选正式试用的客户列表
  5628. listCompanyPermission, e := company.GetCompanyReportPermissionList(conditionP, parsP, 0, 10)
  5629. if e != nil && e.Error() != utils.ErrNoRow() {
  5630. fmt.Println(e, v.CompanyId)
  5631. return
  5632. }
  5633. if len(listCompanyPermission) > 0 || detail.RaiPackageType > 0 {
  5634. continue
  5635. }
  5636. row := sheet.AddRow()
  5637. cellADatatitle := row.AddCell()
  5638. cellADatatitle.Value = v.CompanyName
  5639. cellADataPd := row.AddCell()
  5640. cellADataPd.Value = fmt.Sprint(v.Points)
  5641. cellCompanyData := row.AddCell()
  5642. cellCompanyData.Value = fmt.Sprint(v.CompanyId)
  5643. }
  5644. err = xlsxFile.Save(downLoadnFilePath)
  5645. if err != nil {
  5646. fmt.Println(err)
  5647. return
  5648. }
  5649. fmt.Println("end")
  5650. }
  5651. //func init() {
  5652. // initCommpanyList()
  5653. //}
  5654. // 公司研选剩余点数
  5655. func initYanxuanPoint() {
  5656. //行业
  5657. var condition string
  5658. var pars []interface{}
  5659. condition = " AND points != 0 "
  5660. activityYxPermissionPointsList, e := cygx.GetCygxActivityPointsCompanyByCompanyList(condition, pars)
  5661. if e != nil && e.Error() != utils.ErrNoRow() {
  5662. fmt.Println(e)
  5663. return
  5664. }
  5665. var companyIds []int
  5666. mapPointYx := make(map[int]float64)
  5667. for _, v := range activityYxPermissionPointsList {
  5668. companyIds = append(companyIds, v.CompanyId)
  5669. mapPointYx[v.CompanyId] += v.Points
  5670. }
  5671. listCompanyProduct, err := company.GetCompanyProductsByCompanyIdsAndProductIdinit(companyIds)
  5672. if err != nil {
  5673. fmt.Println(err)
  5674. return
  5675. }
  5676. listCompany, err := company.GetOverseasCompanysByCompanyIds(companyIds)
  5677. if err != nil {
  5678. fmt.Println(err)
  5679. return
  5680. }
  5681. mapCompamyName := make(map[int]string)
  5682. for _, v := range listCompany {
  5683. mapCompamyName[v.CompanyId] = v.CompanyName
  5684. }
  5685. //创建excel
  5686. dir, err := os.Executable()
  5687. exPath := filepath.Dir(dir)
  5688. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  5689. xlsxFile := xlsx.NewFile()
  5690. if err != nil {
  5691. fmt.Println(err)
  5692. return
  5693. }
  5694. style := xlsx.NewStyle()
  5695. alignment := xlsx.Alignment{
  5696. Horizontal: "center",
  5697. Vertical: "center",
  5698. WrapText: true,
  5699. }
  5700. style.Alignment = alignment
  5701. style.ApplyAlignment = true
  5702. redStyle := xlsx.NewStyle()
  5703. redStyle.Alignment = alignment
  5704. redStyle.ApplyAlignment = true
  5705. redStyle.Font.Color = "ff0000"
  5706. //定义底色需要标黄的 单元格颜色
  5707. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  5708. redStyle.Fill = redFill
  5709. //redStyle.Border = *border
  5710. var sheetName string
  5711. sheetName = "点数明细"
  5712. sheet, err := xlsxFile.AddSheet(sheetName)
  5713. if err != nil {
  5714. fmt.Println(err)
  5715. return
  5716. }
  5717. //标头
  5718. rowTitle := sheet.AddRow()
  5719. cellB := rowTitle.AddCell()
  5720. cellB.Value = "客户名称"
  5721. cellPd := rowTitle.AddCell()
  5722. cellPd.Value = "销售"
  5723. cellAt := rowTitle.AddCell()
  5724. cellAt.Value = "服务销售"
  5725. cellCompany := rowTitle.AddCell()
  5726. cellCompany.Value = "研选点数"
  5727. for _, v := range listCompanyProduct {
  5728. if mapPointYx[v.CompanyId] == 0 {
  5729. continue
  5730. }
  5731. row := sheet.AddRow()
  5732. cellADatatitle := row.AddCell()
  5733. cellADatatitle.Value = mapCompamyName[v.CompanyId]
  5734. cellADataPd := row.AddCell()
  5735. cellADataPd.Value = v.SellerName
  5736. cellBData := row.AddCell()
  5737. cellBData.Value = v.ShareSeller
  5738. cellCompanyData := row.AddCell()
  5739. cellCompanyData.Value = fmt.Sprint(mapPointYx[v.CompanyId])
  5740. }
  5741. err = xlsxFile.Save(downLoadnFilePath)
  5742. if err != nil {
  5743. fmt.Println(err)
  5744. return
  5745. }
  5746. fmt.Println("end")
  5747. }
  5748. // 公司研选剩余点数
  5749. func initCommpanyList() {
  5750. //行业
  5751. var condition string
  5752. var pars []interface{}
  5753. condition = " AND product_id = 2 AND status IN ('正式','试用') ORDER BY status DESC "
  5754. listCompanyProduct, e := company.GetCompanyProductList(condition, pars)
  5755. if e != nil {
  5756. fmt.Println(e)
  5757. return
  5758. }
  5759. var companyIds []int
  5760. for _, v := range listCompanyProduct {
  5761. companyIds = append(companyIds, v.CompanyId)
  5762. }
  5763. listNum, err := cygx.GetInteractionNumInitList()
  5764. if err != nil {
  5765. fmt.Println(err)
  5766. return
  5767. }
  5768. mapNum := make(map[int]int)
  5769. for _, v := range listNum {
  5770. mapNum[v.CompanyId] = v.InteractionNum
  5771. }
  5772. listCompany, err := company.GetOverseasCompanysByCompanyIds(companyIds)
  5773. if err != nil {
  5774. fmt.Println(err)
  5775. return
  5776. }
  5777. var conditionc string
  5778. var parsc []interface{}
  5779. conditionc = " AND product_id = 2 AND end_date > '2025-03-04' "
  5780. var companyContractIds []int
  5781. companyContractList, e := company.GetCompanyContractList(conditionc, parsc)
  5782. if e != nil && e.Error() != utils.ErrNoRow() {
  5783. fmt.Println(e)
  5784. return
  5785. }
  5786. for _, v := range companyContractList {
  5787. companyContractIds = append(companyContractIds, v.CompanyContractId)
  5788. }
  5789. //合并合同所对应的权限
  5790. mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
  5791. if err != nil {
  5792. fmt.Println(err)
  5793. return
  5794. }
  5795. mapCompamyName := make(map[int]string)
  5796. mapInteractionNum := make(map[int]int)
  5797. for _, v := range listCompany {
  5798. mapCompamyName[v.CompanyId] = v.CompanyName
  5799. mapInteractionNum[v.CompanyId] = v.InteractionNum
  5800. }
  5801. mapCompamyPersion := make(map[int][]string)
  5802. for _, v := range companyContractList {
  5803. mapCompamyPersion[v.CompanyId] = append(mapCompamyPersion[v.CompanyId], mappermissionName[v.CompanyContractId])
  5804. }
  5805. //创建excel
  5806. dir, err := os.Executable()
  5807. exPath := filepath.Dir(dir)
  5808. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  5809. xlsxFile := xlsx.NewFile()
  5810. if err != nil {
  5811. fmt.Println(err)
  5812. return
  5813. }
  5814. style := xlsx.NewStyle()
  5815. alignment := xlsx.Alignment{
  5816. Horizontal: "center",
  5817. Vertical: "center",
  5818. WrapText: true,
  5819. }
  5820. style.Alignment = alignment
  5821. style.ApplyAlignment = true
  5822. redStyle := xlsx.NewStyle()
  5823. redStyle.Alignment = alignment
  5824. redStyle.ApplyAlignment = true
  5825. redStyle.Font.Color = "ff0000"
  5826. //定义底色需要标黄的 单元格颜色
  5827. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  5828. redStyle.Fill = redFill
  5829. //redStyle.Border = *border
  5830. var sheetName string
  5831. sheetName = "正式、试用客户明细"
  5832. sheet, err := xlsxFile.AddSheet(sheetName)
  5833. if err != nil {
  5834. fmt.Println(err)
  5835. return
  5836. }
  5837. //标头
  5838. rowTitle := sheet.AddRow()
  5839. cellB := rowTitle.AddCell()
  5840. cellB.Value = "客户名称"
  5841. cellPd := rowTitle.AddCell()
  5842. cellPd.Value = "互动量 "
  5843. cellAt := rowTitle.AddCell()
  5844. cellAt.Value = "当前状态"
  5845. cellCompany := rowTitle.AddCell()
  5846. cellCompany.Value = "合同期限/试用期限"
  5847. cellPerssion := rowTitle.AddCell()
  5848. cellPerssion.Value = "签约套餐"
  5849. for _, v := range listCompanyProduct {
  5850. row := sheet.AddRow()
  5851. cellADatatitle := row.AddCell()
  5852. cellADatatitle.Value = mapCompamyName[v.CompanyId]
  5853. cellADataPd := row.AddCell()
  5854. cellADataPd.Value = fmt.Sprint(mapNum[v.CompanyId])
  5855. cellBData := row.AddCell()
  5856. cellBData.Value = v.Status
  5857. cellCompanyData := row.AddCell()
  5858. cellCompanyData.Value = fmt.Sprint(v.StartDate, " / ", v.EndDate)
  5859. cellPerssionData := row.AddCell()
  5860. cellPerssionData.Value = strings.Join(mapCompamyPersion[v.CompanyId], ",")
  5861. }
  5862. err = xlsxFile.Save(downLoadnFilePath)
  5863. if err != nil {
  5864. fmt.Println(err)
  5865. return
  5866. }
  5867. fmt.Println("end")
  5868. }
  5869. //func init() {
  5870. // initart121_328()
  5871. //}
  5872. // 公司研选剩余点数
  5873. func initCommpanyNum() {
  5874. //行业
  5875. listContract, e := company.CompanyContractListNum()
  5876. if e != nil {
  5877. fmt.Println(e)
  5878. return
  5879. }
  5880. var companyIds []int
  5881. for _, v := range listContract {
  5882. companyIds = append(companyIds, v.CompanyId)
  5883. }
  5884. mapNum := make(map[int]int)
  5885. mapYearNum := make(map[string]bool)
  5886. mapYearMoney := make(map[string]float64)
  5887. mapNewYearMoney := make(map[int]float64)
  5888. mapMoney := make(map[int]float64)
  5889. mapYearArr := make(map[int][]string)
  5890. mapStartDate := make(map[int]string)
  5891. for _, v := range listContract {
  5892. if mapStartDate[v.CompanyId] == "" {
  5893. mapStartDate[v.CompanyId] = v.StartDate
  5894. }
  5895. year := v.StartDate[:4]
  5896. keyMap := fmt.Sprint("CID", v.CompanyId, "Year", year)
  5897. mapYearMoney[keyMap] += v.Money
  5898. mapMoney[v.CompanyId] += v.Money
  5899. fmt.Println(keyMap)
  5900. if mapYearNum[keyMap] {
  5901. continue
  5902. }
  5903. mapNum[v.CompanyId]++
  5904. mapYearNum[keyMap] = true
  5905. mapYearArr[v.CompanyId] = append(mapYearArr[v.CompanyId], year)
  5906. }
  5907. for _, v := range listContract {
  5908. year := v.StartDate[:4]
  5909. keyMap := fmt.Sprint("CID", v.CompanyId, "Year", year)
  5910. if mapYearMoney[keyMap] > 0 {
  5911. mapNewYearMoney[v.CompanyId] = mapYearMoney[keyMap]
  5912. }
  5913. }
  5914. //fmt.Println(mapNum[5604])
  5915. //return
  5916. listCompanyProduct, err := company.GetCompanyProductsByCompanyIdsAndProductIdinit(companyIds)
  5917. if err != nil {
  5918. fmt.Println(err)
  5919. return
  5920. }
  5921. listCompany, err := company.GetOverseasCompanysByCompanyIds(companyIds)
  5922. if err != nil {
  5923. fmt.Println(err)
  5924. return
  5925. }
  5926. mapCompamyName := make(map[int]string)
  5927. mapInteractionNum := make(map[int]int)
  5928. for _, v := range listCompany {
  5929. mapCompamyName[v.CompanyId] = v.CompanyName
  5930. mapInteractionNum[v.CompanyId] = v.InteractionNum
  5931. }
  5932. //创建excel
  5933. dir, err := os.Executable()
  5934. exPath := filepath.Dir(dir)
  5935. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  5936. xlsxFile := xlsx.NewFile()
  5937. if err != nil {
  5938. fmt.Println(err)
  5939. return
  5940. }
  5941. style := xlsx.NewStyle()
  5942. alignment := xlsx.Alignment{
  5943. Horizontal: "center",
  5944. Vertical: "center",
  5945. WrapText: true,
  5946. }
  5947. style.Alignment = alignment
  5948. style.ApplyAlignment = true
  5949. redStyle := xlsx.NewStyle()
  5950. redStyle.Alignment = alignment
  5951. redStyle.ApplyAlignment = true
  5952. redStyle.Font.Color = "ff0000"
  5953. //定义底色需要标黄的 单元格颜色
  5954. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  5955. redStyle.Fill = redFill
  5956. //redStyle.Border = *border
  5957. var sheetName string
  5958. sheetName = "正式、试用客户明细"
  5959. sheet, err := xlsxFile.AddSheet(sheetName)
  5960. if err != nil {
  5961. fmt.Println(err)
  5962. return
  5963. }
  5964. //标头
  5965. rowTitle := sheet.AddRow()
  5966. cellB := rowTitle.AddCell()
  5967. cellB.Value = "客户名称"
  5968. cellPd := rowTitle.AddCell()
  5969. cellPd.Value = "次数 "
  5970. cellAt := rowTitle.AddCell()
  5971. cellAt.Value = "所属销售"
  5972. cellPerssion := rowTitle.AddCell()
  5973. cellPerssion.Value = "状态"
  5974. //cellPerssionId := rowTitle.AddCell()
  5975. //cellPerssionId.Value = "公司ID"
  5976. cellPerssionIdYear := rowTitle.AddCell()
  5977. cellPerssionIdYear.Value = "相关年份"
  5978. cellStartYear := rowTitle.AddCell()
  5979. cellStartYear.Value = "首分合同开始时间"
  5980. cellNewYear := rowTitle.AddCell()
  5981. cellNewYear.Value = "当前合同总额"
  5982. cellOldYear := rowTitle.AddCell()
  5983. cellOldYear.Value = "历年合同总额"
  5984. //cellAllYearMoney := rowTitle.AddCell()
  5985. //cellAllYearMoney.Value = "所有年份合同总金额"
  5986. //
  5987. //cellAllYearMoney2020 := rowTitle.AddCell()
  5988. //cellAllYearMoney2020.Value = "2020年合同总金额"
  5989. //
  5990. //cellAllYearMoney2021 := rowTitle.AddCell()
  5991. //cellAllYearMoney2021.Value = "2021年合同总金额"
  5992. //
  5993. //cellAllYearMoney2022 := rowTitle.AddCell()
  5994. //cellAllYearMoney2022.Value = "2022年合同总金额"
  5995. //
  5996. //cellAllYearMoney2023 := rowTitle.AddCell()
  5997. //cellAllYearMoney2023.Value = "2023年合同总金额"
  5998. //
  5999. //cellAllYearMoney2024 := rowTitle.AddCell()
  6000. //cellAllYearMoney2024.Value = "2024年合同总金额"
  6001. //
  6002. //cellAllYearMoney2025 := rowTitle.AddCell()
  6003. //cellAllYearMoney2025.Value = "2025年合同总金额"
  6004. for _, v := range listCompanyProduct {
  6005. if mapNum[v.CompanyId] < 3 {
  6006. continue
  6007. }
  6008. row := sheet.AddRow()
  6009. cellADatatitle := row.AddCell()
  6010. cellADatatitle.Value = mapCompamyName[v.CompanyId]
  6011. cellADataPd := row.AddCell()
  6012. cellADataPd.Value = fmt.Sprint(mapNum[v.CompanyId])
  6013. cellCompanyData := row.AddCell()
  6014. cellCompanyData.Value = v.SellerName
  6015. cellBData := row.AddCell()
  6016. cellBData.Value = v.Status
  6017. //cellBDataId := row.AddCell()
  6018. //cellBDataId.Value = fmt.Sprint(v.CompanyId)
  6019. cellPerssionIdYearData := row.AddCell()
  6020. cellPerssionIdYearData.Value = strings.Join(mapYearArr[v.CompanyId], ",")
  6021. cellStartYearData := row.AddCell()
  6022. cellStartYearData.Value = fmt.Sprint(mapStartDate[v.CompanyId])
  6023. cellNewYearData := row.AddCell()
  6024. cellNewYearData.Value = strconv.FormatFloat(mapNewYearMoney[v.CompanyId], 'f', 1, 64)
  6025. cellOldYearData := row.AddCell()
  6026. cellOldYearData.Value = strconv.FormatFloat(mapMoney[v.CompanyId]-mapNewYearMoney[v.CompanyId], 'f', 1, 64)
  6027. //cellAllYearMoneyData := row.AddCell()
  6028. ////cellAllYearMoneyData.Value = fmt.Sprint(mapMoney[v.CompanyId])
  6029. //cellAllYearMoneyData.Value = strconv.FormatFloat(mapMoney[v.CompanyId], 'f', 1, 64)
  6030. //
  6031. //cellAllYearMoney2020Data := row.AddCell()
  6032. //cellAllYearMoney2020Data.Value = strconv.FormatFloat(mapYearMoney[fmt.Sprint("CID", v.CompanyId, "Year2020")], 'f', 1, 64)
  6033. //
  6034. //cellAllYearMoney2021Data := row.AddCell()
  6035. //cellAllYearMoney2021Data.Value = strconv.FormatFloat(mapYearMoney[fmt.Sprint("CID", v.CompanyId, "Year2021")], 'f', 1, 64)
  6036. //
  6037. //cellAllYearMoney2022Data := row.AddCell()
  6038. //cellAllYearMoney2022Data.Value = strconv.FormatFloat(mapYearMoney[fmt.Sprint("CID", v.CompanyId, "Year2022")], 'f', 1, 64)
  6039. //
  6040. //cellAllYearMoney2023Data := row.AddCell()
  6041. //cellAllYearMoney2023Data.Value = strconv.FormatFloat(mapYearMoney[fmt.Sprint("CID", v.CompanyId, "Year2023")], 'f', 1, 64)
  6042. //
  6043. //cellAllYearMoney2024Data := row.AddCell()
  6044. //cellAllYearMoney2024Data.Value = strconv.FormatFloat(mapYearMoney[fmt.Sprint("CID", v.CompanyId, "Year2024")], 'f', 1, 64)
  6045. //
  6046. //cellAllYearMoney2025Data := row.AddCell()
  6047. //cellAllYearMoney2025Data.Value = strconv.FormatFloat(mapYearMoney[fmt.Sprint("CID", v.CompanyId, "Year2025")], 'f', 1, 64)
  6048. }
  6049. err = xlsxFile.Save(downLoadnFilePath)
  6050. if err != nil {
  6051. fmt.Println(err)
  6052. return
  6053. }
  6054. fmt.Println("end")
  6055. }
  6056. // 研选专栏阅读内容
  6057. func initart121_326() {
  6058. //行业
  6059. var condition string
  6060. var pars []interface{}
  6061. condition += ` AND a.id IN (632,633,634,637,638) ORDER BY publish_time DESC `
  6062. //报告匹配类型
  6063. condition += ` `
  6064. listart, err := cygx.GetYanxuanSpecialListBycondition(condition, pars, 0, 2000)
  6065. if err != nil {
  6066. fmt.Println(err)
  6067. return
  6068. }
  6069. fmt.Println("listart", len(listart))
  6070. //创建excel
  6071. dir, err := os.Executable()
  6072. exPath := filepath.Dir(dir)
  6073. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  6074. xlsxFile := xlsx.NewFile()
  6075. if err != nil {
  6076. fmt.Println(err)
  6077. return
  6078. }
  6079. style := xlsx.NewStyle()
  6080. alignment := xlsx.Alignment{
  6081. Horizontal: "center",
  6082. Vertical: "center",
  6083. WrapText: true,
  6084. }
  6085. style.Alignment = alignment
  6086. style.ApplyAlignment = true
  6087. redStyle := xlsx.NewStyle()
  6088. redStyle.Alignment = alignment
  6089. redStyle.ApplyAlignment = true
  6090. redStyle.Font.Color = "ff0000"
  6091. //定义底色需要标黄的 单元格颜色
  6092. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  6093. redStyle.Fill = redFill
  6094. //redStyle.Border = *border
  6095. var sheetName string
  6096. sheetName = "PV"
  6097. sheet, err := xlsxFile.AddSheet(sheetName)
  6098. if err != nil {
  6099. fmt.Println(err)
  6100. return
  6101. }
  6102. //标头
  6103. rowTitle := sheet.AddRow()
  6104. cellAt := rowTitle.AddCell()
  6105. cellAt.Value = "标题"
  6106. cellPd := rowTitle.AddCell()
  6107. cellPd.Value = "发布时间"
  6108. cellA := rowTitle.AddCell()
  6109. cellA.Value = "姓名"
  6110. cellC := rowTitle.AddCell()
  6111. cellC.Value = "公司名称"
  6112. cellDCreatedTime := rowTitle.AddCell()
  6113. cellDCreatedTime.Value = "阅读时间"
  6114. cellE := rowTitle.AddCell()
  6115. cellE.Value = "阅读时长"
  6116. for k, v := range listart {
  6117. fmt.Println("kkkk", k)
  6118. pars = make([]interface{}, 0)
  6119. condition = ` AND yanxuan_special_id = ? AND stop_time > 0 AND mobile!= '' `
  6120. pars = append(pars, v.Id)
  6121. listPv, err := cygx.GetCygxYanxuanSpecialRecordList(condition, pars)
  6122. if err != nil {
  6123. fmt.Println(err)
  6124. return
  6125. }
  6126. mapStopTime := make(map[string]int)
  6127. for _, vP := range listPv {
  6128. mapStopTime[vP.Mobile] += vP.StopTime
  6129. }
  6130. haveMobile := make(map[string]bool)
  6131. //var listDate []*cygx.ArticleHistoryRep
  6132. var mobileArr []string
  6133. var companyIds []int
  6134. companyIdsMap := make(map[int]bool)
  6135. mapMobileUser := make(map[string]string)
  6136. for _, vuser := range listPv {
  6137. mobileArr = append(mobileArr, vuser.Mobile)
  6138. if companyIdsMap[vuser.CompanyId] {
  6139. continue
  6140. }
  6141. companyIds = append(companyIds, vuser.CompanyId)
  6142. companyIdsMap[vuser.CompanyId] = true
  6143. }
  6144. listUser, err := models.GetWxUserListByUserMobileHaveCompany(mobileArr)
  6145. if err != nil {
  6146. fmt.Println(err)
  6147. return
  6148. }
  6149. for _, vu := range listUser {
  6150. mapMobileUser[vu.Mobile] = vu.RealName
  6151. }
  6152. //合并合同所对应的权限
  6153. listCompany, err := company.GetCompanyProductsByCompanyIdsAndProductIdinit(companyIds)
  6154. if err != nil {
  6155. fmt.Println(err)
  6156. return
  6157. }
  6158. mapIndustryName := make(map[int]string)
  6159. for _, vC := range listCompany {
  6160. mapIndustryName[vC.CompanyId] = vC.IndustryName
  6161. }
  6162. for _, item := range listPv {
  6163. if haveMobile[item.Mobile] {
  6164. continue
  6165. }
  6166. haveMobile[item.Mobile] = true
  6167. row := sheet.AddRow()
  6168. cellADatatitle := row.AddCell()
  6169. cellADatatitle.Value = v.Title
  6170. cellADataPd := row.AddCell()
  6171. cellADataPd.Value = v.PublishTime.Format(utils.FormatDateTime)
  6172. cellAData := row.AddCell()
  6173. if item.RealName == "" {
  6174. cellAData.Value = mapMobileUser[item.Mobile]
  6175. } else {
  6176. cellAData.Value = item.RealName
  6177. }
  6178. cellBData := row.AddCell()
  6179. cellBData.Value = item.CompanyName
  6180. cellEData := row.AddCell()
  6181. cellEData.Value = item.CreateTime
  6182. cellFData := row.AddCell()
  6183. cellFData.Value = strconv.Itoa(mapStopTime[item.Mobile])
  6184. }
  6185. err = xlsxFile.Save(downLoadnFilePath)
  6186. if err != nil {
  6187. fmt.Println(err)
  6188. return
  6189. }
  6190. }
  6191. }
  6192. // 研选专栏阅读内容
  6193. func initart121_328() {
  6194. listComapny, err := company.GetCompanyProductsByCompanyId23423()
  6195. if err != nil {
  6196. fmt.Println(err)
  6197. return
  6198. }
  6199. //创建excel
  6200. dir, err := os.Executable()
  6201. exPath := filepath.Dir(dir)
  6202. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  6203. xlsxFile := xlsx.NewFile()
  6204. if err != nil {
  6205. fmt.Println(err)
  6206. return
  6207. }
  6208. style := xlsx.NewStyle()
  6209. alignment := xlsx.Alignment{
  6210. Horizontal: "center",
  6211. Vertical: "center",
  6212. WrapText: true,
  6213. }
  6214. style.Alignment = alignment
  6215. style.ApplyAlignment = true
  6216. redStyle := xlsx.NewStyle()
  6217. redStyle.Alignment = alignment
  6218. redStyle.ApplyAlignment = true
  6219. redStyle.Font.Color = "ff0000"
  6220. //定义底色需要标黄的 单元格颜色
  6221. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  6222. redStyle.Fill = redFill
  6223. //redStyle.Border = *border
  6224. var sheetName string
  6225. sheetName = "PV"
  6226. sheet, err := xlsxFile.AddSheet(sheetName)
  6227. if err != nil {
  6228. fmt.Println(err)
  6229. return
  6230. }
  6231. //标头
  6232. rowTitle := sheet.AddRow()
  6233. cellC := rowTitle.AddCell()
  6234. cellC.Value = "公司名称"
  6235. cellDCreatedTime := rowTitle.AddCell()
  6236. cellDCreatedTime.Value = "Uv"
  6237. for k, v := range listComapny {
  6238. fmt.Println("kkkk", k)
  6239. listPv, err := cygx.GetCygxYanxuanSpecialRecordListsss(v.CompanyId)
  6240. if err != nil {
  6241. fmt.Println(err)
  6242. return
  6243. }
  6244. row := sheet.AddRow()
  6245. cellADatatitle := row.AddCell()
  6246. cellADatatitle.Value = v.CompanyName
  6247. cellADataPd := row.AddCell()
  6248. cellADataPd.Value = strconv.Itoa(len(listPv))
  6249. cellADataPdId := row.AddCell()
  6250. cellADataPdId.Value = strconv.Itoa(v.CompanyId)
  6251. }
  6252. err = xlsxFile.Save(downLoadnFilePath)
  6253. if err != nil {
  6254. fmt.Println(err)
  6255. return
  6256. }
  6257. return
  6258. }
  6259. //func init() {
  6260. // initActComapny()
  6261. //}
  6262. func initActComapny() {
  6263. var condition string
  6264. mapuserMapbil := make(map[int]*models.WxUserSller)
  6265. companyIdArr := []int{19130, 16946, 18221, 15736, 18434}
  6266. fmt.Println(companyIdArr)
  6267. listCompany, err := models.GetWxUserRaiSllerListByUserComapnyId(companyIdArr)
  6268. if err != nil {
  6269. fmt.Println(err)
  6270. return
  6271. }
  6272. for _, v := range listCompany {
  6273. mapuserMapbil[v.CompanyId] = v
  6274. }
  6275. //创建excel
  6276. dir, err := os.Executable()
  6277. exPath := filepath.Dir(dir)
  6278. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  6279. xlsxFile := xlsx.NewFile()
  6280. if err != nil {
  6281. fmt.Println(err)
  6282. return
  6283. }
  6284. style := xlsx.NewStyle()
  6285. alignment := xlsx.Alignment{
  6286. Horizontal: "center",
  6287. Vertical: "center",
  6288. WrapText: true,
  6289. }
  6290. style.Alignment = alignment
  6291. style.ApplyAlignment = true
  6292. redStyle := xlsx.NewStyle()
  6293. redStyle.Alignment = alignment
  6294. redStyle.ApplyAlignment = true
  6295. redStyle.Font.Color = "ff0000"
  6296. //定义底色需要标黄的 单元格颜色
  6297. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  6298. redStyle.Fill = redFill
  6299. //redStyle.Border = *border
  6300. var sheetName string
  6301. sheetName = "到会信息"
  6302. sheet, err := xlsxFile.AddSheet(sheetName)
  6303. if err != nil {
  6304. fmt.Println(err)
  6305. return
  6306. }
  6307. //标头
  6308. rowTitle := sheet.AddRow()
  6309. cellAct := rowTitle.AddCell()
  6310. cellAct.Value = "活动名称"
  6311. cellB := rowTitle.AddCell()
  6312. cellB.Value = "活动类型(线上线下)"
  6313. cellActime := rowTitle.AddCell()
  6314. cellActime.Value = " 活动时间/发布时间"
  6315. cellD := rowTitle.AddCell()
  6316. cellD.Value = "参与人姓名"
  6317. cellE := rowTitle.AddCell()
  6318. cellE.Value = "手机号"
  6319. cellCom := rowTitle.AddCell()
  6320. cellCom.Value = "公司名称"
  6321. for _, v := range companyIdArr {
  6322. condition = " AND ( is_meeting = 1 OR duration != '' ) AND a.activity_time >= '2024-01-01' AND a.activity_time <= '2024-12-31' AND s.company_id = " + strconv.Itoa(v)
  6323. listData, err := cygx.GetActivityMeetByUser(condition, 0, 99999)
  6324. if err != nil {
  6325. fmt.Println(err)
  6326. return
  6327. }
  6328. for _, item := range listData {
  6329. fmt.Println(item.ActivityTimeText)
  6330. row := sheet.AddRow()
  6331. cellActData := row.AddCell()
  6332. cellActData.Value = item.ActivityName
  6333. if item.ActivityType == 1 {
  6334. item.ActivityTypeName += "(线上)"
  6335. } else {
  6336. item.ActivityTypeName += "(线下)"
  6337. }
  6338. cellBData := row.AddCell()
  6339. cellBData.Value = item.ActivityTypeName
  6340. cellActimeData := row.AddCell()
  6341. cellActimeData.Value = item.ActivityTime
  6342. cellAData := row.AddCell()
  6343. cellAData.Value = item.RealName
  6344. cellMobileData := row.AddCell()
  6345. cellMobileData.Value = item.Mobile
  6346. cellCData := row.AddCell()
  6347. cellCData.Value = item.CompanyName
  6348. if mapuserMapbil[item.CompanyId] != nil {
  6349. cellCData.Value = mapuserMapbil[item.CompanyId].CompanyName
  6350. }
  6351. }
  6352. }
  6353. err = xlsxFile.Save(downLoadnFilePath)
  6354. if err != nil {
  6355. fmt.Println(err)
  6356. return
  6357. }
  6358. }
  6359. func initexcel() {
  6360. path := "./007.xlsx"
  6361. xlFile, err := xlsx.OpenFile(path)
  6362. if err != nil {
  6363. fmt.Println(err)
  6364. return
  6365. }
  6366. var companyName string
  6367. var name string
  6368. var phone string
  6369. var phone2 string
  6370. var mobiles []string
  6371. for _, sheet := range xlFile.Sheets {
  6372. maxRow := sheet.MaxRow
  6373. for i := 0; i < maxRow; i++ {
  6374. if i >= 1 {
  6375. row := sheet.Row(i)
  6376. cells := row.Cells
  6377. for k, cell := range cells {
  6378. if k == 1 {
  6379. companyName = cell.String()
  6380. }
  6381. if k == 4 {
  6382. name = cell.String()
  6383. }
  6384. if k == 11 {
  6385. phone = cell.String()
  6386. }
  6387. if k == 13 {
  6388. phone2 = cell.String()
  6389. }
  6390. mobiles = append(mobiles, phone, phone2)
  6391. }
  6392. fmt.Println(fmt.Sprint("公司名称", companyName, "_姓名", name, "_手机号", phone, "_手机号2", phone2))
  6393. }
  6394. }
  6395. }
  6396. //创建excel
  6397. dir, err := os.Executable()
  6398. exPath := filepath.Dir(dir)
  6399. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  6400. xlsxFile := xlsx.NewFile()
  6401. if err != nil {
  6402. fmt.Println(err)
  6403. return
  6404. }
  6405. style := xlsx.NewStyle()
  6406. alignment := xlsx.Alignment{
  6407. Horizontal: "center",
  6408. Vertical: "center",
  6409. WrapText: true,
  6410. }
  6411. style.Alignment = alignment
  6412. style.ApplyAlignment = true
  6413. redStyle := xlsx.NewStyle()
  6414. redStyle.Alignment = alignment
  6415. redStyle.ApplyAlignment = true
  6416. redStyle.Font.Color = "ff0000"
  6417. //定义底色需要标黄的 单元格颜色
  6418. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  6419. redStyle.Fill = redFill
  6420. //redStyle.Border = *border
  6421. var sheetName string
  6422. sheetName = "到会信息"
  6423. sheetF, err := xlsxFile.AddSheet(sheetName)
  6424. if err != nil {
  6425. fmt.Println(err)
  6426. return
  6427. }
  6428. //标头
  6429. rowTitle := sheetF.AddRow()
  6430. cellMobile := rowTitle.AddCell()
  6431. cellMobile.Value = "手机号"
  6432. cellAct := rowTitle.AddCell()
  6433. cellAct.Value = "姓名"
  6434. cellB := rowTitle.AddCell()
  6435. cellB.Value = "公司名"
  6436. cellActime := rowTitle.AddCell()
  6437. cellActime.Value = "活动名称"
  6438. cellD := rowTitle.AddCell()
  6439. cellD.Value = "活动类型"
  6440. cellE := rowTitle.AddCell()
  6441. cellE.Value = "活动时间"
  6442. cellCom := rowTitle.AddCell()
  6443. cellCom.Value = "首次入会时间"
  6444. cellComL := rowTitle.AddCell()
  6445. cellComL.Value = "最后退出时间"
  6446. cellComDu := rowTitle.AddCell()
  6447. cellComDu.Value = "参与时长"
  6448. listData, err := cygx.GetSignupDetailListinit(mobiles)
  6449. if err != nil {
  6450. fmt.Println(err)
  6451. return
  6452. }
  6453. mobileItems := make(map[string][]*cygx.CygxActivitySignupDetailInit)
  6454. for _, v := range listData {
  6455. mobileItems[v.OutboundMobile] = append(mobileItems[v.OutboundMobile], v)
  6456. }
  6457. for _, sheet := range xlFile.Sheets {
  6458. maxRow := sheet.MaxRow
  6459. for i := 0; i < maxRow; i++ {
  6460. if i >= 1 {
  6461. row := sheet.Row(i)
  6462. cells := row.Cells
  6463. for k, cell := range cells {
  6464. if k == 1 {
  6465. companyName = cell.String()
  6466. }
  6467. if k == 4 {
  6468. name = cell.String()
  6469. }
  6470. if k == 11 {
  6471. phone = cell.String()
  6472. }
  6473. if k == 13 {
  6474. phone2 = cell.String()
  6475. }
  6476. }
  6477. if len(mobileItems[phone]) == 0 {
  6478. continue
  6479. }
  6480. for _, vD := range mobileItems[phone] {
  6481. rowD := sheetF.AddRow()
  6482. cellActData := rowD.AddCell()
  6483. cellActData.Value = phone
  6484. cellNameData := rowD.AddCell()
  6485. cellNameData.Value = name
  6486. cellComNameData := rowD.AddCell()
  6487. cellComNameData.Value = companyName
  6488. cellActNameData := rowD.AddCell()
  6489. cellActNameData.Value = vD.ActivityName
  6490. cellActivityTypeNameData := rowD.AddCell()
  6491. cellActivityTypeNameData.Value = vD.ActivityTypeName
  6492. cellActivityTimeData := rowD.AddCell()
  6493. cellActivityTimeData.Value = vD.ActivityTime
  6494. cellActivityTimeFData := rowD.AddCell()
  6495. cellActivityTimeFData.Value = vD.FirstMeetingTime
  6496. cellActivityTimeLData := rowD.AddCell()
  6497. cellActivityTimeLData.Value = vD.LastMeetingTime
  6498. cellActivityTimeDuData := rowD.AddCell()
  6499. cellActivityTimeDuData.Value = vD.Duration
  6500. }
  6501. }
  6502. }
  6503. }
  6504. for _, sheet := range xlFile.Sheets {
  6505. maxRow := sheet.MaxRow
  6506. for i := 0; i < maxRow; i++ {
  6507. if i >= 1 {
  6508. row := sheet.Row(i)
  6509. cells := row.Cells
  6510. for k, cell := range cells {
  6511. if k == 1 {
  6512. companyName = cell.String()
  6513. }
  6514. if k == 4 {
  6515. name = cell.String()
  6516. }
  6517. //if k == 11 {
  6518. // phone = cell.String()
  6519. //}
  6520. if k == 13 {
  6521. phone = cell.String()
  6522. }
  6523. }
  6524. if len(mobileItems[phone]) == 0 {
  6525. continue
  6526. }
  6527. for _, vD := range mobileItems[phone] {
  6528. rowD := sheetF.AddRow()
  6529. cellActData := rowD.AddCell()
  6530. cellActData.Value = phone
  6531. cellNameData := rowD.AddCell()
  6532. cellNameData.Value = name
  6533. cellComNameData := rowD.AddCell()
  6534. cellComNameData.Value = companyName
  6535. cellActNameData := rowD.AddCell()
  6536. cellActNameData.Value = vD.ActivityName
  6537. cellActivityTypeNameData := rowD.AddCell()
  6538. cellActivityTypeNameData.Value = vD.ActivityTypeName
  6539. cellActivityTimeData := rowD.AddCell()
  6540. cellActivityTimeData.Value = vD.ActivityTime
  6541. cellActivityTimeFData := rowD.AddCell()
  6542. cellActivityTimeFData.Value = vD.FirstMeetingTime
  6543. cellActivityTimeLData := rowD.AddCell()
  6544. cellActivityTimeLData.Value = vD.LastMeetingTime
  6545. cellActivityTimeDuData := rowD.AddCell()
  6546. cellActivityTimeDuData.Value = vD.Duration
  6547. }
  6548. }
  6549. }
  6550. }
  6551. err = xlsxFile.Save(downLoadnFilePath)
  6552. if err != nil {
  6553. fmt.Println(err)
  6554. return
  6555. }
  6556. }
  6557. // 固收类型互动记录
  6558. func initgggg() {
  6559. listDataAct, err := cygx.GetSignupDetailListGushou()
  6560. if err != nil {
  6561. fmt.Println(err)
  6562. return
  6563. }
  6564. listDataArt, err := cygx.GetSignupDetailListGushouArt()
  6565. if err != nil {
  6566. fmt.Println(err)
  6567. return
  6568. }
  6569. companyids := make(map[int]bool)
  6570. for _, v := range listDataAct {
  6571. companyids[v.CompanyId] = true
  6572. }
  6573. for _, v := range listDataArt {
  6574. companyids[v.CompanyId] = true
  6575. }
  6576. fmt.Println(companyids)
  6577. listComapny, err := company.GetCompanyProductsByCompanyIds508()
  6578. if err != nil {
  6579. fmt.Println(err)
  6580. return
  6581. }
  6582. //创建excel
  6583. dir, err := os.Executable()
  6584. exPath := filepath.Dir(dir)
  6585. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  6586. xlsxFile := xlsx.NewFile()
  6587. if err != nil {
  6588. fmt.Println(err)
  6589. return
  6590. }
  6591. style := xlsx.NewStyle()
  6592. alignment := xlsx.Alignment{
  6593. Horizontal: "center",
  6594. Vertical: "center",
  6595. WrapText: true,
  6596. }
  6597. style.Alignment = alignment
  6598. style.ApplyAlignment = true
  6599. redStyle := xlsx.NewStyle()
  6600. redStyle.Alignment = alignment
  6601. redStyle.ApplyAlignment = true
  6602. redStyle.Font.Color = "ff0000"
  6603. //定义底色需要标黄的 单元格颜色
  6604. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  6605. redStyle.Fill = redFill
  6606. //redStyle.Border = *border
  6607. var sheetName string
  6608. sheetName = "固收公司状态"
  6609. sheet, err := xlsxFile.AddSheet(sheetName)
  6610. if err != nil {
  6611. fmt.Println(err)
  6612. return
  6613. }
  6614. //标头
  6615. rowTitle := sheet.AddRow()
  6616. cellC := rowTitle.AddCell()
  6617. cellC.Value = "公司名称"
  6618. cellDCreatedTime := rowTitle.AddCell()
  6619. cellDCreatedTime.Value = "状态"
  6620. cellDCreatedTimeS := rowTitle.AddCell()
  6621. cellDCreatedTimeS.Value = "所属销售"
  6622. for _, v := range listComapny {
  6623. if !companyids[v.CompanyId] {
  6624. continue
  6625. }
  6626. row := sheet.AddRow()
  6627. cellADatatitle := row.AddCell()
  6628. cellADatatitle.Value = v.CompanyName
  6629. cellADataPd := row.AddCell()
  6630. cellADataPd.Value = v.Status
  6631. cellADataPds := row.AddCell()
  6632. cellADataPds.Value = v.SellerName
  6633. }
  6634. err = xlsxFile.Save(downLoadnFilePath)
  6635. if err != nil {
  6636. fmt.Println(err)
  6637. return
  6638. }
  6639. return
  6640. }
  6641. //func init() {
  6642. // initArticle5349()
  6643. // initAct5349()
  6644. //}
  6645. // 固收类型互动记录
  6646. func initActComapnyIds() {
  6647. var condition string
  6648. mapuserMapbil := make(map[int]*models.WxUserSller)
  6649. companyIdArr := []int{7577, 5618, 7416, 7408, 15736}
  6650. //companyIdArr = []int{17227}
  6651. fmt.Println(companyIdArr)
  6652. listCompany, err := models.GetWxUserRaiSllerListByUserComapnyId(companyIdArr)
  6653. if err != nil {
  6654. fmt.Println(err)
  6655. return
  6656. }
  6657. for _, v := range listCompany {
  6658. mapuserMapbil[v.CompanyId] = v
  6659. }
  6660. //创建excel
  6661. dir, err := os.Executable()
  6662. exPath := filepath.Dir(dir)
  6663. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  6664. xlsxFile := xlsx.NewFile()
  6665. if err != nil {
  6666. fmt.Println(err)
  6667. return
  6668. }
  6669. style := xlsx.NewStyle()
  6670. alignment := xlsx.Alignment{
  6671. Horizontal: "center",
  6672. Vertical: "center",
  6673. WrapText: true,
  6674. }
  6675. style.Alignment = alignment
  6676. style.ApplyAlignment = true
  6677. redStyle := xlsx.NewStyle()
  6678. redStyle.Alignment = alignment
  6679. redStyle.ApplyAlignment = true
  6680. redStyle.Font.Color = "ff0000"
  6681. //定义底色需要标黄的 单元格颜色
  6682. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  6683. redStyle.Fill = redFill
  6684. //redStyle.Border = *border
  6685. var sheetName string
  6686. sheetName = "互动信息"
  6687. sheet, err := xlsxFile.AddSheet(sheetName)
  6688. if err != nil {
  6689. fmt.Println(err)
  6690. return
  6691. }
  6692. //标头
  6693. rowTitle := sheet.AddRow()
  6694. cellAct := rowTitle.AddCell()
  6695. cellAct.Value = "公司名称"
  6696. cellB := rowTitle.AddCell()
  6697. cellB.Value = "1月份活动参与次数"
  6698. cellActime := rowTitle.AddCell()
  6699. cellActime.Value = "2月份活动参与次数"
  6700. cellD := rowTitle.AddCell()
  6701. cellD.Value = "3月份活动参与次数"
  6702. cellE := rowTitle.AddCell()
  6703. cellE.Value = "4月份活动参与次数"
  6704. cellE5 := rowTitle.AddCell()
  6705. cellE5.Value = "5月份活动参与次数"
  6706. cellE6 := rowTitle.AddCell()
  6707. cellE6.Value = "6月份活动参与次数"
  6708. cellE7 := rowTitle.AddCell()
  6709. cellE7.Value = "7月份活动参与次数"
  6710. cellE8 := rowTitle.AddCell()
  6711. cellE8.Value = "8月份活动参与次数"
  6712. cellE9 := rowTitle.AddCell()
  6713. cellE9.Value = "9月份活动参与次数"
  6714. cellE10 := rowTitle.AddCell()
  6715. cellE10.Value = "10月份活动参与次数"
  6716. cellE11 := rowTitle.AddCell()
  6717. cellE11.Value = "11月份活动参与次数"
  6718. cellE12 := rowTitle.AddCell()
  6719. cellE12.Value = "12月份活动参与次数"
  6720. cellArt1 := rowTitle.AddCell()
  6721. cellArt1.Value = "1月份阅读报告次数"
  6722. cellArt2 := rowTitle.AddCell()
  6723. cellArt2.Value = "2月份阅读报告次数"
  6724. cellArt3 := rowTitle.AddCell()
  6725. cellArt3.Value = "3月份阅读报告次数"
  6726. cellArt4 := rowTitle.AddCell()
  6727. cellArt4.Value = "4月份阅读报告次数"
  6728. cellArt5 := rowTitle.AddCell()
  6729. cellArt5.Value = "5月份阅读报告次数"
  6730. cellArt6 := rowTitle.AddCell()
  6731. cellArt6.Value = "6月份阅读报告次数"
  6732. cellArt7 := rowTitle.AddCell()
  6733. cellArt7.Value = "7月份阅读报告次数"
  6734. cellArt8 := rowTitle.AddCell()
  6735. cellArt8.Value = "8月份阅读报告次数"
  6736. cellArt9 := rowTitle.AddCell()
  6737. cellArt9.Value = "9月份阅读报告次数"
  6738. cellArt10 := rowTitle.AddCell()
  6739. cellArt10.Value = "10月份阅读报告次数"
  6740. cellArt11 := rowTitle.AddCell()
  6741. cellArt11.Value = "11月份阅读报告次数"
  6742. cellArt12 := rowTitle.AddCell()
  6743. cellArt12.Value = "12月份阅读报告次数"
  6744. for _, v := range listCompany {
  6745. row := sheet.AddRow()
  6746. cellComData := row.AddCell()
  6747. cellComData.Value = v.CompanyName
  6748. for i := 1; i < 13; i++ {
  6749. //var statrDate, endDate string
  6750. statrDate := fmt.Sprint("2024-", i, "-01")
  6751. endDate := fmt.Sprint("2024-", i, "-31")
  6752. condition = ` AND ( is_meeting = 1 OR duration != '' ) AND a.activity_time >= '` + statrDate + `' AND a.activity_time <='` + endDate + `' AND s.company_id = ` + strconv.Itoa(v.CompanyId)
  6753. listData, err := cygx.GetActivityMeetByUser(condition, 0, 99999)
  6754. if err != nil {
  6755. fmt.Println(err)
  6756. return
  6757. }
  6758. cellActData := row.AddCell()
  6759. cellActData.Value = strconv.Itoa(len((listData)))
  6760. fmt.Println(len(listData))
  6761. }
  6762. for i := 1; i < 13; i++ {
  6763. //var statrDate, endDate string
  6764. statrDate := fmt.Sprint("2024-", i, "-01")
  6765. endDate := fmt.Sprint("2024-", i, "-31 23:59:59")
  6766. var conditionArt string
  6767. var parsArt []interface{}
  6768. conditionArt = ` AND r.source = 'article' AND r.create_time >= ? AND r.create_time <= ? AND r.company_id = ?`
  6769. parsArt = append(parsArt, statrDate, endDate, v.CompanyId)
  6770. listTotal, err := cygx.GetCygxArticleAndYanxuanRecordCount(conditionArt, parsArt)
  6771. if err != nil {
  6772. fmt.Println(err)
  6773. return
  6774. }
  6775. cellArtData := row.AddCell()
  6776. cellArtData.Value = strconv.Itoa(listTotal)
  6777. fmt.Println((listTotal))
  6778. }
  6779. }
  6780. err = xlsxFile.Save(downLoadnFilePath)
  6781. if err != nil {
  6782. fmt.Println(err)
  6783. return
  6784. }
  6785. fmt.Println("end")
  6786. }
  6787. // 固收类型互动记录
  6788. func initActMobiles() {
  6789. mopbiles := "15669219918,96582719,56955949,90009909988,909808783909,22388888,67644885,55295728,4157460042,22388696,14714925361,90445630,22388817,22388806"
  6790. var condition string
  6791. //创建excel
  6792. dir, err := os.Executable()
  6793. exPath := filepath.Dir(dir)
  6794. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  6795. xlsxFile := xlsx.NewFile()
  6796. if err != nil {
  6797. fmt.Println(err)
  6798. return
  6799. }
  6800. style := xlsx.NewStyle()
  6801. alignment := xlsx.Alignment{
  6802. Horizontal: "center",
  6803. Vertical: "center",
  6804. WrapText: true,
  6805. }
  6806. style.Alignment = alignment
  6807. style.ApplyAlignment = true
  6808. redStyle := xlsx.NewStyle()
  6809. redStyle.Alignment = alignment
  6810. redStyle.ApplyAlignment = true
  6811. redStyle.Font.Color = "ff0000"
  6812. //定义底色需要标黄的 单元格颜色
  6813. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  6814. redStyle.Fill = redFill
  6815. //redStyle.Border = *border
  6816. var sheetName string
  6817. sheetName = "互动信息"
  6818. sheet, err := xlsxFile.AddSheet(sheetName)
  6819. if err != nil {
  6820. fmt.Println(err)
  6821. return
  6822. }
  6823. //标头
  6824. rowTitle := sheet.AddRow()
  6825. cellB := rowTitle.AddCell()
  6826. cellB.Value = "1月份活动参与次数"
  6827. cellActime := rowTitle.AddCell()
  6828. cellActime.Value = "2月份活动参与次数"
  6829. cellD := rowTitle.AddCell()
  6830. cellD.Value = "3月份活动参与次数"
  6831. cellE := rowTitle.AddCell()
  6832. cellE.Value = "4月份活动参与次数"
  6833. cellE5 := rowTitle.AddCell()
  6834. cellE5.Value = "5月份活动参与次数"
  6835. cellE6 := rowTitle.AddCell()
  6836. cellE6.Value = "6月份活动参与次数"
  6837. cellE7 := rowTitle.AddCell()
  6838. cellE7.Value = "7月份活动参与次数"
  6839. cellE8 := rowTitle.AddCell()
  6840. cellE8.Value = "8月份活动参与次数"
  6841. cellE9 := rowTitle.AddCell()
  6842. cellE9.Value = "9月份活动参与次数"
  6843. cellE10 := rowTitle.AddCell()
  6844. cellE10.Value = "10月份活动参与次数"
  6845. cellE11 := rowTitle.AddCell()
  6846. cellE11.Value = "11月份活动参与次数"
  6847. cellE12 := rowTitle.AddCell()
  6848. cellE12.Value = "12月份活动参与次数"
  6849. cellArt1 := rowTitle.AddCell()
  6850. cellArt1.Value = "1月份阅读报告次数"
  6851. cellArt2 := rowTitle.AddCell()
  6852. cellArt2.Value = "2月份阅读报告次数"
  6853. cellArt3 := rowTitle.AddCell()
  6854. cellArt3.Value = "3月份阅读报告次数"
  6855. cellArt4 := rowTitle.AddCell()
  6856. cellArt4.Value = "4月份阅读报告次数"
  6857. cellArt5 := rowTitle.AddCell()
  6858. cellArt5.Value = "5月份阅读报告次数"
  6859. cellArt6 := rowTitle.AddCell()
  6860. cellArt6.Value = "6月份阅读报告次数"
  6861. cellArt7 := rowTitle.AddCell()
  6862. cellArt7.Value = "7月份阅读报告次数"
  6863. cellArt8 := rowTitle.AddCell()
  6864. cellArt8.Value = "8月份阅读报告次数"
  6865. cellArt9 := rowTitle.AddCell()
  6866. cellArt9.Value = "9月份阅读报告次数"
  6867. cellArt10 := rowTitle.AddCell()
  6868. cellArt10.Value = "10月份阅读报告次数"
  6869. cellArt11 := rowTitle.AddCell()
  6870. cellArt11.Value = "11月份阅读报告次数"
  6871. cellArt12 := rowTitle.AddCell()
  6872. cellArt12.Value = "12月份阅读报告次数"
  6873. row := sheet.AddRow()
  6874. for i := 1; i < 13; i++ {
  6875. //var statrDate, endDate string
  6876. statrDate := fmt.Sprint("2024-", i, "-01")
  6877. endDate := fmt.Sprint("2024-", i, "-31 23:59:59")
  6878. condition = ` AND ( is_meeting = 1 OR duration != '' ) AND a.activity_time >= '` + statrDate + `' AND a.activity_time <='` + endDate + `' AND s.mobile IN (` + mopbiles + `) `
  6879. listData, err := cygx.GetActivityMeetByUser(condition, 0, 99999)
  6880. if err != nil {
  6881. fmt.Println(err)
  6882. return
  6883. }
  6884. cellActData := row.AddCell()
  6885. cellActData.Value = strconv.Itoa(len((listData)))
  6886. }
  6887. for i := 1; i < 13; i++ {
  6888. //var statrDate, endDate string
  6889. statrDate := fmt.Sprint("2024-", i, "-01")
  6890. endDate := fmt.Sprint("2024-", i, "-31 23:59:59")
  6891. var conditionArt string
  6892. var parsArt []interface{}
  6893. conditionArt = ` AND r.source = 'article' AND r.create_time >= ? AND r.create_time <= ? AND r.mobile IN (` + mopbiles + `) `
  6894. parsArt = append(parsArt, statrDate, endDate)
  6895. listTotal, err := cygx.GetCygxArticleAndYanxuanRecordCount(conditionArt, parsArt)
  6896. if err != nil {
  6897. fmt.Println(err)
  6898. return
  6899. }
  6900. cellArtData := row.AddCell()
  6901. cellArtData.Value = strconv.Itoa(listTotal)
  6902. fmt.Println((listTotal))
  6903. }
  6904. err = xlsxFile.Save(downLoadnFilePath)
  6905. if err != nil {
  6906. fmt.Println(err)
  6907. return
  6908. }
  6909. fmt.Println("end")
  6910. }
  6911. // 指定客户下固收阅读记录
  6912. func initArticle() {
  6913. //创建excel
  6914. dir, err := os.Executable()
  6915. exPath := filepath.Dir(dir)
  6916. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  6917. xlsxFile := xlsx.NewFile()
  6918. if err != nil {
  6919. fmt.Println(err)
  6920. return
  6921. }
  6922. style := xlsx.NewStyle()
  6923. alignment := xlsx.Alignment{
  6924. Horizontal: "center",
  6925. Vertical: "center",
  6926. WrapText: true,
  6927. }
  6928. style.Alignment = alignment
  6929. style.ApplyAlignment = true
  6930. redStyle := xlsx.NewStyle()
  6931. redStyle.Alignment = alignment
  6932. redStyle.ApplyAlignment = true
  6933. redStyle.Font.Color = "ff0000"
  6934. //定义底色需要标黄的 单元格颜色
  6935. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  6936. redStyle.Fill = redFill
  6937. //redStyle.Border = *border
  6938. var sheetName string
  6939. sheetName = "互动信息"
  6940. sheet, err := xlsxFile.AddSheet(sheetName)
  6941. if err != nil {
  6942. fmt.Println(err)
  6943. return
  6944. }
  6945. //标头
  6946. rowTitle := sheet.AddRow()
  6947. cellB := rowTitle.AddCell()
  6948. cellB.Value = "手机号"
  6949. cellActime := rowTitle.AddCell()
  6950. cellActime.Value = "姓名"
  6951. cellD := rowTitle.AddCell()
  6952. cellD.Value = "公司名"
  6953. cellE := rowTitle.AddCell()
  6954. cellE.Value = "阅读时间"
  6955. cellE5 := rowTitle.AddCell()
  6956. cellE5.Value = "报告标题"
  6957. cellE6 := rowTitle.AddCell()
  6958. cellE6.Value = "报告发布时间"
  6959. listData, err := cygx.GetArticleHistoryListInitss()
  6960. if err != nil {
  6961. fmt.Println(err)
  6962. return
  6963. }
  6964. var mobils []string
  6965. for _, v := range listData {
  6966. mobils = append(mobils, v.Mobile)
  6967. }
  6968. listUserFicc, err := models.GetWxUserRaiSllerListByUserMobileFiic(mobils)
  6969. if err != nil {
  6970. fmt.Println(err)
  6971. return
  6972. }
  6973. mapUser := make(map[string]string)
  6974. for _, v := range listUserFicc {
  6975. mapUser[v.Mobile] = v.RealName
  6976. }
  6977. for _, v := range listData {
  6978. row := sheet.AddRow()
  6979. cellActData1 := row.AddCell()
  6980. cellActData1.Value = v.Mobile
  6981. cellActData2 := row.AddCell()
  6982. if v.RealName == "" {
  6983. v.RealName = mapUser[v.Mobile]
  6984. }
  6985. cellActData2.Value = v.RealName
  6986. cellActData3 := row.AddCell()
  6987. cellActData3.Value = v.CompanyName
  6988. cellActData4 := row.AddCell()
  6989. cellActData4.Value = v.CreateTime
  6990. cellActData5 := row.AddCell()
  6991. cellActData5.Value = v.Title
  6992. cellActData6 := row.AddCell()
  6993. cellActData6.Value = v.PublishDate
  6994. }
  6995. err = xlsxFile.Save(downLoadnFilePath)
  6996. if err != nil {
  6997. fmt.Println(err)
  6998. return
  6999. }
  7000. fmt.Println("end")
  7001. }
  7002. // 指定客户下固收阅读记录
  7003. func initArticle5349() {
  7004. //创建excel
  7005. dir, err := os.Executable()
  7006. exPath := filepath.Dir(dir)
  7007. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  7008. xlsxFile := xlsx.NewFile()
  7009. if err != nil {
  7010. fmt.Println(err)
  7011. return
  7012. }
  7013. style := xlsx.NewStyle()
  7014. alignment := xlsx.Alignment{
  7015. Horizontal: "center",
  7016. Vertical: "center",
  7017. WrapText: true,
  7018. }
  7019. style.Alignment = alignment
  7020. style.ApplyAlignment = true
  7021. redStyle := xlsx.NewStyle()
  7022. redStyle.Alignment = alignment
  7023. redStyle.ApplyAlignment = true
  7024. redStyle.Font.Color = "ff0000"
  7025. //定义底色需要标黄的 单元格颜色
  7026. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  7027. redStyle.Fill = redFill
  7028. //redStyle.Border = *border
  7029. var sheetName string
  7030. sheetName = "互动信息"
  7031. sheet, err := xlsxFile.AddSheet(sheetName)
  7032. if err != nil {
  7033. fmt.Println(err)
  7034. return
  7035. }
  7036. //标头
  7037. rowTitle := sheet.AddRow()
  7038. cellB := rowTitle.AddCell()
  7039. cellB.Value = "手机号"
  7040. cellActime := rowTitle.AddCell()
  7041. cellActime.Value = "姓名"
  7042. cellD := rowTitle.AddCell()
  7043. cellD.Value = "公司名"
  7044. cellE := rowTitle.AddCell()
  7045. cellE.Value = "阅读时间"
  7046. cellE5 := rowTitle.AddCell()
  7047. cellE5.Value = "报告标题"
  7048. cellE6 := rowTitle.AddCell()
  7049. cellE6.Value = "报告发布时间"
  7050. listData, err := cygx.GetArticleHistoryListInitss5349()
  7051. if err != nil {
  7052. fmt.Println(err)
  7053. return
  7054. }
  7055. var mobils []string
  7056. for _, v := range listData {
  7057. mobils = append(mobils, v.Mobile)
  7058. }
  7059. listUserFicc, err := models.GetWxUserRaiSllerListByUserMobileFiic(mobils)
  7060. if err != nil {
  7061. fmt.Println(err)
  7062. return
  7063. }
  7064. mapUser := make(map[string]string)
  7065. for _, v := range listUserFicc {
  7066. mapUser[v.Mobile] = v.RealName
  7067. }
  7068. for _, v := range listData {
  7069. row := sheet.AddRow()
  7070. cellActData1 := row.AddCell()
  7071. cellActData1.Value = v.Mobile
  7072. cellActData2 := row.AddCell()
  7073. if v.RealName == "" {
  7074. v.RealName = mapUser[v.Mobile]
  7075. }
  7076. cellActData2.Value = v.RealName
  7077. cellActData3 := row.AddCell()
  7078. cellActData3.Value = v.CompanyName
  7079. cellActData4 := row.AddCell()
  7080. cellActData4.Value = v.CreateTime
  7081. cellActData5 := row.AddCell()
  7082. cellActData5.Value = v.Title
  7083. cellActData6 := row.AddCell()
  7084. cellActData6.Value = v.PublishDate
  7085. }
  7086. err = xlsxFile.Save(downLoadnFilePath)
  7087. if err != nil {
  7088. fmt.Println(err)
  7089. return
  7090. }
  7091. fmt.Println("end")
  7092. }
  7093. func initAct5349() {
  7094. //行业
  7095. var condition string
  7096. var pars []interface{}
  7097. condition += ` AND activity_time > '2025-04-01' AND activity_time < '2025-05-01' ORDER BY activity_time DESC `
  7098. list, err := cygx.GetActivityListAll(condition, pars, 0, 9999)
  7099. if err != nil {
  7100. fmt.Println(err)
  7101. return
  7102. }
  7103. var activityIds []int
  7104. for _, v := range list {
  7105. activityIds = append(activityIds, v.ActivityId)
  7106. }
  7107. condition = ""
  7108. pars = make([]interface{}, 0)
  7109. fmt.Println("list", len(list))
  7110. //创建excel
  7111. dir, err := os.Executable()
  7112. exPath := filepath.Dir(dir)
  7113. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  7114. xlsxFile := xlsx.NewFile()
  7115. if err != nil {
  7116. fmt.Println(err)
  7117. return
  7118. }
  7119. style := xlsx.NewStyle()
  7120. alignment := xlsx.Alignment{
  7121. Horizontal: "center",
  7122. Vertical: "center",
  7123. WrapText: true,
  7124. }
  7125. style.Alignment = alignment
  7126. style.ApplyAlignment = true
  7127. redStyle := xlsx.NewStyle()
  7128. redStyle.Alignment = alignment
  7129. redStyle.ApplyAlignment = true
  7130. redStyle.Font.Color = "ff0000"
  7131. //定义底色需要标黄的 单元格颜色
  7132. redFill := xlsx.Fill{"solid", "ffff00", "ffff00"}
  7133. redStyle.Fill = redFill
  7134. //redStyle.Border = *border
  7135. var sheetName string
  7136. sheetName = "活动数据"
  7137. sheet, err := xlsxFile.AddSheet(sheetName)
  7138. if err != nil {
  7139. fmt.Println(err)
  7140. return
  7141. }
  7142. //标头
  7143. rowTitle := sheet.AddRow()
  7144. cellA := rowTitle.AddCell()
  7145. cellA.Value = "手机号"
  7146. cellA2 := rowTitle.AddCell()
  7147. cellA2.Value = "姓名"
  7148. cellA4 := rowTitle.AddCell()
  7149. cellA4.Value = "公司名"
  7150. cellB := rowTitle.AddCell()
  7151. cellB.Value = "活动名称"
  7152. cellAt := rowTitle.AddCell()
  7153. cellAt.Value = "活动时间"
  7154. cellUser := rowTitle.AddCell()
  7155. cellUser.Value = "入会时间"
  7156. cellCompany := rowTitle.AddCell()
  7157. cellCompany.Value = "退出时间"
  7158. cellTime := rowTitle.AddCell()
  7159. cellTime.Value = "参会时长"
  7160. for _, v := range list {
  7161. fmt.Println(v.ActivityId)
  7162. pars = make([]interface{}, 0)
  7163. condition = ` AND activity_id = ? AND ( is_meeting = 1 OR duration != "" ) AND company_id = 5349 `
  7164. pars = append(pars, v.ActivityId)
  7165. signUpDetailList, err := cygx.GetSignupDetailList(condition, pars)
  7166. if err != nil {
  7167. fmt.Println(err)
  7168. return
  7169. }
  7170. for _, vs := range signUpDetailList {
  7171. if vs.CompanyName == "弘则研究" {
  7172. continue
  7173. }
  7174. row := sheet.AddRow()
  7175. cellA1Datatitle := row.AddCell()
  7176. cellA1Datatitle.Value = vs.Mobile
  7177. cellA2Datatitle := row.AddCell()
  7178. cellA2Datatitle.Value = vs.RealName
  7179. cellA4Datatitle := row.AddCell()
  7180. cellA4Datatitle.Value = vs.CompanyName
  7181. cellADatatitle := row.AddCell()
  7182. cellADatatitle.Value = v.ActivityName
  7183. cellADatatitle2 := row.AddCell()
  7184. cellADatatitle2.Value = v.ActivityTime
  7185. cellADataPd := row.AddCell()
  7186. cellADataPd.Value = vs.FirstMeetingTime
  7187. cellADataPd2 := row.AddCell()
  7188. cellADataPd2.Value = vs.LastMeetingTime
  7189. cellBData := row.AddCell()
  7190. cellBData.Value = vs.Duration
  7191. }
  7192. }
  7193. err = xlsxFile.Save(downLoadnFilePath)
  7194. if err != nil {
  7195. fmt.Println(err)
  7196. return
  7197. }
  7198. fmt.Println("end")
  7199. }