FixDataController.cs 367 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149
  1. using Microsoft.Azure.Cosmos;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Newtonsoft.Json;
  5. using StackExchange.Redis;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Net;
  11. using System.Net.Http;
  12. using System.Net.Http.Json;
  13. using System.Text;
  14. using System.Text.Json;
  15. using System.Threading.Tasks;
  16. using TEAMModelOS.SDK.DI;
  17. using TEAMModelOS.SDK.Extension;
  18. using TEAMModelOS.SDK;
  19. using TEAMModelOS.SDK.Models;
  20. using TEAMModelOS.SDK.Models.Cosmos.Common;
  21. using TEAMModelOS.SDK.Models.Service;
  22. using Azure.Storage.Blobs.Models;
  23. using Azure.Storage.Blobs;
  24. using System.Security.Cryptography;
  25. using Azure;
  26. using Microsoft.Extensions.Options;
  27. using Microsoft.Extensions.Configuration;
  28. using TEAMModelOS.Models;
  29. using System.Text.RegularExpressions;
  30. using TEAMModelOS.SDK.Services;
  31. using Azure.Messaging.ServiceBus;
  32. using TEAMModelOS.SDK.Models.Cosmos.BI;
  33. using static ICSharpCode.SharpZipLib.Zip.ZipEntryFactory;
  34. using Azure.Storage.Sas;
  35. using TEAMModelOS.SDK.Models.Dtos;
  36. using System.Formats.Asn1;
  37. using System.Xml.Linq;
  38. using Top.Api;
  39. using DinkToPdf.Contracts;
  40. using TEAMModelOS.SDK.Models.Cosmos.Student;
  41. using MathNet.Numerics.RootFinding;
  42. using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
  43. using OfficeOpenXml;
  44. using Microsoft.AspNetCore.Components.Web;
  45. using Microsoft.AspNetCore.Cors.Infrastructure;
  46. using MathNet.Numerics.Distributions;
  47. using TEAMModelOS.Models.Dto;
  48. using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
  49. using Task = System.Threading.Tasks.Task;
  50. using System.Threading;
  51. namespace TEAMModelOS.Controllers
  52. {
  53. [Route("fix-data")]
  54. [ApiController]
  55. public class FixDataController : ControllerBase
  56. {
  57. private readonly IHttpClientFactory _httpClient;
  58. private readonly IConfiguration _configuration;
  59. private readonly AzureStorageFactory _azureStorage;
  60. private readonly AzureRedisFactory _azureRedis;
  61. private readonly AzureCosmosFactory _azureCosmos;
  62. private readonly DingDing _dingDing;
  63. private readonly Option _option;
  64. private readonly AzureServiceBusFactory _serviceBus;
  65. private readonly HttpTrigger _httpTrigger;
  66. private readonly CoreAPIHttpService _coreAPIHttpService;
  67. private readonly IConverter _converter;
  68. public FixDataController(IConverter converter,IHttpClientFactory httpClient, HttpTrigger httpTrigger, AzureServiceBusFactory serviceBus, AzureCosmosFactory azureCosmos, AzureRedisFactory azureRedis, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option, IConfiguration configuration, CoreAPIHttpService coreAPIHttpService)
  69. {
  70. _azureCosmos = azureCosmos;
  71. _azureRedis = azureRedis;
  72. _azureStorage = azureStorage;
  73. _dingDing = dingDing;
  74. _option = option?.Value;
  75. _configuration = configuration;
  76. _serviceBus = serviceBus;
  77. _httpTrigger = httpTrigger;
  78. _coreAPIHttpService = coreAPIHttpService;
  79. _httpClient = httpClient;
  80. _converter = converter;
  81. }
  82. [ProducesDefaultResponseType]
  83. [HttpPost("fix-debate")]
  84. public async Task<IActionResult> FixElegant(JsonElement json)
  85. {
  86. string sql = "select value c from c where c.code='Base-zjaz' and c.graduate=1";
  87. var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).GetList<Student>(sql, "Base-zjaz");
  88. if (result.list.IsNotEmpty())
  89. {
  90. foreach (var item in result.list) {
  91. item.graduate=0;
  92. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).UpsertItemAsync(item, new PartitionKey(item.code));
  93. }
  94. }
  95. return Ok();
  96. }
  97. /// <summary>
  98. ///
  99. /// </summary>
  100. /// <returns></returns>
  101. [ProducesDefaultResponseType]
  102. [HttpPost("fix-activity")]
  103. public async Task<IActionResult> FixActivity(JsonElement json) {
  104. var client = _azureCosmos.GetCosmosClient();
  105. string stusql = "SELECT * FROM c where c.id in('20221901','20221902','20221903','20221904','20221905','20221906','20221907','20221908','20221909','20221910','20221911','20221912','20221913','20221914','20221915','20221916','20221917','20221918','20221919','20221920','20221921','20221922','20221923','20221924','20221925','20221926','20221927','20221928','20221929','20221930','20221931','20221932','20221933','20221934','20221935','20221936','20221937','20221938','20221939','20221940','20221941','20221942','20221943','20221944','20221945','20221946','20221947','20221948','20221949','20221950','20222002','20222003','20222004','20222005','20222006','20222007','20222008','20222009','20222010','20222011','20222012','20222013','20222014','20222015','20222016','20222017','20222018','20222019','20222020','20222021','20222022','20222023','20222024','20222025','20222026','20222027','20222028','20222029','20222030','20222031','20222032','20222033','20222034','20222035','20222036','20222037','20222038','20222039','20222040','20222041','20222042','20222043','20222044','20222101','20222102','20222103','20222104','20222105','20222106','20222107','20222108','20222109','20222110','20222111','20222112','20222113','20222114','20222115','20222116','20222117','20222118','20222119','20222120','20222121','20222122','20222123','20222124','20222125','20222126','20222127','20222128','20222129','20222130','20222131','20222132','20222133','20222134','20222135','20222136','20222137','20222138','20222139','20222140','20222141','20222142','20222143','20222144','20222145','20222146','20222147','20222201','20222202','20222203','20222204','20222205','20222206','20222207','20222208','20222209','20222210','20222211','20222212','20222213','20222214','20222215','20222216','20222217','20222218','20222219','20222220','20222221','20222222','20222223','20222224','20222226','20222227','20222228','20222229','20222230','20222231','20222232','20222233','20222234','20222235','20222236','20222237','20222238','20222239','20222240','20222241','20222242','20222243','20222244','20222245','20222301','20222302','20222303','20222304','20222305','20222306','20222307','20222308','20222309','20222310','20222311','20222312','20222313','20222314','20222315','20222316','20222317','20222318','20222319','20222320','20222321','20222322','20222323','20222324','20222325','20222326','20222327','20222328','20222329','20222330','20222331','20222332','20222333','20222334','20222335','20222336','20222337','20222338','20222339','20222340','20222341','20222342','20222343','20222344','20222345','20222346','20222347','20222401','20222402','20222403','20222404','20222405','20222406','20222407','20222408','20222409','20222410','20222411','20222412','20222413','20222414','20222415','20222416','20222417','20222418','20222419','20222420','20222421','20222422','20222423','20222424','20222425','20222426','20222427','20222428','20222429','20222430','20222431','20222432','20222433','20222434','20222435','20222436','20222437','20222438','20222439','20222440','20222441','20222442','20222443','20222444','20222445','20222447','20222501','20222502','20222503','20222504','20222505','20222506','20222508','20222509','20222510','20222511','20222512','20222513','20222514','20222515','20222516','20222517','20222518','20222519','20222520','20222521','20222522','20222523','20222525','20222526','20222527','20222528','20222529','20222530','20222531','20222532','20222533','20222534','20222535','20222536','20222537','20222538','20222539','20222540','20222541','20222542','20222543','20222544','20222545','20222546','20222547','20222601','20222602','20222603','20222604','20222605','20222606','20222607','20222608','20222609','20222610','20222611','20222612','20222613','20222614','20222615','20222616','20222617','20222618','20222619','20222620','20222621','20222622','20222623','20222624','20222625','20222626','20222627','20222628','20222629','20222630','20222631','20222632','20222633','20222634','20222635','20222636','20222637','20222639','20222640','20222641','20222642','20222643','20222645','20222646','20222647','20222648','20222649','20222701','20222702','20222703','20222704','20222705','20222706','20222707','20222708','20222709','20222710','20222711','20222712','20222713','20222714','20222715','20222716','20222717','20222718','20222719','20222720','20222721','20222722','20222723','20222724','20222725','20222727','20222728','20222729','20222730','20222731','20222732','20222733','20222734','20222735','20222736','20222737','20222738','20222739','20222740','20222741','20222742','20222743','20222744','20222745','20222746','20222747','20222748','20222749','20222801','20222804','20222805','20222806','20222807','20222808','20222809','20222810','20222811','20222812','20222813','20222814','20222815','20222816','20222817','20222819','20222821','20222822','20222823','20222824','20222825','20222826','20222827','20222828','20222829','20222830','20222831','20222834','20222835','20222836','20222837','20222838','20222839','20222840','20222841','20222842','20222843','20222844','20222845','20222846','20222847','20222848','20211901','20211902','20211903','20211904','20211905','20211906','20211908','20211909','20211910','20211911','20211912','20211913','20211914','20211915','20211916','20211917','20211918','20211919','20211920','20211921','20211922','20211923','20211924','20211925','20211926','20211927','20211928','20211929','20211930','20211931','20211932','20211933','20211934','20211935','20211936','20211937','20211938','20211939','20211940','20211941','20211942','20211943','20211944','20211945','20212001','20212002','20212003','20212004','20212005','20212006','20212007','20212008','20212009','20212010','20212011','20212012','20212013','20212014','20212015','20212016','20212017','20212018','20212019','20212020','20212021','20212022','20212023','20212024','20212025','20212026','20212027','20212028','20212029','20212030','20212031','20212032','20212033','20212034','20212035','20212036','20212037','20212038','20212039','20212040','20212041','20212042','20212043','20212044','20212045','20212046','20212047','20212048','20212101','20212102','20212103','20212104','20212105','20212106','20212107','20212108','20212109','20212110','20212111','20212112','20212113','20212114','20212115','20212116','20212117','20212118','20212119','20212120','20212121','20212123','20212124','20212125','20212126','20212127','20212128','20212129','20212130','20212131','20212132','20212133','20212134','20212135','20212136','20212137','20212138','20212139','20212140','20212141','20212142','20212143','20212144','20212145','20212146','20212147','20212148','20212149','20212150','20212151','20212201','20212202','20212203','20212204','20212205','20212206','20212207','20212208','20212209','20212210','20212211','20212212','20212213','20212214','20212215','20212216','20212217','20212218','20212219','20212220','20212221','20212222','20212223','20212224','20212225','20212226','20212227','20212228','20212229','20212230','20212231','20212232','20212233','20212234','20212235','20212236','20212237','20212238','20212239','20212240','20212241','20212242','20212243','20212244','20212245','20212246','20212247','20212248','20212249','20212250','20212301','20212302','20212303','20212304','20212305','20212306','20212307','20212308','20212309','20212310','20212311','20212312','20212313','20212314','20212315','20212317','20212318','20212319','20212320','20212322','20212323','20212324','20212325','20212326','20212327','20212328','20212329','20212330','20212331','20212332','20212333','20212334','20212335','20212336','20212337','20212338','20212339','20212340','20212341','20212342','20212343','20212344','20212345','20212346','20212401','20212402','20212403','20212404','20212405','20212406','20212407','20212408','20212409','20212410','20212411','20212413','20212414','20212415','20212416','20212417','20212418','20212419','20212420','20212421','20212422','20212423','20212424','20212425','20212426','20212427','20212428','20212429','20212430','20212431','20212432','20212433','20212434','20212435','20212436','20212437','20212438','20212439','20212440','20212441','20212442','20212443','20212444','20212445','20212446','20212447','20212501','20212502','20212503','20212504','20212505','20212506','20212507','20212508','20212509','20212510','20212511','20212512','20212513','20212514','20212515','20212516','20212517','20212518','20212519','20212520','20212521','20212522','20212523','20212524','20212525','20212526','20212527','20212528','20212529','20212530','20212531','20212532','20212533','20212534','20212535','20212536','20212537','20212538','20212539','20212540','20212541','20212542','20212543','20212544','20212545','20212548','20212549','20212601','20212602','20212603','20212604','20212605','20212606','20212607','20212608','20212609','20212610','20212611','20212612','20212613','20212614','20212615','20212616','20212617','20212618','20212619','20212620','20212621','20212622','20212623','20212624','20212625','20212626','20212627','20212628','20212629','20212630','20212631','20212632','20212633','20212634','20212635','20212636','20212637','20212638','20212639','20212640','20212641','20212642','20212643','20212644','20212701','20212702','20212703','20212704','20212705','20212706','20212707','20212708','20212709','20212710','20212711','20212712','20212713','20212714','20212715','20212716','20212717','20212718','20212719','20212720','20212721','20212722','20212723','20212724','20212725','20212726','20212727','20212728','20212730','20212731','20212732','20212733','20212734','20212735','20212736','20212737','20212738','20212739','20212740','20212741','20212742','20212743','20212744','20212745','20212746','20212747','20212748','20212749','20212801','20212802','20212803','20212804','20212805','20212806','20212807','20212808','20212809','20212810','20212811','20212812','20212813','20212814','20212815','20212816','20212818','20212819','20212820','20212821','20212822','20212823','20212824','20212825','20212826','20212827','20212828','20212829','20212830','20212831','20212832','20212833','20212834','20212835','20212836','20212837','20212838','20212839','20212840','20212841','20212842','20212843','20212844','20212845','20212846','20212847','20212848','20212849','20212901','20212902','20212903','20212904','20212905','20212906','20212907','20212908','20212909','20212910','20212911','20212912','20212913','20212914','20212915','20212916','20212917','20212918','20212919','20212920','20212921','20212922','20212923','20212924','20212925','20212927','20212928','20212929','20212930','20212931','20212932','20212933','20212934','20212935','20212936','20212937','20212938','20212939','20212940','20212941','20212942','20212943','20212947','20212948','20213001','20213002','20213003','20213004','20213005','20213006','20213007','20213008','20213009','20213010','20213011','20213012','20213013','20213014','20213015','20213016','20213017','20213018','20213019','20213020','20213021','20213022','20213023','20213024','20213025','20213026','20213027','20213028','20213029','20213030','20213031','20213032','20213033','20213034','20213035','20213036','20213037','20213038','20213039','20213040','20213041','20213042','20213043','20213044','20213045','20213046','20213047','20213048','20213049','20213050','20213101','20213102','20213103','20213104','20213105','20213106','20213107','20213108','20213109','20213110','20213111','20213112','20213113','20213114','20213115','20213116','20213117','20213118','20213119','20213120','20213121','20213122','20213123','20213124','20213125','20213126','20213127','20213128','20213129','20213130','20213131','20213132','20213133','20213134','20213135','20213136','20213137','20213138','20213139','20213140','20213142','20213143','20213144','20213145','20213146','20213147','20213148','20213149','20213152','20213201','20213202','20213203','20213204','20213205','20213206','20213207','20213208','20213209','20213210','20213211','20213212','20213213','20213214','20213215','20213216','20213217','20213218','20213219','20213220','20213221','20213222','20213223','20213224','20213225','20213226','20213227','20213228','20213229','20213230','20213231','20213232','20213233','20213234','20213235','20213236','20213237','20213238','20213239','20213240','20213241','20213242','20213243','20213244','20213245','20213246','20213247','20213248','20201901','20201902','20201903','20201904','20201905','20201906','20201907','20201908','20201909','20201910','20201911','20201912','20201913','20201914','20201915','20201916','20201917','20201918','20201919','20201920','20201921','20201922','20201923','20201924','20201925','20201926','20201927','20201928','20201929','20201930','20201931','20201932','20201933','20201934','20201935','20201936','20201937','20201938','20201939','20201940','20201941','20201942','20201943','20201944','20201945','20201946','20201947','20201949','20201951','20202001','20202002','20202003','20202004','20202005','20202006','20202007','20202008','20202010','20202011','20202012','20202013','20202014','20202016','20202017','20202018','20202019','20202020','20202021','20202022','20202023','20202024','20202025','20202026','20202027','20202028','20202029','20202030','20202031','20202032','20202033','20202034','20202035','20202036','20202037','20202038','20202039','20202040','20202041','20202042','20202043','20202044','20202045','20202046','20202047','20202101','20202102','20202104','20202105','20202106','20202107','20202108','20202109','20202110','20202111','20202112','20202113','20202114','20202115','20202116','20202117','20202118','20202119','20202120','20202121','20202122','20202125','20202126','20202127','20202128','20202129','20202130','20202131','20202132','20202133','20202134','20202135','20202136','20202137','20202138','20202139','20202140','20202141','20202142','20202143','20202144','20202145','20202147','20202148','20202201','20202202','20202203','20202204','20202205','20202206','20202207','20202208','20202209','20202210','20202211','20202212','20202213','20202214','20202215','20202216','20202217','20202218','20202219','20202220','20202221','20202222','20202223','20202224','20202225','20202226','20202227','20202228','20202229','20202230','20202231','20202232','20202233','20202234','20202235','20202236','20202237','20202238','20202239','20202240','20202241','20202242','20202243','20202244','20202245','20202246','20202248','20202301','20202302','20202303','20202304','20202305','20202306','20202307','20202308','20202309','20202310','20202312','20202313','20202314','20202315','20202316','20202317','20202318','20202319','20202320','20202321','20202322','20202323','20202324','20202325','20202326','20202327','20202328','20202329','20202330','20202331','20202332','20202333','20202334','20202335','20202337','20202338','20202339','20202340','20202341','20202342','20202343','20202344','20202345','20202346','20202401','20202402','20202403','20202404','20202405','20202406','20202407','20202408','20202409','20202410','20202412','20202413','20202414','20202415','20202416','20202417','20202418','20202419','20202420','20202421','20202422','20202423','20202424','20202425','20202426','20202427','20202428','20202429','20202430','20202431','20202432','20202433','20202434','20202435','20202436','20202437','20202438','20202439','20202440','20202441','20202442','20202443','20202444','20202445','20202446','20202447','20202448','20202449','20202450','20202501','20202502','20202503','20202504','20202506','20202507','20202508','20202509','20202510','20202511','20202512','20202513','20202514','20202515','20202516','20202517','20202518','20202519','20202520','20202521','20202522','20202523','20202524','20202525','20202526','20202527','20202528','20202529','20202530','20202531','20202532','20202533','20202534','20202535','20202536','20202537','20202538','20202539','20202540','20202541','20202542','20202543','20202544','20202545','20202546','20202601','20202602','20202603','20202604','20202605','20202606','20202607','20202608','20202609','20202610','20202611','20202612','20202613','20202614','20202615','20202616','20202617','20202618','20202619','20202620','20202621','20202622','20202623','20202624','20202625','20202626','20202627','20202628','20202629','20202630','20202631','20202633','20202634','20202635','20202636','20202637','20202638','20202639','20202640','20202641','20202642','20202643','20202644','20202645','20202701','20202702','20202703','20202704','20202705','20202706','20202707','20202708','20202709','20202710','20202711','20202712','20202713','20202714','20202715','20202716','20202717','20202718','20202719','20202720','20202721','20202722','20202723','20202724','20202725','20202726','20202727','20202728','20202729','20202730','20202731','20202732','20202733','20202734','20202735','20202736','20202737','20202738','20202739','20202740','20202741','20202742','20202743','20202747','20202801','20202802','20202803','20202804','20202805','20202806','20202807','20202808','20202809','20202810','20202811','20202812','20202813','20202814','20202815','20202816','20202817','20202818','20202819','20202820','20202821','20202822','20202823','20202824','20202825','20202826','20202827','20202828','20202829','20202830','20202831','20202832','20202833','20202834','20202835','20202836','20202837','20202838','20202839','20202840','20202841','20202842','20202843','20202844','20202845','20202846','20202847','20202901','20202902','20202903','20202904','20202905','20202906','20202907','20202908','20202909','20202910','20202911','20202912','20202913','20202914','20202915','20202916','20202917','20202918','20202919','20202920','20202921','20202922','20202923','20202924','20202925','20202926','20202927','20202928','20202929','20202930','20202931','20202932','20202933','20202934','20202935','20202936','20202937','20202938','20202939','20202940','20202941','20202942','20202943','20202944','20203001','20203002','20203003','20203004','20203005','20203006','20203007','20203008','20203009','20203010','20203011','20203012','20203013','20203014','20203015','20203016','20203017','20203018','20203019','20203020','20203021','20203022','20203023','20203024','20203025','20203026','20203027','20203028','20203029','20203030','20203031','20203032','20203033','20203034','20203035','20203036','20203037','20203039','20203040','20203041','20203042','20203043','20203044','20203046','20203101','20203102','20203103','20203104','20203105','20203106','20203107','20203108','20203109','20203110','20203111','20203112','20203113','20203114','20203115','20203116','20203117','20203118','20203119','20203120','20203121','20203122','20203123','20203124','20203125','20203126','20203127','20203128','20203129','20203130','20203131','20203132','20203133','20203134','20203135','20203136','20203137','20203138','20203139','20203140','20203141','20203142','20203143','20203144','20203145','20203146','20203201','20203202','20203203','20203204','20203205','20203207','20203208','20203209','20203210','20203211','20203212','20203213','20203214','20203215','20203216','20203217','20203218','20203220','20203221','20203222','20203223','20203224','20203225','20203226','20203227','20203228','20203229','20203230','20203231','20203232','20203233','20203234','20203235','20203236','20203237','20203238','20203239','20203240','20203241','20203242','20203243','20203244','20203245','20203246','20203247') and c.code='Base-fzpdzz' ";
  106. string clasql = "SELECT * FROM c where c.no in('20221901','20221902','20221903','20221904','20221905','20221906','20221907','20221908','20221909','20221910','20221911','20221912','20221913','20221914','20221915','20221916','20221917','20221918','20221919','20221920','20221921','20221922','20221923','20221924','20221925','20221926','20221927','20221928','20221929','20221930','20221931','20221932','20221933','20221934','20221935','20221936','20221937','20221938','20221939','20221940','20221941','20221942','20221943','20221944','20221945','20221946','20221947','20221948','20221949','20221950','20222002','20222003','20222004','20222005','20222006','20222007','20222008','20222009','20222010','20222011','20222012','20222013','20222014','20222015','20222016','20222017','20222018','20222019','20222020','20222021','20222022','20222023','20222024','20222025','20222026','20222027','20222028','20222029','20222030','20222031','20222032','20222033','20222034','20222035','20222036','20222037','20222038','20222039','20222040','20222041','20222042','20222043','20222044','20222101','20222102','20222103','20222104','20222105','20222106','20222107','20222108','20222109','20222110','20222111','20222112','20222113','20222114','20222115','20222116','20222117','20222118','20222119','20222120','20222121','20222122','20222123','20222124','20222125','20222126','20222127','20222128','20222129','20222130','20222131','20222132','20222133','20222134','20222135','20222136','20222137','20222138','20222139','20222140','20222141','20222142','20222143','20222144','20222145','20222146','20222147','20222201','20222202','20222203','20222204','20222205','20222206','20222207','20222208','20222209','20222210','20222211','20222212','20222213','20222214','20222215','20222216','20222217','20222218','20222219','20222220','20222221','20222222','20222223','20222224','20222226','20222227','20222228','20222229','20222230','20222231','20222232','20222233','20222234','20222235','20222236','20222237','20222238','20222239','20222240','20222241','20222242','20222243','20222244','20222245','20222301','20222302','20222303','20222304','20222305','20222306','20222307','20222308','20222309','20222310','20222311','20222312','20222313','20222314','20222315','20222316','20222317','20222318','20222319','20222320','20222321','20222322','20222323','20222324','20222325','20222326','20222327','20222328','20222329','20222330','20222331','20222332','20222333','20222334','20222335','20222336','20222337','20222338','20222339','20222340','20222341','20222342','20222343','20222344','20222345','20222346','20222347','20222401','20222402','20222403','20222404','20222405','20222406','20222407','20222408','20222409','20222410','20222411','20222412','20222413','20222414','20222415','20222416','20222417','20222418','20222419','20222420','20222421','20222422','20222423','20222424','20222425','20222426','20222427','20222428','20222429','20222430','20222431','20222432','20222433','20222434','20222435','20222436','20222437','20222438','20222439','20222440','20222441','20222442','20222443','20222444','20222445','20222447','20222501','20222502','20222503','20222504','20222505','20222506','20222508','20222509','20222510','20222511','20222512','20222513','20222514','20222515','20222516','20222517','20222518','20222519','20222520','20222521','20222522','20222523','20222525','20222526','20222527','20222528','20222529','20222530','20222531','20222532','20222533','20222534','20222535','20222536','20222537','20222538','20222539','20222540','20222541','20222542','20222543','20222544','20222545','20222546','20222547','20222601','20222602','20222603','20222604','20222605','20222606','20222607','20222608','20222609','20222610','20222611','20222612','20222613','20222614','20222615','20222616','20222617','20222618','20222619','20222620','20222621','20222622','20222623','20222624','20222625','20222626','20222627','20222628','20222629','20222630','20222631','20222632','20222633','20222634','20222635','20222636','20222637','20222639','20222640','20222641','20222642','20222643','20222645','20222646','20222647','20222648','20222649','20222701','20222702','20222703','20222704','20222705','20222706','20222707','20222708','20222709','20222710','20222711','20222712','20222713','20222714','20222715','20222716','20222717','20222718','20222719','20222720','20222721','20222722','20222723','20222724','20222725','20222727','20222728','20222729','20222730','20222731','20222732','20222733','20222734','20222735','20222736','20222737','20222738','20222739','20222740','20222741','20222742','20222743','20222744','20222745','20222746','20222747','20222748','20222749','20222801','20222804','20222805','20222806','20222807','20222808','20222809','20222810','20222811','20222812','20222813','20222814','20222815','20222816','20222817','20222819','20222821','20222822','20222823','20222824','20222825','20222826','20222827','20222828','20222829','20222830','20222831','20222834','20222835','20222836','20222837','20222838','20222839','20222840','20222841','20222842','20222843','20222844','20222845','20222846','20222847','20222848','20211901','20211902','20211903','20211904','20211905','20211906','20211908','20211909','20211910','20211911','20211912','20211913','20211914','20211915','20211916','20211917','20211918','20211919','20211920','20211921','20211922','20211923','20211924','20211925','20211926','20211927','20211928','20211929','20211930','20211931','20211932','20211933','20211934','20211935','20211936','20211937','20211938','20211939','20211940','20211941','20211942','20211943','20211944','20211945','20212001','20212002','20212003','20212004','20212005','20212006','20212007','20212008','20212009','20212010','20212011','20212012','20212013','20212014','20212015','20212016','20212017','20212018','20212019','20212020','20212021','20212022','20212023','20212024','20212025','20212026','20212027','20212028','20212029','20212030','20212031','20212032','20212033','20212034','20212035','20212036','20212037','20212038','20212039','20212040','20212041','20212042','20212043','20212044','20212045','20212046','20212047','20212048','20212101','20212102','20212103','20212104','20212105','20212106','20212107','20212108','20212109','20212110','20212111','20212112','20212113','20212114','20212115','20212116','20212117','20212118','20212119','20212120','20212121','20212123','20212124','20212125','20212126','20212127','20212128','20212129','20212130','20212131','20212132','20212133','20212134','20212135','20212136','20212137','20212138','20212139','20212140','20212141','20212142','20212143','20212144','20212145','20212146','20212147','20212148','20212149','20212150','20212151','20212201','20212202','20212203','20212204','20212205','20212206','20212207','20212208','20212209','20212210','20212211','20212212','20212213','20212214','20212215','20212216','20212217','20212218','20212219','20212220','20212221','20212222','20212223','20212224','20212225','20212226','20212227','20212228','20212229','20212230','20212231','20212232','20212233','20212234','20212235','20212236','20212237','20212238','20212239','20212240','20212241','20212242','20212243','20212244','20212245','20212246','20212247','20212248','20212249','20212250','20212301','20212302','20212303','20212304','20212305','20212306','20212307','20212308','20212309','20212310','20212311','20212312','20212313','20212314','20212315','20212317','20212318','20212319','20212320','20212322','20212323','20212324','20212325','20212326','20212327','20212328','20212329','20212330','20212331','20212332','20212333','20212334','20212335','20212336','20212337','20212338','20212339','20212340','20212341','20212342','20212343','20212344','20212345','20212346','20212401','20212402','20212403','20212404','20212405','20212406','20212407','20212408','20212409','20212410','20212411','20212413','20212414','20212415','20212416','20212417','20212418','20212419','20212420','20212421','20212422','20212423','20212424','20212425','20212426','20212427','20212428','20212429','20212430','20212431','20212432','20212433','20212434','20212435','20212436','20212437','20212438','20212439','20212440','20212441','20212442','20212443','20212444','20212445','20212446','20212447','20212501','20212502','20212503','20212504','20212505','20212506','20212507','20212508','20212509','20212510','20212511','20212512','20212513','20212514','20212515','20212516','20212517','20212518','20212519','20212520','20212521','20212522','20212523','20212524','20212525','20212526','20212527','20212528','20212529','20212530','20212531','20212532','20212533','20212534','20212535','20212536','20212537','20212538','20212539','20212540','20212541','20212542','20212543','20212544','20212545','20212548','20212549','20212601','20212602','20212603','20212604','20212605','20212606','20212607','20212608','20212609','20212610','20212611','20212612','20212613','20212614','20212615','20212616','20212617','20212618','20212619','20212620','20212621','20212622','20212623','20212624','20212625','20212626','20212627','20212628','20212629','20212630','20212631','20212632','20212633','20212634','20212635','20212636','20212637','20212638','20212639','20212640','20212641','20212642','20212643','20212644','20212701','20212702','20212703','20212704','20212705','20212706','20212707','20212708','20212709','20212710','20212711','20212712','20212713','20212714','20212715','20212716','20212717','20212718','20212719','20212720','20212721','20212722','20212723','20212724','20212725','20212726','20212727','20212728','20212730','20212731','20212732','20212733','20212734','20212735','20212736','20212737','20212738','20212739','20212740','20212741','20212742','20212743','20212744','20212745','20212746','20212747','20212748','20212749','20212801','20212802','20212803','20212804','20212805','20212806','20212807','20212808','20212809','20212810','20212811','20212812','20212813','20212814','20212815','20212816','20212818','20212819','20212820','20212821','20212822','20212823','20212824','20212825','20212826','20212827','20212828','20212829','20212830','20212831','20212832','20212833','20212834','20212835','20212836','20212837','20212838','20212839','20212840','20212841','20212842','20212843','20212844','20212845','20212846','20212847','20212848','20212849','20212901','20212902','20212903','20212904','20212905','20212906','20212907','20212908','20212909','20212910','20212911','20212912','20212913','20212914','20212915','20212916','20212917','20212918','20212919','20212920','20212921','20212922','20212923','20212924','20212925','20212927','20212928','20212929','20212930','20212931','20212932','20212933','20212934','20212935','20212936','20212937','20212938','20212939','20212940','20212941','20212942','20212943','20212947','20212948','20213001','20213002','20213003','20213004','20213005','20213006','20213007','20213008','20213009','20213010','20213011','20213012','20213013','20213014','20213015','20213016','20213017','20213018','20213019','20213020','20213021','20213022','20213023','20213024','20213025','20213026','20213027','20213028','20213029','20213030','20213031','20213032','20213033','20213034','20213035','20213036','20213037','20213038','20213039','20213040','20213041','20213042','20213043','20213044','20213045','20213046','20213047','20213048','20213049','20213050','20213101','20213102','20213103','20213104','20213105','20213106','20213107','20213108','20213109','20213110','20213111','20213112','20213113','20213114','20213115','20213116','20213117','20213118','20213119','20213120','20213121','20213122','20213123','20213124','20213125','20213126','20213127','20213128','20213129','20213130','20213131','20213132','20213133','20213134','20213135','20213136','20213137','20213138','20213139','20213140','20213142','20213143','20213144','20213145','20213146','20213147','20213148','20213149','20213152','20213201','20213202','20213203','20213204','20213205','20213206','20213207','20213208','20213209','20213210','20213211','20213212','20213213','20213214','20213215','20213216','20213217','20213218','20213219','20213220','20213221','20213222','20213223','20213224','20213225','20213226','20213227','20213228','20213229','20213230','20213231','20213232','20213233','20213234','20213235','20213236','20213237','20213238','20213239','20213240','20213241','20213242','20213243','20213244','20213245','20213246','20213247','20213248','20201901','20201902','20201903','20201904','20201905','20201906','20201907','20201908','20201909','20201910','20201911','20201912','20201913','20201914','20201915','20201916','20201917','20201918','20201919','20201920','20201921','20201922','20201923','20201924','20201925','20201926','20201927','20201928','20201929','20201930','20201931','20201932','20201933','20201934','20201935','20201936','20201937','20201938','20201939','20201940','20201941','20201942','20201943','20201944','20201945','20201946','20201947','20201949','20201951','20202001','20202002','20202003','20202004','20202005','20202006','20202007','20202008','20202010','20202011','20202012','20202013','20202014','20202016','20202017','20202018','20202019','20202020','20202021','20202022','20202023','20202024','20202025','20202026','20202027','20202028','20202029','20202030','20202031','20202032','20202033','20202034','20202035','20202036','20202037','20202038','20202039','20202040','20202041','20202042','20202043','20202044','20202045','20202046','20202047','20202101','20202102','20202104','20202105','20202106','20202107','20202108','20202109','20202110','20202111','20202112','20202113','20202114','20202115','20202116','20202117','20202118','20202119','20202120','20202121','20202122','20202125','20202126','20202127','20202128','20202129','20202130','20202131','20202132','20202133','20202134','20202135','20202136','20202137','20202138','20202139','20202140','20202141','20202142','20202143','20202144','20202145','20202147','20202148','20202201','20202202','20202203','20202204','20202205','20202206','20202207','20202208','20202209','20202210','20202211','20202212','20202213','20202214','20202215','20202216','20202217','20202218','20202219','20202220','20202221','20202222','20202223','20202224','20202225','20202226','20202227','20202228','20202229','20202230','20202231','20202232','20202233','20202234','20202235','20202236','20202237','20202238','20202239','20202240','20202241','20202242','20202243','20202244','20202245','20202246','20202248','20202301','20202302','20202303','20202304','20202305','20202306','20202307','20202308','20202309','20202310','20202312','20202313','20202314','20202315','20202316','20202317','20202318','20202319','20202320','20202321','20202322','20202323','20202324','20202325','20202326','20202327','20202328','20202329','20202330','20202331','20202332','20202333','20202334','20202335','20202337','20202338','20202339','20202340','20202341','20202342','20202343','20202344','20202345','20202346','20202401','20202402','20202403','20202404','20202405','20202406','20202407','20202408','20202409','20202410','20202412','20202413','20202414','20202415','20202416','20202417','20202418','20202419','20202420','20202421','20202422','20202423','20202424','20202425','20202426','20202427','20202428','20202429','20202430','20202431','20202432','20202433','20202434','20202435','20202436','20202437','20202438','20202439','20202440','20202441','20202442','20202443','20202444','20202445','20202446','20202447','20202448','20202449','20202450','20202501','20202502','20202503','20202504','20202506','20202507','20202508','20202509','20202510','20202511','20202512','20202513','20202514','20202515','20202516','20202517','20202518','20202519','20202520','20202521','20202522','20202523','20202524','20202525','20202526','20202527','20202528','20202529','20202530','20202531','20202532','20202533','20202534','20202535','20202536','20202537','20202538','20202539','20202540','20202541','20202542','20202543','20202544','20202545','20202546','20202601','20202602','20202603','20202604','20202605','20202606','20202607','20202608','20202609','20202610','20202611','20202612','20202613','20202614','20202615','20202616','20202617','20202618','20202619','20202620','20202621','20202622','20202623','20202624','20202625','20202626','20202627','20202628','20202629','20202630','20202631','20202633','20202634','20202635','20202636','20202637','20202638','20202639','20202640','20202641','20202642','20202643','20202644','20202645','20202701','20202702','20202703','20202704','20202705','20202706','20202707','20202708','20202709','20202710','20202711','20202712','20202713','20202714','20202715','20202716','20202717','20202718','20202719','20202720','20202721','20202722','20202723','20202724','20202725','20202726','20202727','20202728','20202729','20202730','20202731','20202732','20202733','20202734','20202735','20202736','20202737','20202738','20202739','20202740','20202741','20202742','20202743','20202747','20202801','20202802','20202803','20202804','20202805','20202806','20202807','20202808','20202809','20202810','20202811','20202812','20202813','20202814','20202815','20202816','20202817','20202818','20202819','20202820','20202821','20202822','20202823','20202824','20202825','20202826','20202827','20202828','20202829','20202830','20202831','20202832','20202833','20202834','20202835','20202836','20202837','20202838','20202839','20202840','20202841','20202842','20202843','20202844','20202845','20202846','20202847','20202901','20202902','20202903','20202904','20202905','20202906','20202907','20202908','20202909','20202910','20202911','20202912','20202913','20202914','20202915','20202916','20202917','20202918','20202919','20202920','20202921','20202922','20202923','20202924','20202925','20202926','20202927','20202928','20202929','20202930','20202931','20202932','20202933','20202934','20202935','20202936','20202937','20202938','20202939','20202940','20202941','20202942','20202943','20202944','20203001','20203002','20203003','20203004','20203005','20203006','20203007','20203008','20203009','20203010','20203011','20203012','20203013','20203014','20203015','20203016','20203017','20203018','20203019','20203020','20203021','20203022','20203023','20203024','20203025','20203026','20203027','20203028','20203029','20203030','20203031','20203032','20203033','20203034','20203035','20203036','20203037','20203039','20203040','20203041','20203042','20203043','20203044','20203046','20203101','20203102','20203103','20203104','20203105','20203106','20203107','20203108','20203109','20203110','20203111','20203112','20203113','20203114','20203115','20203116','20203117','20203118','20203119','20203120','20203121','20203122','20203123','20203124','20203125','20203126','20203127','20203128','20203129','20203130','20203131','20203132','20203133','20203134','20203135','20203136','20203137','20203138','20203139','20203140','20203141','20203142','20203143','20203144','20203145','20203146','20203201','20203202','20203203','20203204','20203205','20203207','20203208','20203209','20203210','20203211','20203212','20203213','20203214','20203215','20203216','20203217','20203218','20203220','20203221','20203222','20203223','20203224','20203225','20203226','20203227','20203228','20203229','20203230','20203231','20203232','20203233','20203234','20203235','20203236','20203237','20203238','20203239','20203240','20203241','20203242','20203243','20203244','20203245','20203246','20203247') and c.code='Class-fzpdzz' ";
  107. List<Student> students = new List<Student>();
  108. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIteratorSql<Student>(queryText: stusql,requestOptions: new QueryRequestOptions { PartitionKey= new PartitionKey("Base-fzpdzz") }))
  109. {
  110. students.Add(item);
  111. }
  112. await client.GetContainer(Constant.TEAMModelOS, Constant.Student).DeleteItemsStreamAsync(students.Select(z => z.id).ToList(), "Base-fzpdzz");
  113. List <Class> classes = new List<Class>();
  114. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<Class>(queryText: clasql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Class-fzpdzz") }))
  115. {
  116. classes.Add(item);
  117. }
  118. await client.GetContainer(Constant.TEAMModelOS, Constant.School).DeleteItemsStreamAsync(classes.Select(z => z.id).ToList(), "Class-fzpdzz");
  119. return Ok();
  120. }
  121. [ProducesDefaultResponseType]
  122. [HttpPost("fix-error-activity")]
  123. public async Task<IActionResult> FixErrorActivity(JsonElement json)
  124. {
  125. var client = _azureCosmos.GetCosmosClient();
  126. string stusql = "select value(c) from c where c.pk = 'ErrorItems' and c.its = []";
  127. List<ErrorItems> students = new List<ErrorItems>();
  128. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIteratorSql<ErrorItems>(queryText: stusql))
  129. {
  130. students.Add(item);
  131. }
  132. List<Task<ItemResponse<ErrorItems>>> tasks = new List<Task<ItemResponse<ErrorItems>>>();
  133. foreach (ErrorItems error in students) {
  134. tasks.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Student).DeleteItemAsync<ErrorItems>(error.id, new PartitionKey(error.code)));
  135. }
  136. await tasks.TaskPage(10);
  137. return Ok();
  138. }
  139. [ProducesDefaultResponseType]
  140. [HttpPost("find-school-activity")]
  141. public async Task<IActionResult> findSchoolActivity(JsonElement json)
  142. {
  143. var client = _azureCosmos.GetCosmosClient();
  144. string stusql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  145. List<ArtEvaluation> art = new List<ArtEvaluation>();
  146. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ArtEvaluation>(queryText: stusql))
  147. {
  148. art.Add(item);
  149. }
  150. var artId = art.Select(c => c.id).ToList();
  151. string artResultSql = $"select * from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", artId.Select(o => $"'{o}'"))})";
  152. List<StudentArtResult> artResults = new();
  153. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIteratorSql<StudentArtResult>(queryText: artResultSql))
  154. {
  155. artResults.Add(item);
  156. }
  157. string sql = $"select c.id, c.name from c";
  158. List<(string id,string name)> sc = new();
  159. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
  160. .GetItemQueryStreamIteratorSql(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  161. {
  162. using var sc_json = await JsonDocument.ParseAsync(item.Content);
  163. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  164. {
  165. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  166. while (accounts.MoveNext())
  167. {
  168. JsonElement account = accounts.Current;
  169. sc.Add((account.GetProperty("id").GetString(), account.GetProperty("name").GetString()));
  170. }
  171. }
  172. }
  173. int musicCount = 0;
  174. int examCount = 0;
  175. //int wCount = 0;
  176. //List<Dictionary<string, int>> schoolCount = new();
  177. Dictionary<string, int> optCount = new Dictionary<string, int>();
  178. Dictionary<string, int> ansCount = new Dictionary<string, int>();
  179. foreach (StudentArtResult result in artResults) {
  180. var score = result.results.Where(c => c.quotaId.Equals("quota_21")).Select(z => z.score).ToList();
  181. bool flag = score.Exists(c => c == -1);
  182. if (!flag) {
  183. if (ansCount.ContainsKey(result.school))
  184. {
  185. ansCount[result.school] = ansCount[result.school] + 1;
  186. }
  187. else
  188. {
  189. ansCount[result.school] = 1;
  190. }
  191. examCount++;
  192. }
  193. foreach (ArtQuotaResult artQuotas in result.results) {
  194. if (artQuotas.quotaId.Equals("quota_22") && artQuotas.score > 0 && artQuotas.subjectId.Equals("subject_music")) {
  195. if (optCount.ContainsKey(result.school))
  196. {
  197. optCount[result.school] = optCount[result.school] + 1;
  198. }
  199. else
  200. {
  201. optCount[result.school] = 1;
  202. }
  203. musicCount++;
  204. }
  205. }
  206. }
  207. var stuList = artResults.GroupBy(c => c.school).Select(z => new { z.Key, z.ToList().Count }).Select(p => new {
  208. code = p.Key,
  209. name = sc.Where(x => x.id.Equals(p.Key)).FirstOrDefault().name,
  210. total = p.Count,
  211. realMusicCount = optCount.TryGetValue(p.Key,out int real) ? real : 0,
  212. realAnsCount = ansCount.TryGetValue(p.Key, out int ans) ? ans : 0,
  213. });
  214. /*var examId = art.SelectMany(c => c.settings).Where(z => z.id.Equals("quota_21")).SelectMany(a => a.task).Where(p => p.type == 1 && !string.IsNullOrEmpty(p.acId)).Select(o => o.acId).ToList();
  215. string examSQL = $"select * from c where c.pk = 'ExamClassResult' and c.examId in ({string.Join(",", examId.Select(o => $"'{o}'"))})";
  216. List<ExamClassResult> classResults = new();
  217. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ExamClassResult>(queryText: examSQL))
  218. {
  219. classResults.Add(item);
  220. }
  221. HashSet<string> scCode = new();
  222. foreach (ExamClassResult result in classResults) {
  223. bool flag = false;
  224. if (scCode.Contains(result.school)) {
  225. continue;
  226. }
  227. foreach (var item in result.studentScores)
  228. {
  229. foreach (var score in item) {
  230. if (score > 0) {
  231. flag = true;
  232. break;
  233. }
  234. }
  235. if (flag) {
  236. break;
  237. }
  238. }
  239. if (flag) {
  240. scCode.Add(result.school);
  241. }
  242. }*/
  243. /*var ans = classResults.SelectMany(c => c.ans).ToList();
  244. foreach (var c in ans) {
  245. foreach (var b in c) {
  246. if (b.Count > 0) {
  247. break;
  248. }
  249. }
  250. }*/
  251. return Ok(new { stuList, artResults.Count, musicCount , examCount });
  252. }
  253. [ProducesDefaultResponseType]
  254. [HttpPost("find-student-activity")]
  255. public async Task<IActionResult> findStudentActivity(JsonElement json)
  256. {
  257. var client = _azureCosmos.GetCosmosClient();
  258. string stusql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  259. List<ArtEvaluation> art = new List<ArtEvaluation>();
  260. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ArtEvaluation>(queryText: stusql))
  261. {
  262. art.Add(item);
  263. }
  264. var artId = art.Select(c => c.id).ToList();
  265. string artResultSql = $"select * from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", artId.Select(o => $"'{o}'"))})";
  266. List<StudentArtResult> artResults = new();
  267. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIteratorSql<StudentArtResult>(queryText: artResultSql))
  268. {
  269. artResults.Add(item);
  270. }
  271. string sql = $"select c.id, c.name from c";
  272. List<(string id, string name)> sc = new();
  273. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
  274. .GetItemQueryStreamIteratorSql(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  275. {
  276. using var sc_json = await JsonDocument.ParseAsync(item.Content);
  277. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  278. {
  279. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  280. while (accounts.MoveNext())
  281. {
  282. JsonElement account = accounts.Current;
  283. sc.Add((account.GetProperty("id").GetString(), account.GetProperty("name").GetString()));
  284. }
  285. }
  286. }
  287. //Dictionary<string, int> optCount = new Dictionary<string, int>();
  288. //Dictionary<string, int> ansCount = new Dictionary<string, int>();
  289. /* List<(string stuId, List<(string type, double score)> stuType)> stus = new();
  290. foreach (StudentArtResult result in artResults)
  291. {
  292. List<(string type, double score)> stuTtpe = new();
  293. foreach (ArtQuotaResult artQuotas in result.results)
  294. {
  295. if (artQuotas.quotaId.Equals("quota_21")) {
  296. stuTtpe.Add((artQuotas.subjectId, artQuotas.score > 0 ? 1 : 0));
  297. }
  298. if (artQuotas.quotaId.Equals("quota_22") && artQuotas.subjectId.Equals("subject_music")) {
  299. stuTtpe.Add(("zy", artQuotas.score > 0 ? 1 : 0));
  300. }
  301. }
  302. stus.Add((result.studentId, stuTtpe));
  303. }*/
  304. var classList = artResults.SelectMany(c => c.classIds).ToList().Distinct();
  305. string classSql = $"select c.id, c.name from c where c.pk = 'Class' and c.id in ({string.Join(",", classList.Select(o => $"'{o}'"))})";
  306. List<(string id, string name)> classInfos = new();
  307. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
  308. .GetItemQueryStreamIteratorSql(queryText: classSql))
  309. {
  310. using var sc_json = await JsonDocument.ParseAsync(item.Content);
  311. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  312. {
  313. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  314. while (accounts.MoveNext())
  315. {
  316. JsonElement account = accounts.Current;
  317. classInfos.Add((account.GetProperty("id").GetString(), account.GetProperty("name").GetString()));
  318. }
  319. }
  320. }
  321. var stuList = artResults.Select(p => new {
  322. id = p.studentId,
  323. name = p.studentName,
  324. school = sc.Where(x => x.id.Equals(p.school)).FirstOrDefault().name,
  325. code = p.school,
  326. classId = classInfos.Where(x => x.id.Equals(p.classIds[0])).FirstOrDefault().name
  327. /*info = p.results.Select(c => new
  328. {
  329. c.score,
  330. c.quotaId,
  331. c.quotaName,
  332. c.subjectId
  333. })*/
  334. });
  335. return Ok(new { stuList });
  336. }
  337. [HttpPost("read-excel-art")]
  338. //[Authorize(Roles = "IES")]
  339. //[AuthToken(Roles = "teacher,admin,business")]
  340. [RequestSizeLimit(102_400_000_00)] //最大10000m左右
  341. public async Task<IActionResult> ReadExcel([FromForm] IFormFile file)
  342. {
  343. ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
  344. var client = _azureCosmos.GetCosmosClient();
  345. //string stusql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  346. string stusql = "select * from c where c.pk = 'Art' and c.pId = '306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2'";
  347. List<ArtEvaluation> art = new List<ArtEvaluation>();
  348. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ArtEvaluation>(queryText: stusql))
  349. {
  350. art.Add(item);
  351. }
  352. var artId = art.Select(c => c.id).ToList();
  353. string artResultSql = $"select * from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", artId.Select(o => $"'{o}'"))})";
  354. List<StudentArtResult> artResults = new();
  355. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIteratorSql<StudentArtResult>(queryText: artResultSql))
  356. {
  357. artResults.Add(item);
  358. }
  359. List<(string code,string sId)> students = new();
  360. using ExcelPackage package = new(file.OpenReadStream());
  361. ExcelWorksheets sheet = package.Workbook.Worksheets;
  362. List<string> baseTitle = new List<string>();
  363. //科目标题的栏位序列
  364. int subjectTitelIndex = -1;
  365. //读取Exam_
  366. var art_sheet = sheet.Where(z => z.Name.Equals("art_cz")).FirstOrDefault();
  367. List<(string code, string stuId, double score)> stus = new();
  368. if (art_sheet != null)
  369. {
  370. var rows = art_sheet.Dimension.Rows;
  371. var columns = art_sheet.Dimension.Columns;
  372. for (int r = 2; r <= rows; r++)
  373. {
  374. var stuId = art_sheet.GetValue(r, 5).ToString();
  375. var code = art_sheet.GetValue(r, 2).ToString();
  376. var score = art_sheet.GetValue(r, 7);
  377. stus.Add((code, stuId, (double)score));
  378. }
  379. }
  380. await foreach (var (school, id) in stuTask(client, artResults, stus))
  381. {
  382. students.Add((school, id));
  383. }
  384. //await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).UpsertItemAsync(examImport, new PartitionKey(examImport.code));
  385. return Ok(new { code = 200, students });
  386. }
  387. private async IAsyncEnumerable<(string school,string id)> stuTask(CosmosClient client,List<StudentArtResult> artResults, List<(string code, string stuId, double score)> stus) {
  388. foreach (StudentArtResult result in artResults)
  389. {
  390. string value = "";
  391. string code = "";
  392. try {
  393. bool flag = false;
  394. foreach (ArtQuotaResult artQuotas in result.results)
  395. {
  396. if (artQuotas.quotaId.Equals("quota_22") && artQuotas.subjectId.Equals("subject_painting"))
  397. {
  398. if (artQuotas.score < 0)
  399. {
  400. artQuotas.score = stus.Where(c => c.code.Equals(result.school) && c.stuId.Equals(result.studentId)).FirstOrDefault().score;
  401. flag = true;
  402. break;
  403. }
  404. }
  405. }
  406. if (flag) {
  407. await client.GetContainer(Constant.TEAMModelOS, Constant.Student).ReplaceItemAsync(result, result.id, new PartitionKey(result.code));
  408. }
  409. } catch (Exception e) {
  410. code = result.school;
  411. value = result.studentId;
  412. }
  413. yield return (code, value);
  414. }
  415. }
  416. [ProducesDefaultResponseType]
  417. [HttpPost("find-xg-activity")]
  418. public async Task<IActionResult> findXgActivity(JsonElement element)
  419. {
  420. var client = _azureCosmos.GetCosmosClient();
  421. string musicSql = $"select c.id from c join A0 in c.results where A0.quotaId = 'quota_21' \r\n" +
  422. $"and c.school = 'qyszgh' \r\n" +
  423. $"and A0.subjectId = 'subject_music' \r\n" +
  424. $"and c.artId = '92fb6d6e-4b6f-403a-b4ac-71095d58d43b'\r\n" +
  425. $"and A0.score > 0";
  426. List<string> musicResults = new();
  427. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryStreamIteratorSql(queryText: musicSql))
  428. {
  429. using var sc_json = await JsonDocument.ParseAsync(item.Content);
  430. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  431. {
  432. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  433. while (accounts.MoveNext())
  434. {
  435. JsonElement account = accounts.Current;
  436. musicResults.Add(account.GetProperty("id").GetString());
  437. }
  438. }
  439. }
  440. string paintingSql = $"select c.id from c join A0 in c.results where A0.quotaId = 'quota_21' \r\n" +
  441. $"and c.school = 'qyszgh' \r\n" +
  442. $"and A0.subjectId = 'subject_painting' \r\n" +
  443. $"and c.artId = '92fb6d6e-4b6f-403a-b4ac-71095d58d43b'\r\n" +
  444. $"and A0.score > 0";
  445. List<string> painResults = new();
  446. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryStreamIteratorSql(queryText: paintingSql))
  447. {
  448. using var sc_json = await JsonDocument.ParseAsync(item.Content);
  449. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  450. {
  451. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  452. while (accounts.MoveNext())
  453. {
  454. JsonElement account = accounts.Current;
  455. painResults.Add(account.GetProperty("id").GetString());
  456. }
  457. }
  458. }
  459. var guiyi = painResults.Except(musicResults);
  460. return Ok(new { guiyi });
  461. }
  462. [ProducesDefaultResponseType]
  463. [HttpPost("update-time")]
  464. public async Task<IActionResult> FixTime(JsonElement json)
  465. {
  466. var client = _azureCosmos.GetCosmosClient();
  467. string stusql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  468. List<ArtEvaluation> art = new List<ArtEvaluation>();
  469. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ArtEvaluation>(queryText: stusql))
  470. {
  471. art.Add(item);
  472. }
  473. var examId = art.SelectMany(c => c.settings).Where(z => z.id.Equals("quota_21")).SelectMany(a => a.task).Where(p => p.type == 1 && !string.IsNullOrEmpty(p.acId)).Select(o => o.acId).ToList();
  474. string examSQL = $"select * from c where c.pk = 'Exam' and c.id in ({string.Join(",", examId.Select(o => $"'{o}'"))})";
  475. List<ExamInfo> infos = new();
  476. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ExamInfo>(queryText: examSQL))
  477. {
  478. infos.Add(item);
  479. }
  480. //List<Task<ItemResponse<ArtEvaluation>>> tasks = new List<Task<ItemResponse<ArtEvaluation>>>();
  481. /*foreach (ArtEvaluation evaluation in art)
  482. {
  483. foreach (var tas in evaluation.settings)
  484. {
  485. if (tas.id.Equals("quota_22"))
  486. {
  487. foreach (var quot in tas.task)
  488. {
  489. if (quot.subject.Equals("subject_music"))
  490. {
  491. quot.workEnd = 1704902400000;
  492. }
  493. }
  494. }
  495. }
  496. //evaluation.endTime = 1704902400000;
  497. tasks.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(evaluation, evaluation.id, new PartitionKey(evaluation.code)));
  498. }
  499. await tasks.TaskPage(10);*/
  500. /*List<Task<ItemResponse<ArtEvaluation>>> tasks = new List<Task<ItemResponse<ArtEvaluation>>>();
  501. foreach (ArtEvaluation evaluation in art)
  502. {
  503. evaluation.endTime = 1709112600000;
  504. tasks.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(evaluation, evaluation.id, new PartitionKey(evaluation.code)));
  505. }*/
  506. //await tasks.TaskPage(10);
  507. /* List<Task<ItemResponse<ExamInfo>>> taskInfo = new List<Task<ItemResponse<ExamInfo>>>();
  508. foreach (ExamInfo info in infos)
  509. {
  510. info.period = art.Where(c => c.school.Equals(info.school)).FirstOrDefault().period;
  511. taskInfo.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(info, info.id, new PartitionKey(info.code)));
  512. }*/
  513. string sql = $"SELECT value(c) FROM c ";
  514. List<School> schools = new();
  515. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
  516. {
  517. schools.Add(item);
  518. }
  519. await Parallel.ForEachAsync(art, async(rt,_) => {
  520. //School scInfo = new();
  521. //School scInfo = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>($"{art.school}", partitionKey: new PartitionKey("Base"));
  522. /*var response = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{rt.school}", partitionKey: new PartitionKey("Base"));
  523. if (response.StatusCode==System.Net.HttpStatusCode.OK)
  524. {
  525. using var cJson = await JsonDocument.ParseAsync(response.Content);
  526. scInfo = cJson.ToObject<School>();
  527. }*/
  528. var periods = schools.Where(c => c.id.Equals(rt.school)).SelectMany(z => z.period).Where(p => p.periodType.Equals(rt.periodType)).ToList();
  529. if (periods.Count > 0) {
  530. ArtPeriod artPeriod = new() {
  531. id = periods.FirstOrDefault().id,
  532. name = periods.FirstOrDefault().name
  533. };
  534. rt.period = artPeriod;
  535. }
  536. await client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(rt, rt.id, new PartitionKey(rt.code));
  537. });
  538. return Ok();
  539. }
  540. [ProducesDefaultResponseType]
  541. [HttpPost("find-score")]
  542. public async Task<IActionResult> FindScore(JsonElement element)
  543. {
  544. var client = _azureCosmos.GetCosmosClient();
  545. string sql = "SELECT * FROM c where c.pk = 'Art' and (c.startTime = 1678978800000 or c.startTime = 1678982400000) and c.endTime = 1684382400000";
  546. //string stusql = "SELECT * FROM c '20222021','20222022','20222023','20222024','20222025','20222026','20222027','20222028','20222029','20222030','20222031','20222032','20222033','20222034','20222035','20222036','20222037','20222038','20222039','20222040','20222041','20222042','20222043','20222044','20222101','20222102','20222103','20222104','20222105','20222106','20222107','20222108','20222109','20222110','20222111','20222112','20222113','20222114','20222115','20222116','20222117','20222118','20222119','20222120','20222121','20222122','20222123','20222124','20222125','20222126','20222127','20222128','20222129','20222130','20222131','20222132','20222133','20222134','20222135','20222136','20222137','20222138','20222139','20222140','20222141','20222142','20222143','20222144','20222145','20222146','20222147','20222201','20222202','20222203','20222204','20222205','20222206','20222207','20222208','20222209','20222210','20222211','20222212','20222213','20222214','20222215','20222216','20222217','20222218','20222219','20222220','20222221','20222222','20222223','20222224','20222226','20222227','20222228','20222229','20222230','20222231','20222232','20222233','20222234','20222235','20222236','20222237','20222238','20222239','20222240','20222241','20222242','20222243','20222244','20222245','20222301','20222302','20222303','20222304','20222305','20222306','20222307','20222308','20222309','20222310','20222311','20222312','20222313','20222314','20222315','20222316','20222317','20222318','20222319','20222320','20222321','20222322','20222323','20222324','20222325','20222326','20222327','20222328','20222329','20222330','20222331','20222332','20222333','20222334','20222335','20222336','20222337','20222338','20222339','20222340','20222341','20222342','20222343','20222344','20222345','20222346','20222347','20222401','20222402','20222403','20222404','20222405','20222406','20222407','20222408','20222409','20222410','20222411','20222412','20222413','20222414','20222415','20222416','20222417','20222418','20222419','20222420','20222421','20222422','20222423','20222424','20222425','20222426','20222427','20222428','20222429','20222430','20222431','20222432','20222433','20222434','20222435','20222436','20222437','20222438','20222439','20222440','20222441','20222442','20222443','20222444','20222445','20222447','20222501','20222502','20222503','20222504','20222505','20222506','20222508','20222509','20222510','20222511','20222512','20222513','20222514','20222515','20222516','20222517','20222518','20222519','20222520','20222521','20222522','20222523','20222525','20222526','20222527','20222528','20222529','20222530','20222531','20222532','20222533','20222534','20222535','20222536','20222537','20222538','20222539','20222540','20222541','20222542','20222543','20222544','20222545','20222546','20222547','20222601','20222602','20222603','20222604','20222605','20222606','20222607','20222608','20222609','20222610','20222611','20222612','20222613','20222614','20222615','20222616','20222617','20222618','20222619','20222620','20222621','20222622','20222623','20222624','20222625','20222626','20222627','20222628','20222629','20222630','20222631','20222632','20222633','20222634','20222635','20222636','20222637','20222639','20222640','20222641','20222642','20222643','20222645','20222646','20222647','20222648','20222649','20222701','20222702','20222703','20222704','20222705','20222706','20222707','20222708','20222709','20222710','20222711','20222712','20222713','20222714','20222715','20222716','20222717','20222718','20222719','20222720','20222721','20222722','20222723','20222724','20222725','20222727','20222728','20222729','20222730','20222731','20222732','20222733','20222734','20222735','20222736','20222737','20222738','20222739','20222740','20222741','20222742','20222743','20222744','20222745','20222746','20222747','20222748','20222749','20222801','20222804','20222805','20222806','20222807','20222808','20222809','20222810','20222811','20222812','20222813','20222814','20222815','20222816','20222817','20222819','20222821','20222822','20222823','20222824','20222825','20222826','20222827','20222828','20222829','20222830','20222831','20222834','20222835','20222836','20222837','20222838','20222839','20222840','20222841','20222842','20222843','20222844','20222845','20222846','20222847','20222848','20211901','20211902','20211903','20211904','20211905','20211906','20211908','20211909','20211910','20211911','20211912','20211913','20211914','20211915','20211916','20211917','20211918','20211919','20211920','20211921','20211922','20211923','20211924','20211925','20211926','20211927','20211928','20211929','20211930','20211931','20211932','20211933','20211934','20211935','20211936','20211937','20211938','20211939','20211940','20211941','20211942','20211943','20211944','20211945','20212001','20212002','20212003','20212004','20212005','20212006','20212007','20212008','20212009','20212010','20212011','20212012','20212013','20212014','20212015','20212016','20212017','20212018','20212019','20212020','20212021','20212022','20212023','20212024','20212025','20212026','20212027','20212028','20212029','20212030','20212031','20212032','20212033','20212034','20212035','20212036','20212037','20212038','20212039','20212040','20212041','20212042','20212043','20212044','20212045','20212046','20212047','20212048','20212101','20212102','20212103','20212104','20212105','20212106','20212107','20212108','20212109','20212110','20212111','20212112','20212113','20212114','20212115','20212116','20212117','20212118','20212119','20212120','20212121','20212123','20212124','20212125','20212126','20212127','20212128','20212129','20212130','20212131','20212132','20212133','20212134','20212135','20212136','20212137','20212138','20212139','20212140','20212141','20212142','20212143','20212144','20212145','20212146','20212147','20212148','20212149','20212150','20212151','20212201','20212202','20212203','20212204','20212205','20212206','20212207','20212208','20212209','20212210','20212211','20212212','20212213','20212214','20212215','20212216','20212217','20212218','20212219','20212220','20212221','20212222','20212223','20212224','20212225','20212226','20212227','20212228','20212229','20212230','20212231','20212232','20212233','20212234','20212235','20212236','20212237','20212238','20212239','20212240','20212241','20212242','20212243','20212244','20212245','20212246','20212247','20212248','20212249','20212250','20212301','20212302','20212303','20212304','20212305','20212306','20212307','20212308','20212309','20212310','20212311','20212312','20212313','20212314','20212315','20212317','20212318','20212319','20212320','20212322','20212323','20212324','20212325','20212326','20212327','20212328','20212329','20212330','20212331','20212332','20212333','20212334','20212335','20212336','20212337','20212338','20212339','20212340','20212341','20212342','20212343','20212344','20212345','20212346','20212401','20212402','20212403','20212404','20212405','20212406','20212407','20212408','20212409','20212410','20212411','20212413','20212414','20212415','20212416','20212417','20212418','20212419','20212420','20212421','20212422','20212423','20212424','20212425','20212426','20212427','20212428','20212429','20212430','20212431','20212432','20212433','20212434','20212435','20212436','20212437','20212438','20212439','20212440','20212441','20212442','20212443','20212444','20212445','20212446','20212447','20212501','20212502','20212503','20212504','20212505','20212506','20212507','20212508','20212509','20212510','20212511','20212512','20212513','20212514','20212515','20212516','20212517','20212518','20212519','20212520','20212521','20212522','20212523','20212524','20212525','20212526','20212527','20212528','20212529','20212530','20212531','20212532','20212533','20212534','20212535','20212536','20212537','20212538','20212539','20212540','20212541','20212542','20212543','20212544','20212545','20212548','20212549','20212601','20212602','20212603','20212604','20212605','20212606','20212607','20212608','20212609','20212610','20212611','20212612','20212613','20212614','20212615','20212616','20212617','20212618','20212619','20212620','20212621','20212622','20212623','20212624','20212625','20212626','20212627','20212628','20212629','20212630','20212631','20212632','20212633','20212634','20212635','20212636','20212637','20212638','20212639','20212640','20212641','20212642','20212643','20212644','20212701','20212702','20212703','20212704','20212705','20212706','20212707','20212708','20212709','20212710','20212711','20212712','20212713','20212714','20212715','20212716','20212717','20212718','20212719','20212720','20212721','20212722','20212723','20212724','20212725','20212726','20212727','20212728','20212730','20212731','20212732','20212733','20212734','20212735','20212736','20212737','20212738','20212739','20212740','20212741','20212742','20212743','20212744','20212745','20212746','20212747','20212748','20212749','20212801','20212802','20212803','20212804','20212805','20212806','20212807','20212808','20212809','20212810','20212811','20212812','20212813','20212814','20212815','20212816','20212818','20212819','20212820','20212821','20212822','20212823','20212824','20212825','20212826','20212827','20212828','20212829','20212830','20212831','20212832','20212833','20212834','20212835','20212836','20212837','20212838','20212839','20212840','20212841','20212842','20212843','20212844','20212845','20212846','20212847','20212848','20212849','20212901','20212902','20212903','20212904','20212905','20212906','20212907','20212908','20212909','20212910','20212911','20212912','20212913','20212914','20212915','20212916','20212917','20212918','20212919','20212920','20212921','20212922','20212923','20212924','20212925','20212927','20212928','20212929','20212930','20212931','20212932','20212933','20212934','20212935','20212936','20212937','20212938','20212939','20212940','20212941','20212942','20212943','20212947','20212948','20213001','20213002','20213003','20213004','20213005','20213006','20213007','20213008','20213009','20213010','20213011','20213012','20213013','20213014','20213015','20213016','20213017','20213018','20213019','20213020','20213021','20213022','20213023','20213024','20213025','20213026','20213027','20213028','20213029','20213030','20213031','20213032','20213033','20213034','20213035','20213036','20213037','20213038','20213039','20213040','20213041','20213042','20213043','20213044','20213045','20213046','20213047','20213048','20213049','20213050','20213101','20213102','20213103','20213104','20213105','20213106','20213107','20213108','20213109','20213110','20213111','20213112','20213113','20213114','20213115','20213116','20213117','20213118','20213119','20213120','20213121','20213122','20213123','20213124','20213125','20213126','20213127','20213128','20213129','20213130','20213131','20213132','20213133','20213134','20213135','20213136','20213137','20213138','20213139','20213140','20213142','20213143','20213144','20213145','20213146','20213147','20213148','20213149','20213152','20213201','20213202','20213203','20213204','20213205','20213206','20213207','20213208','20213209','20213210','20213211','20213212','20213213','20213214','20213215','20213216','20213217','20213218','20213219','20213220','20213221','20213222','20213223','20213224','20213225','20213226','20213227','20213228','20213229','20213230','20213231','20213232','20213233','20213234','20213235','20213236','20213237','20213238','20213239','20213240','20213241','20213242','20213243','20213244','20213245','20213246','20213247','20213248','20201901','20201902','20201903','20201904','20201905','20201906','20201907','20201908','20201909','20201910','20201911','20201912','20201913','20201914','20201915','20201916','20201917','20201918','20201919','20201920','20201921','20201922','20201923','20201924','20201925','20201926','20201927','20201928','20201929','20201930','20201931','20201932','20201933','20201934','20201935','20201936','20201937','20201938','20201939','20201940','20201941','20201942','20201943','20201944','20201945','20201946','20201947','20201949','20201951','20202001','20202002','20202003','20202004','20202005','20202006','20202007','20202008','20202010','20202011','20202012','20202013','20202014','20202016','20202017','20202018','20202019','20202020','20202021','20202022','20202023','20202024','20202025','20202026','20202027','20202028','20202029','20202030','20202031','20202032','20202033','20202034','20202035','20202036','20202037','20202038','20202039','20202040','20202041','20202042','20202043','20202044','20202045','20202046','20202047','20202101','20202102','20202104','20202105','20202106','20202107','20202108','20202109','20202110','20202111','20202112','20202113','20202114','20202115','20202116','20202117','20202118','20202119','20202120','20202121','20202122','20202125','20202126','20202127','20202128','20202129','20202130','20202131','20202132','20202133','20202134','20202135','20202136','20202137','20202138','20202139','20202140','20202141','20202142','20202143','20202144','20202145','20202147','20202148','20202201','20202202','20202203','20202204','20202205','20202206','20202207','20202208','20202209','20202210','20202211','20202212','20202213','20202214','20202215','20202216','20202217','20202218','20202219','20202220','20202221','20202222','20202223','20202224','20202225','20202226','20202227','20202228','20202229','20202230','20202231','20202232','20202233','20202234','20202235','20202236','20202237','20202238','20202239','20202240','20202241','20202242','20202243','20202244','20202245','20202246','20202248','20202301','20202302','20202303','20202304','20202305','20202306','20202307','20202308','20202309','20202310','20202312','20202313','20202314','20202315','20202316','20202317','20202318','20202319','20202320','20202321','20202322','20202323','20202324','20202325','20202326','20202327','20202328','20202329','20202330','20202331','20202332','20202333','20202334','20202335','20202337','20202338','20202339','20202340','20202341','20202342','20202343','20202344','20202345','20202346','20202401','20202402','20202403','20202404','20202405','20202406','20202407','20202408','20202409','20202410','20202412','20202413','20202414','20202415','20202416','20202417','20202418','20202419','20202420','20202421','20202422','20202423','20202424','20202425','20202426','20202427','20202428','20202429','20202430','20202431','20202432','20202433','20202434','20202435','20202436','20202437','20202438','20202439','20202440','20202441','20202442','20202443','20202444','20202445','20202446','20202447','20202448','20202449','20202450','20202501','20202502','20202503','20202504','20202506','20202507','20202508','20202509','20202510','20202511','20202512','20202513','20202514','20202515','20202516','20202517','20202518','20202519','20202520','20202521','20202522','20202523','20202524','20202525','20202526','20202527','20202528','20202529','20202530','20202531','20202532','20202533','20202534','20202535','20202536','20202537','20202538','20202539','20202540','20202541','20202542','20202543','20202544','20202545','20202546','20202601','20202602','20202603','20202604','20202605','20202606','20202607','20202608','20202609','20202610','20202611','20202612','20202613','20202614','20202615','20202616','20202617','20202618','20202619','20202620','20202621','20202622','20202623','20202624','20202625','20202626','20202627','20202628','20202629','20202630','20202631','20202633','20202634','20202635','20202636','20202637','20202638','20202639','20202640','20202641','20202642','20202643','20202644','20202645','20202701','20202702','20202703','20202704','20202705','20202706','20202707','20202708','20202709','20202710','20202711','20202712','20202713','20202714','20202715','20202716','20202717','20202718','20202719','20202720','20202721','20202722','20202723','20202724','20202725','20202726','20202727','20202728','20202729','20202730','20202731','20202732','20202733','20202734','20202735','20202736','20202737','20202738','20202739','20202740','20202741','20202742','20202743','20202747','20202801','20202802','20202803','20202804','20202805','20202806','20202807','20202808','20202809','20202810','20202811','20202812','20202813','20202814','20202815','20202816','20202817','20202818','20202819','20202820','20202821','20202822','20202823','20202824','20202825','20202826','20202827','20202828','20202829','20202830','20202831','20202832','20202833','20202834','20202835','20202836','20202837','20202838','20202839','20202840','20202841','20202842','20202843','20202844','20202845','20202846','20202847','20202901','20202902','20202903','20202904','20202905','20202906','20202907','20202908','20202909','20202910','20202911','20202912','20202913','20202914','20202915','20202916','20202917','20202918','20202919','20202920','20202921','20202922','20202923','20202924','20202925','20202926','20202927','20202928','20202929','20202930','20202931','20202932','20202933','20202934','20202935','20202936','20202937','20202938','20202939','20202940','20202941','20202942','20202943','20202944','20203001','20203002','20203003','20203004','20203005','20203006','20203007','20203008','20203009','20203010','20203011','20203012','20203013','20203014','20203015','20203016','20203017','20203018','20203019','20203020','20203021','20203022','20203023','20203024','20203025','20203026','20203027','20203028','20203029','20203030','20203031','20203032','20203033','20203034','20203035','20203036','20203037','20203039','20203040','20203041','20203042','20203043','20203044','20203046','20203101','20203102','20203103','20203104','20203105','20203106','20203107','20203108','20203109','20203110','20203111','20203112','20203113','20203114','20203115','20203116','20203117','20203118','20203119','20203120','20203121','20203122','20203123','20203124','20203125','20203126','20203127','20203128','20203129','20203130','20203131','20203132','20203133','20203134','20203135','20203136','20203137','20203138','20203139','20203140','20203141','20203142','20203143','20203144','20203145','20203146','20203201','20203202','20203203','20203204','20203205','20203207','20203208','20203209','20203210','20203211','20203212','20203213','20203214','20203215','20203216','20203217','20203218','20203220','20203221','20203222','20203223','20203224','20203225','20203226','20203227','20203228','20203229','20203230','20203231','20203232','20203233','20203234','20203235','20203236','20203237','20203238','20203239','20203240','20203241','20203242','20203243','20203244','20203245','20203246','20203247') and c.code='Base-fzpdzz' ";
  547. //string clasql = "SELECT * FROM c where c.no in('20221901','20221902','20221903','20221904','20221905','20221906','20221907','20221908','20221909','20221910','20221911','20221912','20221913','20221914','20221915','20221916','20221917','20221918','20221919','20221920','20221921','20221922','20221923','20221924','20221925','20221926','20221927','20221928','20221929','20221930','20221931','20221932','20221933','20221934','20221935','20221936','20221937','20221938','20221939','20221940','20221941','20221942','20221943','20221944','20221945','20221946','20221947','20221948','20221949','20221950','20222002','20222003','20222004','20222005','20222006','20222007','20222008','20222009','20222010','20222011','20222012','20222013','20222014','20222015','20222016','20222017','20222018','20222019','20222020','20222021','20222022','20222023','20222024','20222025','20222026','20222027','20222028','20222029','20222030','20222031','20222032','20222033','20222034','20222035','20222036','20222037','20222038','20222039','20222040','20222041','20222042','20222043','20222044','20222101','20222102','20222103','20222104','20222105','20222106','20222107','20222108','20222109','20222110','20222111','20222112','20222113','20222114','20222115','20222116','20222117','20222118','20222119','20222120','20222121','20222122','20222123','20222124','20222125','20222126','20222127','20222128','20222129','20222130','20222131','20222132','20222133','20222134','20222135','20222136','20222137','20222138','20222139','20222140','20222141','20222142','20222143','20222144','20222145','20222146','20222147','20222201','20222202','20222203','20222204','20222205','20222206','20222207','20222208','20222209','20222210','20222211','20222212','20222213','20222214','20222215','20222216','20222217','20222218','20222219','20222220','20222221','20222222','20222223','20222224','20222226','20222227','20222228','20222229','20222230','20222231','20222232','20222233','20222234','20222235','20222236','20222237','20222238','20222239','20222240','20222241','20222242','20222243','20222244','20222245','20222301','20222302','20222303','20222304','20222305','20222306','20222307','20222308','20222309','20222310','20222311','20222312','20222313','20222314','20222315','20222316','20222317','20222318','20222319','20222320','20222321','20222322','20222323','20222324','20222325','20222326','20222327','20222328','20222329','20222330','20222331','20222332','20222333','20222334','20222335','20222336','20222337','20222338','20222339','20222340','20222341','20222342','20222343','20222344','20222345','20222346','20222347','20222401','20222402','20222403','20222404','20222405','20222406','20222407','20222408','20222409','20222410','20222411','20222412','20222413','20222414','20222415','20222416','20222417','20222418','20222419','20222420','20222421','20222422','20222423','20222424','20222425','20222426','20222427','20222428','20222429','20222430','20222431','20222432','20222433','20222434','20222435','20222436','20222437','20222438','20222439','20222440','20222441','20222442','20222443','20222444','20222445','20222447','20222501','20222502','20222503','20222504','20222505','20222506','20222508','20222509','20222510','20222511','20222512','20222513','20222514','20222515','20222516','20222517','20222518','20222519','20222520','20222521','20222522','20222523','20222525','20222526','20222527','20222528','20222529','20222530','20222531','20222532','20222533','20222534','20222535','20222536','20222537','20222538','20222539','20222540','20222541','20222542','20222543','20222544','20222545','20222546','20222547','20222601','20222602','20222603','20222604','20222605','20222606','20222607','20222608','20222609','20222610','20222611','20222612','20222613','20222614','20222615','20222616','20222617','20222618','20222619','20222620','20222621','20222622','20222623','20222624','20222625','20222626','20222627','20222628','20222629','20222630','20222631','20222632','20222633','20222634','20222635','20222636','20222637','20222639','20222640','20222641','20222642','20222643','20222645','20222646','20222647','20222648','20222649','20222701','20222702','20222703','20222704','20222705','20222706','20222707','20222708','20222709','20222710','20222711','20222712','20222713','20222714','20222715','20222716','20222717','20222718','20222719','20222720','20222721','20222722','20222723','20222724','20222725','20222727','20222728','20222729','20222730','20222731','20222732','20222733','20222734','20222735','20222736','20222737','20222738','20222739','20222740','20222741','20222742','20222743','20222744','20222745','20222746','20222747','20222748','20222749','20222801','20222804','20222805','20222806','20222807','20222808','20222809','20222810','20222811','20222812','20222813','20222814','20222815','20222816','20222817','20222819','20222821','20222822','20222823','20222824','20222825','20222826','20222827','20222828','20222829','20222830','20222831','20222834','20222835','20222836','20222837','20222838','20222839','20222840','20222841','20222842','20222843','20222844','20222845','20222846','20222847','20222848','20211901','20211902','20211903','20211904','20211905','20211906','20211908','20211909','20211910','20211911','20211912','20211913','20211914','20211915','20211916','20211917','20211918','20211919','20211920','20211921','20211922','20211923','20211924','20211925','20211926','20211927','20211928','20211929','20211930','20211931','20211932','20211933','20211934','20211935','20211936','20211937','20211938','20211939','20211940','20211941','20211942','20211943','20211944','20211945','20212001','20212002','20212003','20212004','20212005','20212006','20212007','20212008','20212009','20212010','20212011','20212012','20212013','20212014','20212015','20212016','20212017','20212018','20212019','20212020','20212021','20212022','20212023','20212024','20212025','20212026','20212027','20212028','20212029','20212030','20212031','20212032','20212033','20212034','20212035','20212036','20212037','20212038','20212039','20212040','20212041','20212042','20212043','20212044','20212045','20212046','20212047','20212048','20212101','20212102','20212103','20212104','20212105','20212106','20212107','20212108','20212109','20212110','20212111','20212112','20212113','20212114','20212115','20212116','20212117','20212118','20212119','20212120','20212121','20212123','20212124','20212125','20212126','20212127','20212128','20212129','20212130','20212131','20212132','20212133','20212134','20212135','20212136','20212137','20212138','20212139','20212140','20212141','20212142','20212143','20212144','20212145','20212146','20212147','20212148','20212149','20212150','20212151','20212201','20212202','20212203','20212204','20212205','20212206','20212207','20212208','20212209','20212210','20212211','20212212','20212213','20212214','20212215','20212216','20212217','20212218','20212219','20212220','20212221','20212222','20212223','20212224','20212225','20212226','20212227','20212228','20212229','20212230','20212231','20212232','20212233','20212234','20212235','20212236','20212237','20212238','20212239','20212240','20212241','20212242','20212243','20212244','20212245','20212246','20212247','20212248','20212249','20212250','20212301','20212302','20212303','20212304','20212305','20212306','20212307','20212308','20212309','20212310','20212311','20212312','20212313','20212314','20212315','20212317','20212318','20212319','20212320','20212322','20212323','20212324','20212325','20212326','20212327','20212328','20212329','20212330','20212331','20212332','20212333','20212334','20212335','20212336','20212337','20212338','20212339','20212340','20212341','20212342','20212343','20212344','20212345','20212346','20212401','20212402','20212403','20212404','20212405','20212406','20212407','20212408','20212409','20212410','20212411','20212413','20212414','20212415','20212416','20212417','20212418','20212419','20212420','20212421','20212422','20212423','20212424','20212425','20212426','20212427','20212428','20212429','20212430','20212431','20212432','20212433','20212434','20212435','20212436','20212437','20212438','20212439','20212440','20212441','20212442','20212443','20212444','20212445','20212446','20212447','20212501','20212502','20212503','20212504','20212505','20212506','20212507','20212508','20212509','20212510','20212511','20212512','20212513','20212514','20212515','20212516','20212517','20212518','20212519','20212520','20212521','20212522','20212523','20212524','20212525','20212526','20212527','20212528','20212529','20212530','20212531','20212532','20212533','20212534','20212535','20212536','20212537','20212538','20212539','20212540','20212541','20212542','20212543','20212544','20212545','20212548','20212549','20212601','20212602','20212603','20212604','20212605','20212606','20212607','20212608','20212609','20212610','20212611','20212612','20212613','20212614','20212615','20212616','20212617','20212618','20212619','20212620','20212621','20212622','20212623','20212624','20212625','20212626','20212627','20212628','20212629','20212630','20212631','20212632','20212633','20212634','20212635','20212636','20212637','20212638','20212639','20212640','20212641','20212642','20212643','20212644','20212701','20212702','20212703','20212704','20212705','20212706','20212707','20212708','20212709','20212710','20212711','20212712','20212713','20212714','20212715','20212716','20212717','20212718','20212719','20212720','20212721','20212722','20212723','20212724','20212725','20212726','20212727','20212728','20212730','20212731','20212732','20212733','20212734','20212735','20212736','20212737','20212738','20212739','20212740','20212741','20212742','20212743','20212744','20212745','20212746','20212747','20212748','20212749','20212801','20212802','20212803','20212804','20212805','20212806','20212807','20212808','20212809','20212810','20212811','20212812','20212813','20212814','20212815','20212816','20212818','20212819','20212820','20212821','20212822','20212823','20212824','20212825','20212826','20212827','20212828','20212829','20212830','20212831','20212832','20212833','20212834','20212835','20212836','20212837','20212838','20212839','20212840','20212841','20212842','20212843','20212844','20212845','20212846','20212847','20212848','20212849','20212901','20212902','20212903','20212904','20212905','20212906','20212907','20212908','20212909','20212910','20212911','20212912','20212913','20212914','20212915','20212916','20212917','20212918','20212919','20212920','20212921','20212922','20212923','20212924','20212925','20212927','20212928','20212929','20212930','20212931','20212932','20212933','20212934','20212935','20212936','20212937','20212938','20212939','20212940','20212941','20212942','20212943','20212947','20212948','20213001','20213002','20213003','20213004','20213005','20213006','20213007','20213008','20213009','20213010','20213011','20213012','20213013','20213014','20213015','20213016','20213017','20213018','20213019','20213020','20213021','20213022','20213023','20213024','20213025','20213026','20213027','20213028','20213029','20213030','20213031','20213032','20213033','20213034','20213035','20213036','20213037','20213038','20213039','20213040','20213041','20213042','20213043','20213044','20213045','20213046','20213047','20213048','20213049','20213050','20213101','20213102','20213103','20213104','20213105','20213106','20213107','20213108','20213109','20213110','20213111','20213112','20213113','20213114','20213115','20213116','20213117','20213118','20213119','20213120','20213121','20213122','20213123','20213124','20213125','20213126','20213127','20213128','20213129','20213130','20213131','20213132','20213133','20213134','20213135','20213136','20213137','20213138','20213139','20213140','20213142','20213143','20213144','20213145','20213146','20213147','20213148','20213149','20213152','20213201','20213202','20213203','20213204','20213205','20213206','20213207','20213208','20213209','20213210','20213211','20213212','20213213','20213214','20213215','20213216','20213217','20213218','20213219','20213220','20213221','20213222','20213223','20213224','20213225','20213226','20213227','20213228','20213229','20213230','20213231','20213232','20213233','20213234','20213235','20213236','20213237','20213238','20213239','20213240','20213241','20213242','20213243','20213244','20213245','20213246','20213247','20213248','20201901','20201902','20201903','20201904','20201905','20201906','20201907','20201908','20201909','20201910','20201911','20201912','20201913','20201914','20201915','20201916','20201917','20201918','20201919','20201920','20201921','20201922','20201923','20201924','20201925','20201926','20201927','20201928','20201929','20201930','20201931','20201932','20201933','20201934','20201935','20201936','20201937','20201938','20201939','20201940','20201941','20201942','20201943','20201944','20201945','20201946','20201947','20201949','20201951','20202001','20202002','20202003','20202004','20202005','20202006','20202007','20202008','20202010','20202011','20202012','20202013','20202014','20202016','20202017','20202018','20202019','20202020','20202021','20202022','20202023','20202024','20202025','20202026','20202027','20202028','20202029','20202030','20202031','20202032','20202033','20202034','20202035','20202036','20202037','20202038','20202039','20202040','20202041','20202042','20202043','20202044','20202045','20202046','20202047','20202101','20202102','20202104','20202105','20202106','20202107','20202108','20202109','20202110','20202111','20202112','20202113','20202114','20202115','20202116','20202117','20202118','20202119','20202120','20202121','20202122','20202125','20202126','20202127','20202128','20202129','20202130','20202131','20202132','20202133','20202134','20202135','20202136','20202137','20202138','20202139','20202140','20202141','20202142','20202143','20202144','20202145','20202147','20202148','20202201','20202202','20202203','20202204','20202205','20202206','20202207','20202208','20202209','20202210','20202211','20202212','20202213','20202214','20202215','20202216','20202217','20202218','20202219','20202220','20202221','20202222','20202223','20202224','20202225','20202226','20202227','20202228','20202229','20202230','20202231','20202232','20202233','20202234','20202235','20202236','20202237','20202238','20202239','20202240','20202241','20202242','20202243','20202244','20202245','20202246','20202248','20202301','20202302','20202303','20202304','20202305','20202306','20202307','20202308','20202309','20202310','20202312','20202313','20202314','20202315','20202316','20202317','20202318','20202319','20202320','20202321','20202322','20202323','20202324','20202325','20202326','20202327','20202328','20202329','20202330','20202331','20202332','20202333','20202334','20202335','20202337','20202338','20202339','20202340','20202341','20202342','20202343','20202344','20202345','20202346','20202401','20202402','20202403','20202404','20202405','20202406','20202407','20202408','20202409','20202410','20202412','20202413','20202414','20202415','20202416','20202417','20202418','20202419','20202420','20202421','20202422','20202423','20202424','20202425','20202426','20202427','20202428','20202429','20202430','20202431','20202432','20202433','20202434','20202435','20202436','20202437','20202438','20202439','20202440','20202441','20202442','20202443','20202444','20202445','20202446','20202447','20202448','20202449','20202450','20202501','20202502','20202503','20202504','20202506','20202507','20202508','20202509','20202510','20202511','20202512','20202513','20202514','20202515','20202516','20202517','20202518','20202519','20202520','20202521','20202522','20202523','20202524','20202525','20202526','20202527','20202528','20202529','20202530','20202531','20202532','20202533','20202534','20202535','20202536','20202537','20202538','20202539','20202540','20202541','20202542','20202543','20202544','20202545','20202546','20202601','20202602','20202603','20202604','20202605','20202606','20202607','20202608','20202609','20202610','20202611','20202612','20202613','20202614','20202615','20202616','20202617','20202618','20202619','20202620','20202621','20202622','20202623','20202624','20202625','20202626','20202627','20202628','20202629','20202630','20202631','20202633','20202634','20202635','20202636','20202637','20202638','20202639','20202640','20202641','20202642','20202643','20202644','20202645','20202701','20202702','20202703','20202704','20202705','20202706','20202707','20202708','20202709','20202710','20202711','20202712','20202713','20202714','20202715','20202716','20202717','20202718','20202719','20202720','20202721','20202722','20202723','20202724','20202725','20202726','20202727','20202728','20202729','20202730','20202731','20202732','20202733','20202734','20202735','20202736','20202737','20202738','20202739','20202740','20202741','20202742','20202743','20202747','20202801','20202802','20202803','20202804','20202805','20202806','20202807','20202808','20202809','20202810','20202811','20202812','20202813','20202814','20202815','20202816','20202817','20202818','20202819','20202820','20202821','20202822','20202823','20202824','20202825','20202826','20202827','20202828','20202829','20202830','20202831','20202832','20202833','20202834','20202835','20202836','20202837','20202838','20202839','20202840','20202841','20202842','20202843','20202844','20202845','20202846','20202847','20202901','20202902','20202903','20202904','20202905','20202906','20202907','20202908','20202909','20202910','20202911','20202912','20202913','20202914','20202915','20202916','20202917','20202918','20202919','20202920','20202921','20202922','20202923','20202924','20202925','20202926','20202927','20202928','20202929','20202930','20202931','20202932','20202933','20202934','20202935','20202936','20202937','20202938','20202939','20202940','20202941','20202942','20202943','20202944','20203001','20203002','20203003','20203004','20203005','20203006','20203007','20203008','20203009','20203010','20203011','20203012','20203013','20203014','20203015','20203016','20203017','20203018','20203019','20203020','20203021','20203022','20203023','20203024','20203025','20203026','20203027','20203028','20203029','20203030','20203031','20203032','20203033','20203034','20203035','20203036','20203037','20203039','20203040','20203041','20203042','20203043','20203044','20203046','20203101','20203102','20203103','20203104','20203105','20203106','20203107','20203108','20203109','20203110','20203111','20203112','20203113','20203114','20203115','20203116','20203117','20203118','20203119','20203120','20203121','20203122','20203123','20203124','20203125','20203126','20203127','20203128','20203129','20203130','20203131','20203132','20203133','20203134','20203135','20203136','20203137','20203138','20203139','20203140','20203141','20203142','20203143','20203144','20203145','20203146','20203201','20203202','20203203','20203204','20203205','20203207','20203208','20203209','20203210','20203211','20203212','20203213','20203214','20203215','20203216','20203217','20203218','20203220','20203221','20203222','20203223','20203224','20203225','20203226','20203227','20203228','20203229','20203230','20203231','20203232','20203233','20203234','20203235','20203236','20203237','20203238','20203239','20203240','20203241','20203242','20203243','20203244','20203245','20203246','20203247') and c.code='Class-fzpdzz' ";
  548. List<ArtEvaluation> infos = new();
  549. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ArtEvaluation>(queryText: sql))
  550. {
  551. infos.Add(item);
  552. }
  553. //List<Task<ItemResponse<ExamInfo>>> tasks = new List<Task<ItemResponse<ExamInfo>>>();
  554. List<string> ids = infos.SelectMany(x => x.settings).SelectMany(c => c.task).Where(z => z.type == 1).Select(n => n.acId).ToList();
  555. List<ExamClassResult> examClassResults = new List<ExamClassResult>();
  556. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIteratorSql(
  557. queryText: $"select value(c) from c where c.pk = 'ExamClassResult' and c.examId in ({string.Join(",", ids.Select(o => $"'{o}'"))})"))
  558. {
  559. using var json = await JsonDocument.ParseAsync(item.Content);
  560. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  561. {
  562. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  563. {
  564. examClassResults.Add(obj.ToObject<ExamClassResult>());
  565. }
  566. }
  567. }
  568. //List<(string school, string name,string subject, List<(string stuId, List<double> es, double score)> values)> students = new();
  569. List<(string stuId, string school, string name, string subject, List<double> es, double score)> stuInfo = new();
  570. foreach (ExamClassResult classResult in examClassResults)
  571. {
  572. //List<(string stuId, List<double> es,double score)> stuInfo = new();
  573. foreach (var stu in classResult.studentIds) {
  574. stuInfo.Add((stu, classResult.school,classResult.info.name,classResult.subjectId,classResult.studentScores[classResult.studentIds.IndexOf(stu)], classResult.sum[classResult.studentIds.IndexOf(stu)]));
  575. }
  576. //students.Add((classResult.school,classResult.info.name,classResult.subjectId, stuInfo));
  577. }
  578. var stus = stuInfo.Select(x => new {
  579. x.stuId,
  580. x.school,
  581. x.name,
  582. x.subject,
  583. x.es,
  584. x.score
  585. //score = x.values.Select(c => new { c.stuId,c.es,c.score})
  586. });
  587. return Ok(stus);
  588. }
  589. [ProducesDefaultResponseType]
  590. [HttpPost("find-art-result")]
  591. public async Task<IActionResult> FindArtResult(JsonElement element)
  592. {
  593. var client = _azureCosmos.GetCosmosClient();
  594. string sql = "SELECT * FROM c where c.pk = 'Art' and (c.startTime = 1678978800000 or c.startTime = 1678982400000) and c.endTime = 1684382400000";
  595. //string stusql = "SELECT * FROM c '20222021','20222022','20222023','20222024','20222025','20222026','20222027','20222028','20222029','20222030','20222031','20222032','20222033','20222034','20222035','20222036','20222037','20222038','20222039','20222040','20222041','20222042','20222043','20222044','20222101','20222102','20222103','20222104','20222105','20222106','20222107','20222108','20222109','20222110','20222111','20222112','20222113','20222114','20222115','20222116','20222117','20222118','20222119','20222120','20222121','20222122','20222123','20222124','20222125','20222126','20222127','20222128','20222129','20222130','20222131','20222132','20222133','20222134','20222135','20222136','20222137','20222138','20222139','20222140','20222141','20222142','20222143','20222144','20222145','20222146','20222147','20222201','20222202','20222203','20222204','20222205','20222206','20222207','20222208','20222209','20222210','20222211','20222212','20222213','20222214','20222215','20222216','20222217','20222218','20222219','20222220','20222221','20222222','20222223','20222224','20222226','20222227','20222228','20222229','20222230','20222231','20222232','20222233','20222234','20222235','20222236','20222237','20222238','20222239','20222240','20222241','20222242','20222243','20222244','20222245','20222301','20222302','20222303','20222304','20222305','20222306','20222307','20222308','20222309','20222310','20222311','20222312','20222313','20222314','20222315','20222316','20222317','20222318','20222319','20222320','20222321','20222322','20222323','20222324','20222325','20222326','20222327','20222328','20222329','20222330','20222331','20222332','20222333','20222334','20222335','20222336','20222337','20222338','20222339','20222340','20222341','20222342','20222343','20222344','20222345','20222346','20222347','20222401','20222402','20222403','20222404','20222405','20222406','20222407','20222408','20222409','20222410','20222411','20222412','20222413','20222414','20222415','20222416','20222417','20222418','20222419','20222420','20222421','20222422','20222423','20222424','20222425','20222426','20222427','20222428','20222429','20222430','20222431','20222432','20222433','20222434','20222435','20222436','20222437','20222438','20222439','20222440','20222441','20222442','20222443','20222444','20222445','20222447','20222501','20222502','20222503','20222504','20222505','20222506','20222508','20222509','20222510','20222511','20222512','20222513','20222514','20222515','20222516','20222517','20222518','20222519','20222520','20222521','20222522','20222523','20222525','20222526','20222527','20222528','20222529','20222530','20222531','20222532','20222533','20222534','20222535','20222536','20222537','20222538','20222539','20222540','20222541','20222542','20222543','20222544','20222545','20222546','20222547','20222601','20222602','20222603','20222604','20222605','20222606','20222607','20222608','20222609','20222610','20222611','20222612','20222613','20222614','20222615','20222616','20222617','20222618','20222619','20222620','20222621','20222622','20222623','20222624','20222625','20222626','20222627','20222628','20222629','20222630','20222631','20222632','20222633','20222634','20222635','20222636','20222637','20222639','20222640','20222641','20222642','20222643','20222645','20222646','20222647','20222648','20222649','20222701','20222702','20222703','20222704','20222705','20222706','20222707','20222708','20222709','20222710','20222711','20222712','20222713','20222714','20222715','20222716','20222717','20222718','20222719','20222720','20222721','20222722','20222723','20222724','20222725','20222727','20222728','20222729','20222730','20222731','20222732','20222733','20222734','20222735','20222736','20222737','20222738','20222739','20222740','20222741','20222742','20222743','20222744','20222745','20222746','20222747','20222748','20222749','20222801','20222804','20222805','20222806','20222807','20222808','20222809','20222810','20222811','20222812','20222813','20222814','20222815','20222816','20222817','20222819','20222821','20222822','20222823','20222824','20222825','20222826','20222827','20222828','20222829','20222830','20222831','20222834','20222835','20222836','20222837','20222838','20222839','20222840','20222841','20222842','20222843','20222844','20222845','20222846','20222847','20222848','20211901','20211902','20211903','20211904','20211905','20211906','20211908','20211909','20211910','20211911','20211912','20211913','20211914','20211915','20211916','20211917','20211918','20211919','20211920','20211921','20211922','20211923','20211924','20211925','20211926','20211927','20211928','20211929','20211930','20211931','20211932','20211933','20211934','20211935','20211936','20211937','20211938','20211939','20211940','20211941','20211942','20211943','20211944','20211945','20212001','20212002','20212003','20212004','20212005','20212006','20212007','20212008','20212009','20212010','20212011','20212012','20212013','20212014','20212015','20212016','20212017','20212018','20212019','20212020','20212021','20212022','20212023','20212024','20212025','20212026','20212027','20212028','20212029','20212030','20212031','20212032','20212033','20212034','20212035','20212036','20212037','20212038','20212039','20212040','20212041','20212042','20212043','20212044','20212045','20212046','20212047','20212048','20212101','20212102','20212103','20212104','20212105','20212106','20212107','20212108','20212109','20212110','20212111','20212112','20212113','20212114','20212115','20212116','20212117','20212118','20212119','20212120','20212121','20212123','20212124','20212125','20212126','20212127','20212128','20212129','20212130','20212131','20212132','20212133','20212134','20212135','20212136','20212137','20212138','20212139','20212140','20212141','20212142','20212143','20212144','20212145','20212146','20212147','20212148','20212149','20212150','20212151','20212201','20212202','20212203','20212204','20212205','20212206','20212207','20212208','20212209','20212210','20212211','20212212','20212213','20212214','20212215','20212216','20212217','20212218','20212219','20212220','20212221','20212222','20212223','20212224','20212225','20212226','20212227','20212228','20212229','20212230','20212231','20212232','20212233','20212234','20212235','20212236','20212237','20212238','20212239','20212240','20212241','20212242','20212243','20212244','20212245','20212246','20212247','20212248','20212249','20212250','20212301','20212302','20212303','20212304','20212305','20212306','20212307','20212308','20212309','20212310','20212311','20212312','20212313','20212314','20212315','20212317','20212318','20212319','20212320','20212322','20212323','20212324','20212325','20212326','20212327','20212328','20212329','20212330','20212331','20212332','20212333','20212334','20212335','20212336','20212337','20212338','20212339','20212340','20212341','20212342','20212343','20212344','20212345','20212346','20212401','20212402','20212403','20212404','20212405','20212406','20212407','20212408','20212409','20212410','20212411','20212413','20212414','20212415','20212416','20212417','20212418','20212419','20212420','20212421','20212422','20212423','20212424','20212425','20212426','20212427','20212428','20212429','20212430','20212431','20212432','20212433','20212434','20212435','20212436','20212437','20212438','20212439','20212440','20212441','20212442','20212443','20212444','20212445','20212446','20212447','20212501','20212502','20212503','20212504','20212505','20212506','20212507','20212508','20212509','20212510','20212511','20212512','20212513','20212514','20212515','20212516','20212517','20212518','20212519','20212520','20212521','20212522','20212523','20212524','20212525','20212526','20212527','20212528','20212529','20212530','20212531','20212532','20212533','20212534','20212535','20212536','20212537','20212538','20212539','20212540','20212541','20212542','20212543','20212544','20212545','20212548','20212549','20212601','20212602','20212603','20212604','20212605','20212606','20212607','20212608','20212609','20212610','20212611','20212612','20212613','20212614','20212615','20212616','20212617','20212618','20212619','20212620','20212621','20212622','20212623','20212624','20212625','20212626','20212627','20212628','20212629','20212630','20212631','20212632','20212633','20212634','20212635','20212636','20212637','20212638','20212639','20212640','20212641','20212642','20212643','20212644','20212701','20212702','20212703','20212704','20212705','20212706','20212707','20212708','20212709','20212710','20212711','20212712','20212713','20212714','20212715','20212716','20212717','20212718','20212719','20212720','20212721','20212722','20212723','20212724','20212725','20212726','20212727','20212728','20212730','20212731','20212732','20212733','20212734','20212735','20212736','20212737','20212738','20212739','20212740','20212741','20212742','20212743','20212744','20212745','20212746','20212747','20212748','20212749','20212801','20212802','20212803','20212804','20212805','20212806','20212807','20212808','20212809','20212810','20212811','20212812','20212813','20212814','20212815','20212816','20212818','20212819','20212820','20212821','20212822','20212823','20212824','20212825','20212826','20212827','20212828','20212829','20212830','20212831','20212832','20212833','20212834','20212835','20212836','20212837','20212838','20212839','20212840','20212841','20212842','20212843','20212844','20212845','20212846','20212847','20212848','20212849','20212901','20212902','20212903','20212904','20212905','20212906','20212907','20212908','20212909','20212910','20212911','20212912','20212913','20212914','20212915','20212916','20212917','20212918','20212919','20212920','20212921','20212922','20212923','20212924','20212925','20212927','20212928','20212929','20212930','20212931','20212932','20212933','20212934','20212935','20212936','20212937','20212938','20212939','20212940','20212941','20212942','20212943','20212947','20212948','20213001','20213002','20213003','20213004','20213005','20213006','20213007','20213008','20213009','20213010','20213011','20213012','20213013','20213014','20213015','20213016','20213017','20213018','20213019','20213020','20213021','20213022','20213023','20213024','20213025','20213026','20213027','20213028','20213029','20213030','20213031','20213032','20213033','20213034','20213035','20213036','20213037','20213038','20213039','20213040','20213041','20213042','20213043','20213044','20213045','20213046','20213047','20213048','20213049','20213050','20213101','20213102','20213103','20213104','20213105','20213106','20213107','20213108','20213109','20213110','20213111','20213112','20213113','20213114','20213115','20213116','20213117','20213118','20213119','20213120','20213121','20213122','20213123','20213124','20213125','20213126','20213127','20213128','20213129','20213130','20213131','20213132','20213133','20213134','20213135','20213136','20213137','20213138','20213139','20213140','20213142','20213143','20213144','20213145','20213146','20213147','20213148','20213149','20213152','20213201','20213202','20213203','20213204','20213205','20213206','20213207','20213208','20213209','20213210','20213211','20213212','20213213','20213214','20213215','20213216','20213217','20213218','20213219','20213220','20213221','20213222','20213223','20213224','20213225','20213226','20213227','20213228','20213229','20213230','20213231','20213232','20213233','20213234','20213235','20213236','20213237','20213238','20213239','20213240','20213241','20213242','20213243','20213244','20213245','20213246','20213247','20213248','20201901','20201902','20201903','20201904','20201905','20201906','20201907','20201908','20201909','20201910','20201911','20201912','20201913','20201914','20201915','20201916','20201917','20201918','20201919','20201920','20201921','20201922','20201923','20201924','20201925','20201926','20201927','20201928','20201929','20201930','20201931','20201932','20201933','20201934','20201935','20201936','20201937','20201938','20201939','20201940','20201941','20201942','20201943','20201944','20201945','20201946','20201947','20201949','20201951','20202001','20202002','20202003','20202004','20202005','20202006','20202007','20202008','20202010','20202011','20202012','20202013','20202014','20202016','20202017','20202018','20202019','20202020','20202021','20202022','20202023','20202024','20202025','20202026','20202027','20202028','20202029','20202030','20202031','20202032','20202033','20202034','20202035','20202036','20202037','20202038','20202039','20202040','20202041','20202042','20202043','20202044','20202045','20202046','20202047','20202101','20202102','20202104','20202105','20202106','20202107','20202108','20202109','20202110','20202111','20202112','20202113','20202114','20202115','20202116','20202117','20202118','20202119','20202120','20202121','20202122','20202125','20202126','20202127','20202128','20202129','20202130','20202131','20202132','20202133','20202134','20202135','20202136','20202137','20202138','20202139','20202140','20202141','20202142','20202143','20202144','20202145','20202147','20202148','20202201','20202202','20202203','20202204','20202205','20202206','20202207','20202208','20202209','20202210','20202211','20202212','20202213','20202214','20202215','20202216','20202217','20202218','20202219','20202220','20202221','20202222','20202223','20202224','20202225','20202226','20202227','20202228','20202229','20202230','20202231','20202232','20202233','20202234','20202235','20202236','20202237','20202238','20202239','20202240','20202241','20202242','20202243','20202244','20202245','20202246','20202248','20202301','20202302','20202303','20202304','20202305','20202306','20202307','20202308','20202309','20202310','20202312','20202313','20202314','20202315','20202316','20202317','20202318','20202319','20202320','20202321','20202322','20202323','20202324','20202325','20202326','20202327','20202328','20202329','20202330','20202331','20202332','20202333','20202334','20202335','20202337','20202338','20202339','20202340','20202341','20202342','20202343','20202344','20202345','20202346','20202401','20202402','20202403','20202404','20202405','20202406','20202407','20202408','20202409','20202410','20202412','20202413','20202414','20202415','20202416','20202417','20202418','20202419','20202420','20202421','20202422','20202423','20202424','20202425','20202426','20202427','20202428','20202429','20202430','20202431','20202432','20202433','20202434','20202435','20202436','20202437','20202438','20202439','20202440','20202441','20202442','20202443','20202444','20202445','20202446','20202447','20202448','20202449','20202450','20202501','20202502','20202503','20202504','20202506','20202507','20202508','20202509','20202510','20202511','20202512','20202513','20202514','20202515','20202516','20202517','20202518','20202519','20202520','20202521','20202522','20202523','20202524','20202525','20202526','20202527','20202528','20202529','20202530','20202531','20202532','20202533','20202534','20202535','20202536','20202537','20202538','20202539','20202540','20202541','20202542','20202543','20202544','20202545','20202546','20202601','20202602','20202603','20202604','20202605','20202606','20202607','20202608','20202609','20202610','20202611','20202612','20202613','20202614','20202615','20202616','20202617','20202618','20202619','20202620','20202621','20202622','20202623','20202624','20202625','20202626','20202627','20202628','20202629','20202630','20202631','20202633','20202634','20202635','20202636','20202637','20202638','20202639','20202640','20202641','20202642','20202643','20202644','20202645','20202701','20202702','20202703','20202704','20202705','20202706','20202707','20202708','20202709','20202710','20202711','20202712','20202713','20202714','20202715','20202716','20202717','20202718','20202719','20202720','20202721','20202722','20202723','20202724','20202725','20202726','20202727','20202728','20202729','20202730','20202731','20202732','20202733','20202734','20202735','20202736','20202737','20202738','20202739','20202740','20202741','20202742','20202743','20202747','20202801','20202802','20202803','20202804','20202805','20202806','20202807','20202808','20202809','20202810','20202811','20202812','20202813','20202814','20202815','20202816','20202817','20202818','20202819','20202820','20202821','20202822','20202823','20202824','20202825','20202826','20202827','20202828','20202829','20202830','20202831','20202832','20202833','20202834','20202835','20202836','20202837','20202838','20202839','20202840','20202841','20202842','20202843','20202844','20202845','20202846','20202847','20202901','20202902','20202903','20202904','20202905','20202906','20202907','20202908','20202909','20202910','20202911','20202912','20202913','20202914','20202915','20202916','20202917','20202918','20202919','20202920','20202921','20202922','20202923','20202924','20202925','20202926','20202927','20202928','20202929','20202930','20202931','20202932','20202933','20202934','20202935','20202936','20202937','20202938','20202939','20202940','20202941','20202942','20202943','20202944','20203001','20203002','20203003','20203004','20203005','20203006','20203007','20203008','20203009','20203010','20203011','20203012','20203013','20203014','20203015','20203016','20203017','20203018','20203019','20203020','20203021','20203022','20203023','20203024','20203025','20203026','20203027','20203028','20203029','20203030','20203031','20203032','20203033','20203034','20203035','20203036','20203037','20203039','20203040','20203041','20203042','20203043','20203044','20203046','20203101','20203102','20203103','20203104','20203105','20203106','20203107','20203108','20203109','20203110','20203111','20203112','20203113','20203114','20203115','20203116','20203117','20203118','20203119','20203120','20203121','20203122','20203123','20203124','20203125','20203126','20203127','20203128','20203129','20203130','20203131','20203132','20203133','20203134','20203135','20203136','20203137','20203138','20203139','20203140','20203141','20203142','20203143','20203144','20203145','20203146','20203201','20203202','20203203','20203204','20203205','20203207','20203208','20203209','20203210','20203211','20203212','20203213','20203214','20203215','20203216','20203217','20203218','20203220','20203221','20203222','20203223','20203224','20203225','20203226','20203227','20203228','20203229','20203230','20203231','20203232','20203233','20203234','20203235','20203236','20203237','20203238','20203239','20203240','20203241','20203242','20203243','20203244','20203245','20203246','20203247') and c.code='Base-fzpdzz' ";
  596. //string clasql = "SELECT * FROM c where c.no in('20221901','20221902','20221903','20221904','20221905','20221906','20221907','20221908','20221909','20221910','20221911','20221912','20221913','20221914','20221915','20221916','20221917','20221918','20221919','20221920','20221921','20221922','20221923','20221924','20221925','20221926','20221927','20221928','20221929','20221930','20221931','20221932','20221933','20221934','20221935','20221936','20221937','20221938','20221939','20221940','20221941','20221942','20221943','20221944','20221945','20221946','20221947','20221948','20221949','20221950','20222002','20222003','20222004','20222005','20222006','20222007','20222008','20222009','20222010','20222011','20222012','20222013','20222014','20222015','20222016','20222017','20222018','20222019','20222020','20222021','20222022','20222023','20222024','20222025','20222026','20222027','20222028','20222029','20222030','20222031','20222032','20222033','20222034','20222035','20222036','20222037','20222038','20222039','20222040','20222041','20222042','20222043','20222044','20222101','20222102','20222103','20222104','20222105','20222106','20222107','20222108','20222109','20222110','20222111','20222112','20222113','20222114','20222115','20222116','20222117','20222118','20222119','20222120','20222121','20222122','20222123','20222124','20222125','20222126','20222127','20222128','20222129','20222130','20222131','20222132','20222133','20222134','20222135','20222136','20222137','20222138','20222139','20222140','20222141','20222142','20222143','20222144','20222145','20222146','20222147','20222201','20222202','20222203','20222204','20222205','20222206','20222207','20222208','20222209','20222210','20222211','20222212','20222213','20222214','20222215','20222216','20222217','20222218','20222219','20222220','20222221','20222222','20222223','20222224','20222226','20222227','20222228','20222229','20222230','20222231','20222232','20222233','20222234','20222235','20222236','20222237','20222238','20222239','20222240','20222241','20222242','20222243','20222244','20222245','20222301','20222302','20222303','20222304','20222305','20222306','20222307','20222308','20222309','20222310','20222311','20222312','20222313','20222314','20222315','20222316','20222317','20222318','20222319','20222320','20222321','20222322','20222323','20222324','20222325','20222326','20222327','20222328','20222329','20222330','20222331','20222332','20222333','20222334','20222335','20222336','20222337','20222338','20222339','20222340','20222341','20222342','20222343','20222344','20222345','20222346','20222347','20222401','20222402','20222403','20222404','20222405','20222406','20222407','20222408','20222409','20222410','20222411','20222412','20222413','20222414','20222415','20222416','20222417','20222418','20222419','20222420','20222421','20222422','20222423','20222424','20222425','20222426','20222427','20222428','20222429','20222430','20222431','20222432','20222433','20222434','20222435','20222436','20222437','20222438','20222439','20222440','20222441','20222442','20222443','20222444','20222445','20222447','20222501','20222502','20222503','20222504','20222505','20222506','20222508','20222509','20222510','20222511','20222512','20222513','20222514','20222515','20222516','20222517','20222518','20222519','20222520','20222521','20222522','20222523','20222525','20222526','20222527','20222528','20222529','20222530','20222531','20222532','20222533','20222534','20222535','20222536','20222537','20222538','20222539','20222540','20222541','20222542','20222543','20222544','20222545','20222546','20222547','20222601','20222602','20222603','20222604','20222605','20222606','20222607','20222608','20222609','20222610','20222611','20222612','20222613','20222614','20222615','20222616','20222617','20222618','20222619','20222620','20222621','20222622','20222623','20222624','20222625','20222626','20222627','20222628','20222629','20222630','20222631','20222632','20222633','20222634','20222635','20222636','20222637','20222639','20222640','20222641','20222642','20222643','20222645','20222646','20222647','20222648','20222649','20222701','20222702','20222703','20222704','20222705','20222706','20222707','20222708','20222709','20222710','20222711','20222712','20222713','20222714','20222715','20222716','20222717','20222718','20222719','20222720','20222721','20222722','20222723','20222724','20222725','20222727','20222728','20222729','20222730','20222731','20222732','20222733','20222734','20222735','20222736','20222737','20222738','20222739','20222740','20222741','20222742','20222743','20222744','20222745','20222746','20222747','20222748','20222749','20222801','20222804','20222805','20222806','20222807','20222808','20222809','20222810','20222811','20222812','20222813','20222814','20222815','20222816','20222817','20222819','20222821','20222822','20222823','20222824','20222825','20222826','20222827','20222828','20222829','20222830','20222831','20222834','20222835','20222836','20222837','20222838','20222839','20222840','20222841','20222842','20222843','20222844','20222845','20222846','20222847','20222848','20211901','20211902','20211903','20211904','20211905','20211906','20211908','20211909','20211910','20211911','20211912','20211913','20211914','20211915','20211916','20211917','20211918','20211919','20211920','20211921','20211922','20211923','20211924','20211925','20211926','20211927','20211928','20211929','20211930','20211931','20211932','20211933','20211934','20211935','20211936','20211937','20211938','20211939','20211940','20211941','20211942','20211943','20211944','20211945','20212001','20212002','20212003','20212004','20212005','20212006','20212007','20212008','20212009','20212010','20212011','20212012','20212013','20212014','20212015','20212016','20212017','20212018','20212019','20212020','20212021','20212022','20212023','20212024','20212025','20212026','20212027','20212028','20212029','20212030','20212031','20212032','20212033','20212034','20212035','20212036','20212037','20212038','20212039','20212040','20212041','20212042','20212043','20212044','20212045','20212046','20212047','20212048','20212101','20212102','20212103','20212104','20212105','20212106','20212107','20212108','20212109','20212110','20212111','20212112','20212113','20212114','20212115','20212116','20212117','20212118','20212119','20212120','20212121','20212123','20212124','20212125','20212126','20212127','20212128','20212129','20212130','20212131','20212132','20212133','20212134','20212135','20212136','20212137','20212138','20212139','20212140','20212141','20212142','20212143','20212144','20212145','20212146','20212147','20212148','20212149','20212150','20212151','20212201','20212202','20212203','20212204','20212205','20212206','20212207','20212208','20212209','20212210','20212211','20212212','20212213','20212214','20212215','20212216','20212217','20212218','20212219','20212220','20212221','20212222','20212223','20212224','20212225','20212226','20212227','20212228','20212229','20212230','20212231','20212232','20212233','20212234','20212235','20212236','20212237','20212238','20212239','20212240','20212241','20212242','20212243','20212244','20212245','20212246','20212247','20212248','20212249','20212250','20212301','20212302','20212303','20212304','20212305','20212306','20212307','20212308','20212309','20212310','20212311','20212312','20212313','20212314','20212315','20212317','20212318','20212319','20212320','20212322','20212323','20212324','20212325','20212326','20212327','20212328','20212329','20212330','20212331','20212332','20212333','20212334','20212335','20212336','20212337','20212338','20212339','20212340','20212341','20212342','20212343','20212344','20212345','20212346','20212401','20212402','20212403','20212404','20212405','20212406','20212407','20212408','20212409','20212410','20212411','20212413','20212414','20212415','20212416','20212417','20212418','20212419','20212420','20212421','20212422','20212423','20212424','20212425','20212426','20212427','20212428','20212429','20212430','20212431','20212432','20212433','20212434','20212435','20212436','20212437','20212438','20212439','20212440','20212441','20212442','20212443','20212444','20212445','20212446','20212447','20212501','20212502','20212503','20212504','20212505','20212506','20212507','20212508','20212509','20212510','20212511','20212512','20212513','20212514','20212515','20212516','20212517','20212518','20212519','20212520','20212521','20212522','20212523','20212524','20212525','20212526','20212527','20212528','20212529','20212530','20212531','20212532','20212533','20212534','20212535','20212536','20212537','20212538','20212539','20212540','20212541','20212542','20212543','20212544','20212545','20212548','20212549','20212601','20212602','20212603','20212604','20212605','20212606','20212607','20212608','20212609','20212610','20212611','20212612','20212613','20212614','20212615','20212616','20212617','20212618','20212619','20212620','20212621','20212622','20212623','20212624','20212625','20212626','20212627','20212628','20212629','20212630','20212631','20212632','20212633','20212634','20212635','20212636','20212637','20212638','20212639','20212640','20212641','20212642','20212643','20212644','20212701','20212702','20212703','20212704','20212705','20212706','20212707','20212708','20212709','20212710','20212711','20212712','20212713','20212714','20212715','20212716','20212717','20212718','20212719','20212720','20212721','20212722','20212723','20212724','20212725','20212726','20212727','20212728','20212730','20212731','20212732','20212733','20212734','20212735','20212736','20212737','20212738','20212739','20212740','20212741','20212742','20212743','20212744','20212745','20212746','20212747','20212748','20212749','20212801','20212802','20212803','20212804','20212805','20212806','20212807','20212808','20212809','20212810','20212811','20212812','20212813','20212814','20212815','20212816','20212818','20212819','20212820','20212821','20212822','20212823','20212824','20212825','20212826','20212827','20212828','20212829','20212830','20212831','20212832','20212833','20212834','20212835','20212836','20212837','20212838','20212839','20212840','20212841','20212842','20212843','20212844','20212845','20212846','20212847','20212848','20212849','20212901','20212902','20212903','20212904','20212905','20212906','20212907','20212908','20212909','20212910','20212911','20212912','20212913','20212914','20212915','20212916','20212917','20212918','20212919','20212920','20212921','20212922','20212923','20212924','20212925','20212927','20212928','20212929','20212930','20212931','20212932','20212933','20212934','20212935','20212936','20212937','20212938','20212939','20212940','20212941','20212942','20212943','20212947','20212948','20213001','20213002','20213003','20213004','20213005','20213006','20213007','20213008','20213009','20213010','20213011','20213012','20213013','20213014','20213015','20213016','20213017','20213018','20213019','20213020','20213021','20213022','20213023','20213024','20213025','20213026','20213027','20213028','20213029','20213030','20213031','20213032','20213033','20213034','20213035','20213036','20213037','20213038','20213039','20213040','20213041','20213042','20213043','20213044','20213045','20213046','20213047','20213048','20213049','20213050','20213101','20213102','20213103','20213104','20213105','20213106','20213107','20213108','20213109','20213110','20213111','20213112','20213113','20213114','20213115','20213116','20213117','20213118','20213119','20213120','20213121','20213122','20213123','20213124','20213125','20213126','20213127','20213128','20213129','20213130','20213131','20213132','20213133','20213134','20213135','20213136','20213137','20213138','20213139','20213140','20213142','20213143','20213144','20213145','20213146','20213147','20213148','20213149','20213152','20213201','20213202','20213203','20213204','20213205','20213206','20213207','20213208','20213209','20213210','20213211','20213212','20213213','20213214','20213215','20213216','20213217','20213218','20213219','20213220','20213221','20213222','20213223','20213224','20213225','20213226','20213227','20213228','20213229','20213230','20213231','20213232','20213233','20213234','20213235','20213236','20213237','20213238','20213239','20213240','20213241','20213242','20213243','20213244','20213245','20213246','20213247','20213248','20201901','20201902','20201903','20201904','20201905','20201906','20201907','20201908','20201909','20201910','20201911','20201912','20201913','20201914','20201915','20201916','20201917','20201918','20201919','20201920','20201921','20201922','20201923','20201924','20201925','20201926','20201927','20201928','20201929','20201930','20201931','20201932','20201933','20201934','20201935','20201936','20201937','20201938','20201939','20201940','20201941','20201942','20201943','20201944','20201945','20201946','20201947','20201949','20201951','20202001','20202002','20202003','20202004','20202005','20202006','20202007','20202008','20202010','20202011','20202012','20202013','20202014','20202016','20202017','20202018','20202019','20202020','20202021','20202022','20202023','20202024','20202025','20202026','20202027','20202028','20202029','20202030','20202031','20202032','20202033','20202034','20202035','20202036','20202037','20202038','20202039','20202040','20202041','20202042','20202043','20202044','20202045','20202046','20202047','20202101','20202102','20202104','20202105','20202106','20202107','20202108','20202109','20202110','20202111','20202112','20202113','20202114','20202115','20202116','20202117','20202118','20202119','20202120','20202121','20202122','20202125','20202126','20202127','20202128','20202129','20202130','20202131','20202132','20202133','20202134','20202135','20202136','20202137','20202138','20202139','20202140','20202141','20202142','20202143','20202144','20202145','20202147','20202148','20202201','20202202','20202203','20202204','20202205','20202206','20202207','20202208','20202209','20202210','20202211','20202212','20202213','20202214','20202215','20202216','20202217','20202218','20202219','20202220','20202221','20202222','20202223','20202224','20202225','20202226','20202227','20202228','20202229','20202230','20202231','20202232','20202233','20202234','20202235','20202236','20202237','20202238','20202239','20202240','20202241','20202242','20202243','20202244','20202245','20202246','20202248','20202301','20202302','20202303','20202304','20202305','20202306','20202307','20202308','20202309','20202310','20202312','20202313','20202314','20202315','20202316','20202317','20202318','20202319','20202320','20202321','20202322','20202323','20202324','20202325','20202326','20202327','20202328','20202329','20202330','20202331','20202332','20202333','20202334','20202335','20202337','20202338','20202339','20202340','20202341','20202342','20202343','20202344','20202345','20202346','20202401','20202402','20202403','20202404','20202405','20202406','20202407','20202408','20202409','20202410','20202412','20202413','20202414','20202415','20202416','20202417','20202418','20202419','20202420','20202421','20202422','20202423','20202424','20202425','20202426','20202427','20202428','20202429','20202430','20202431','20202432','20202433','20202434','20202435','20202436','20202437','20202438','20202439','20202440','20202441','20202442','20202443','20202444','20202445','20202446','20202447','20202448','20202449','20202450','20202501','20202502','20202503','20202504','20202506','20202507','20202508','20202509','20202510','20202511','20202512','20202513','20202514','20202515','20202516','20202517','20202518','20202519','20202520','20202521','20202522','20202523','20202524','20202525','20202526','20202527','20202528','20202529','20202530','20202531','20202532','20202533','20202534','20202535','20202536','20202537','20202538','20202539','20202540','20202541','20202542','20202543','20202544','20202545','20202546','20202601','20202602','20202603','20202604','20202605','20202606','20202607','20202608','20202609','20202610','20202611','20202612','20202613','20202614','20202615','20202616','20202617','20202618','20202619','20202620','20202621','20202622','20202623','20202624','20202625','20202626','20202627','20202628','20202629','20202630','20202631','20202633','20202634','20202635','20202636','20202637','20202638','20202639','20202640','20202641','20202642','20202643','20202644','20202645','20202701','20202702','20202703','20202704','20202705','20202706','20202707','20202708','20202709','20202710','20202711','20202712','20202713','20202714','20202715','20202716','20202717','20202718','20202719','20202720','20202721','20202722','20202723','20202724','20202725','20202726','20202727','20202728','20202729','20202730','20202731','20202732','20202733','20202734','20202735','20202736','20202737','20202738','20202739','20202740','20202741','20202742','20202743','20202747','20202801','20202802','20202803','20202804','20202805','20202806','20202807','20202808','20202809','20202810','20202811','20202812','20202813','20202814','20202815','20202816','20202817','20202818','20202819','20202820','20202821','20202822','20202823','20202824','20202825','20202826','20202827','20202828','20202829','20202830','20202831','20202832','20202833','20202834','20202835','20202836','20202837','20202838','20202839','20202840','20202841','20202842','20202843','20202844','20202845','20202846','20202847','20202901','20202902','20202903','20202904','20202905','20202906','20202907','20202908','20202909','20202910','20202911','20202912','20202913','20202914','20202915','20202916','20202917','20202918','20202919','20202920','20202921','20202922','20202923','20202924','20202925','20202926','20202927','20202928','20202929','20202930','20202931','20202932','20202933','20202934','20202935','20202936','20202937','20202938','20202939','20202940','20202941','20202942','20202943','20202944','20203001','20203002','20203003','20203004','20203005','20203006','20203007','20203008','20203009','20203010','20203011','20203012','20203013','20203014','20203015','20203016','20203017','20203018','20203019','20203020','20203021','20203022','20203023','20203024','20203025','20203026','20203027','20203028','20203029','20203030','20203031','20203032','20203033','20203034','20203035','20203036','20203037','20203039','20203040','20203041','20203042','20203043','20203044','20203046','20203101','20203102','20203103','20203104','20203105','20203106','20203107','20203108','20203109','20203110','20203111','20203112','20203113','20203114','20203115','20203116','20203117','20203118','20203119','20203120','20203121','20203122','20203123','20203124','20203125','20203126','20203127','20203128','20203129','20203130','20203131','20203132','20203133','20203134','20203135','20203136','20203137','20203138','20203139','20203140','20203141','20203142','20203143','20203144','20203145','20203146','20203201','20203202','20203203','20203204','20203205','20203207','20203208','20203209','20203210','20203211','20203212','20203213','20203214','20203215','20203216','20203217','20203218','20203220','20203221','20203222','20203223','20203224','20203225','20203226','20203227','20203228','20203229','20203230','20203231','20203232','20203233','20203234','20203235','20203236','20203237','20203238','20203239','20203240','20203241','20203242','20203243','20203244','20203245','20203246','20203247') and c.code='Class-fzpdzz' ";
  597. List<ArtEvaluation> infos = new();
  598. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ArtEvaluation>(queryText: sql))
  599. {
  600. infos.Add(item);
  601. }
  602. //List<Task<ItemResponse<ExamInfo>>> tasks = new List<Task<ItemResponse<ExamInfo>>>();
  603. List<string> ids = infos.Select(x => x.id).ToList();
  604. List<StudentArtResult> examClassResults = new List<StudentArtResult>();
  605. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIteratorSql(
  606. queryText: $"select value(c) from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", ids.Select(o => $"'{o}'"))})"))
  607. {
  608. using var json = await JsonDocument.ParseAsync(item.Content);
  609. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  610. {
  611. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  612. {
  613. examClassResults.Add(obj.ToObject<StudentArtResult>());
  614. }
  615. }
  616. }
  617. List<(string classId,string name)> classes = new();
  618. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIteratorSql(
  619. queryText: $"select value(c) from c where c.pk = 'Class'"))
  620. {
  621. using var json = await JsonDocument.ParseAsync(item.Content);
  622. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  623. {
  624. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  625. {
  626. obj.TryGetProperty("id", out JsonElement classId);
  627. obj.TryGetProperty("name", out JsonElement name);
  628. classes.Add((classId.GetString(),name.GetString()));
  629. }
  630. }
  631. }
  632. List<(string id,string stuName,string school, string name, double values, List<ArtSubjectScore> scores, List<(string subjectId, string quotaName, double score)> results)> students = new();
  633. foreach (StudentArtResult classResult in examClassResults)
  634. {
  635. List<(string subjectId, string quotaName,double score)> results = new();
  636. foreach (var rst in classResult.results) {
  637. results.Add((rst.subjectId, rst.quotaName, rst.score));
  638. }
  639. students.Add((classResult.studentId,classResult.studentName,classResult.school, classResult.classIds[0], classResult.totalScore,classResult.subjectScores, results));
  640. }
  641. var stus = students.Select(x => new {
  642. x.id,
  643. x.stuName,
  644. x.school,
  645. x.name,
  646. className = classes.Where(c => c.classId.Equals(x.name))?.FirstOrDefault().name,
  647. x.values,
  648. x.scores.Where(c => c.subjectId.Equals("subject_music")).FirstOrDefault()?.score,
  649. quotaName = x.results.Where(c => c.subjectId.Equals("subject_music")).Select(z => new {
  650. z.quotaName,
  651. z.score
  652. })
  653. });
  654. return Ok(stus);
  655. }
  656. [ProducesDefaultResponseType]
  657. [HttpPost("update-art-result")]
  658. public async Task<IActionResult> UpdateArtResult(JsonElement element)
  659. {
  660. var client = _azureCosmos.GetCosmosClient();
  661. string sql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  662. //string sql = "SELECT * FROM c where c.pk = 'Art' and (c.startTime = 1678978800000 or c.startTime = 1678982400000) and c.endTime = 1684382400000";
  663. //string stusql = "SELECT * FROM c '20222021','20222022','20222023','20222024','20222025','20222026','20222027','20222028','20222029','20222030','20222031','20222032','20222033','20222034','20222035','20222036','20222037','20222038','20222039','20222040','20222041','20222042','20222043','20222044','20222101','20222102','20222103','20222104','20222105','20222106','20222107','20222108','20222109','20222110','20222111','20222112','20222113','20222114','20222115','20222116','20222117','20222118','20222119','20222120','20222121','20222122','20222123','20222124','20222125','20222126','20222127','20222128','20222129','20222130','20222131','20222132','20222133','20222134','20222135','20222136','20222137','20222138','20222139','20222140','20222141','20222142','20222143','20222144','20222145','20222146','20222147','20222201','20222202','20222203','20222204','20222205','20222206','20222207','20222208','20222209','20222210','20222211','20222212','20222213','20222214','20222215','20222216','20222217','20222218','20222219','20222220','20222221','20222222','20222223','20222224','20222226','20222227','20222228','20222229','20222230','20222231','20222232','20222233','20222234','20222235','20222236','20222237','20222238','20222239','20222240','20222241','20222242','20222243','20222244','20222245','20222301','20222302','20222303','20222304','20222305','20222306','20222307','20222308','20222309','20222310','20222311','20222312','20222313','20222314','20222315','20222316','20222317','20222318','20222319','20222320','20222321','20222322','20222323','20222324','20222325','20222326','20222327','20222328','20222329','20222330','20222331','20222332','20222333','20222334','20222335','20222336','20222337','20222338','20222339','20222340','20222341','20222342','20222343','20222344','20222345','20222346','20222347','20222401','20222402','20222403','20222404','20222405','20222406','20222407','20222408','20222409','20222410','20222411','20222412','20222413','20222414','20222415','20222416','20222417','20222418','20222419','20222420','20222421','20222422','20222423','20222424','20222425','20222426','20222427','20222428','20222429','20222430','20222431','20222432','20222433','20222434','20222435','20222436','20222437','20222438','20222439','20222440','20222441','20222442','20222443','20222444','20222445','20222447','20222501','20222502','20222503','20222504','20222505','20222506','20222508','20222509','20222510','20222511','20222512','20222513','20222514','20222515','20222516','20222517','20222518','20222519','20222520','20222521','20222522','20222523','20222525','20222526','20222527','20222528','20222529','20222530','20222531','20222532','20222533','20222534','20222535','20222536','20222537','20222538','20222539','20222540','20222541','20222542','20222543','20222544','20222545','20222546','20222547','20222601','20222602','20222603','20222604','20222605','20222606','20222607','20222608','20222609','20222610','20222611','20222612','20222613','20222614','20222615','20222616','20222617','20222618','20222619','20222620','20222621','20222622','20222623','20222624','20222625','20222626','20222627','20222628','20222629','20222630','20222631','20222632','20222633','20222634','20222635','20222636','20222637','20222639','20222640','20222641','20222642','20222643','20222645','20222646','20222647','20222648','20222649','20222701','20222702','20222703','20222704','20222705','20222706','20222707','20222708','20222709','20222710','20222711','20222712','20222713','20222714','20222715','20222716','20222717','20222718','20222719','20222720','20222721','20222722','20222723','20222724','20222725','20222727','20222728','20222729','20222730','20222731','20222732','20222733','20222734','20222735','20222736','20222737','20222738','20222739','20222740','20222741','20222742','20222743','20222744','20222745','20222746','20222747','20222748','20222749','20222801','20222804','20222805','20222806','20222807','20222808','20222809','20222810','20222811','20222812','20222813','20222814','20222815','20222816','20222817','20222819','20222821','20222822','20222823','20222824','20222825','20222826','20222827','20222828','20222829','20222830','20222831','20222834','20222835','20222836','20222837','20222838','20222839','20222840','20222841','20222842','20222843','20222844','20222845','20222846','20222847','20222848','20211901','20211902','20211903','20211904','20211905','20211906','20211908','20211909','20211910','20211911','20211912','20211913','20211914','20211915','20211916','20211917','20211918','20211919','20211920','20211921','20211922','20211923','20211924','20211925','20211926','20211927','20211928','20211929','20211930','20211931','20211932','20211933','20211934','20211935','20211936','20211937','20211938','20211939','20211940','20211941','20211942','20211943','20211944','20211945','20212001','20212002','20212003','20212004','20212005','20212006','20212007','20212008','20212009','20212010','20212011','20212012','20212013','20212014','20212015','20212016','20212017','20212018','20212019','20212020','20212021','20212022','20212023','20212024','20212025','20212026','20212027','20212028','20212029','20212030','20212031','20212032','20212033','20212034','20212035','20212036','20212037','20212038','20212039','20212040','20212041','20212042','20212043','20212044','20212045','20212046','20212047','20212048','20212101','20212102','20212103','20212104','20212105','20212106','20212107','20212108','20212109','20212110','20212111','20212112','20212113','20212114','20212115','20212116','20212117','20212118','20212119','20212120','20212121','20212123','20212124','20212125','20212126','20212127','20212128','20212129','20212130','20212131','20212132','20212133','20212134','20212135','20212136','20212137','20212138','20212139','20212140','20212141','20212142','20212143','20212144','20212145','20212146','20212147','20212148','20212149','20212150','20212151','20212201','20212202','20212203','20212204','20212205','20212206','20212207','20212208','20212209','20212210','20212211','20212212','20212213','20212214','20212215','20212216','20212217','20212218','20212219','20212220','20212221','20212222','20212223','20212224','20212225','20212226','20212227','20212228','20212229','20212230','20212231','20212232','20212233','20212234','20212235','20212236','20212237','20212238','20212239','20212240','20212241','20212242','20212243','20212244','20212245','20212246','20212247','20212248','20212249','20212250','20212301','20212302','20212303','20212304','20212305','20212306','20212307','20212308','20212309','20212310','20212311','20212312','20212313','20212314','20212315','20212317','20212318','20212319','20212320','20212322','20212323','20212324','20212325','20212326','20212327','20212328','20212329','20212330','20212331','20212332','20212333','20212334','20212335','20212336','20212337','20212338','20212339','20212340','20212341','20212342','20212343','20212344','20212345','20212346','20212401','20212402','20212403','20212404','20212405','20212406','20212407','20212408','20212409','20212410','20212411','20212413','20212414','20212415','20212416','20212417','20212418','20212419','20212420','20212421','20212422','20212423','20212424','20212425','20212426','20212427','20212428','20212429','20212430','20212431','20212432','20212433','20212434','20212435','20212436','20212437','20212438','20212439','20212440','20212441','20212442','20212443','20212444','20212445','20212446','20212447','20212501','20212502','20212503','20212504','20212505','20212506','20212507','20212508','20212509','20212510','20212511','20212512','20212513','20212514','20212515','20212516','20212517','20212518','20212519','20212520','20212521','20212522','20212523','20212524','20212525','20212526','20212527','20212528','20212529','20212530','20212531','20212532','20212533','20212534','20212535','20212536','20212537','20212538','20212539','20212540','20212541','20212542','20212543','20212544','20212545','20212548','20212549','20212601','20212602','20212603','20212604','20212605','20212606','20212607','20212608','20212609','20212610','20212611','20212612','20212613','20212614','20212615','20212616','20212617','20212618','20212619','20212620','20212621','20212622','20212623','20212624','20212625','20212626','20212627','20212628','20212629','20212630','20212631','20212632','20212633','20212634','20212635','20212636','20212637','20212638','20212639','20212640','20212641','20212642','20212643','20212644','20212701','20212702','20212703','20212704','20212705','20212706','20212707','20212708','20212709','20212710','20212711','20212712','20212713','20212714','20212715','20212716','20212717','20212718','20212719','20212720','20212721','20212722','20212723','20212724','20212725','20212726','20212727','20212728','20212730','20212731','20212732','20212733','20212734','20212735','20212736','20212737','20212738','20212739','20212740','20212741','20212742','20212743','20212744','20212745','20212746','20212747','20212748','20212749','20212801','20212802','20212803','20212804','20212805','20212806','20212807','20212808','20212809','20212810','20212811','20212812','20212813','20212814','20212815','20212816','20212818','20212819','20212820','20212821','20212822','20212823','20212824','20212825','20212826','20212827','20212828','20212829','20212830','20212831','20212832','20212833','20212834','20212835','20212836','20212837','20212838','20212839','20212840','20212841','20212842','20212843','20212844','20212845','20212846','20212847','20212848','20212849','20212901','20212902','20212903','20212904','20212905','20212906','20212907','20212908','20212909','20212910','20212911','20212912','20212913','20212914','20212915','20212916','20212917','20212918','20212919','20212920','20212921','20212922','20212923','20212924','20212925','20212927','20212928','20212929','20212930','20212931','20212932','20212933','20212934','20212935','20212936','20212937','20212938','20212939','20212940','20212941','20212942','20212943','20212947','20212948','20213001','20213002','20213003','20213004','20213005','20213006','20213007','20213008','20213009','20213010','20213011','20213012','20213013','20213014','20213015','20213016','20213017','20213018','20213019','20213020','20213021','20213022','20213023','20213024','20213025','20213026','20213027','20213028','20213029','20213030','20213031','20213032','20213033','20213034','20213035','20213036','20213037','20213038','20213039','20213040','20213041','20213042','20213043','20213044','20213045','20213046','20213047','20213048','20213049','20213050','20213101','20213102','20213103','20213104','20213105','20213106','20213107','20213108','20213109','20213110','20213111','20213112','20213113','20213114','20213115','20213116','20213117','20213118','20213119','20213120','20213121','20213122','20213123','20213124','20213125','20213126','20213127','20213128','20213129','20213130','20213131','20213132','20213133','20213134','20213135','20213136','20213137','20213138','20213139','20213140','20213142','20213143','20213144','20213145','20213146','20213147','20213148','20213149','20213152','20213201','20213202','20213203','20213204','20213205','20213206','20213207','20213208','20213209','20213210','20213211','20213212','20213213','20213214','20213215','20213216','20213217','20213218','20213219','20213220','20213221','20213222','20213223','20213224','20213225','20213226','20213227','20213228','20213229','20213230','20213231','20213232','20213233','20213234','20213235','20213236','20213237','20213238','20213239','20213240','20213241','20213242','20213243','20213244','20213245','20213246','20213247','20213248','20201901','20201902','20201903','20201904','20201905','20201906','20201907','20201908','20201909','20201910','20201911','20201912','20201913','20201914','20201915','20201916','20201917','20201918','20201919','20201920','20201921','20201922','20201923','20201924','20201925','20201926','20201927','20201928','20201929','20201930','20201931','20201932','20201933','20201934','20201935','20201936','20201937','20201938','20201939','20201940','20201941','20201942','20201943','20201944','20201945','20201946','20201947','20201949','20201951','20202001','20202002','20202003','20202004','20202005','20202006','20202007','20202008','20202010','20202011','20202012','20202013','20202014','20202016','20202017','20202018','20202019','20202020','20202021','20202022','20202023','20202024','20202025','20202026','20202027','20202028','20202029','20202030','20202031','20202032','20202033','20202034','20202035','20202036','20202037','20202038','20202039','20202040','20202041','20202042','20202043','20202044','20202045','20202046','20202047','20202101','20202102','20202104','20202105','20202106','20202107','20202108','20202109','20202110','20202111','20202112','20202113','20202114','20202115','20202116','20202117','20202118','20202119','20202120','20202121','20202122','20202125','20202126','20202127','20202128','20202129','20202130','20202131','20202132','20202133','20202134','20202135','20202136','20202137','20202138','20202139','20202140','20202141','20202142','20202143','20202144','20202145','20202147','20202148','20202201','20202202','20202203','20202204','20202205','20202206','20202207','20202208','20202209','20202210','20202211','20202212','20202213','20202214','20202215','20202216','20202217','20202218','20202219','20202220','20202221','20202222','20202223','20202224','20202225','20202226','20202227','20202228','20202229','20202230','20202231','20202232','20202233','20202234','20202235','20202236','20202237','20202238','20202239','20202240','20202241','20202242','20202243','20202244','20202245','20202246','20202248','20202301','20202302','20202303','20202304','20202305','20202306','20202307','20202308','20202309','20202310','20202312','20202313','20202314','20202315','20202316','20202317','20202318','20202319','20202320','20202321','20202322','20202323','20202324','20202325','20202326','20202327','20202328','20202329','20202330','20202331','20202332','20202333','20202334','20202335','20202337','20202338','20202339','20202340','20202341','20202342','20202343','20202344','20202345','20202346','20202401','20202402','20202403','20202404','20202405','20202406','20202407','20202408','20202409','20202410','20202412','20202413','20202414','20202415','20202416','20202417','20202418','20202419','20202420','20202421','20202422','20202423','20202424','20202425','20202426','20202427','20202428','20202429','20202430','20202431','20202432','20202433','20202434','20202435','20202436','20202437','20202438','20202439','20202440','20202441','20202442','20202443','20202444','20202445','20202446','20202447','20202448','20202449','20202450','20202501','20202502','20202503','20202504','20202506','20202507','20202508','20202509','20202510','20202511','20202512','20202513','20202514','20202515','20202516','20202517','20202518','20202519','20202520','20202521','20202522','20202523','20202524','20202525','20202526','20202527','20202528','20202529','20202530','20202531','20202532','20202533','20202534','20202535','20202536','20202537','20202538','20202539','20202540','20202541','20202542','20202543','20202544','20202545','20202546','20202601','20202602','20202603','20202604','20202605','20202606','20202607','20202608','20202609','20202610','20202611','20202612','20202613','20202614','20202615','20202616','20202617','20202618','20202619','20202620','20202621','20202622','20202623','20202624','20202625','20202626','20202627','20202628','20202629','20202630','20202631','20202633','20202634','20202635','20202636','20202637','20202638','20202639','20202640','20202641','20202642','20202643','20202644','20202645','20202701','20202702','20202703','20202704','20202705','20202706','20202707','20202708','20202709','20202710','20202711','20202712','20202713','20202714','20202715','20202716','20202717','20202718','20202719','20202720','20202721','20202722','20202723','20202724','20202725','20202726','20202727','20202728','20202729','20202730','20202731','20202732','20202733','20202734','20202735','20202736','20202737','20202738','20202739','20202740','20202741','20202742','20202743','20202747','20202801','20202802','20202803','20202804','20202805','20202806','20202807','20202808','20202809','20202810','20202811','20202812','20202813','20202814','20202815','20202816','20202817','20202818','20202819','20202820','20202821','20202822','20202823','20202824','20202825','20202826','20202827','20202828','20202829','20202830','20202831','20202832','20202833','20202834','20202835','20202836','20202837','20202838','20202839','20202840','20202841','20202842','20202843','20202844','20202845','20202846','20202847','20202901','20202902','20202903','20202904','20202905','20202906','20202907','20202908','20202909','20202910','20202911','20202912','20202913','20202914','20202915','20202916','20202917','20202918','20202919','20202920','20202921','20202922','20202923','20202924','20202925','20202926','20202927','20202928','20202929','20202930','20202931','20202932','20202933','20202934','20202935','20202936','20202937','20202938','20202939','20202940','20202941','20202942','20202943','20202944','20203001','20203002','20203003','20203004','20203005','20203006','20203007','20203008','20203009','20203010','20203011','20203012','20203013','20203014','20203015','20203016','20203017','20203018','20203019','20203020','20203021','20203022','20203023','20203024','20203025','20203026','20203027','20203028','20203029','20203030','20203031','20203032','20203033','20203034','20203035','20203036','20203037','20203039','20203040','20203041','20203042','20203043','20203044','20203046','20203101','20203102','20203103','20203104','20203105','20203106','20203107','20203108','20203109','20203110','20203111','20203112','20203113','20203114','20203115','20203116','20203117','20203118','20203119','20203120','20203121','20203122','20203123','20203124','20203125','20203126','20203127','20203128','20203129','20203130','20203131','20203132','20203133','20203134','20203135','20203136','20203137','20203138','20203139','20203140','20203141','20203142','20203143','20203144','20203145','20203146','20203201','20203202','20203203','20203204','20203205','20203207','20203208','20203209','20203210','20203211','20203212','20203213','20203214','20203215','20203216','20203217','20203218','20203220','20203221','20203222','20203223','20203224','20203225','20203226','20203227','20203228','20203229','20203230','20203231','20203232','20203233','20203234','20203235','20203236','20203237','20203238','20203239','20203240','20203241','20203242','20203243','20203244','20203245','20203246','20203247') and c.code='Base-fzpdzz' ";
  664. //string clasql = "SELECT * FROM c where c.no in('20221901','20221902','20221903','20221904','20221905','20221906','20221907','20221908','20221909','20221910','20221911','20221912','20221913','20221914','20221915','20221916','20221917','20221918','20221919','20221920','20221921','20221922','20221923','20221924','20221925','20221926','20221927','20221928','20221929','20221930','20221931','20221932','20221933','20221934','20221935','20221936','20221937','20221938','20221939','20221940','20221941','20221942','20221943','20221944','20221945','20221946','20221947','20221948','20221949','20221950','20222002','20222003','20222004','20222005','20222006','20222007','20222008','20222009','20222010','20222011','20222012','20222013','20222014','20222015','20222016','20222017','20222018','20222019','20222020','20222021','20222022','20222023','20222024','20222025','20222026','20222027','20222028','20222029','20222030','20222031','20222032','20222033','20222034','20222035','20222036','20222037','20222038','20222039','20222040','20222041','20222042','20222043','20222044','20222101','20222102','20222103','20222104','20222105','20222106','20222107','20222108','20222109','20222110','20222111','20222112','20222113','20222114','20222115','20222116','20222117','20222118','20222119','20222120','20222121','20222122','20222123','20222124','20222125','20222126','20222127','20222128','20222129','20222130','20222131','20222132','20222133','20222134','20222135','20222136','20222137','20222138','20222139','20222140','20222141','20222142','20222143','20222144','20222145','20222146','20222147','20222201','20222202','20222203','20222204','20222205','20222206','20222207','20222208','20222209','20222210','20222211','20222212','20222213','20222214','20222215','20222216','20222217','20222218','20222219','20222220','20222221','20222222','20222223','20222224','20222226','20222227','20222228','20222229','20222230','20222231','20222232','20222233','20222234','20222235','20222236','20222237','20222238','20222239','20222240','20222241','20222242','20222243','20222244','20222245','20222301','20222302','20222303','20222304','20222305','20222306','20222307','20222308','20222309','20222310','20222311','20222312','20222313','20222314','20222315','20222316','20222317','20222318','20222319','20222320','20222321','20222322','20222323','20222324','20222325','20222326','20222327','20222328','20222329','20222330','20222331','20222332','20222333','20222334','20222335','20222336','20222337','20222338','20222339','20222340','20222341','20222342','20222343','20222344','20222345','20222346','20222347','20222401','20222402','20222403','20222404','20222405','20222406','20222407','20222408','20222409','20222410','20222411','20222412','20222413','20222414','20222415','20222416','20222417','20222418','20222419','20222420','20222421','20222422','20222423','20222424','20222425','20222426','20222427','20222428','20222429','20222430','20222431','20222432','20222433','20222434','20222435','20222436','20222437','20222438','20222439','20222440','20222441','20222442','20222443','20222444','20222445','20222447','20222501','20222502','20222503','20222504','20222505','20222506','20222508','20222509','20222510','20222511','20222512','20222513','20222514','20222515','20222516','20222517','20222518','20222519','20222520','20222521','20222522','20222523','20222525','20222526','20222527','20222528','20222529','20222530','20222531','20222532','20222533','20222534','20222535','20222536','20222537','20222538','20222539','20222540','20222541','20222542','20222543','20222544','20222545','20222546','20222547','20222601','20222602','20222603','20222604','20222605','20222606','20222607','20222608','20222609','20222610','20222611','20222612','20222613','20222614','20222615','20222616','20222617','20222618','20222619','20222620','20222621','20222622','20222623','20222624','20222625','20222626','20222627','20222628','20222629','20222630','20222631','20222632','20222633','20222634','20222635','20222636','20222637','20222639','20222640','20222641','20222642','20222643','20222645','20222646','20222647','20222648','20222649','20222701','20222702','20222703','20222704','20222705','20222706','20222707','20222708','20222709','20222710','20222711','20222712','20222713','20222714','20222715','20222716','20222717','20222718','20222719','20222720','20222721','20222722','20222723','20222724','20222725','20222727','20222728','20222729','20222730','20222731','20222732','20222733','20222734','20222735','20222736','20222737','20222738','20222739','20222740','20222741','20222742','20222743','20222744','20222745','20222746','20222747','20222748','20222749','20222801','20222804','20222805','20222806','20222807','20222808','20222809','20222810','20222811','20222812','20222813','20222814','20222815','20222816','20222817','20222819','20222821','20222822','20222823','20222824','20222825','20222826','20222827','20222828','20222829','20222830','20222831','20222834','20222835','20222836','20222837','20222838','20222839','20222840','20222841','20222842','20222843','20222844','20222845','20222846','20222847','20222848','20211901','20211902','20211903','20211904','20211905','20211906','20211908','20211909','20211910','20211911','20211912','20211913','20211914','20211915','20211916','20211917','20211918','20211919','20211920','20211921','20211922','20211923','20211924','20211925','20211926','20211927','20211928','20211929','20211930','20211931','20211932','20211933','20211934','20211935','20211936','20211937','20211938','20211939','20211940','20211941','20211942','20211943','20211944','20211945','20212001','20212002','20212003','20212004','20212005','20212006','20212007','20212008','20212009','20212010','20212011','20212012','20212013','20212014','20212015','20212016','20212017','20212018','20212019','20212020','20212021','20212022','20212023','20212024','20212025','20212026','20212027','20212028','20212029','20212030','20212031','20212032','20212033','20212034','20212035','20212036','20212037','20212038','20212039','20212040','20212041','20212042','20212043','20212044','20212045','20212046','20212047','20212048','20212101','20212102','20212103','20212104','20212105','20212106','20212107','20212108','20212109','20212110','20212111','20212112','20212113','20212114','20212115','20212116','20212117','20212118','20212119','20212120','20212121','20212123','20212124','20212125','20212126','20212127','20212128','20212129','20212130','20212131','20212132','20212133','20212134','20212135','20212136','20212137','20212138','20212139','20212140','20212141','20212142','20212143','20212144','20212145','20212146','20212147','20212148','20212149','20212150','20212151','20212201','20212202','20212203','20212204','20212205','20212206','20212207','20212208','20212209','20212210','20212211','20212212','20212213','20212214','20212215','20212216','20212217','20212218','20212219','20212220','20212221','20212222','20212223','20212224','20212225','20212226','20212227','20212228','20212229','20212230','20212231','20212232','20212233','20212234','20212235','20212236','20212237','20212238','20212239','20212240','20212241','20212242','20212243','20212244','20212245','20212246','20212247','20212248','20212249','20212250','20212301','20212302','20212303','20212304','20212305','20212306','20212307','20212308','20212309','20212310','20212311','20212312','20212313','20212314','20212315','20212317','20212318','20212319','20212320','20212322','20212323','20212324','20212325','20212326','20212327','20212328','20212329','20212330','20212331','20212332','20212333','20212334','20212335','20212336','20212337','20212338','20212339','20212340','20212341','20212342','20212343','20212344','20212345','20212346','20212401','20212402','20212403','20212404','20212405','20212406','20212407','20212408','20212409','20212410','20212411','20212413','20212414','20212415','20212416','20212417','20212418','20212419','20212420','20212421','20212422','20212423','20212424','20212425','20212426','20212427','20212428','20212429','20212430','20212431','20212432','20212433','20212434','20212435','20212436','20212437','20212438','20212439','20212440','20212441','20212442','20212443','20212444','20212445','20212446','20212447','20212501','20212502','20212503','20212504','20212505','20212506','20212507','20212508','20212509','20212510','20212511','20212512','20212513','20212514','20212515','20212516','20212517','20212518','20212519','20212520','20212521','20212522','20212523','20212524','20212525','20212526','20212527','20212528','20212529','20212530','20212531','20212532','20212533','20212534','20212535','20212536','20212537','20212538','20212539','20212540','20212541','20212542','20212543','20212544','20212545','20212548','20212549','20212601','20212602','20212603','20212604','20212605','20212606','20212607','20212608','20212609','20212610','20212611','20212612','20212613','20212614','20212615','20212616','20212617','20212618','20212619','20212620','20212621','20212622','20212623','20212624','20212625','20212626','20212627','20212628','20212629','20212630','20212631','20212632','20212633','20212634','20212635','20212636','20212637','20212638','20212639','20212640','20212641','20212642','20212643','20212644','20212701','20212702','20212703','20212704','20212705','20212706','20212707','20212708','20212709','20212710','20212711','20212712','20212713','20212714','20212715','20212716','20212717','20212718','20212719','20212720','20212721','20212722','20212723','20212724','20212725','20212726','20212727','20212728','20212730','20212731','20212732','20212733','20212734','20212735','20212736','20212737','20212738','20212739','20212740','20212741','20212742','20212743','20212744','20212745','20212746','20212747','20212748','20212749','20212801','20212802','20212803','20212804','20212805','20212806','20212807','20212808','20212809','20212810','20212811','20212812','20212813','20212814','20212815','20212816','20212818','20212819','20212820','20212821','20212822','20212823','20212824','20212825','20212826','20212827','20212828','20212829','20212830','20212831','20212832','20212833','20212834','20212835','20212836','20212837','20212838','20212839','20212840','20212841','20212842','20212843','20212844','20212845','20212846','20212847','20212848','20212849','20212901','20212902','20212903','20212904','20212905','20212906','20212907','20212908','20212909','20212910','20212911','20212912','20212913','20212914','20212915','20212916','20212917','20212918','20212919','20212920','20212921','20212922','20212923','20212924','20212925','20212927','20212928','20212929','20212930','20212931','20212932','20212933','20212934','20212935','20212936','20212937','20212938','20212939','20212940','20212941','20212942','20212943','20212947','20212948','20213001','20213002','20213003','20213004','20213005','20213006','20213007','20213008','20213009','20213010','20213011','20213012','20213013','20213014','20213015','20213016','20213017','20213018','20213019','20213020','20213021','20213022','20213023','20213024','20213025','20213026','20213027','20213028','20213029','20213030','20213031','20213032','20213033','20213034','20213035','20213036','20213037','20213038','20213039','20213040','20213041','20213042','20213043','20213044','20213045','20213046','20213047','20213048','20213049','20213050','20213101','20213102','20213103','20213104','20213105','20213106','20213107','20213108','20213109','20213110','20213111','20213112','20213113','20213114','20213115','20213116','20213117','20213118','20213119','20213120','20213121','20213122','20213123','20213124','20213125','20213126','20213127','20213128','20213129','20213130','20213131','20213132','20213133','20213134','20213135','20213136','20213137','20213138','20213139','20213140','20213142','20213143','20213144','20213145','20213146','20213147','20213148','20213149','20213152','20213201','20213202','20213203','20213204','20213205','20213206','20213207','20213208','20213209','20213210','20213211','20213212','20213213','20213214','20213215','20213216','20213217','20213218','20213219','20213220','20213221','20213222','20213223','20213224','20213225','20213226','20213227','20213228','20213229','20213230','20213231','20213232','20213233','20213234','20213235','20213236','20213237','20213238','20213239','20213240','20213241','20213242','20213243','20213244','20213245','20213246','20213247','20213248','20201901','20201902','20201903','20201904','20201905','20201906','20201907','20201908','20201909','20201910','20201911','20201912','20201913','20201914','20201915','20201916','20201917','20201918','20201919','20201920','20201921','20201922','20201923','20201924','20201925','20201926','20201927','20201928','20201929','20201930','20201931','20201932','20201933','20201934','20201935','20201936','20201937','20201938','20201939','20201940','20201941','20201942','20201943','20201944','20201945','20201946','20201947','20201949','20201951','20202001','20202002','20202003','20202004','20202005','20202006','20202007','20202008','20202010','20202011','20202012','20202013','20202014','20202016','20202017','20202018','20202019','20202020','20202021','20202022','20202023','20202024','20202025','20202026','20202027','20202028','20202029','20202030','20202031','20202032','20202033','20202034','20202035','20202036','20202037','20202038','20202039','20202040','20202041','20202042','20202043','20202044','20202045','20202046','20202047','20202101','20202102','20202104','20202105','20202106','20202107','20202108','20202109','20202110','20202111','20202112','20202113','20202114','20202115','20202116','20202117','20202118','20202119','20202120','20202121','20202122','20202125','20202126','20202127','20202128','20202129','20202130','20202131','20202132','20202133','20202134','20202135','20202136','20202137','20202138','20202139','20202140','20202141','20202142','20202143','20202144','20202145','20202147','20202148','20202201','20202202','20202203','20202204','20202205','20202206','20202207','20202208','20202209','20202210','20202211','20202212','20202213','20202214','20202215','20202216','20202217','20202218','20202219','20202220','20202221','20202222','20202223','20202224','20202225','20202226','20202227','20202228','20202229','20202230','20202231','20202232','20202233','20202234','20202235','20202236','20202237','20202238','20202239','20202240','20202241','20202242','20202243','20202244','20202245','20202246','20202248','20202301','20202302','20202303','20202304','20202305','20202306','20202307','20202308','20202309','20202310','20202312','20202313','20202314','20202315','20202316','20202317','20202318','20202319','20202320','20202321','20202322','20202323','20202324','20202325','20202326','20202327','20202328','20202329','20202330','20202331','20202332','20202333','20202334','20202335','20202337','20202338','20202339','20202340','20202341','20202342','20202343','20202344','20202345','20202346','20202401','20202402','20202403','20202404','20202405','20202406','20202407','20202408','20202409','20202410','20202412','20202413','20202414','20202415','20202416','20202417','20202418','20202419','20202420','20202421','20202422','20202423','20202424','20202425','20202426','20202427','20202428','20202429','20202430','20202431','20202432','20202433','20202434','20202435','20202436','20202437','20202438','20202439','20202440','20202441','20202442','20202443','20202444','20202445','20202446','20202447','20202448','20202449','20202450','20202501','20202502','20202503','20202504','20202506','20202507','20202508','20202509','20202510','20202511','20202512','20202513','20202514','20202515','20202516','20202517','20202518','20202519','20202520','20202521','20202522','20202523','20202524','20202525','20202526','20202527','20202528','20202529','20202530','20202531','20202532','20202533','20202534','20202535','20202536','20202537','20202538','20202539','20202540','20202541','20202542','20202543','20202544','20202545','20202546','20202601','20202602','20202603','20202604','20202605','20202606','20202607','20202608','20202609','20202610','20202611','20202612','20202613','20202614','20202615','20202616','20202617','20202618','20202619','20202620','20202621','20202622','20202623','20202624','20202625','20202626','20202627','20202628','20202629','20202630','20202631','20202633','20202634','20202635','20202636','20202637','20202638','20202639','20202640','20202641','20202642','20202643','20202644','20202645','20202701','20202702','20202703','20202704','20202705','20202706','20202707','20202708','20202709','20202710','20202711','20202712','20202713','20202714','20202715','20202716','20202717','20202718','20202719','20202720','20202721','20202722','20202723','20202724','20202725','20202726','20202727','20202728','20202729','20202730','20202731','20202732','20202733','20202734','20202735','20202736','20202737','20202738','20202739','20202740','20202741','20202742','20202743','20202747','20202801','20202802','20202803','20202804','20202805','20202806','20202807','20202808','20202809','20202810','20202811','20202812','20202813','20202814','20202815','20202816','20202817','20202818','20202819','20202820','20202821','20202822','20202823','20202824','20202825','20202826','20202827','20202828','20202829','20202830','20202831','20202832','20202833','20202834','20202835','20202836','20202837','20202838','20202839','20202840','20202841','20202842','20202843','20202844','20202845','20202846','20202847','20202901','20202902','20202903','20202904','20202905','20202906','20202907','20202908','20202909','20202910','20202911','20202912','20202913','20202914','20202915','20202916','20202917','20202918','20202919','20202920','20202921','20202922','20202923','20202924','20202925','20202926','20202927','20202928','20202929','20202930','20202931','20202932','20202933','20202934','20202935','20202936','20202937','20202938','20202939','20202940','20202941','20202942','20202943','20202944','20203001','20203002','20203003','20203004','20203005','20203006','20203007','20203008','20203009','20203010','20203011','20203012','20203013','20203014','20203015','20203016','20203017','20203018','20203019','20203020','20203021','20203022','20203023','20203024','20203025','20203026','20203027','20203028','20203029','20203030','20203031','20203032','20203033','20203034','20203035','20203036','20203037','20203039','20203040','20203041','20203042','20203043','20203044','20203046','20203101','20203102','20203103','20203104','20203105','20203106','20203107','20203108','20203109','20203110','20203111','20203112','20203113','20203114','20203115','20203116','20203117','20203118','20203119','20203120','20203121','20203122','20203123','20203124','20203125','20203126','20203127','20203128','20203129','20203130','20203131','20203132','20203133','20203134','20203135','20203136','20203137','20203138','20203139','20203140','20203141','20203142','20203143','20203144','20203145','20203146','20203201','20203202','20203203','20203204','20203205','20203207','20203208','20203209','20203210','20203211','20203212','20203213','20203214','20203215','20203216','20203217','20203218','20203220','20203221','20203222','20203223','20203224','20203225','20203226','20203227','20203228','20203229','20203230','20203231','20203232','20203233','20203234','20203235','20203236','20203237','20203238','20203239','20203240','20203241','20203242','20203243','20203244','20203245','20203246','20203247') and c.code='Class-fzpdzz' ";
  665. List<ArtEvaluation> infos = new();
  666. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ArtEvaluation>(queryText: sql))
  667. {
  668. infos.Add(item);
  669. }
  670. //List<Task<ItemResponse<ExamInfo>>> tasks = new List<Task<ItemResponse<ExamInfo>>>();
  671. List<string> ids = infos.Select(x => x.id).ToList();
  672. List<StudentArtResult> artResults = new List<StudentArtResult>();
  673. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIteratorSql(
  674. queryText: $"select value(c) from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", ids.Select(o => $"'{o}'"))})"))
  675. {
  676. using var json = await JsonDocument.ParseAsync(item.Content);
  677. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  678. {
  679. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  680. {
  681. artResults.Add(obj.ToObject<StudentArtResult>());
  682. }
  683. }
  684. }
  685. //List<Task<ItemResponse<StudentArtResult>>> tasks = new List<Task<ItemResponse<StudentArtResult>>>();
  686. foreach (StudentArtResult artResult in artResults) {
  687. foreach (var artSubjectScore in artResult.subjectScores) {
  688. double subScore = 0;
  689. var score_1 = artResult.results.Where(c => c.quotaId.Equals("quota_21") && c.subjectId.Equals(artSubjectScore.subjectId)).Select(c => c.score).FirstOrDefault() * 0.75;
  690. var score_2 = artResult.results.Where(c => c.quotaId.Equals("quota_22") && c.subjectId.Equals(artSubjectScore.subjectId)).Select(c => c.score).FirstOrDefault() * 0.25;
  691. subScore = score_1 + score_2;
  692. artSubjectScore.score = Math.Round(subScore,2);
  693. }
  694. artResult.totalScore = Math.Round(artResult.subjectScores.Where(m => m.score >= 0).Sum(z => z.score), 2);
  695. await client.GetContainer(Constant.TEAMModelOS, Constant.Student).ReplaceItemAsync(artResult, artResult.id, new PartitionKey(artResult.code));
  696. }
  697. return Ok();
  698. }
  699. [ProducesDefaultResponseType]
  700. [HttpPost("update-score")]
  701. public async Task<IActionResult> FixScore(JsonElement req)
  702. {
  703. var client = _azureCosmos.GetCosmosClient();
  704. string sql = "SELECT c.id FROM c join A0 in c.papers where A0.id = 'ea54f54a-faf3-9fac-6609-dad8b75f9fd6' and c.pk = 'Exam' ";
  705. List<string> ids = new();
  706. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryStreamIteratorSql(queryText: sql))
  707. {
  708. using var json = await JsonDocument.ParseAsync(item.Content);
  709. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  710. {
  711. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  712. {
  713. obj.TryGetProperty("id", out JsonElement id);
  714. ids.Add(id.GetString());
  715. }
  716. }
  717. }
  718. List<ExamClassResult> classResults = new();
  719. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIteratorSql<ExamClassResult>(queryText: $"select * from c where c.examId in ({string.Join(",", ids.Select(o => $"'{o}'"))}) and c.pk = 'ExamClassResult' "))
  720. {
  721. classResults.Add(item);
  722. }
  723. List<Task<ItemResponse<ExamClassResult>>> tasks = new List<Task<ItemResponse<ExamClassResult>>>();
  724. foreach (ExamClassResult info in classResults)
  725. {
  726. int n = 0;
  727. foreach (string stu in info.studentIds) {
  728. if (info.status[n] == 1)
  729. {
  730. n++;
  731. continue;
  732. }
  733. info.studentScores[n][2] = 7;
  734. info.studentScores[n][7] = 7;
  735. info.studentScores[n][9] = 7;
  736. info.studentScores[n][13] = 6;
  737. info.studentScores[n][14] = 6;
  738. n++;
  739. }
  740. tasks.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(info, info.id, new PartitionKey(info.code)));
  741. }
  742. await tasks.TaskPage(10);
  743. return Ok();
  744. }
  745. /// <summary>
  746. /// 修复能力点学习记录中 nodeid taskid为空的数据
  747. /// </summary>
  748. /// <returns></returns>
  749. [ProducesDefaultResponseType]
  750. [HttpPost("fix-nodeid-taskid")]
  751. public async Task<IActionResult> FixNodeIdTaskId(JsonElement json)
  752. {
  753. var client = _azureCosmos.GetCosmosClient();
  754. string sql = $"SELECT distinct value(c) FROM c join b in c.fileRecords join a in b.files where a.taskId =null or a.nodeId=null ";
  755. List<TeacherFile> teacherFiles = new List<TeacherFile>();
  756. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<TeacherFile>(queryText: sql))
  757. {
  758. teacherFiles.Add(item);
  759. }
  760. teacherFiles.ForEach(x => {
  761. x.fileRecords.ForEach(y => {
  762. y.files.RemoveAll(x => x.taskId == null || x.nodeId == null);
  763. });
  764. });
  765. foreach (var a in teacherFiles)
  766. {
  767. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(a, a.id, new PartitionKey(a.code));
  768. }
  769. return Ok(teacherFiles);
  770. }
  771. /// <summary>
  772. ///
  773. /// </summary>
  774. /// <returns></returns>
  775. [ProducesDefaultResponseType]
  776. [HttpPost("check-repeat-name")]
  777. public async Task<IActionResult> CheckRepeatName(JsonElement json)
  778. {
  779. var client = _azureCosmos.GetCosmosClient();
  780. string sql = $"SELECT distinct value(c) FROM c join b in c.schools where b.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'";
  781. List<Teacher> teachers = new();
  782. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<Teacher>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
  783. {
  784. teachers.Add(item);
  785. }
  786. var group = teachers.SelectMany(x => x.binds).Select(y => y.userid).GroupBy(z => z).Select(m => new { key = m.Key, list = m.ToList() });
  787. Dictionary<string, dynamic> dict = new Dictionary<string, dynamic>();
  788. group.ToList().ForEach(x => {
  789. if (x.list.Count() > 1)
  790. {
  791. HashSet<Teacher> teacherR = new();
  792. teachers.ForEach(z => {
  793. z.binds.ForEach(y => {
  794. if (y.userid.Equals(x.key))
  795. {
  796. teacherR.Add(z);
  797. }
  798. });
  799. });
  800. dict.Add(x.key, teacherR.ToList().Select(x => new { x.name, x.id }));
  801. }
  802. });
  803. return Ok(dict);
  804. }
  805. /// <summary>
  806. ///
  807. /// </summary>
  808. /// <returns></returns>
  809. [ProducesDefaultResponseType]
  810. [HttpPost("set-admin")]
  811. public async Task<IActionResult> SetAdmin(JsonElement json)
  812. {
  813. var client = _azureCosmos.GetCosmosClient();
  814. string sql = $"SELECT value(c) FROM c where c.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'";
  815. Teacher teacher = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>("1528783259", new PartitionKey("Base"));
  816. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
  817. {
  818. var sc = teacher.schools.Find(x => x.schoolId.Equals(item.id));
  819. if (sc != null)
  820. {
  821. if (string.IsNullOrEmpty(sc.status) || !sc.status.Equals("join"))
  822. {
  823. sc.status = "join";
  824. }
  825. try
  826. {
  827. SchoolTeacher schoolTeacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>(teacher.id, new PartitionKey($"Teacher-{sc.schoolId}"));
  828. if (schoolTeacher != null)
  829. {
  830. if (schoolTeacher.roles.IsEmpty() || !schoolTeacher.roles.Contains("admin"))
  831. {
  832. schoolTeacher.roles = new List<string> { "admin" };
  833. }
  834. schoolTeacher.status = "join";
  835. schoolTeacher.pk = "Teacher";
  836. schoolTeacher.name = teacher.name;
  837. schoolTeacher.picture = teacher.picture;
  838. schoolTeacher.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  839. schoolTeacher.ttl = -1;
  840. schoolTeacher.permissions = schoolTeacher.permissions.IsNotEmpty() ? schoolTeacher.permissions : new List<string>();
  841. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
  842. }
  843. }
  844. catch (CosmosException ex)
  845. {
  846. SchoolTeacher schoolTeacher = new SchoolTeacher
  847. {
  848. id = teacher.id,
  849. code = $"Teacher-{sc.schoolId}",
  850. roles = new List<string> { "teacher" },
  851. permissions = new List<string>(),
  852. pk = "Teacher",
  853. name = teacher.name,
  854. picture = teacher.picture,
  855. status = "join",
  856. createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
  857. ttl = -1
  858. };
  859. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
  860. }
  861. }
  862. else
  863. {
  864. teacher.schools.Add(new Teacher.TeacherSchool { schoolId = item.id, name = item.name, areaId = item.areaId, picture = item.picture, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), status = "join" });
  865. SchoolTeacher schoolTeacher = new SchoolTeacher
  866. {
  867. id = teacher.id,
  868. code = $"Teacher-{item.id}",
  869. roles = new List<string> { "admin", "teacher" },
  870. permissions = new List<string>(),
  871. pk = "Teacher",
  872. name = teacher.name,
  873. picture = teacher.picture,
  874. status = "join",
  875. createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
  876. };
  877. await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
  878. }
  879. }
  880. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(teacher, teacher.id, new PartitionKey("Base"));
  881. return Ok();
  882. }
  883. /// <summary>
  884. ///
  885. /// </summary>
  886. /// <returns></returns>
  887. [ProducesDefaultResponseType]
  888. [HttpPost("fix-teacher-statistics")]
  889. public async Task<IActionResult> FixTeacherStatistics(JsonElement json)
  890. {
  891. var client = _azureCosmos.GetCosmosClient();
  892. List<TeacherTrain> teacherTrains = new List<TeacherTrain>();
  893. string sql = $"SELECT distinct value(c) FROM c where c.pk='TeacherTrain' ";
  894. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<TeacherTrain>(queryText: sql))
  895. {
  896. teacherTrains.Add(item);
  897. }
  898. foreach (var train in teacherTrains)
  899. {
  900. train.update.Add(StatisticsService.TeacherAbility);
  901. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(train, train.id, new PartitionKey(train.code));
  902. }
  903. return Ok();
  904. }
  905. /// <summary>
  906. ///
  907. /// </summary>
  908. /// <returns></returns>
  909. [ProducesDefaultResponseType]
  910. [HttpPost("fix-teacher-file")]
  911. public async Task<IActionResult> FixTeacherFile(JsonElement json)
  912. {
  913. var client = _azureCosmos.GetCosmosClient();
  914. List<TeacherFile> teacherFiles = new List<TeacherFile>();
  915. string sql = $"SELECT distinct value(c) FROM c join b in c.fileRecords where c.pk='TeacherFile' and b.type='video' and b.done=true and b.duration>0 and b.view<TRUNC(b.duration) ";
  916. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<TeacherFile>(queryText: sql))
  917. {
  918. teacherFiles.Add(item);
  919. }
  920. foreach (var flie in teacherFiles)
  921. {
  922. var records = flie.fileRecords.FindAll(x => x.type.Equals("video") && x.duration > 0 && x.view < (int)x.duration);
  923. records.ForEach(x => { x.view = (int)x.duration; });
  924. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(flie, flie.id, new PartitionKey(flie.code));
  925. TeacherTrain train = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<TeacherTrain>(flie.id, new PartitionKey($"TeacherTrain-{flie.code.Replace("TeacherFile-", "")}"));
  926. train.update.Add(StatisticsService.TeacherAbility);
  927. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(train, train.id, new PartitionKey(train.code));
  928. }
  929. return Ok();
  930. }
  931. /// <summary>
  932. /// 批量导入自动加入学校
  933. /// </summary>
  934. /// <returns></returns>
  935. [ProducesDefaultResponseType]
  936. [HttpPost("fix-joinschool")]
  937. public async Task<IActionResult> GenerateSchoolCodes(JsonElement json)
  938. {
  939. JsonElement _teachers = json.GetProperty("teachers");
  940. string jsons = _teachers.ToJsonString();
  941. jsons = Regex.Replace(jsons, @"\s", "");
  942. List<JoinSchool> joins = jsons.ToObject<List<JoinSchool>>();
  943. string url = _configuration.GetValue<string>("HaBookAuth:CoreId:userinfo");
  944. var tmdids = joins.Select(x => x.tmdid).ToList();
  945. var content = new StringContent(tmdids.ToJsonString(), Encoding.UTF8, "application/json");
  946. HttpResponseMessage responseMessage = await _httpClient.CreateClient().PostAsync(url, content);
  947. List<Teacher> ids = null;
  948. if (responseMessage.StatusCode == HttpStatusCode.OK)
  949. {
  950. string responseBody = responseMessage.Content.ReadAsStringAsync().Result;
  951. ids = responseBody.ToObject<List<Teacher>>();
  952. }
  953. if (ids.IsNotEmpty())
  954. {
  955. var school = joins.Select(x => x.schoolId);
  956. HashSet<string> scho = new HashSet<string>(school);
  957. string sql = $"select value(c) from c where c.id in ({string.Join(",", scho.Select(x => $"'{x}'"))})";
  958. List<School> schools = new List<School>();
  959. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").
  960. GetItemQueryIteratorSql<School>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
  961. {
  962. schools.Add(item);
  963. }
  964. var noexist = tmdids.Except(ids.Select(x => x.id));
  965. sql = $"select value(c) from c where c.id in ({string.Join(",", ids.Select(x => $"'{x.id}'"))})";
  966. List<Teacher> teachers = new List<Teacher>();
  967. List<Teacher> updTeachers = new List<Teacher>();
  968. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").
  969. GetItemQueryIteratorSql<Teacher>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
  970. {
  971. teachers.Add(item);
  972. }
  973. long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  974. var nobinds = ids.Select(x => x.id).Except(teachers.Select(t => t.id)).ToList();
  975. foreach (var tch in teachers)
  976. {
  977. var join = joins.Find(x => x.tmdid.Equals(tch.id));
  978. if (join != null)
  979. {
  980. var joinschool = tch.schools.Find(x => x.schoolId.Equals(join.schoolId));
  981. if (joinschool == null)
  982. {
  983. var schoolInfo = schools.Find(x => x.id.Equals(join.schoolId));
  984. if (schoolInfo != null)
  985. {
  986. tch.defaultSchool = join.schoolId;
  987. tch.schools.Add(new Teacher.TeacherSchool { schoolId = join.schoolId, areaId = schoolInfo.areaId, name = schoolInfo?.name, picture = schoolInfo?.picture, status = "join", time = now });
  988. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(tch, tch.id, new PartitionKey("Base"));
  989. updTeachers.Add(tch);
  990. }
  991. }
  992. }
  993. }
  994. HashSet<Teacher> changeTeacher = new HashSet<Teacher>();
  995. List<Teacher> addTeachers = new List<Teacher>();
  996. if (nobinds != null)
  997. {
  998. foreach (var tch in nobinds)
  999. {
  1000. var teacher = ids.Find(x => x.id.Equals(tch));
  1001. var join = joins.Find(x => x.tmdid.Equals(tch));
  1002. var schoolInfo = schools.Find(x => x.id.Equals(join.schoolId));
  1003. if (schoolInfo != null && teacher != null)
  1004. {
  1005. teacher.ttl = -1;
  1006. teacher.pk = "Teacher";
  1007. teacher.code = "Base";
  1008. teacher.size = 2;
  1009. teacher.schools = new List<Teacher.TeacherSchool> { new Teacher.TeacherSchool { schoolId = join.schoolId, areaId = schoolInfo.areaId, name = schoolInfo?.name, picture = schoolInfo?.picture, status = "join", time = now } };
  1010. teacher.defaultSchool = schoolInfo?.id;
  1011. List<string> roles = new List<string> { "teacher" };
  1012. if (!string.IsNullOrEmpty(join.role) && join.role.Equals("admin"))
  1013. {
  1014. roles.Add("admin");
  1015. }
  1016. var container = _azureStorage.GetBlobContainerClient(teacher.id);
  1017. await container.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建Teacher私有容器,如存在則不做任何事,保障容器一定存在
  1018. teacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey("Base"));
  1019. addTeachers.Add(teacher);
  1020. }
  1021. }
  1022. }
  1023. foreach (var sch in schools)
  1024. {
  1025. StringBuilder queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain'");
  1026. List<GroupList> yxtrain = new List<GroupList>();
  1027. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<GroupList>(queryText: queryText.ToString(),
  1028. requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{sch.id}") }))
  1029. {
  1030. yxtrain.Add(item);
  1031. }
  1032. if (yxtrain.IsNotEmpty())
  1033. {
  1034. var schjoins = joins.FindAll(x => x.schoolId.Equals(sch.id));
  1035. schjoins.RemoveAll(x => noexist.Contains(x.tmdid));
  1036. GroupList groupList = yxtrain[0];
  1037. //不在研修名单
  1038. schjoins = schjoins.FindAll(z => !yxtrain.SelectMany(x => x.members).Where(y => y.type == 1).Select(m => m.id).Contains(z.tmdid));
  1039. if (schjoins.IsNotEmpty())
  1040. {
  1041. foreach (var schjoin in schjoins)
  1042. {
  1043. groupList.members.Add(new Member { id = schjoin.tmdid, type = 1 });
  1044. }
  1045. await GroupListService.UpsertList(groupList, _azureCosmos, _configuration, _serviceBus, _client: "web");
  1046. }
  1047. }
  1048. else
  1049. {
  1050. var schjoins = joins.FindAll(x => x.schoolId.Equals(sch.id));
  1051. schjoins.RemoveAll(x => noexist.Contains(x.tmdid));
  1052. if (schjoins.IsNotEmpty())
  1053. {
  1054. List<Member> members = new List<Member>();
  1055. foreach (var schjoin in schjoins)
  1056. {
  1057. members.Add(new Member { id = schjoin.tmdid, type = 1 });
  1058. }
  1059. GroupList groupList = new GroupList()
  1060. {
  1061. id = Guid.NewGuid().ToString(),
  1062. code = $"GroupList-{sch.id}",
  1063. creatorId = schjoins[0].tmdid,
  1064. type = "yxtrain",
  1065. year = DateTimeOffset.UtcNow.Year,
  1066. expire = 0,
  1067. members = members,
  1068. scope = "school",
  1069. school = sch.id,
  1070. name = "研修名单",
  1071. pk = "GroupList",
  1072. ttl = -1
  1073. };
  1074. await GroupListService.UpsertList(groupList, _azureCosmos, _configuration, _serviceBus, _client: "web");
  1075. }
  1076. }
  1077. var schtch = joins.FindAll(x => x.schoolId.Equals(sch.id));
  1078. schtch.RemoveAll(x => noexist.Contains(x.tmdid));
  1079. var tchs = teachers.FindAll(x => schtch.Select(x => x.tmdid).Contains(x.id));
  1080. foreach (var joinc in tchs)
  1081. {
  1082. SchoolTeacher schoolTeacher = null;
  1083. var join = joins.Find(x => x.tmdid.Equals(joinc.id));
  1084. joinc.schools.ForEach(x => {
  1085. if (x.schoolId.Equals(sch.id) && x.status.Equals("request"))
  1086. {
  1087. x.status = "join";
  1088. changeTeacher.Add(joinc);
  1089. }
  1090. });
  1091. List<string> roles = new List<string> { "teacher" };
  1092. if (!string.IsNullOrEmpty(join.role) && join.role.Equals("admin"))
  1093. {
  1094. roles.Add("admin");
  1095. }
  1096. try
  1097. {
  1098. schoolTeacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>(joinc.id, new PartitionKey($"Teacher-{join.schoolId}"));
  1099. if (roles.Contains("admin") && !schoolTeacher.roles.Contains("admin"))
  1100. {
  1101. schoolTeacher.roles.Add("admin");
  1102. }
  1103. if (roles.Contains("teacher") && !schoolTeacher.roles.Contains("teacher"))
  1104. {
  1105. schoolTeacher.roles.Add("teacher");
  1106. }
  1107. schoolTeacher.permissions = schoolTeacher.permissions.IsNotEmpty() ? schoolTeacher.permissions : new List<string>();
  1108. schoolTeacher.status = "join";
  1109. }
  1110. catch (CosmosException)
  1111. {
  1112. schoolTeacher = new SchoolTeacher
  1113. {
  1114. id = joinc.id,
  1115. name = joinc.name,
  1116. picture = joinc.picture,
  1117. code = $"Teacher-{sch.id}",
  1118. pk = "SchoolTeacher",
  1119. ttl = -1,
  1120. size = 0,
  1121. roles = roles,
  1122. status = "join",
  1123. createTime = now,
  1124. permissions = new List<string>()
  1125. };
  1126. }
  1127. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
  1128. }
  1129. }
  1130. foreach (var tch in changeTeacher)
  1131. {
  1132. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(tch, tch.id, new PartitionKey("Base"));
  1133. }
  1134. return Ok(new { noexist, update = updTeachers, add = addTeachers });
  1135. }
  1136. return Ok(new { status = 404 });
  1137. }
  1138. public class JoinSchool
  1139. {
  1140. public string name { get; set; }
  1141. public string schoolId { get; set; }
  1142. public string mobile { get; set; }
  1143. public string tmdid { get; set; }
  1144. public string role { get; set; }
  1145. }
  1146. [ProducesDefaultResponseType]
  1147. [HttpPost("fix-md5-duration")]
  1148. public async Task<IActionResult> FixMD5Duration(JsonElement json)
  1149. {
  1150. json.TryGetProperty("standard", out JsonElement standard);
  1151. json.TryGetProperty("abilityIds", out JsonElement _abilityIds);
  1152. if (string.IsNullOrEmpty($"{standard}")
  1153. && (!$"{standard}".Equals("standard1")
  1154. || !$"{standard}".Equals("standard2")
  1155. || !$"{standard}".Equals("standard3")
  1156. || !$"{standard}".Equals("standard4")
  1157. || !$"{standard}".Equals("standard7")))
  1158. {
  1159. return Ok();
  1160. }
  1161. var client = _azureStorage.GetBlobContainerClient($"teammodelos");
  1162. await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/standard1/jyzx/15d96330-54d8-95fd-cf9a-8785836fad03"))
  1163. {
  1164. string hash = Md5Hash.GetbyteToString(item.Properties.ContentHash);
  1165. Console.WriteLine($"{item.Name}-{hash}");
  1166. }
  1167. var CosmosClient = _azureCosmos.GetCosmosClient();
  1168. HashSet<AbilityTask> abilityTasks = new HashSet<AbilityTask>();
  1169. List<string> abilityIds = _abilityIds.ToObject<List<string>>();
  1170. if (abilityIds.IsEmpty())
  1171. {
  1172. return Ok();
  1173. }
  1174. MD5 md5 = new MD5CryptoServiceProvider();
  1175. string sql = $"select value(c) from c where c.abilityId in ({string.Join(",", abilityIds.Select(x => $"'{x}'"))}) ";
  1176. await foreach (var item in CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIteratorSql<AbilityTask>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"AbilityTask-{standard}") }))
  1177. {
  1178. var nodes = item.children.SelectMany(x => x.rnodes).Where(m => !m.type.Equals("link") && string.IsNullOrEmpty(m.hash));
  1179. if (nodes != null && nodes.Count() > 0)
  1180. {
  1181. foreach (var node in item.children)
  1182. {
  1183. foreach (var r in node.rnodes)
  1184. {
  1185. if (!r.type.Equals("link") && (string.IsNullOrWhiteSpace(r.hash) || r.size == 0))
  1186. {
  1187. abilityTasks.Add(item);
  1188. }
  1189. }
  1190. }
  1191. }
  1192. abilityTasks.Add(item);
  1193. }
  1194. foreach (var item in abilityTasks)
  1195. {
  1196. var nodes = item.children.SelectMany(x => x.rnodes).Where(m => !m.type.Equals("link") && string.IsNullOrEmpty(m.hash));
  1197. if (nodes != null && nodes.Count() > 0)
  1198. {
  1199. foreach (var node in item.children)
  1200. {
  1201. foreach (var r in node.rnodes)
  1202. {
  1203. if (!r.type.Equals("link") && (string.IsNullOrWhiteSpace(r.hash) || r.size == 0))
  1204. {
  1205. BlobDownloadInfo blobDownload = await client.GetBlobClient(r.link).DownloadAsync(range: new HttpRange(0, 4 * 1048576), rangeGetContentHash: true);
  1206. if (blobDownload.Details.ContentHash != null)
  1207. {
  1208. string hash = Md5Hash.GetbyteToString(blobDownload.Details.ContentHash);
  1209. r.hash = hash;
  1210. }
  1211. //byte[] retVal = md5.ComputeHash(blobDownload.Content);
  1212. //string hash = Md5Hash.GetbyteToString(retVal);
  1213. //r.hash = hash;
  1214. //r.size = blobDownload.Content.Length;
  1215. }
  1216. }
  1217. }
  1218. await CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").ReplaceItemAsync<AbilityTask>(item, item.id, new PartitionKey(item.code));
  1219. }
  1220. }
  1221. return Ok(abilityTasks);
  1222. }
  1223. /// <summary>
  1224. /// 修复能力点任务的资源节点的文件大小,hash值等。
  1225. /// </summary>
  1226. /// <returns></returns>
  1227. [ProducesDefaultResponseType]
  1228. [HttpPost("fix-blobitem-md5")]
  1229. public async Task<IActionResult> GetBlobitemMd5(JsonElement jsonMsg)
  1230. {
  1231. List<string> standards = new List<string>() { "standard1", "standard2", "standard3", "standard4" };
  1232. var client = _azureStorage.GetBlobContainerClient($"teammodelos");
  1233. var CosmosClient = _azureCosmos.GetCosmosClient();
  1234. List<BlobFile> itemInfos = new List<BlobFile>();
  1235. List<string> fils = new List<string>();
  1236. foreach (var standard in standards)
  1237. {
  1238. await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/{standard}/jyzx/"))
  1239. {
  1240. if (item.Properties.ContentHash.Length < 16)
  1241. {
  1242. fils.Add(item.Name);
  1243. }
  1244. string hash = Md5Hash.GetbyteToString(item.Properties.ContentHash);
  1245. if (string.IsNullOrEmpty(hash))
  1246. {
  1247. fils.Add(item.Name);
  1248. }
  1249. var blobitem = itemInfos.Find(x => x.id.Equals(hash));
  1250. if (blobitem != null)
  1251. {
  1252. blobitem.paths.Add(item.Name);
  1253. }
  1254. else
  1255. {
  1256. long? ContentLength = item.Properties.ContentLength;
  1257. blobitem = new BlobFile() { code = $"BlobFile-{standard}", source = "standard", pk = "BlobFile", ttl = -1, id = hash, size = ContentLength != null ? ContentLength.Value : 0 };
  1258. blobitem.paths.Add(item.Name);
  1259. itemInfos.Add(blobitem);
  1260. }
  1261. }
  1262. }
  1263. List<Rnode> rnode = new List<Rnode>();
  1264. foreach (var standard in standards)
  1265. {
  1266. List<AbilityTask> abilityTasks = new List<AbilityTask>();
  1267. string sql = "select value(c) from c ";
  1268. await foreach (var item in CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIteratorSql<AbilityTask>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"AbilityTask-{standard}") }))
  1269. {
  1270. var nodes = item.children.SelectMany(x => x.rnodes).Where(m => !m.type.Equals("link") && string.IsNullOrEmpty(m.hash));
  1271. if (nodes != null && nodes.Count() > 0)
  1272. {
  1273. foreach (var node in item.children)
  1274. {
  1275. foreach (var r in node.rnodes)
  1276. {
  1277. if (!r.type.Equals("link") && string.IsNullOrEmpty(r.hash))
  1278. {
  1279. string str = r.link.Substring(1);
  1280. BlobFile itemInfo = itemInfos.Find(s => s.paths.Contains(str));
  1281. if (itemInfo != null)
  1282. {
  1283. r.size = itemInfo.size;
  1284. r.hash = itemInfo.id;
  1285. }
  1286. rnode.Add(r);
  1287. }
  1288. }
  1289. node.rnodes.RemoveAll(x => x.hash == null);
  1290. }
  1291. await CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  1292. }
  1293. abilityTasks.Add(item);
  1294. }
  1295. }
  1296. await _dingDing.SendBotMsg($"fix-blobitem-md5, {fils.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  1297. return Ok(new { rnode, itemInfos });
  1298. }
  1299. /// <summary>
  1300. /// 修复学生的id
  1301. /// </summary>
  1302. /// <param name="data"></param>
  1303. /// <returns></returns>
  1304. [ProducesDefaultResponseType]
  1305. //[AuthToken(Roles = "teacher")]
  1306. [HttpPost("fix-student-id")]
  1307. public async Task<IActionResult> FixStudentId(JsonElement data)
  1308. {
  1309. var client = _azureCosmos.GetCosmosClient();
  1310. var queryslt = $"SELECT value(c) FROM c ";
  1311. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIteratorSql<Student>(queryText: queryslt))
  1312. {
  1313. //item.id
  1314. }
  1315. return Ok();
  1316. }
  1317. /// <summary>
  1318. /// 修复学生的id
  1319. /// </summary>
  1320. /// <param name="data"></param>
  1321. /// <returns></returns>
  1322. [ProducesDefaultResponseType]
  1323. //[AuthToken(Roles = "teacher")]
  1324. [HttpPost("fix-school")]
  1325. public async Task<IActionResult> FixSchool(JsonElement data)
  1326. {
  1327. List<string> arr = new List<string> {
  1328. "pjzx",
  1329. "pjsazx",
  1330. "pjsywgyxx",
  1331. "pjbjxx",
  1332. "pjhszcjzx",
  1333. "pjcyhzjnzxx",
  1334. "pjxnxx",
  1335. "pjthxx",
  1336. "pjsazsmxx",
  1337. "pjcyxx",
  1338. "pjsazcjzx",
  1339. "pjwxjnzxx",
  1340. "ptsxxpjfx",
  1341. "pjjysxx",
  1342. "pjxlzjnzxx",
  1343. "pjfxxx",
  1344. "pjdtjnzxx",
  1345. "pjgxzjnzxx",
  1346. "pjcjzjnzxx",
  1347. "pjdxjnzxx",
  1348. "pjwjxx",
  1349. "pjzyzx",
  1350. "pjnjyey",
  1351. "pjbjyey",
  1352. "pjcbyey",
  1353. "pjcxyey",
  1354. "pjcnyey",
  1355. "pjxj5hyey",
  1356. "pjxlyey",
  1357. "pjsazxyey",
  1358. "pjsaxcyey",
  1359. "pjthyey",
  1360. "pjsmyey",
  1361. "pjshyey",
  1362. "pjwxyey",
  1363. "pjjysyey",
  1364. "pjfxyey",
  1365. "pjgxyey",
  1366. "pjcjyey",
  1367. "pjcyhyey",
  1368. "pjbyyey",
  1369. "pjdtyey",
  1370. "pjnjyeydxfy",
  1371. "pjcxyeygmfy",
  1372. "pjcbyeygqfy",
  1373. "pjsaxcyeyzqfy",
  1374. "pjxyheyey",
  1375. "pjxhyey",
  1376. "pjxbeyey",
  1377. "pjhhzyey",
  1378. "pjxxyey",
  1379. "sazxgyey",
  1380. "xlzlxyey",
  1381. "dxzxmyey",
  1382. "dtzxmyey",
  1383. "dtzydyey"
  1384. };
  1385. var client = _azureCosmos.GetCosmosClient();
  1386. foreach (var ar in arr)
  1387. {
  1388. SchoolTeacher teacher = new SchoolTeacher
  1389. {
  1390. id = "1528783259",
  1391. code = $"Teacher-{ar}",
  1392. picture = "https://corestorageservice.blob.core.windows.net/account/avatar/1528783259",
  1393. name = "郭杰",
  1394. job = "管理员",
  1395. roles = new List<string> { "admin", "teacher" },
  1396. status = "join",
  1397. pk = "Teacher",
  1398. ttl = -1,
  1399. createTime = 1631703528741,
  1400. };
  1401. await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(teacher, partitionKey: new PartitionKey(teacher.code));
  1402. }
  1403. //await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<School>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1404. //{
  1405. // if (arr.Contains(item.id)) {
  1406. // string periodid = Guid.NewGuid().ToString();
  1407. // string campuses = Guid.NewGuid().ToString();
  1408. // item.period = new List<Period> { new Period { name = "默认学段", id = periodid, campusId = campuses } };
  1409. // item.campuses = new List<Campus> { new Campus { name = "本部", id = campuses } };
  1410. // item.timeZone.label = "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐";
  1411. // item.timeZone.value = "+08:00";
  1412. // await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(item, item.id, new PartitionKey(item.code));
  1413. // }
  1414. //}
  1415. return Ok();
  1416. }
  1417. /// <summary>
  1418. /// 修复学生的id
  1419. /// </summary>
  1420. /// <param name="data"></param>
  1421. /// <returns></returns>
  1422. [ProducesDefaultResponseType]
  1423. //[AuthToken(Roles = "teacher")]
  1424. [HttpPost("fix-teacher")]
  1425. public async Task<IActionResult> FixTeacher(JsonElement data)
  1426. {
  1427. var client = _azureCosmos.GetCosmosClient();
  1428. List<Teacher> teachers = new List<Teacher>();
  1429. string sql = $"SELECT value(c) FROM c ";
  1430. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<Teacher>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1431. {
  1432. teachers.Add(item);
  1433. }
  1434. List<School> schools = new List<School>(0);
  1435. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<School>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1436. {
  1437. schools.Add(item);
  1438. }
  1439. teachers.ForEach(x => {
  1440. x.schools.ForEach(y => {
  1441. School? school = schools.Find(z => z.id.Equals(y.schoolId));
  1442. if (school != null)
  1443. {
  1444. y.name = school.name;
  1445. y.picture = school.picture;
  1446. y.areaId = school.areaId;
  1447. }
  1448. });
  1449. });
  1450. foreach (var item in teachers)
  1451. {
  1452. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(item, item.id, new PartitionKey($"Base"));
  1453. }
  1454. return Ok();
  1455. }
  1456. [ProducesDefaultResponseType]
  1457. //[AuthToken(Roles = "teacher")]
  1458. [HttpPost("fix-item")]
  1459. public async Task<IActionResult> FixItem(JsonElement data)
  1460. {
  1461. var client = _azureCosmos.GetCosmosClient();
  1462. List<School> schools = new List<School>();
  1463. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<School>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1464. {
  1465. schools.Add(item);
  1466. }
  1467. Random random = new Random();
  1468. foreach (var school in schools)
  1469. {
  1470. List<ItemInfo> items = new List<ItemInfo>();
  1471. var queryslt = $"SELECT value(c) FROM c where c.pid = null ";
  1472. List<ItemInfo> noPeriodId = new List<ItemInfo>();
  1473. List<ItemInfo> noSubjectId = new List<ItemInfo>();
  1474. List<ItemInfo> noGradeIds = new List<ItemInfo>();
  1475. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<ItemInfo>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{school.id}") }))
  1476. {
  1477. if (string.IsNullOrEmpty(item.periodId))
  1478. {
  1479. noPeriodId.Add(item);
  1480. }
  1481. if (string.IsNullOrEmpty(item.subjectId))
  1482. {
  1483. noSubjectId.Add(item);
  1484. }
  1485. if (!item.gradeIds.IsNotEmpty())
  1486. {
  1487. noGradeIds.Add(item);
  1488. }
  1489. bool errorData = false;
  1490. foreach (var x in item.gradeIds)
  1491. {
  1492. if (string.IsNullOrEmpty(x))
  1493. {
  1494. errorData = true;
  1495. }
  1496. }
  1497. if (errorData)
  1498. {
  1499. List<string> grds = new List<string>();
  1500. item.gradeIds.ForEach(x => {
  1501. if (string.IsNullOrEmpty(x))
  1502. {
  1503. grds.Add($"{random.Next(0, 5)}");
  1504. }
  1505. else
  1506. {
  1507. grds.Add(x);
  1508. }
  1509. });
  1510. item.gradeIds = grds;
  1511. await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<ItemInfo>(item, item.id, new PartitionKey(item.code));
  1512. }
  1513. items.Add(item);
  1514. }
  1515. List<ItemInfo> unMatch = new List<ItemInfo>();
  1516. foreach (var item in items)
  1517. {
  1518. bool match = false;
  1519. school.period.ForEach(x =>
  1520. {
  1521. if (item.periodId.Equals(x.id))
  1522. {
  1523. if (x.subjects.Select(y => y.id).Contains(item.subjectId))
  1524. {
  1525. match = true;
  1526. }
  1527. }
  1528. });
  1529. if (!match)
  1530. {
  1531. unMatch.Add(item);
  1532. }
  1533. }
  1534. if (noGradeIds.IsNotEmpty())
  1535. {
  1536. var ids = noGradeIds.Select(x => x.id);
  1537. await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
  1538. foreach (var rm in noGradeIds)
  1539. {
  1540. items.Remove(rm);
  1541. }
  1542. }
  1543. if (noPeriodId.IsNotEmpty())
  1544. {
  1545. var ids = noPeriodId.Select(x => x.id);
  1546. await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
  1547. foreach (var rm in noPeriodId)
  1548. {
  1549. items.Remove(rm);
  1550. }
  1551. }
  1552. if (noSubjectId.IsNotEmpty())
  1553. {
  1554. var ids = noSubjectId.Select(x => x.id);
  1555. await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
  1556. foreach (var rm in noSubjectId)
  1557. {
  1558. items.Remove(rm);
  1559. }
  1560. }
  1561. if (unMatch.IsNotEmpty())
  1562. {
  1563. var ids = unMatch.Select(x => x.id);
  1564. await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
  1565. foreach (var rm in unMatch)
  1566. {
  1567. items.Remove(rm);
  1568. }
  1569. }
  1570. List<ItemCond> itemConds = new List<ItemCond>();
  1571. items.GroupBy(x => x.periodId).Select(y => new { key = y.Key, list = y.ToList() }).ToList().ForEach(z =>
  1572. {
  1573. ItemCond cond = new ItemCond() { id = z.key, code = $"ItemCond-{school.id}", pk = "ItemCond", ttl = -1, count = z.list.Count, grades = new List<GradeCount>(), subjects = new List<SubjectItemCount>() };
  1574. z.list.ForEach(y =>
  1575. {
  1576. ItemService.CountItemCond(y, null, cond);
  1577. });
  1578. itemConds.Add(cond);
  1579. });
  1580. itemConds.ForEach(async cond =>
  1581. {
  1582. await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<ItemCond>(cond, new PartitionKey(cond.code));
  1583. });
  1584. }
  1585. return Ok(new { });
  1586. }
  1587. [ProducesDefaultResponseType]
  1588. //[AuthToken(Roles = "teacher")]
  1589. [HttpPost("fix-item-teacher")]
  1590. public async Task<IActionResult> FixItemTeacher(JsonElement data)
  1591. {
  1592. var client = _azureCosmos.GetCosmosClient();
  1593. List<Teacher> teachers = new List<Teacher>();
  1594. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<Teacher>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1595. {
  1596. teachers.Add(item);
  1597. }
  1598. Random random = new Random();
  1599. foreach (var teacher in teachers)
  1600. {
  1601. List<ItemInfo> items = new List<ItemInfo>();
  1602. var queryslt = $"SELECT value(c) FROM c where c.pid = null ";
  1603. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<ItemInfo>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{teacher.id}") }))
  1604. {
  1605. items.Add(item);
  1606. }
  1607. List<ItemInfo> unMatch = new List<ItemInfo>();
  1608. ItemCond cond = new ItemCond() { id = teacher.id, code = $"ItemCond", pk = "ItemCond", ttl = -1, count = items.Count };
  1609. items.ForEach(z =>
  1610. {
  1611. ItemService.CountItemCond(z, null, cond);
  1612. });
  1613. await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<ItemCond>(cond, new PartitionKey(cond.code));
  1614. }
  1615. return Ok(new { });
  1616. }
  1617. /// <summary>
  1618. /// 修复名单的scope,school,creatorid
  1619. /// </summary>
  1620. /// <param name="request"></param>
  1621. /// <returns></returns>
  1622. [ProducesDefaultResponseType]
  1623. //[AuthToken(Roles = "teacher")]
  1624. [HttpPost("fix-stulist-scope&school&creatorid")]
  1625. public async Task<IActionResult> FixStulist(JsonElement data)
  1626. {
  1627. try
  1628. {
  1629. var client = _azureCosmos.GetCosmosClient();
  1630. //先处理未关联课程的教师私人名单
  1631. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<StuList>(queryText: "select value(c) from c ", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("StuList") }))
  1632. {
  1633. string scdsql = $"SELECT value(A1) FROM c join A1 in c.schedule where A1.stulist='{item.id}'";
  1634. int count = 0;
  1635. await foreach (var schedule in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<Schedule>(queryText: scdsql))
  1636. {
  1637. count += 1;
  1638. }
  1639. if (count == 0)
  1640. {
  1641. await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemStreamAsync(item.id, new PartitionKey("StuList"));
  1642. }
  1643. }
  1644. HashSet<string> plistId = new HashSet<string>();
  1645. List<KeyValuePair<string, string>> pkeyValuePairs = new List<KeyValuePair<string, string>>();
  1646. List<StuList> pstuLists = new List<StuList>();
  1647. //List<Course> pcourses = new List<Course>();
  1648. //处理私人名单
  1649. string sql = "select value(c) from c where c.pk='Course' ";
  1650. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<Course>(queryText: sql))
  1651. {
  1652. if (item.schedule.IsNotEmpty())
  1653. {
  1654. foreach (var scd in item.schedule)
  1655. {
  1656. if (!string.IsNullOrEmpty(scd.stulist))
  1657. {
  1658. plistId.Add(scd.stulist);
  1659. var tmdid = item.code.Replace("Course-", "");
  1660. pkeyValuePairs.Add(new KeyValuePair<string, string>(scd.stulist, tmdid));
  1661. item.creatorId = tmdid;
  1662. item.scope = "private";
  1663. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  1664. }
  1665. }
  1666. }
  1667. }
  1668. List<string> pfaildId = new List<string>();
  1669. foreach (var list in plistId)
  1670. {
  1671. try
  1672. {
  1673. StuList stuList = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<StuList>(list, new PartitionKey("StuList"));
  1674. var a = pkeyValuePairs.Where(x => x.Key == list).FirstOrDefault();
  1675. if (stuList.students.IsNotEmpty())
  1676. {
  1677. stuList.school = stuList.students[0].code.Replace("Base-", "");
  1678. }
  1679. stuList.creatorId = a.Value;
  1680. stuList.scope = "private";
  1681. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<StuList>(stuList, list, new PartitionKey("StuList"));
  1682. }
  1683. catch (CosmosException ex)
  1684. {
  1685. pfaildId.Add(list);
  1686. }
  1687. }
  1688. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-stulist-scope&school&creatorid()\n修复失败私人的名单pfaildId:\n {pfaildId.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  1689. //处理学校的名单
  1690. HashSet<string> slistId = new HashSet<string>();
  1691. List<KeyValuePair<string, string>> skeyValuePairs = new List<KeyValuePair<string, string>>();
  1692. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<Course>(queryText: sql))
  1693. {
  1694. if (item.schedule.IsNotEmpty())
  1695. {
  1696. foreach (var scd in item.schedule)
  1697. {
  1698. if (!string.IsNullOrEmpty(scd.stulist))
  1699. {
  1700. slistId.Add(scd.stulist);
  1701. var school = item.code.Replace("Course-", "");
  1702. skeyValuePairs.Add(new KeyValuePair<string, string>(scd.stulist, school));
  1703. item.scope = "school";
  1704. item.school = school;
  1705. await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  1706. }
  1707. }
  1708. }
  1709. }
  1710. List<string> sfaildId = new List<string>();
  1711. foreach (var list in skeyValuePairs)
  1712. {
  1713. try
  1714. {
  1715. StuList stuList = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<StuList>(list.Key, new PartitionKey($"StuList-{list.Value}"));
  1716. stuList.scope = "school";
  1717. stuList.school = list.Value;
  1718. await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<StuList>(stuList, list.Key, new PartitionKey(stuList.code));
  1719. }
  1720. catch (CosmosException ex)
  1721. {
  1722. sfaildId.Add(list.Key);
  1723. }
  1724. }
  1725. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-stulist-scope&school&creatorid()\n修复失败学校的的名单sfaildId:\n {sfaildId.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  1726. return Ok(new { });
  1727. }
  1728. catch (Exception ex)
  1729. {
  1730. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-stulist-scope&school&creatorid()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1731. return BadRequest();
  1732. }
  1733. }
  1734. /// <summary>
  1735. /// 修复blob容器逻辑
  1736. /// </summary>
  1737. /// <param name="request"></param>
  1738. /// <returns></returns>
  1739. [ProducesDefaultResponseType]
  1740. //[AuthToken(Roles = "teacher")]
  1741. [HttpPost("fix-blob-content")]
  1742. public async Task<IActionResult> FixBlobContent(JsonElement data)
  1743. {
  1744. try
  1745. {
  1746. var client = _azureCosmos.GetCosmosClient();
  1747. await FixDataService.FixBlobContent(client, _dingDing, _azureStorage, data);
  1748. return Ok(new { });
  1749. }
  1750. catch (Exception ex)
  1751. {
  1752. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1753. return BadRequest();
  1754. }
  1755. }
  1756. public class SchoolIdSid
  1757. {
  1758. public string id { get; set; }
  1759. public string sid { get; set; }
  1760. public string name { get; set; }
  1761. }
  1762. /// <summary>
  1763. /// 修复blob容器逻辑
  1764. /// </summary>
  1765. /// <param name="request"></param>
  1766. /// <returns></returns>
  1767. [ProducesDefaultResponseType]
  1768. //[AuthToken(Roles = "teacher")]
  1769. [HttpPost("fix-long-schoolid")]
  1770. public async Task<IActionResult> FixLongSchoolId(JsonElement data)
  1771. {
  1772. try
  1773. {
  1774. //{\"id\":\"cdqcsxx\",\"sid\":\"qcsxx\",\"name\":\"青城山学校\"},
  1775. //{\"id\":\"xagxdsbxx\",\"sid\":\"xagxsb\",\"name\":\"西安高新第十八小学\"},{\"id\":\"xajkdbxx\",\"sid\":\"xajkbx\",\"name\":\"西安经开第八小学\"}
  1776. List<JsonElement> elements = new List<JsonElement>();
  1777. // string josn = "[{\"id\":\"pjsywgyxx\",\"sid\":\"psywgy\",\"name\":\"蒲江实验外国语小学\"},{\"id\":\"pjhszcjzx\",\"sid\":\"hscjzx\",\"name\":\"蒲江鹤山镇初级中学\"},{\"id\":\"pjcyhzjnzxx\",\"sid\":\"cyhjnz\",\"name\":\"蒲江朝阳湖镇九年制学校\"},{\"id\":\"pjsazsmxx\",\"sid\":\"psasmx\",\"name\":\"蒲江寿安镇寿民小学\"},{\"id\":\"pjsazcjzx\",\"sid\":\"psacjz\",\"name\":\"蒲江寿安镇初级中学\"},{\"id\":\"pjwxjnzxx\",\"sid\":\"pwxjnx\",\"name\":\"蒲江五星九年制学校\"},{\"id\":\"ptsxxpjfx\",\"sid\":\"pptsfx\",\"name\":\"泡桐树小学蒲江分校(蒲江松华小学)\"},{\"id\":\"pjjysxx\",\"sid\":\"pjjysx\",\"name\":\"蒲江金钥匙学校\"},{\"id\":\"pjxlzjnzxx\",\"sid\":\"xlzjnx\",\"name\":\"蒲江西来镇九年制学校\"},{\"id\":\"pjdtjnzxx\",\"sid\":\"pdtjnx\",\"name\":\"蒲江大塘九年制学校\"},{\"id\":\"pjgxzjnzxx\",\"sid\":\"pgxjnx\",\"name\":\"蒲江甘溪镇九年制学校\"},{\"id\":\"pjcjzjnzxx\",\"sid\":\"pcjjnx\",\"name\":\"蒲江成佳镇九年制学校\"},{\"id\":\"pjdxjnzxx\",\"sid\":\"pdxjnx\",\"name\":\"蒲江大兴九年制学校\"},{\"id\":\"pjnjyey\",\"sid\":\"pnjyey\",\"name\":\"蒲江南街幼儿园\"},{\"id\":\"pjbjyey\",\"sid\":\"pbjyey\",\"name\":\"蒲江北街幼儿园\"},{\"id\":\"pjcbyey\",\"sid\":\"pcbyey\",\"name\":\"蒲江城北幼儿园\"},{\"id\":\"pjcxyey\",\"sid\":\"pcxyey\",\"name\":\"蒲江城西幼儿园\"},{\"id\":\"pjcnyey\",\"sid\":\"pcnyey\",\"name\":\"蒲江城南幼儿园\"},{\"id\":\"pjxj5hyey\",\"sid\":\"xjwhye\",\"name\":\"蒲江熙锦5号幼儿园\"},{\"id\":\"pjxlyey\",\"sid\":\"pxlyey\",\"name\":\"蒲江西来幼儿园\"},{\"id\":\"pjsazxyey\",\"sid\":\"sazxye\",\"name\":\"蒲江寿安中心幼儿园\"},{\"id\":\"pjsaxcyey\",\"sid\":\"saxcye\",\"name\":\"蒲江寿安新城幼儿园\"},{\"id\":\"pjthyey\",\"sid\":\"pthyey\",\"name\":\"蒲江天华幼儿园\"},{\"id\":\"pjsmyey\",\"sid\":\"psmyey\",\"name\":\"蒲江寿民幼儿园\"},{\"id\":\"pjshyey\",\"sid\":\"pshyey\",\"name\":\"蒲江松华幼儿园\"},{\"id\":\"pjwxyey\",\"sid\":\"pwxyey\",\"name\":\"蒲江五星幼儿园\"},{\"id\":\"pjjysyey\",\"sid\":\"pjysye\",\"name\":\"蒲江金钥匙幼儿园\"},{\"id\":\"pjfxyey\",\"sid\":\"pfxyey\",\"name\":\"蒲江复兴幼儿园\"},{\"id\":\"pjgxyey\",\"sid\":\"pgxyey\",\"name\":\"蒲江甘溪幼儿园\"},{\"id\":\"pjcjyey\",\"sid\":\"pcjyey\",\"name\":\"蒲江成佳幼儿园\"},{\"id\":\"pjcyhyey\",\"sid\":\"pcyhye\",\"name\":\"蒲江朝阳湖幼儿园\"},{\"id\":\"pjbyyey\",\"sid\":\"pbyyey\",\"name\":\"蒲江白云幼儿园\"},{\"id\":\"pjdtyey\",\"sid\":\"pdtyey\",\"name\":\"蒲江大塘幼儿园\"},{\"id\":\"pjnjyeydxfy\",\"sid\":\"njyedx\",\"name\":\"蒲江南街幼儿园大兴分园\"},{\"id\":\"pjcxyeygmfy\",\"sid\":\"cxyegm\",\"name\":\"蒲江城西幼儿园光明分园\"},{\"id\":\"pjcbyeygqfy\",\"sid\":\"cbyrgq\",\"name\":\"蒲江城北幼儿园高桥分园\"},{\"id\":\"pjsaxcyeyzqfy\",\"sid\":\"saxyqf\",\"name\":\"蒲江寿安新城幼儿园长秋分园\"},{\"id\":\"pjxyheyey\",\"sid\":\"xyheye\",\"name\":\"星源慧恩幼儿园\"},{\"id\":\"pjxhyey\",\"sid\":\"xhyey\",\"name\":\"仙鹤幼儿园\"},{\"id\":\"pjxbeyey\",\"sid\":\"xbeyey\",\"name\":\"轩贝尔幼儿园\"},{\"id\":\"pjhhzyey\",\"sid\":\"hhzyey\",\"name\":\"好孩子幼儿园\"},{\"id\":\"pjxxyey\",\"sid\":\"xxyey\",\"name\":\"新星幼儿园\"},{\"id\":\"sazxgyey\",\"sid\":\"saxgye\",\"name\":\"寿安镇星光幼儿园\"},{\"id\":\"xlzlxyey\",\"sid\":\"xllxye\",\"name\":\"西来镇李霞幼儿园\"},{\"id\":\"dxzxmyey\",\"sid\":\"dxxmye\",\"name\":\"大兴镇新苗幼儿园\"},{\"id\":\"dtzxmyey\",\"sid\":\"dtxmye\",\"name\":\"大塘镇新苗幼儿园\"},{\"id\":\"dtzydyey\",\"sid\":\"dtydye\",\"name\":\"大塘镇雨朵幼儿园\"},{\"id\":\"jnqzhjyzzjspxb\",\"sid\":\"jnzzjy\",\"name\":\"金牛区智慧教育种子教师培训班\"}]";
  1778. string josn = "[{\"id\":\"xagxdsbxx\",\"sid\":\"xagxsb\",\"name\":\"西安高新第十八小学\"},{\"id\":\"xajkdbxx\",\"sid\":\"xajkbx\",\"name\":\"西安经开第八小学\"}]";
  1779. List<SchoolIdSid> schools = josn.ToObject<List<SchoolIdSid>>();
  1780. var client = _azureCosmos.GetCosmosClient();
  1781. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIteratorSql(queryText: "select value(c) from c ", requestOptions: new QueryRequestOptions() { }))
  1782. {
  1783. using var json = await JsonDocument.ParseAsync(item.Content);
  1784. List<string> ids = schools.Select(x => x.id).ToList();
  1785. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  1786. {
  1787. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  1788. {
  1789. string s = obj.ToJsonString();
  1790. IdCode idcode = s.ToObject<IdCode>();
  1791. foreach (var id in ids)
  1792. {
  1793. if (idcode.id.Contains(id) || idcode.code.Contains(id))
  1794. {
  1795. await client.GetContainer(Constant.TEAMModelOS, "Common").DeleteItemStreamAsync(idcode.id, new PartitionKey(idcode.code));
  1796. elements.Add(s.ToObject<JsonElement>());
  1797. }
  1798. }
  1799. }
  1800. }
  1801. }
  1802. return Ok(new { elements });
  1803. }
  1804. catch (Exception ex)
  1805. {
  1806. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1807. return BadRequest();
  1808. }
  1809. }
  1810. public class IdCode
  1811. {
  1812. public string id { get; set; }
  1813. public string code { get; set; }
  1814. }
  1815. public class CSchool
  1816. {
  1817. public string id { get; set; }
  1818. public string name { get; set; }
  1819. public string admin { get; set; }
  1820. public List<string> period { get; set; } = new List<string>();
  1821. public int size { get; set; } = 100;
  1822. }
  1823. /// <summary>
  1824. /// 修复blob容器逻辑
  1825. /// </summary>
  1826. /// <param name="request"></param>
  1827. /// <returns></returns>
  1828. [ProducesDefaultResponseType]
  1829. //[AuthToken(Roles = "teacher")]
  1830. [HttpPost("create-school")]
  1831. public async Task<IActionResult> CreateSchool(JsonElement data)
  1832. {
  1833. try
  1834. {
  1835. List<CSchool> schools = new List<CSchool>() {
  1836. new CSchool{
  1837. id="sqtszx",
  1838. name="四川师范大学附属青台山中学",
  1839. admin="1530606136",
  1840. period=new List<string>(){ "初中","高中"},
  1841. size=100,
  1842. }
  1843. };
  1844. var client = _azureCosmos.GetCosmosClient();
  1845. foreach (var sc in schools)
  1846. {
  1847. List<Period> periods = new List<Period>();
  1848. string campusId = Guid.NewGuid().ToString();
  1849. sc.period.ForEach(x => {
  1850. periods.Add(new Period { id = Guid.NewGuid().ToString(), name = x, campusId = campusId });
  1851. });
  1852. School school = new School
  1853. {
  1854. id = sc.id,
  1855. name = sc.name,
  1856. size = sc.size,
  1857. code = "Base",
  1858. campuses = new List<Campus> { new Campus { name = sc.name, id = campusId } },
  1859. region = "中国",
  1860. province = "四川",
  1861. city = "成都",
  1862. timeZone = new SDK.Models.TimeZone { label = "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐", value = "+08:00" },
  1863. type = 2,
  1864. pk = "School",
  1865. ttl = -1,
  1866. schoolCode = sc.id,
  1867. period = periods
  1868. };
  1869. await client.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<School>(school, new PartitionKey(school.code));
  1870. Teacher teacher = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>(sc.admin, new PartitionKey("Base"));
  1871. teacher.schools.Add(new Teacher.TeacherSchool { schoolId = sc.id, name = sc.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
  1872. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, sc.admin, new PartitionKey("Base"));
  1873. SchoolTeacher schoolTeacher = new SchoolTeacher
  1874. {
  1875. id = sc.admin,
  1876. code = $"Teacher-{sc.id}",
  1877. roles = new List<string> { "admin", "teacher" },
  1878. job = "管理员",
  1879. name = teacher.name,
  1880. picture = teacher.picture,
  1881. status = "join",
  1882. createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
  1883. pk = "Teacher",
  1884. ttl = -1,
  1885. };
  1886. await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
  1887. }
  1888. return Ok(new { });
  1889. }
  1890. catch (Exception ex)
  1891. {
  1892. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1893. return BadRequest();
  1894. }
  1895. }
  1896. /// <summary>
  1897. /// 修复blob容器逻辑
  1898. /// </summary>
  1899. /// <param name="request"></param>
  1900. /// <returns></returns>
  1901. [ProducesDefaultResponseType]
  1902. //[AuthToken(Roles = "teacher")]
  1903. [HttpPost("fix-student-info")]
  1904. public async Task<IActionResult> FixStudentInfo(JsonElement data)
  1905. {
  1906. try
  1907. {
  1908. var client = _azureCosmos.GetCosmosClient();
  1909. var list = await FixDataService.FixStudentInfo(client, _dingDing, _azureStorage, data);
  1910. return Ok(new { list });
  1911. }
  1912. catch (Exception ex)
  1913. {
  1914. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1915. return BadRequest();
  1916. }
  1917. }
  1918. /// <summary>
  1919. /// 修正學段ID非英數邏輯
  1920. /// </summary>
  1921. /// <param name="request"></param>
  1922. /// <returns></returns>
  1923. [ProducesDefaultResponseType]
  1924. //[AuthToken(Roles = "teacher")]
  1925. [HttpPost("fix-periodid")]
  1926. public async Task<IActionResult> FixPeriodid(JsonElement data)
  1927. {
  1928. try
  1929. {
  1930. if (!data.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  1931. string schoolCode = school_code.GetString();
  1932. var client = _azureCosmos.GetCosmosClient();
  1933. //學校 Base
  1934. List<string> periodList = await FixDataService.FixSchoolPeriodId(client, schoolCode);
  1935. if (periodList.Count > 0)
  1936. {
  1937. string periodId = periodList[0]; //修正的問題校都只有一個學段,以第一個學段ID為其餘資料的學段ID
  1938. Dictionary<string, string> dataDic = new Dictionary<string, string>();
  1939. dataDic["periodId"] = periodId;
  1940. //班級 Class
  1941. List<string> fixClassIdList = await FixDataService.FixClassInfo(client, schoolCode, dataDic);
  1942. //課程 Course
  1943. List<string> fixCourseIdList = await FixDataService.FixCourseInfo(client, schoolCode, dataDic);
  1944. //知識點 Knowledge
  1945. List<string> fixKnowledgeIdList = await FixDataService.FixKnowledgeInfo(client, schoolCode, dataDic);
  1946. //試題 Item
  1947. List<string> fixItemIdList = await FixDataService.FixItemInfo(client, schoolCode, dataDic);
  1948. //試卷 Paper
  1949. List<string> fixPaperIdList = await FixDataService.FixPaperInfo(client, schoolCode, dataDic);
  1950. //課綱 Volume
  1951. List<string> fixVolumeIdList = await FixDataService.FixVolumeInfo(client, schoolCode, dataDic);
  1952. //評測 Exam
  1953. List<string> fixExamIdList = await FixDataService.FixExamInfo(client, schoolCode, dataDic);
  1954. //學生 Student
  1955. List<string> fixStudentIdList = await FixDataService.FixStudentInfo(client, schoolCode, dataDic);
  1956. return Ok(new { schoolCode, fixClassIdList, fixCourseIdList, fixKnowledgeIdList, fixItemIdList, fixPaperIdList, fixVolumeIdList, fixExamIdList, fixStudentIdList });
  1957. }
  1958. else
  1959. {
  1960. string message = "No period is changed";
  1961. return Ok(new { message });
  1962. }
  1963. }
  1964. catch (Exception ex)
  1965. {
  1966. //await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-periodid()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1967. return BadRequest();
  1968. }
  1969. }
  1970. /// <summary>
  1971. /// 修复评测publish字段内容
  1972. /// </summary>
  1973. /// <param name="req"></param>
  1974. /// <param name="log"></param>
  1975. /// <returns></returns>
  1976. [ProducesDefaultResponseType]
  1977. //[AuthToken(Roles = "teacher")]
  1978. [HttpPost("fix-exam-publish")]
  1979. public async Task<IActionResult> FixExamPublish(JsonElement data)
  1980. {
  1981. var client = _azureCosmos.GetCosmosClient();
  1982. List<string> infos = await FixDataService.FixExamPublish(client, _dingDing, data, _option);
  1983. return Ok(new { infos });
  1984. }
  1985. [ProducesDefaultResponseType]
  1986. //[AuthToken(Roles = "teacher")]
  1987. [HttpPost("fix-exam-class-result")]
  1988. public async Task<IActionResult> FixExamClassResult(JsonElement data)
  1989. {
  1990. var client = _azureCosmos.GetCosmosClient();
  1991. List<string> infos = await FixDataService.FixExamClassResult(client, data, _dingDing, _coreAPIHttpService, _option);
  1992. return Ok(new { infos });
  1993. }
  1994. [ProducesDefaultResponseType]
  1995. //[AuthToken(Roles = "teacher")]
  1996. [HttpPost("fix-school-type")]
  1997. public async Task<IActionResult> FixSchoolType(JsonElement data)
  1998. {
  1999. var client = _azureCosmos.GetCosmosClient();
  2000. List<string> infos = await FixDataService.FixSchoolType(client, data, _dingDing, _coreAPIHttpService, _option);
  2001. return Ok(new { infos });
  2002. }
  2003. [ProducesDefaultResponseType]
  2004. //[AuthToken(Roles = "teacher")]
  2005. [HttpPost("fix-lesson-count")]
  2006. public async Task<IActionResult> FixLessonCount(JsonElement data)
  2007. {
  2008. if (!data.TryGetProperty("code", out JsonElement code)) return BadRequest();
  2009. var client = _azureCosmos.GetCosmosClient();
  2010. var queryClass = $"select value(c) from c";
  2011. List<LessonRecord> records = new List<LessonRecord>();
  2012. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<LessonRecord>(queryText: queryClass, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"LessonRecord-{code}") }))
  2013. {
  2014. records.Add(item);
  2015. }
  2016. List<string> infos = new();
  2017. foreach (LessonRecord lesson in records) {
  2018. LessonDis dis = new();
  2019. dis = LessonService.DisLessonCount_2(null, lesson, dis);
  2020. await LessonService.FixLessonCount(client, _dingDing, lesson, null, dis);
  2021. }
  2022. return Ok(new { infos });
  2023. }
  2024. /// <summary>
  2025. /// add admin
  2026. /// </summary>
  2027. /// <param name="req"></param>
  2028. /// <param name="log"></param>
  2029. /// <returns></returns>
  2030. [ProducesDefaultResponseType]
  2031. //[AuthToken(Roles = "teacher")]
  2032. [HttpPost("add-area-school-admin")]
  2033. public async Task<IActionResult> AddAreaSchoolAdmin(JsonElement data)
  2034. {
  2035. List<School> errorSchool = new List<School>();
  2036. var client = _azureCosmos.GetCosmosClient();
  2037. List<string> tmdids = data.GetProperty("tmdids").ToObject<List<string>>();
  2038. data.TryGetProperty("areaId", out JsonElement areaId);
  2039. data.TryGetProperty("schoolIds", out JsonElement schoolIds);
  2040. data.TryGetProperty("addSchool", out JsonElement addSchool);
  2041. data.TryGetProperty("areaAdmin", out JsonElement areaAdmin);
  2042. List<string> ids = new List<string>();
  2043. string idsSql = "";
  2044. if (schoolIds.ValueKind.Equals(JsonValueKind.Array))
  2045. {
  2046. ids = schoolIds.ToObject<List<string>>();
  2047. if (ids.IsNotEmpty())
  2048. {
  2049. idsSql = $" c.id in ({string.Join(",", ids.Select(x => $"'{x}'"))})";
  2050. }
  2051. }
  2052. List<School> schools = new List<School>();
  2053. if (addSchool.ValueKind.Equals(JsonValueKind.Array))
  2054. {
  2055. List<School> codes = new();
  2056. codes = addSchool.ToObject<List<School>>();
  2057. List<School> schoolsNew = new List<School>();
  2058. string _areaId = null;
  2059. if (!string.IsNullOrWhiteSpace($"{areaId}"))
  2060. {
  2061. _areaId = $"{areaId}";
  2062. }
  2063. int scale = 0;
  2064. data.TryGetProperty("scale", out JsonElement _scale);
  2065. if (!string.IsNullOrWhiteSpace($"{_scale}"))
  2066. {
  2067. int.TryParse($"{_scale}", out scale);
  2068. }
  2069. int size = 0;
  2070. data.TryGetProperty("size", out JsonElement _size);
  2071. if (!string.IsNullOrWhiteSpace($"{_size}"))
  2072. {
  2073. int.TryParse($"{_size}", out size);
  2074. }
  2075. codes.ForEach(x => {
  2076. string campusId = Guid.NewGuid().ToString();
  2077. List<Period> periods = new List<Period>();
  2078. periods.Add(new Period
  2079. {
  2080. id = Guid.NewGuid().ToString(),
  2081. name = x.name,
  2082. campusId = campusId,
  2083. semesterCount = 2,
  2084. gradeCount = 1,
  2085. grades = new List<string> { "一年级" },
  2086. subjectCount = 1,
  2087. subjects = new List<Subject> { new Subject { name = "预设学科", id = Guid.NewGuid().ToString() } },
  2088. semesters = new List<Semester>
  2089. {
  2090. new Semester { name = "上学期", start = 1, month = 9, day = 1, id = Guid.NewGuid().ToString() },
  2091. new Semester { name = "下学期", start = 0, month = 3, day = 1, id = Guid.NewGuid().ToString() }
  2092. },
  2093. });
  2094. School school = new School
  2095. {
  2096. id = x.id,
  2097. name = x.name,
  2098. size = size,
  2099. code = "Base",
  2100. campuses = new List<Campus> { new Campus { name = x.name, id = campusId } },
  2101. region = "中国",
  2102. province = x.province,
  2103. city = $"{x.city}",
  2104. timeZone = new SDK.Models.TimeZone { label = "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐", value = "+08:00" },
  2105. type = 1,
  2106. pk = "School",
  2107. ttl = -1,
  2108. schoolCode = x.id,
  2109. dist = $"{x.dist}",
  2110. period = periods,
  2111. areaId = String.IsNullOrWhiteSpace($"{areaId}") ? null : $"{areaId}",
  2112. standard = $"standard2"
  2113. };
  2114. schoolsNew.Add(school);
  2115. });
  2116. foreach (var sch in schoolsNew) {
  2117. try
  2118. {
  2119. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(sch, new PartitionKey("Base"));
  2120. schools.Add(sch);
  2121. }
  2122. catch (CosmosException ex) {
  2123. errorSchool.Add(sch);
  2124. }
  2125. }
  2126. }
  2127. string areaIdsql = string.IsNullOrWhiteSpace($"{areaId}") ? "-0000000" : $"{areaId}";
  2128. string sql = $"select distinct value(c) from c where {idsSql}";
  2129. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<School>(
  2130. queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2131. {
  2132. schools.Add(item);
  2133. }
  2134. long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  2135. ResponseMessage responseArea = await client.GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemStreamAsync($"{areaId}", new PartitionKey("Base-Area"));
  2136. Area area = null;
  2137. if (responseArea.StatusCode==System.Net.HttpStatusCode.OK)
  2138. {
  2139. area = JsonDocument.Parse(responseArea.Content).RootElement.ToObject<Area>();
  2140. }
  2141. List<Teacher> teachers = new List<Teacher>();
  2142. List<SchoolTeacher> schoolsTeachers = new List<SchoolTeacher>();
  2143. foreach (var tmdid in tmdids)
  2144. {
  2145. Teacher teacher = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<Teacher>(tmdid, new PartitionKey("Base"));
  2146. if (areaAdmin.ValueKind.Equals(JsonValueKind.True) && !string.IsNullOrWhiteSpace($"{areaId}") && area != null)
  2147. {
  2148. if (teacher.areas.IsNotEmpty())
  2149. {
  2150. if (!teacher.areas.Select(x => x.areaId).Contains(area.id))
  2151. {
  2152. teacher.areas.Add(new Teacher.TeacherArea { areaId = area.id, name = area.name, status = "join" });
  2153. }
  2154. }
  2155. else
  2156. {
  2157. teacher.areas = new List<Teacher.TeacherArea> { new Teacher.TeacherArea { areaId = area.id, name = area.name, status = "join" } };
  2158. }
  2159. }
  2160. foreach (var school in schools)
  2161. {
  2162. if (!string.IsNullOrWhiteSpace($"{areaId}")) {
  2163. school.areaId = $"{areaId}";
  2164. }
  2165. data.TryGetProperty("scale", out JsonElement _scale);
  2166. if (!string.IsNullOrWhiteSpace($"{_scale}"))
  2167. {
  2168. int scale = 0;
  2169. int.TryParse($"{_scale}", out scale);
  2170. if (scale > 0) {
  2171. school.scale = scale;
  2172. }
  2173. }
  2174. data.TryGetProperty("size", out JsonElement _size);
  2175. if (!string.IsNullOrWhiteSpace($"{_size}"))
  2176. {
  2177. int size = 0;
  2178. int.TryParse($"{_size}", out size);
  2179. if (size > 0)
  2180. {
  2181. school.size = size;
  2182. }
  2183. }
  2184. await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(school, school.id, new PartitionKey("Base"));
  2185. ResponseMessage response = await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemStreamAsync(tmdid, new PartitionKey($"Teacher-{school.id}"));
  2186. if (response.StatusCode==System.Net.HttpStatusCode.OK)
  2187. {
  2188. SchoolTeacher schoolTeacher = JsonDocument.Parse(response.Content).RootElement.ToObject<SchoolTeacher>();
  2189. if (schoolTeacher.roles == null)
  2190. {
  2191. schoolTeacher.roles = new List<string> { "admin" };
  2192. }
  2193. if (!schoolTeacher.roles.Contains("admin"))
  2194. {
  2195. schoolTeacher.roles.Add("admin");
  2196. }
  2197. schoolTeacher.name = teacher.name;
  2198. schoolTeacher.picture = teacher.picture;
  2199. schoolTeacher.createTime = now;
  2200. schoolTeacher.subjectIds = schoolTeacher.subjectIds == null ? new List<string>() : schoolTeacher.subjectIds;
  2201. schoolTeacher.status = "join";
  2202. schoolTeacher.job = "管理员";
  2203. schoolTeacher.pk = "Teacher";
  2204. await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(schoolTeacher, tmdid, new PartitionKey($"Teacher-{school.id}"));
  2205. schoolsTeachers.Add(schoolTeacher);
  2206. }
  2207. else
  2208. {
  2209. SchoolTeacher schoolTeacher = new SchoolTeacher()
  2210. {
  2211. id = tmdid,
  2212. code = $"Teacher-{school.id}",
  2213. roles = new List<string> { "admin", "teacher" },
  2214. permissions = new List<string>(),
  2215. };
  2216. schoolTeacher.name = teacher.name;
  2217. schoolTeacher.picture = teacher.picture;
  2218. schoolTeacher.createTime = now;
  2219. schoolTeacher.subjectIds = schoolTeacher.subjectIds == null ? new List<string>() : schoolTeacher.subjectIds;
  2220. schoolTeacher.status = "join";
  2221. schoolTeacher.job = "管理员";
  2222. schoolTeacher.pk = "Teacher";
  2223. await client.GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(schoolTeacher, new PartitionKey($"Teacher-{school.id}"));
  2224. schoolsTeachers.Add(schoolTeacher);
  2225. }
  2226. if (teacher.schools.IsNotEmpty())
  2227. {
  2228. if (!teacher.schools.Select(x => x.schoolId).Contains(school.id))
  2229. {
  2230. teacher.schools.Add(new Teacher.TeacherSchool { schoolId = school.id, areaId = school.areaId, picture = school.picture, name = school.name, status = "join", time = now });
  2231. }
  2232. else
  2233. {
  2234. var sch = teacher.schools.Find(x => x.schoolId.Equals(school.id));
  2235. if (sch != null)
  2236. {
  2237. sch.time = now;
  2238. sch.name = school.name;
  2239. sch.areaId = school.areaId;
  2240. sch.picture = school.picture;
  2241. sch.status = "join";
  2242. }
  2243. }
  2244. }
  2245. else
  2246. {
  2247. teacher.schools = new List<Teacher.TeacherSchool> { new Teacher.TeacherSchool { schoolId = school.id, areaId = school.areaId, picture = school.picture, name = school.name, status = "join", time = now } };
  2248. }
  2249. }
  2250. await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(teacher, tmdid, new PartitionKey($"Base"));
  2251. teachers.Add(teacher);
  2252. }
  2253. return Ok(new { teachers, schoolsTeachers, errorSchool });
  2254. }
  2255. /// <summary>
  2256. /// 修复评测publish字段内容
  2257. /// </summary>
  2258. /// <param name="req"></param>
  2259. /// <param name="log"></param>
  2260. /// <returns></returns>
  2261. [ProducesDefaultResponseType]
  2262. //[AuthToken(Roles = "teacher")]
  2263. [HttpGet("fix-group-list")]
  2264. public async Task<IActionResult> FixGroupList()
  2265. {
  2266. List<GroupList> groupLists = new List<GroupList>();
  2267. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIteratorSql<GroupList>
  2268. (queryText: "select value(c) from c ", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("GroupList") }))
  2269. {
  2270. groupLists.Add(item);
  2271. }
  2272. List<GroupList> groupLists_up = new List<GroupList>();
  2273. groupLists.ForEach(async list => {
  2274. var smembers = list.members.Where(x => x.type == 2);
  2275. list.scount = smembers.Count();
  2276. if (smembers.Count() > 0 && smembers.Select(x => x.code).ToHashSet().Count() >= 2)
  2277. {
  2278. //处理移除多个学校的名单,只保留一个学校的。
  2279. if (string.IsNullOrWhiteSpace(list.school))
  2280. {
  2281. HashSet<string> codes = smembers.Select(x => x.code).ToHashSet();
  2282. list.school = codes.First();
  2283. codes.Remove(codes.First());
  2284. list.members.RemoveAll(x => codes.Contains(x.code));
  2285. }
  2286. else
  2287. {
  2288. list.members.RemoveAll(x => !x.code.Equals(list.school));
  2289. }
  2290. groupLists_up.Add(list);
  2291. }
  2292. if (smembers.Count() > 0 && smembers.Select(x => x.code).ToHashSet().Count() == 1)
  2293. {
  2294. if (string.IsNullOrWhiteSpace(list.school))
  2295. {
  2296. HashSet<string> codes = smembers.Select(x => x.code).ToHashSet();
  2297. list.school = codes.First();
  2298. }
  2299. groupLists_up.Add(list);
  2300. }
  2301. });
  2302. foreach (var item in groupLists_up)
  2303. {
  2304. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2305. }
  2306. return Ok();
  2307. }
  2308. /// 设置省平台相关账号为管理员,直接操作School的 PK=Teacher
  2309. /// </summary>
  2310. /// <param name="request"></param>
  2311. /// <returns></returns>
  2312. [ProducesDefaultResponseType]
  2313. [HttpPost("set-sc-admin-by-tmdid")]
  2314. public async Task<IActionResult> SetScAdminByTmdid(JsonElement request) {
  2315. if (!request.TryGetProperty("userkeys", out JsonElement _userkeys)) { return BadRequest(); }
  2316. List<string> userkeys = _userkeys.ToObject<List<string>>();
  2317. List<string> nokey = new List<string>();
  2318. var content = new StringContent(userkeys.Select(x => x).ToJsonString(), Encoding.UTF8, "application/json");
  2319. string json = await _coreAPIHttpService.GetUserInfos(content);
  2320. List<CoreUser> tmdInfos = json.ToObject<List<CoreUser>>();
  2321. List<string> noreg = new List<string>();
  2322. var notin = userkeys.Except(tmdInfos.Select(x => x.searchKey));
  2323. if (notin.Any())
  2324. {
  2325. noreg.AddRange(notin);
  2326. }
  2327. string sql = $"select value(c) from c where c.pk='Teacher' and c.id in ({string.Join(",", tmdInfos.Select(x => $"'{x.id}'"))})";
  2328. List<SchoolTeacher> schoolTeachers = new List<SchoolTeacher>();
  2329. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<SchoolTeacher>(queryText: sql))
  2330. {
  2331. schoolTeachers.Add(item);
  2332. }
  2333. var noid= tmdInfos.Select(x => x.id).Except(schoolTeachers.Select(z => z.id));
  2334. if (noid.Any()) {
  2335. var a = tmdInfos.FindAll(x => noid.Contains(x.id));
  2336. nokey.AddRange(a.Select(x=>x.searchKey));
  2337. }
  2338. var groups = schoolTeachers.GroupBy(x => x.id).Select(y => new { key = y.Key, list = y.ToList() });
  2339. var countMore1 = groups.Where(x => x.list.Count > 1).SelectMany(x => x.list);
  2340. var countEqual1 = groups.Where(x => x.list.Count == 1).SelectMany(x => x.list);
  2341. countEqual1.ToList().ForEach(x => {
  2342. if (!x.roles.Contains("admin")) {
  2343. x.roles.Add("admin");
  2344. }
  2345. });
  2346. foreach (var item in countEqual1) {
  2347. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2348. }
  2349. return Ok(new { countMore1, countEqual1 , nokey,noreg});
  2350. }
  2351. /// <summary>
  2352. /// 所有学校添加国家智慧教育公共服务平台 https://www.smartedu.cn/
  2353. /// </summary>
  2354. /// <param name="jsonElement"></param>
  2355. /// <returns></returns>
  2356. [HttpPost("set-school-smartedu")]
  2357. public async Task<IActionResult> SetSchoolSmartedu(JsonElement json)
  2358. {
  2359. string sql = "select value(c.id) from c join a in c.third join b in a.links where b.url='https://basic.smartedu.cn/'";
  2360. List<string> schoolIdsAdded = new List<string>();
  2361. //已经添加的
  2362. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<string>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("SchoolSetting") }))
  2363. {
  2364. schoolIdsAdded.Add(item);
  2365. }
  2366. string sqlSchool = "select value(c.id) from c ";
  2367. List<string> schoolIdsAddHas = new List<string>();
  2368. //未添加的=有SchoolSetting的-已经添加的
  2369. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<string>(queryText: sqlSchool, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("SchoolSetting") }))
  2370. {
  2371. schoolIdsAddHas.Add(item);
  2372. }
  2373. string linkName = "国家智慧教育公共服务平台";
  2374. string linkUrl = "https://www.smartedu.cn/";
  2375. //没有添加的
  2376. var schoolIdsAddNo = schoolIdsAddHas.Except(schoolIdsAdded);
  2377. //新添加的
  2378. List<string> schoolIdsAddNew = new List<string>();
  2379. if (schoolIdsAddHas.IsNotEmpty()) {
  2380. string sqlAdd = $"select value(c.id) from c where c.id not in ({string.Join(",", schoolIdsAddHas.Select(x => $"'{x}'"))})";
  2381. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<string>(queryText: sqlAdd, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2382. {
  2383. schoolIdsAddNew.Add(item);
  2384. }
  2385. foreach (var item in schoolIdsAddNew) {
  2386. SchoolSetting setting = new SchoolSetting
  2387. {
  2388. id = item,
  2389. code = "SchoolSetting",
  2390. pk = "SchoolSetting",
  2391. third = new List<Policy> { new Policy { tag = "default", links = new List<Link> { new Link { name = linkName, url = linkUrl } } } }
  2392. };
  2393. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(setting, new PartitionKey("SchoolSetting"));
  2394. }
  2395. }
  2396. foreach (var item in schoolIdsAddNo) {
  2397. SchoolSetting setting = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<SchoolSetting>(item, new PartitionKey("SchoolSetting"));
  2398. if (setting.third.IsNotEmpty())
  2399. {
  2400. var defaultTag = setting.third.Find(x => x.tag.Equals("default"));
  2401. if (defaultTag != null)
  2402. {
  2403. if (defaultTag.links.IsNotEmpty())
  2404. {
  2405. defaultTag.links.Add(new Link { name = linkName, url = linkUrl });
  2406. }
  2407. else {
  2408. defaultTag.links = new List<Link> { new Link { name = linkName, url = linkUrl } };
  2409. }
  2410. }
  2411. else {
  2412. setting.third.Add(new Policy { tag = "default", links = new List<Link> { new Link { name = linkName, url = linkUrl } } });
  2413. }
  2414. }
  2415. else {
  2416. setting.third = new List<Policy> { new Policy { tag = "default", links = new List<Link> { new Link { name = linkName, url = linkUrl } } } };
  2417. }
  2418. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(setting, setting.id, new PartitionKey("SchoolSetting"));
  2419. }
  2420. return Ok(new { schoolIdsAddNo, schoolIdsAddNew });
  2421. }
  2422. /// <summary>
  2423. /// 给学校空间设置1024T,按区域。
  2424. /// </summary>
  2425. /// <param name="jsonElement"></param>
  2426. /// <returns></returns>
  2427. [HttpPost("fix-school-blobsize")]
  2428. public async Task<IActionResult> FixSchoolBlobSize(JsonElement json) {
  2429. string sql = "select value(c) from c where c.areaId in " +
  2430. "('99a4a33b-e21b-44ac-80a1-b31dc40496e0','f35e0031-a53f-45e5-b307-1cd39446a2cf'," +
  2431. "'2c1b01fe-3641-464f-8499-7be95a489b7c','9ae614ba-0771-4502-a56e-0537bc5207c3'," +
  2432. "'870a5a6b-1ab3-461a-bdeb-baec19780ddb','dd15017a-f361-4346-852e-8eee71d027ad')";
  2433. List<School> schools = new List<School>();
  2434. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") })) {
  2435. schools.Add(item);
  2436. }
  2437. schools.ForEach(x => { x.size = 1024; });
  2438. foreach (var item in schools) {
  2439. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2440. }
  2441. return Ok(schools);
  2442. }
  2443. /// <summary>
  2444. /// 给学校空间设置1024T,按区域。
  2445. /// </summary>
  2446. /// <param name="jsonElement"></param>
  2447. /// <returns></returns>
  2448. [HttpPost("fix-school-subjects-type")]
  2449. public async Task<IActionResult> FixSchoolSubjectsType(JsonElement json)
  2450. {
  2451. string sql = " SELECT distinct value(c) FROM c join p in c. period join s in p.subjects where s.type=0 ";
  2452. List<School> schools = new List<School>();
  2453. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2454. {
  2455. schools.Add(item);
  2456. }
  2457. schools.ForEach(x => {
  2458. x.period.ForEach(p => {
  2459. p.subjects.ForEach(s => {
  2460. if (s.type == 0)
  2461. {
  2462. s.type = 1;
  2463. }
  2464. });
  2465. });
  2466. });
  2467. foreach (var item in schools)
  2468. {
  2469. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2470. }
  2471. return Ok(schools);
  2472. }
  2473. /// <summary>
  2474. /// 重置能力点上传作品的评分状态
  2475. /// </summary>
  2476. /// <param name="jsonElement"></param>
  2477. /// <returns></returns>
  2478. [HttpPost("reset-ability-upload-school")]
  2479. public async Task<IActionResult> ResetAbilityUploadSchool(JsonElement json) {
  2480. var client = _azureCosmos.GetCosmosClient();
  2481. string sql = "SELECT distinct value(c) FROM c join b in c.otherScore where c.id='c57f3650-7f1a-4bc0-bb66-f19e6ac03fd8' and array_length(c.uploads)>0 and array_length(c.otherScore)>0 and b.roleType='school' ";
  2482. List<AbilitySub> abilitySubs = new List<AbilitySub>();
  2483. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIteratorSql<AbilitySub>(queryText: sql))
  2484. {
  2485. abilitySubs.Add(item);
  2486. }
  2487. List<TeacherTrain> teacherTrains = new List<TeacherTrain>();
  2488. foreach (var item in abilitySubs) {
  2489. item.otherScore.RemoveAll(x => x.roleType.Equals("school"));
  2490. // TeacherAbility item.creatorId
  2491. TeacherTrain teacherTrain = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<TeacherTrain>(item.creatorId, new PartitionKey($"TeacherTrain-{item.school}"));
  2492. teacherTrain.update.Add("TeacherAbility");
  2493. teacherTrains.Add(teacherTrain);
  2494. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(teacherTrain, teacherTrain.id, new PartitionKey(teacherTrain.code));
  2495. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2496. }
  2497. return Ok(new { teacherTrains, abilitySubs });
  2498. }
  2499. /// <summary>
  2500. /// 学校设置学期
  2501. /// </summary>
  2502. /// <param name="jsonElement"></param>
  2503. /// <returns></returns>
  2504. [HttpPost("fix-school-semester")]
  2505. public async Task<IActionResult> FixSchoolSemester(JsonElement json) {
  2506. var client = _azureCosmos.GetCosmosClient();
  2507. string sql = " SELECT value(c) FROM c ";
  2508. var schools = new List<School>();
  2509. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2510. {
  2511. schools.Add(item);
  2512. }
  2513. HashSet<School> schoolsSet = new HashSet<School>();
  2514. schools.ForEach(x => {
  2515. if (x.period.IsNotEmpty())
  2516. {
  2517. x.period.ForEach(y => {
  2518. if (y.semesters.IsEmpty())
  2519. {
  2520. y.semesters = new List<Semester>
  2521. {
  2522. new Semester { name = "上学期", start = 1, month = 9, day = 1, id = Guid.NewGuid().ToString() },
  2523. new Semester { name = "下学期", start = 0, month = 3, day = 1, id = Guid.NewGuid().ToString() }
  2524. };
  2525. }
  2526. y.semesterCount = y.semesters.Count;
  2527. schoolsSet.Add(x);
  2528. });
  2529. }
  2530. else {
  2531. string campusId = Guid.NewGuid().ToString();
  2532. List<Period> periods = new List<Period>();
  2533. periods.Add(new Period
  2534. {
  2535. id = Guid.NewGuid().ToString(),
  2536. name = x.name,
  2537. campusId = campusId,
  2538. semesterCount = 2,
  2539. semesters = new List<Semester>
  2540. {
  2541. new Semester { name = "上学期", start = 1, month = 9, day = 1, id = Guid.NewGuid().ToString() },
  2542. new Semester { name = "下学期", start = 0, month = 3, day = 1, id = Guid.NewGuid().ToString() }
  2543. },
  2544. });
  2545. x.period = periods;
  2546. schoolsSet.Add(x);
  2547. x.campuses = new List<Campus> { new Campus { id = campusId, name = x.name } };
  2548. }
  2549. });
  2550. int count = schoolsSet.Count();
  2551. foreach (var item in schoolsSet) {
  2552. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync<School>(item, item.id, new PartitionKey(item.code));
  2553. }
  2554. return Ok(schoolsSet);
  2555. }
  2556. [HttpPost("fix-teacher-train-nickname")]
  2557. public async Task<IActionResult> FixTeacherPrivateLessonRecord(JsonElement json)
  2558. {
  2559. var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
  2560. List<ScTeacher> scTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object> { { "PartitionKey", "ScTeacher" } });
  2561. scTeachers = scTeachers.FindAll(x => !string.IsNullOrWhiteSpace(x.tmdid) && !string.IsNullOrWhiteSpace(x.schoolCode));
  2562. var groups = scTeachers.GroupBy(x => x.schoolCode).Select(x => new { key = x.Key, list = x.ToList() });
  2563. foreach (var item in groups) {
  2564. List<TeacherTrain> teacherTrains = new List<TeacherTrain>();
  2565. string sql = $" select value(c) from c where c.id in ({string.Join(",", item.list.Select(x => $"'{x.tmdid}'"))}) ";
  2566. await foreach (var tr in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIteratorSql<TeacherTrain>(queryText: sql,
  2567. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"TeacherTrain-{item.key}") }))
  2568. {
  2569. teacherTrains.Add(tr);
  2570. }
  2571. List<Task<ItemResponse<TeacherTrain>>> update = new List<Task<ItemResponse<TeacherTrain>>>();
  2572. teacherTrains.ForEach(x => {
  2573. var sc = scTeachers.Find(s => s.tmdid.Equals(x.id));
  2574. if (sc != null) {
  2575. if (string.IsNullOrWhiteSpace(x.nickname))
  2576. {
  2577. x.nickname = sc.TeacherName;
  2578. update.Add(_azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(x, x.id, new PartitionKey(x.code)));
  2579. }
  2580. else if (!sc.TeacherName.Equals(x.nickname)) {
  2581. x.nickname = sc.TeacherName;
  2582. update.Add(_azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(x, x.id, new PartitionKey(x.code)));
  2583. }
  2584. }
  2585. });
  2586. await Task.WhenAll(update);
  2587. }
  2588. return Ok();
  2589. }
  2590. /// <summary>
  2591. /// 修复学校课例及blob计算
  2592. /// </summary>
  2593. /// <param name="jsonElement"></param>
  2594. /// <returns></returns>
  2595. [HttpPost("ReloadBlob")]
  2596. public async Task<IActionResult> ReloadBlob(JsonElement json)
  2597. {
  2598. //var client = _azureCosmos.GetCosmosClient();
  2599. //string sql = " SELECT distinct value(c) FROM c where c.pk='LessonRecord' ";
  2600. //List<LessonRecord> lessonRecords = new List<LessonRecord>();
  2601. //await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<LessonRecord>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("LessonRecord-ydzt") }))
  2602. //{
  2603. // lessonRecords.Add(item);
  2604. //}
  2605. //var list = await _azureStorage.GetBlobContainerClient("ydzt").List($"records");
  2606. //HashSet<string> ids = new HashSet<string>();
  2607. //list.ForEach(x => {
  2608. // var a = x.Split("/");
  2609. // if (a.Length >= 2) {
  2610. // ids.Add(a[1]);
  2611. // }
  2612. //});
  2613. List<string> lists = new List<string> { };
  2614. foreach (var l in lists) {
  2615. await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, "ydzt", new List<string> { $"records/{l}" });
  2616. }
  2617. return Ok(new { });
  2618. }
  2619. /// <summary>
  2620. /// 修复学校课例及blob计算
  2621. /// </summary>
  2622. /// <param name="jsonElement"></param>
  2623. /// <returns></returns>
  2624. [HttpPost("fix-school-lesson-record")]
  2625. public async Task<IActionResult> FixSchoolLessonRecord(JsonElement json)
  2626. {
  2627. var client = _azureCosmos.GetCosmosClient();
  2628. string sql = " SELECT distinct value(c) FROM c where c.pk='LessonRecord' ";
  2629. List<LessonRecord> lessonRecords = new List<LessonRecord>();
  2630. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<LessonRecord>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("LessonRecord-ydzt") }))
  2631. {
  2632. lessonRecords.Add(item);
  2633. }
  2634. //await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIteratorSql<LessonRecord>(queryText: sql, requestOptions: new QueryRequestOptions { }))
  2635. //{
  2636. // lessonRecords.Add(item);
  2637. //}
  2638. HashSet<string> courseIds = new HashSet<string>();
  2639. lessonRecords.ForEach(item => {
  2640. if (!string.IsNullOrWhiteSpace(item.courseId)) {
  2641. courseIds.Add(item.courseId);
  2642. }
  2643. });
  2644. List<Course> courses = new List<Course>();
  2645. if (courseIds.Any()) {
  2646. string sqlCourse = $" SELECT distinct value(c) FROM c where c.pk='Course' and c.id in ({string.Join(",", courseIds.Select(x => $"'{x}'"))}) ";
  2647. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<Course>(queryText: sqlCourse, requestOptions: new QueryRequestOptions { }))
  2648. {
  2649. courses.Add(item);
  2650. }
  2651. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIteratorSql<Course>(queryText: sqlCourse, requestOptions: new QueryRequestOptions { }))
  2652. {
  2653. courses.Add(item);
  2654. }
  2655. }
  2656. HashSet<string> schoolIds = new HashSet<string>();
  2657. lessonRecords.ForEach(item => {
  2658. if (!string.IsNullOrWhiteSpace(item.school))
  2659. {
  2660. schoolIds.Add(item.school);
  2661. }
  2662. });
  2663. List<School> schools = new List<School>();
  2664. if (schoolIds.Any()) {
  2665. string sqlSchool = $" SELECT distinct value(c) FROM c where c.id in ({string.Join(",", schoolIds.Select(x => $"'{x}'"))}) ";
  2666. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIteratorSql<School>(queryText: sqlSchool, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2667. {
  2668. schools.Add(item);
  2669. }
  2670. }
  2671. var lists = lessonRecords.Where(x => !string.IsNullOrWhiteSpace(x.school)).GroupBy(y => y.school).Select(a => new { key = a.Key, list = a.ToList() });
  2672. Dictionary<string, List<GroupListDto>> dict = new Dictionary<string, List<GroupListDto>>();
  2673. foreach (var item in lists) {
  2674. var gids = item.list.SelectMany(x => x.groupIds).Where(y => !string.IsNullOrWhiteSpace(y));
  2675. HashSet<string> grades = new HashSet<string>();
  2676. List<GroupListDto> groups = await GroupListService.GetGroupListByListids(client, _dingDing, gids.ToList(), item.key);
  2677. List<GroupListDto> groupLists = groups?.FindAll(x => !string.IsNullOrEmpty(x.periodId) && !string.IsNullOrEmpty(x.school));
  2678. dict.Add(item.key, groupLists);
  2679. }
  2680. foreach (var lessonRecord in lessonRecords) {
  2681. LessonRecord old = lessonRecord.ToJsonString().ToObject<LessonRecord>();
  2682. if (string.IsNullOrWhiteSpace(lessonRecord.courseId)) {
  2683. var course = courses.Find(x => x.id.Equals(lessonRecord.courseId));
  2684. if (course != null)
  2685. {
  2686. lessonRecord.periodId = course.period?.id;
  2687. lessonRecord.subjectId = course.subject?.id;
  2688. }
  2689. }
  2690. //处理课堂选用的名单
  2691. if (lessonRecord.groupIds.IsNotEmpty() && !string.IsNullOrWhiteSpace(lessonRecord.school) && !string.IsNullOrWhiteSpace(lessonRecord.periodId))
  2692. {
  2693. HashSet<string> grades = new HashSet<string>();
  2694. List<GroupListDto> groupLists = null;
  2695. dict.TryGetValue(lessonRecord.school, out groupLists);
  2696. if (groupLists.IsNotEmpty())
  2697. {
  2698. var gplist = groupLists.FindAll(x => lessonRecord.groupIds.Contains(x.id));
  2699. School schoolObj = schools.Find(x => x.id.Equals(lessonRecord.school));
  2700. if (schoolObj != null)
  2701. {
  2702. //年级算法
  2703. var period = schoolObj.period.Find(x => x.id.Equals(lessonRecord.periodId));
  2704. int? Count = period?.grades?.Count;
  2705. if (Count.HasValue)
  2706. {
  2707. int Day = DateTimeOffset.UtcNow.Day;
  2708. int Month = DateTimeOffset.UtcNow.Month;
  2709. int Year = DateTimeOffset.UtcNow.Year;
  2710. int start = int.Parse($"{Year}0901");
  2711. var se = period.semesters.Find(x => x.start == 1);
  2712. if (se == null) {
  2713. se = period.semesters.First();
  2714. }
  2715. if (se != null) {
  2716. string sm = se.month >= 10 ? $"{se.month}" : $"0{se.month}";
  2717. string sd = se.day >= 10 ? $"{se.day}" : $"0{se.day}";
  2718. start = int.Parse($"{Year}{sm}{sd}");
  2719. }
  2720. int curr = int.Parse(DateTimeOffset.UtcNow.ToString("yyyyMMdd"));
  2721. //新学年开学时间大于当前时间,计算年级需要减1 20220901-20220408 > 0 则当前20220408是2021年入学的,
  2722. //当前时间大于新学年开学时间,计算年级则不需要 20220901-20221203 < 1 则当前20221203是2022年入学的,
  2723. //20230901-20230101 > 0 则当前20230101是2022年入学的,
  2724. int dis = start - curr;
  2725. foreach (int year in gplist.Select(x => x.year))
  2726. {
  2727. int grade;
  2728. if (dis > 0)
  2729. {
  2730. grade = (Year - year - 1) % Count.Value;
  2731. }
  2732. else
  2733. {
  2734. grade = (Year - year) % Count.Value;
  2735. }
  2736. grades.Add($"{grade}");
  2737. }
  2738. }
  2739. }
  2740. }
  2741. lessonRecord.grade = grades.ToList();
  2742. }
  2743. string scope = lessonRecord.scope;
  2744. string tmdid = lessonRecord.tmdid;
  2745. string lessonId = lessonRecord.id;
  2746. string school = lessonRecord.school;
  2747. string tbname = "";
  2748. string code;
  2749. string blobname = "";
  2750. if ($"{scope}".Equals("school") && !string.IsNullOrEmpty($"{school}"))
  2751. {
  2752. blobname = $"{school}";
  2753. code = $"LessonRecord-{school}";
  2754. tbname = "School";
  2755. }
  2756. else if ($"{scope}".Equals("private"))
  2757. {
  2758. blobname = $"{tmdid}";
  2759. code = $"LessonRecord";
  2760. tbname = "Teacher";
  2761. }
  2762. //如果有更新 则去读取/{_lessonId}/IES/base.json
  2763. try
  2764. {
  2765. BlobDownloadResult baseblobDownload = await _azureStorage.GetBlobContainerClient(blobname).GetBlobClient($"/records/{lessonId}/IES/base.json").DownloadContentAsync();
  2766. LessonBase lessonBase = baseblobDownload.Content.ToObjectFromJson<LessonBase>();
  2767. if (lessonBase != null && lessonBase.summary != null)
  2768. {
  2769. lessonRecord.attendCount = lessonBase.summary.attendCount;
  2770. lessonRecord.clientCount = lessonBase.summary.clientCount;
  2771. lessonRecord.attendRate = lessonBase.summary.attendRate;
  2772. lessonRecord.groupCount = lessonBase.summary.groupCount;
  2773. lessonRecord.collateTaskCount = lessonBase.summary.collateTaskCount;
  2774. lessonRecord.collateCount = lessonBase.summary.collateCount;
  2775. lessonRecord.pushCount = lessonBase.summary.pushCount;
  2776. lessonRecord.totalPoint = lessonBase.summary.totalPoint;
  2777. lessonRecord.examQuizCount = lessonBase.summary.examQuizCount;
  2778. lessonRecord.interactionCount = lessonBase.summary.interactionCount;
  2779. lessonRecord.examPointRate = lessonBase.summary.examPointRate;
  2780. lessonRecord.clientInteractionCount = lessonBase.summary.clientInteractionCount;
  2781. lessonRecord.clientInteractionAverge = lessonBase.summary.clientInteractionAverge;
  2782. lessonRecord.examCount = lessonBase.summary.examCount;
  2783. lessonRecord.totalInteractPoint = lessonBase.summary.totalInteractPoint;
  2784. }
  2785. long? size = await _azureStorage.GetBlobContainerClient(blobname).GetBlobsSize($"records/{lessonId}");
  2786. Bloblog bloblog = new Bloblog
  2787. {
  2788. id = lessonRecord.id,
  2789. code = $"Bloblog-{blobname}",
  2790. name = lessonRecord.name,
  2791. pk = "Bloblog",
  2792. time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
  2793. type = "records",
  2794. url = $"records/{lessonId}",
  2795. subjectId = string.IsNullOrWhiteSpace(lessonRecord.subjectId) ? new List<string>() : new List<string> { lessonRecord.subjectId },
  2796. periodId = string.IsNullOrWhiteSpace(lessonRecord.periodId) ? new List<string>() : new List<string> { lessonRecord.periodId },
  2797. size = size.HasValue ? size.Value : 0,
  2798. };
  2799. await client.GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(bloblog);
  2800. await BlobService.RefreshBlobRoot(new BlobRefreshMessage { progress = "update", root = "records", name = $"{blobname}" }, _serviceBus, _configuration, _azureRedis);
  2801. }
  2802. catch (RequestFailedException ex) when (ex.Status == 404)
  2803. {
  2804. }
  2805. catch (Exception ex)
  2806. {
  2807. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}课程读取base.json,{lessonId}\n{ex.Message}\n{ex.StackTrace}\n", GroupNames.醍摩豆服務運維群組);
  2808. }
  2809. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).ReplaceItemAsync<LessonRecord>(lessonRecord, lessonId, new PartitionKey(lessonRecord.code));
  2810. LessonDis lessonDis = new LessonDis();
  2811. //计算课堂更新前后的差值
  2812. lessonDis = LessonService.DisLessonCount(old, lessonRecord, lessonDis);
  2813. await LessonService.FixLessonCount(client, _dingDing, lessonRecord, old, lessonDis);
  2814. }
  2815. return Ok(new { lessonRecords });
  2816. }
  2817. /// <summary>
  2818. /// 修复学校课例及blob计算
  2819. /// </summary>
  2820. /// <param name="jsonElement"></param>
  2821. /// <returns></returns>
  2822. [HttpPost("check-scteacher")]
  2823. public async Task<IActionResult> CheckScTeacher(JsonElement request) {
  2824. if (!request.TryGetProperty("accessConfig", out JsonElement accessConfig)) return BadRequest();
  2825. if (!request.TryGetProperty("city", out JsonElement city)) return BadRequest();
  2826. if (!request.TryGetProperty("dist", out JsonElement dist)) return BadRequest();
  2827. if (!request.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
  2828. if (!request.TryGetProperty("standard", out JsonElement standard)) return BadRequest();
  2829. var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
  2830. var ScTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object>() { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaId}" } });
  2831. Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", $"{accessConfig}" }, { "areaId", $"{areaId}" } };
  2832. //(int status, string json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetTeachersListByProject");
  2833. (int status, string json) = await ScsStudyApisService.GetTeachersListByProject(_httpClient.CreateClient(), _dingDing, _azureStorage, $"{areaId}", $"{accessConfig}");
  2834. var teachers = json.ToObject<List<ScTeacher>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
  2835. var dbIds = ScTeachers.Select(x => x.PXID);
  2836. var scIds = teachers.Select(x => x.PXID);
  2837. var dbMore = dbIds.Except(scIds);
  2838. List<ScTeacher> dbtech = new List<ScTeacher>();
  2839. foreach (var item in dbMore) {
  2840. dbtech.Add(ScTeachers.Find(x => x.PXID == item));
  2841. }
  2842. List<ScTeacher> sctech = new List<ScTeacher>();
  2843. var scMore = scIds.Except(dbIds);
  2844. foreach (var item in scMore)
  2845. {
  2846. sctech.Add(teachers.Find(x => x.PXID == item));
  2847. }
  2848. List<string> tmdids = new List<string>();
  2849. var group = ScTeachers.Where(x => !string.IsNullOrWhiteSpace(x.tmdid)).GroupBy(x => x.tmdid).Select(x => new { x.Key, list = x.ToList() });
  2850. group.ToList().ForEach(x =>
  2851. {
  2852. if (x.list.Count > 1) {
  2853. tmdids.Add(x.Key);
  2854. }
  2855. });
  2856. List<string> teacherTrainsIds = new List<string>();
  2857. string insql = $"where c.id in ({string.Join(",", ScTeachers.Select(x => $"'{x.tmdid}'"))})";
  2858. string selsql = $"select value(c.id) from c {insql} and c.pk='TeacherTrain' ";
  2859. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<string>(queryText: selsql,
  2860. requestOptions: new QueryRequestOptions() { }))
  2861. {
  2862. teacherTrainsIds.Add(item);
  2863. }
  2864. var bindids = ScTeachers.Where(x => !string.IsNullOrWhiteSpace(x.tmdid)).Select(x => x.tmdid);
  2865. var noTrains = bindids.Except(teacherTrainsIds);
  2866. return Ok(new { dbtech, sctech, ScCount = teachers.Count, DBCount = ScTeachers.Count, ScTeachers, tmdids, noTrains });
  2867. }
  2868. /// <summary>
  2869. /// 筛查能力点未上传认证材料的
  2870. /// </summary>
  2871. /// <param name="jsonElement"></param>
  2872. /// <returns></returns>
  2873. [HttpPost("un-upload-abilitysub")]
  2874. public async Task<IActionResult> UnUploadAbilitysub(JsonElement json)
  2875. {
  2876. try {
  2877. List<string> schools = json.Deserialize<List<string>>();
  2878. if (!schools.Any()) {
  2879. return BadRequest();
  2880. }
  2881. var client = _azureCosmos.GetCosmosClient();
  2882. //金牛直属。
  2883. //string sql = $"SELECT distinct c.id,s.schoolId as code , c.name as nickname, s.name as name FROM c join s in c.schools where s.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'" +
  2884. // $" and array_length(c.binds)>0 and s.schoolId in ({string.Join(",", schools.Select(s => $"'{s}'"))})";
  2885. string sql = $"SELECT distinct c.id,s.schoolId as code , c.name as nickname, s.name as name FROM c join s in c.schools where s.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'" +
  2886. $" and array_length(c.binds)>0 and c.id in ({string.Join(",", schools.Select(s => $"'{s}'"))})";
  2887. List<IdNameCode> tmdidSchooCode = new List<IdNameCode>();
  2888. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIteratorSql<IdNameCode>(queryText: sql,
  2889. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2890. {
  2891. tmdidSchooCode.Add(item);
  2892. }
  2893. List<Ability> abilities = new List<Ability>();
  2894. string abilitysql = "select value c from c ";
  2895. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetItemQueryIteratorSql<Ability>(queryText: abilitysql,
  2896. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Ability-standard4") }))
  2897. {
  2898. abilities.Add(item);
  2899. }
  2900. List<dynamic> dynamics = new List<dynamic>();
  2901. var group = tmdidSchooCode.GroupBy(idcode => idcode.code).ToList();
  2902. List<Task<List<dynamic>>> dynamicsTask = new List<Task<List<dynamic>>>();
  2903. group.ForEach(x => {
  2904. dynamicsTask .Add(GetDynamics(x.ToList(), abilities));
  2905. });
  2906. var aa= await Task.WhenAll(dynamicsTask);
  2907. foreach (var a in aa) {
  2908. if (a.Any()) {
  2909. dynamics.AddRange(a);
  2910. }
  2911. }
  2912. return Ok(new { dynamics });
  2913. } catch (Exception ex) {
  2914. return BadRequest($"{ex.Message}{ex.StackTrace}");
  2915. }
  2916. }
  2917. private async Task<List<dynamic>> GetDynamics(List<IdNameCode> tmdidSchooCode,List<Ability> abilities) {
  2918. List<dynamic> dynamics = new List<dynamic>();
  2919. List<Task<List<dynamic>>> dynamicsTask = new List<Task<List<dynamic>>>();
  2920. tmdidSchooCode.ForEach(idcode => {
  2921. dynamicsTask.Add(GetDynamicsTmd(idcode, abilities));
  2922. });
  2923. var aa = await Task.WhenAll(dynamicsTask);
  2924. foreach (var a in aa)
  2925. {
  2926. if (a.Any())
  2927. {
  2928. dynamics.AddRange(a);
  2929. }
  2930. }
  2931. return dynamics;
  2932. }
  2933. private async Task<List<dynamic>> GetDynamicsTmd(IdNameCode idcode, List<Ability> abilities) {
  2934. List<dynamic> dynamics = new List<dynamic>();
  2935. string subsql = "select value c from c ";
  2936. List<AbilitySub> abilitySubs = new List<AbilitySub>();
  2937. List<UnUpload> unUploads = new List<UnUpload>();
  2938. (string blobPix, string sas) = _azureStorage.GetBlobContainerSAS99Year(idcode.code, Azure.Storage.Sas.BlobContainerSasPermissions.Read);
  2939. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIteratorSql<AbilitySub>(queryText: subsql,
  2940. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"AbilitySub-{idcode.code}-{idcode.id}") }))
  2941. {
  2942. abilitySubs.Add(item);
  2943. }
  2944. //移除通识
  2945. abilitySubs.RemoveAll(ab => ab.id.Equals("2438e72f-4de8-4ccb-8cae-3f1dce89a769"));
  2946. if (abilitySubs.Count > 3)
  2947. {
  2948. //一个都没上传
  2949. if (!abilitySubs.SelectMany(upsl => upsl.uploads).Any())
  2950. {
  2951. try
  2952. {
  2953. var a = abilitySubs.Count - 3;
  2954. abilitySubs = abilitySubs.Take(a).ToList();
  2955. }
  2956. catch { await _dingDing.SendBotMsg($"{idcode.ToJsonString()},{abilitySubs.ToJsonString()}", GroupNames.成都开发測試群組); }
  2957. }
  2958. else
  2959. {
  2960. //检查
  2961. var 上传了的 = abilitySubs.FindAll(x => x.uploads.Count > 0);
  2962. //如果上传大于三个能力点,则清空掉多余的没有上传的
  2963. if (上传了的.Count >= 3)
  2964. {
  2965. abilitySubs.RemoveAll(x => x.uploads.Count == 0);
  2966. }
  2967. //如果上传不足三个的,保证有三个能力点
  2968. else
  2969. {
  2970. if (上传了的.Any())
  2971. {
  2972. int 需要增加的 = 3 - 上传了的.Count;
  2973. var 未上传的 = abilitySubs.FindAll(x => x.uploads.Count == 0);
  2974. List<AbilitySub> newAb = 上传了的;
  2975. var a = 未上传的.Take(需要增加的);
  2976. if (a.Any())
  2977. {
  2978. newAb.AddRange(a);
  2979. }
  2980. abilitySubs = newAb;
  2981. }
  2982. else
  2983. {
  2984. abilitySubs = abilitySubs.Take(3).ToList();
  2985. }
  2986. }
  2987. }
  2988. }
  2989. List<Task<List<UnUpload>>> uploads = new List<Task<List<UnUpload>>>();
  2990. abilitySubs.ForEach(item => {
  2991. uploads.Add(GetSub(item, abilities, blobPix, sas));
  2992. });
  2993. var aa = await Task.WhenAll(uploads);
  2994. int index = 0;
  2995. foreach (var a in aa)
  2996. {
  2997. if (a.Any())
  2998. {
  2999. unUploads.AddRange(a);
  3000. }
  3001. else {
  3002. //没有任何问题的。
  3003. index += 1;
  3004. }
  3005. }
  3006. if (index < 3) {
  3007. if (unUploads.Any())
  3008. {
  3009. foreach (var un in unUploads)
  3010. {
  3011. un.stdsUnUpload.ForEach(ii =>
  3012. {
  3013. dynamics.Add(new { idcode.id, idcode.name, idcode.nickname, un.abilityNo, un.abilityName, msg = "认证材料未上传", stdname = ii.stdname });
  3014. });
  3015. un.taskUnUplaod.ForEach(ii =>
  3016. {
  3017. dynamics.Add(new { idcode.id, idcode.name, idcode.nickname, un.abilityNo, un.abilityName, msg = "认证材料任务未上传", stdname = ii.stdname, taskname = ii.taskname });
  3018. });
  3019. un.urlUnExsit.ToList().ForEach(ii =>
  3020. {
  3021. string msg = "";
  3022. if (ii.enough == 0)
  3023. {
  3024. msg = "认证上传数量不达标";
  3025. }
  3026. else
  3027. {
  3028. msg = "认证材料文件因操作原因";
  3029. }
  3030. StringBuilder uploadUrls = new StringBuilder();
  3031. dynamics.Add(new
  3032. {
  3033. idcode.id,
  3034. idcode.name,
  3035. idcode.nickname,
  3036. idcode.code,
  3037. un.abilityNo,
  3038. un.abilityName,
  3039. msg = msg,
  3040. stdname = ii.stdname,
  3041. taskname = ii.taskname,
  3042. errorUrls = string.Join("\n\r\t ", ii.errorUrls),
  3043. enough = ii.enough,
  3044. limit = ii.limit,
  3045. count = ii.count,
  3046. uploadUrls = string.Join("\n\r\t ", ii.uploadUrls),
  3047. });
  3048. });
  3049. }
  3050. }
  3051. }
  3052. return dynamics;
  3053. }
  3054. private async Task<List<UnUpload>> GetSub(AbilitySub item , List<Ability> abilities, string blobPix, string sas) {
  3055. List<UnUpload> unUploads = new List<UnUpload>();
  3056. var ability = abilities.Find(x => x.id.Equals(item.id));
  3057. foreach (var x in ability.stds)
  3058. {
  3059. UnUpload unUpload = new UnUpload { abilityNo = ability.no, abilityName = ability.name };
  3060. var upload = item.uploads.FindAll(u => u.stdid.Equals(x.id));
  3061. if (upload != null)
  3062. {
  3063. AbilityStdTask abilityStdTask = null;
  3064. x.task.ForEach(t => {
  3065. if (upload.Where(u => u.taskid.Equals(t.id)).Any())
  3066. {
  3067. abilityStdTask = t;
  3068. }
  3069. });
  3070. //检查是否正确上传任务的。
  3071. if (abilityStdTask == null)
  3072. {
  3073. //var dict = new Dictionary<string, List<string>>();
  3074. //dict.Add(x.id, new List<string>(x.task.Select(t => t.id)));
  3075. //x.task.ForEach(t => {
  3076. // unUpload.taskUnUplaod.Add(new aburls { stdid = x.id, stdname = x.std, taskid = t.id, taskname = t.stddesc });
  3077. //});
  3078. }
  3079. else
  3080. {
  3081. SubUpload subUpload = upload.Find(ap => ap.taskid.Equals(abilityStdTask.id));
  3082. if (subUpload != null)
  3083. {
  3084. List<string> urlUn = new List<string>();
  3085. foreach (var url in subUpload.urls)
  3086. {
  3087. string blobItem = url.url.Replace($"{blobPix}/", "");
  3088. bool Exist = await _azureStorage.GetBlobContainerClient(item.school).GetBlobClient(blobItem).ExistsAsync();
  3089. // List<string> items = await _azureStorage.GetBlobContainerClient(item.school).ExistsAsync(blobItem);
  3090. if (!Exist)
  3091. {
  3092. urlUn.Add($"{url.url}?{sas}");
  3093. }
  3094. }
  3095. aburls aburls = new aburls
  3096. {
  3097. stdid = x.id,
  3098. stdname = x.std,
  3099. taskid = abilityStdTask.id,
  3100. taskname = abilityStdTask.stddesc,
  3101. errorUrls = urlUn,
  3102. };
  3103. //if (abilityStdTask.limit > subUpload.urls.Count)
  3104. //{
  3105. // aburls.enough = 0;
  3106. // aburls.limit = abilityStdTask.limit;
  3107. // aburls.count = subUpload.urls.Count;
  3108. // aburls.uploadUrls = subUpload.urls.Select(x => $"{x.url}?{sas}").ToList();
  3109. // unUpload.urlUnExsit.Add(aburls);
  3110. //}
  3111. if (urlUn.Any())
  3112. {
  3113. unUpload.urlUnExsit.Add(aburls);
  3114. }
  3115. }
  3116. else
  3117. {
  3118. //var dict = new Dictionary<string, List<string>>();
  3119. //dict.Add(x.id, new List<string>(x.task.Select(t => t.id)));
  3120. //x.task.ForEach(t => {
  3121. // unUpload.taskUnUplaod.Add(new aburls { stdid = x.id, stdname = x.std, taskid = t.id, taskname = t.stddesc });
  3122. //});
  3123. }
  3124. }
  3125. }
  3126. else
  3127. {
  3128. //unUpload.stdsUnUpload.Add(new aburls { stdid = x.id, stdname = x.std });
  3129. }
  3130. if (/*unUpload.stdsUnUpload.Any() || unUpload.taskUnUplaod.Any() ||*/ unUpload.urlUnExsit.Any())
  3131. {
  3132. unUploads.Add(unUpload);
  3133. }
  3134. }
  3135. return unUploads;
  3136. }
  3137. public class UnUpload {
  3138. public string abilityNo { get; set; }
  3139. public string abilityName { get; set; }
  3140. public List<aburls> stdsUnUpload { get; set; } = new List<aburls>();
  3141. public List<aburls> taskUnUplaod { get; set; } = new List<aburls>();
  3142. public HashSet<aburls> urlUnExsit { get; set; } = new HashSet<aburls>();
  3143. }
  3144. public class aburls
  3145. {
  3146. public string stdid { get; set; }
  3147. public string stdname { get; set; }
  3148. public string taskid { get; set; }
  3149. public string taskname { get; set; }
  3150. public int enough { get; set; } = 1;
  3151. public int limit { get; set; }
  3152. public int count { get; set; }
  3153. public List<string> uploadUrls { get; set; } = new List<string>();
  3154. public List<string> errorUrls { get; set; } = new List<string>();
  3155. }
  3156. [HttpPost("gen-school-teacher-pdf")]
  3157. public async Task<IActionResult> GenSchoolTeacherPdf(JsonElement json) {
  3158. var client = _azureCosmos.GetCosmosClient();
  3159. //金牛直属。
  3160. if (!json.TryGetProperty("areaId", out JsonElement areaId)) { BadRequest(); }
  3161. //string sql = $"SELECT distinct c.id,s.schoolId as code , c.name as nickname, s.name as name FROM c join s in c.schools where s.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'" +
  3162. // $" and array_length(c.binds)>0 and s.schoolId in ({string.Join(",", schools.Select(s => $"'{s}'") )})";
  3163. string sql = $"SELECT distinct c.id,s.schoolId as code , c.name as nickname, s.name as name FROM c join s in c.schools where s.areaId='{areaId}'" +
  3164. $" and array_length(c.binds)>0 ";
  3165. List<IdNameCode> tmdidSchooCode = new List<IdNameCode>();
  3166. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIteratorSql<IdNameCode>(queryText: sql,
  3167. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  3168. {
  3169. tmdidSchooCode.Add(item);
  3170. }
  3171. if (json.TryGetProperty("schools", out JsonElement schools))
  3172. {
  3173. List<string> pschools = schools.ToObject<List<string>>();
  3174. tmdidSchooCode = tmdidSchooCode.FindAll(z => pschools.Contains(z.code));
  3175. }
  3176. if (json.TryGetProperty("pushTeachers", out JsonElement pushTeachers)) {
  3177. List<string> teachers = pushTeachers.ToObject<List<string>>();
  3178. tmdidSchooCode = tmdidSchooCode.FindAll(z => teachers.Contains(z.id));
  3179. }
  3180. foreach (var g in tmdidSchooCode)
  3181. {
  3182. //var messageBlobPDF = new ServiceBusMessage(new { id = g.ToList().Select(x => x.id).ToHashSet(), school = g.Key, userType = "tmdid", bizType = "OfflineRecord" }.ToJsonString());
  3183. //var GenPdfQueue = _configuration.GetValue<string>("Azure:ServiceBus:GenPdfQueue");
  3184. //await _serviceBus.GetServiceBusClient().SendMessageAsync(GenPdfQueue, messageBlobPDF);
  3185. string msg = new { id = new List<string> { g.id }, school = g.code, userType = "tmdid", bizType = "OfflineRecord" }.ToJsonString();
  3186. JsonElement element = msg.ToObject<JsonElement>();
  3187. // https://dotblogs.com.tw/yc421206/2013/04/25/102300 // C# 原子操作。Interlocked
  3188. // ConcurrentQueue http://t.zoukankan.com/hohoa-p-12622459.html
  3189. switch (true)
  3190. {
  3191. case bool when element.TryGetProperty("bizType", out JsonElement _bizType) && $"{_bizType}".Equals("OfflineRecord"):
  3192. //处理教师线下研修报告的生成。
  3193. await FixDataService.GenOfflineRecordPdf(_azureCosmos,_dingDing,_azureStorage,_coreAPIHttpService,_converter,element, msg);
  3194. break;
  3195. }
  3196. }
  3197. return Ok(tmdidSchooCode);
  3198. }
  3199. [HttpPost("restore-teacher-pdf")]
  3200. public async Task<IActionResult> restoreteacherpdf(JsonElement json)
  3201. {
  3202. var client = _azureStorage.GetBlobContainerClient($"teammodelos");
  3203. string sql = $"SELECT distinct c.id,s.schoolId as code , c.name as nickname, s.name as name FROM c join s in c.schools where s.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'" +
  3204. $" and array_length(c.binds)>0 ";
  3205. List<IdNameCode> tmdidSchooCode = new List<IdNameCode>();
  3206. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIteratorSql<IdNameCode>(queryText: sql,
  3207. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  3208. {
  3209. tmdidSchooCode.Add(item);
  3210. }
  3211. var blobclient = _azureStorage.GetBlobContainerClient($"teammodelos");
  3212. List<Task> tasks = new List<Task>();
  3213. tmdidSchooCode.ForEach(idcode =>
  3214. {
  3215. tasks.Add(resot(idcode, blobclient));
  3216. });
  3217. int pagesize = 500;
  3218. if (tasks.Count <= pagesize)
  3219. {
  3220. await Task.WhenAll(tasks);
  3221. }
  3222. else
  3223. {
  3224. int pages = (tasks.Count + pagesize) / pagesize; //256是批量操作最大值,pages = (total + max -1) / max;
  3225. for (int i = 0; i < pages; i++)
  3226. {
  3227. var listssb = tasks.Skip((i) * pagesize).Take(pagesize).ToList();
  3228. await Task.WhenAll(listssb);
  3229. }
  3230. }
  3231. return Ok();
  3232. }
  3233. private async Task resot(IdNameCode idcode, BlobContainerClient blobclient) {
  3234. ResponseMessage teacherTrainRes = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemStreamAsync(idcode.id, new PartitionKey($"TeacherTrain-{idcode.code}"));
  3235. if (teacherTrainRes.StatusCode==System.Net.HttpStatusCode.OK)
  3236. {
  3237. TeacherTrain teacherTrain = JsonDocument.Parse(teacherTrainRes.Content).RootElement.Deserialize<TeacherTrain>();
  3238. try
  3239. {
  3240. if (!string.IsNullOrWhiteSpace(teacherTrain.offlineUrl))
  3241. {
  3242. BlobDownloadInfo blobDownload = await blobclient.GetBlobClient(teacherTrain.offlineUrl).DownloadAsync(range: new HttpRange(0, 4 * 1048576), rangeGetContentHash: true);
  3243. if (blobDownload.Details.ContentHash != null)
  3244. {
  3245. string hash = Md5Hash.GetbyteToString(blobDownload.Details.ContentHash);
  3246. teacherTrain.offlineReport = new Attachment
  3247. {
  3248. hash = hash,
  3249. url = teacherTrain.offlineUrl,
  3250. blob = $"{blobclient.Uri}/{teacherTrain.offlineUrl}",
  3251. extension = "pdf",
  3252. name = $"{teacherTrain.nickname}-校本研修汇总报告.pdf",
  3253. type = "doc",
  3254. size = blobDownload.ContentLength
  3255. };
  3256. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync<TeacherTrain>(teacherTrain, idcode.id, new PartitionKey($"TeacherTrain-{idcode.code}"));
  3257. }
  3258. }
  3259. }
  3260. catch
  3261. {
  3262. }
  3263. }
  3264. }
  3265. /// <summary>
  3266. /// 修复学校课例及blob计算
  3267. /// </summary>
  3268. /// <param name="jsonElement"></param>
  3269. /// <returns></returns>
  3270. [HttpPost("fix-student-irs")]
  3271. public async Task<IActionResult> FixStudentIrs(JsonElement json) {
  3272. string sql = "select value(c.id) from c ";
  3273. List<string> ids = new List<string>();
  3274. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
  3275. .GetItemQueryIteratorSql<string>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") })) {
  3276. ids.Add(item);
  3277. }
  3278. List<Student> studentsData = new List<Student>();
  3279. foreach (var id in ids) {
  3280. if (id.Equals("ydzt")) {
  3281. continue;
  3282. }
  3283. List<Student> students = new List<Student>();
  3284. string sqlstu = "select value(c) from c ";
  3285. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student)
  3286. .GetItemQueryIteratorSql<Student>(sqlstu, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base-{id}") }))
  3287. {
  3288. students.Add(item);
  3289. }
  3290. List<Task<ItemResponse<Student>>> tasks = new List<Task<ItemResponse<Student>>>();
  3291. var groups= students.Where(x => !string.IsNullOrWhiteSpace(x.classId)).GroupBy(y => y.classId).Select(z => new { key = z.Key,list = z.ToList() });
  3292. foreach (var group in groups) {
  3293. var list= DoIrs(group.list);
  3294. if (list != null) {
  3295. list.ForEach(stu => {
  3296. tasks.Add(_azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).ReplaceItemAsync(stu, stu.id, new PartitionKey($"Base-{id}")));
  3297. });
  3298. }
  3299. }
  3300. int pagesize = 1000;
  3301. if (tasks.Count <= pagesize)
  3302. {
  3303. await Task.WhenAll(tasks);
  3304. }
  3305. else
  3306. {
  3307. int pages = (tasks.Count + pagesize) / pagesize; //256是批量操作最大值,pages = (total + max -1) / max;
  3308. for (int i = 0; i < pages; i++)
  3309. {
  3310. var listssb = tasks.Skip((i) * pagesize).Take(pagesize).ToList();
  3311. await Task.WhenAll(listssb);
  3312. }
  3313. }
  3314. studentsData.AddRange(students);
  3315. }
  3316. return Ok(studentsData);
  3317. }
  3318. private List<Student> DoIrs(List<Student> students) {
  3319. List<int> ids = new List<int>(students.Count);
  3320. bool hasAbc=false;
  3321. int index = students.Count;
  3322. if (!students.Select(x => x.irs).Contains("1"))
  3323. {
  3324. foreach (var stu in students)
  3325. {
  3326. if (int.TryParse(stu.id, out int id))
  3327. {
  3328. ids.Add(id);
  3329. }
  3330. else
  3331. {
  3332. hasAbc = true;
  3333. }
  3334. }
  3335. ids = ids.OrderBy(x => x).ToList();
  3336. if (!hasAbc)
  3337. {
  3338. for (int i = 0; i < ids.Count; i++)
  3339. {
  3340. var stu = students.Find(x => x.id.Equals($"{ids[i]}"));
  3341. if (stu != null)
  3342. {
  3343. stu.irs = $"{(i + 1)}";
  3344. stu.no = $"{(i + 1)}";
  3345. }
  3346. }
  3347. }
  3348. return students;
  3349. }
  3350. else { return null; }
  3351. }
  3352. public record CorrectStu
  3353. {
  3354. public string id { get; set; }
  3355. public string code { get; set; }
  3356. public List<string> classIds { get; set; }
  3357. }
  3358. /// <summary>
  3359. /// 补充学校教室字段学段id接口
  3360. /// </summary>
  3361. /// <param name="jsonElement"></param>
  3362. /// <returns></returns>
  3363. [HttpPost("fix-room-periodid")]
  3364. public async Task<IActionResult> FixRoomPeriodId(JsonElement jsonElement)
  3365. {
  3366. try
  3367. {
  3368. List<string> schoolId = new();
  3369. var cosmosClient = _azureCosmos.GetCosmosClient();
  3370. await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<string>(queryText: "select distinct value(REPLACE(c.code, 'Room-', '')) from c where c.pk='Room'", requestOptions: new QueryRequestOptions() { }))
  3371. {
  3372. schoolId.Add(item);
  3373. }
  3374. List<Task<ItemResponse<Room>>> allRooms = new(); //存储区域数据
  3375. if (schoolId.Count > 0)
  3376. {
  3377. foreach (var scId in schoolId)
  3378. {
  3379. string periodId = null;
  3380. School scBase = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(scId, new PartitionKey("Base"));
  3381. if(scBase.period.Count > 0)
  3382. periodId = scBase.period[0].id;
  3383. await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<Room>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Room-{scId}") }))
  3384. {
  3385. allRooms.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<Room>(item, item.id, new PartitionKey($"Room-{scId}")));
  3386. }
  3387. }
  3388. }
  3389. if (allRooms.Count < 256)
  3390. {
  3391. await Task.WhenAll(allRooms);
  3392. }
  3393. else
  3394. {
  3395. int pages = (allRooms.Count + 255) / 256;
  3396. for (int i = 0; i < pages; i++)
  3397. {
  3398. List<Task<ItemResponse<Room>>> tempRoom = allRooms.Skip((i) * 256).Take(256).ToList();
  3399. await Task.WhenAll(tempRoom);
  3400. }
  3401. }
  3402. return Ok(new { state = 200, allRooms });
  3403. }
  3404. catch (Exception ex)
  3405. {
  3406. return BadRequest(ex.StackTrace);
  3407. }
  3408. }
  3409. /// <summary>
  3410. /// 修复研修平台账号重复的问题
  3411. /// </summary>
  3412. /// <param name="jsonElement"></param>
  3413. /// <returns></returns>
  3414. [HttpPost("fix-training")]
  3415. public async Task<IActionResult> RepairTraining(JsonElement jsonElement)
  3416. {
  3417. try
  3418. {
  3419. if (!jsonElement.TryGetProperty("trainingIds", out JsonElement ids)) return BadRequest();
  3420. List<TrainingId> trainingIds = ids.ToObject<List<TrainingId>>();
  3421. List<string> noCopyFiles = new();
  3422. var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
  3423. var cosmosClient = _azureCosmos.GetCosmosClient();
  3424. foreach (var item in trainingIds)
  3425. {
  3426. List<ScTeacher> scTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object>() { { "PartitionKey", "ScTeacher" }, { "tmdid", $"{item.oldId}" } });
  3427. if (scTeachers.Count > 0)
  3428. {
  3429. scTeachers.ForEach(sct => sct.tmdid = item.newId);
  3430. //保存和更新研修信息
  3431. await table.SaveOrUpdateAll(scTeachers);
  3432. }
  3433. string defaultSc = null;
  3434. //教师基础信息
  3435. Teacher teacher = new();
  3436. var resTchBase = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync($"{item.oldId}", new PartitionKey("Base"));
  3437. if (resTchBase.StatusCode==System.Net.HttpStatusCode.OK)
  3438. {
  3439. using var json = await JsonDocument.ParseAsync(resTchBase.Content);
  3440. teacher = json.ToObject<Teacher>();
  3441. defaultSc = teacher.defaultSchool;
  3442. if (string.IsNullOrEmpty(teacher.defaultSchool))
  3443. defaultSc = teacher.schools[0].schoolId;
  3444. teacher.id = $"{item.newId}";
  3445. //教师基础信息
  3446. try {
  3447. teacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey(teacher.code));
  3448. } catch { }
  3449. }
  3450. //教师研修文件
  3451. TeacherFile teacherFile = new();
  3452. var resTchFile = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync($"{item.oldId}", new PartitionKey($"TeacherFile-{defaultSc}"));
  3453. if (resTchFile.StatusCode==System.Net.HttpStatusCode.OK)
  3454. {
  3455. using var json = await JsonDocument.ParseAsync(resTchFile.Content);
  3456. teacherFile = json.ToObject<TeacherFile>();
  3457. teacherFile.id = $"{item.newId}";
  3458. //创建新的教师研修文件
  3459. try {
  3460. teacherFile = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<TeacherFile>(teacherFile, new PartitionKey(teacherFile.code));
  3461. } catch { }
  3462. }
  3463. //研修统计
  3464. TeacherTrain teacherTrain = new();
  3465. var resTchTrain = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync($"{item.oldId}", new PartitionKey($"TeacherTrain-{defaultSc}"));
  3466. if (resTchTrain.StatusCode==System.Net.HttpStatusCode.OK)
  3467. {
  3468. using var json = await JsonDocument.ParseAsync(resTchTrain.Content);
  3469. teacherTrain = json.ToObject<TeacherTrain>();
  3470. teacherTrain.tmdid = $"{item.newId}";
  3471. teacherTrain.id = $"{item.newId}";
  3472. //研修报告外层文件路径
  3473. if (!string.IsNullOrEmpty($"{teacherTrain.offlineUrl}"))
  3474. {
  3475. string oldOffUrl = teacherTrain.offlineUrl;
  3476. teacherTrain.offlineUrl = teacherTrain.offlineUrl.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3477. if (!oldOffUrl.Equals(teacherTrain.offlineUrl))
  3478. {
  3479. //复制研修报告
  3480. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, "teammodelos", teacherTrain.offlineUrl, item.oldId, item.newId);
  3481. if (tempFileCopy != 200)
  3482. noCopyFiles.Add(oldOffUrl);
  3483. }
  3484. }
  3485. if (teacherTrain.offlineRecords.Count > 0)
  3486. {
  3487. foreach (var off in teacherTrain.offlineRecords)
  3488. {
  3489. if (!string.IsNullOrEmpty(off.url))
  3490. {
  3491. string oldOffRe = off.url;
  3492. off.url = off.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3493. if (!oldOffRe.Equals(off.url))
  3494. {
  3495. //线下研修文件
  3496. var tempFileRe = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, oldOffRe, item.oldId, item.newId);
  3497. if (tempFileRe != 200)
  3498. noCopyFiles.Add(oldOffRe);
  3499. }
  3500. }
  3501. if (off.other != null)
  3502. {
  3503. //作业附件
  3504. foreach (var offOther in off.other)
  3505. {
  3506. //替换文件路径
  3507. string oldOffOther = offOther.url;
  3508. offOther.url = offOther.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3509. offOther.blob = offOther.blob.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3510. if (!oldOffOther.Equals(offOther.url))
  3511. {
  3512. //复制作业附件
  3513. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, oldOffOther, item.oldId, item.newId);
  3514. if (tempFileCopy != 200)
  3515. noCopyFiles.Add(oldOffOther);
  3516. }
  3517. }
  3518. }
  3519. }
  3520. }
  3521. if (teacherTrain.teacherClasses.Count > 0)
  3522. {
  3523. //课堂实录
  3524. foreach (var tchClass in teacherTrain.teacherClasses)
  3525. {
  3526. string tchCla = tchClass.url;
  3527. //替换课堂实录路径地址
  3528. tchClass.url = tchClass.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3529. if (!tchCla.Equals(tchClass.url))
  3530. {
  3531. //复制课堂实录文件
  3532. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, tchCla, item.oldId, item.newId);
  3533. if (tempFileCopy != 200)
  3534. noCopyFiles.Add(tchCla);
  3535. }
  3536. }
  3537. }
  3538. //研修报告信息
  3539. if (teacherTrain.offlineReport != null)
  3540. {
  3541. //替换研修报告信息文件路径地址
  3542. string tchTrain = teacherTrain.offlineReport.url;
  3543. teacherTrain.offlineReport.url = teacherTrain.offlineReport.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3544. teacherTrain.offlineReport.blob = teacherTrain.offlineReport.blob.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3545. if (!tchTrain.Equals(teacherTrain.offlineReport.url))
  3546. {
  3547. //研修报告信息文件路径
  3548. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, "teammodelos", tchTrain, item.oldId, item.newId);
  3549. if (tempFileCopy != 200)
  3550. noCopyFiles.Add(tchTrain);
  3551. }
  3552. }
  3553. teacherTrain.id = item.newId;
  3554. //创建新的教师研修统计
  3555. try { teacherTrain = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<TeacherTrain>(teacherTrain, new PartitionKey(teacherTrain.code)); } catch { }
  3556. }
  3557. //课堂实录
  3558. ClassVideo classVideo = new();
  3559. var respCalsVideo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync($"{item.oldId}", new PartitionKey($"ClassVideo-{defaultSc}"));
  3560. if (respCalsVideo.StatusCode==System.Net.HttpStatusCode.OK)
  3561. {
  3562. using var json = await JsonDocument.ParseAsync(respCalsVideo.Content);
  3563. classVideo = json.ToObject<ClassVideo>();
  3564. classVideo.creatorId = $"{item.newId}";
  3565. if (classVideo.files.Count > 0)
  3566. {
  3567. foreach (var cv in classVideo.files)
  3568. {
  3569. string tchCla = cv.url;
  3570. cv.url = cv.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3571. if (!tchCla.Equals(cv.url))
  3572. {
  3573. //复制课堂实录文件
  3574. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, tchCla, item.oldId, item.newId);
  3575. if (tempFileCopy != 200)
  3576. noCopyFiles.Add(tchCla);
  3577. }
  3578. }
  3579. }
  3580. classVideo.id = $"{item.newId}";
  3581. //创建新的教师课堂实录
  3582. try { classVideo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<ClassVideo>(classVideo, new PartitionKey(classVideo.code)); } catch { }
  3583. }
  3584. //订阅记录和学习记录
  3585. List<Task<ItemResponse<AbilitySub>>> abilitySubs = new();
  3586. await foreach (var abilitySub in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<AbilitySub>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilitySub-{defaultSc}-{item.oldId}") }))
  3587. {
  3588. abilitySub.creatorId = item.newId;
  3589. if (abilitySub.uploads.Count > 0)
  3590. {
  3591. foreach (var asup in abilitySub.uploads)
  3592. {
  3593. if (asup.urls.Count > 0)
  3594. {
  3595. foreach (var asupurl in asup.urls)
  3596. {
  3597. string asupUr = asupurl.url;
  3598. asupurl.url = asupurl.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3599. if (!asupUr.Equals(asupurl.url))
  3600. {
  3601. //订阅记录和学习记录文件地址
  3602. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, asupUr, item.oldId, item.newId);
  3603. if (tempFileCopy != 200)
  3604. noCopyFiles.Add(asupUr);
  3605. }
  3606. }
  3607. }
  3608. }
  3609. }
  3610. if (abilitySub.otherScore.Count > 0)
  3611. {
  3612. foreach (var abother in abilitySub.otherScore)
  3613. {
  3614. if (abother.tmdid.Equals(item.oldId))
  3615. abother.tmdid = item.oldId;
  3616. }
  3617. }
  3618. abilitySub.code = abilitySub.code.Replace($"-{item.oldId}", $"-{item.newId}");
  3619. try { abilitySubs.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<AbilitySub>(abilitySub, new PartitionKey($"AbilitySub-{defaultSc}-{item.newId}"))); } catch { }
  3620. }
  3621. if (abilitySubs.Count < 256)
  3622. await Task.WhenAll(abilitySubs);
  3623. else
  3624. {
  3625. int pages = (abilitySubs.Count + 255) / 256;
  3626. for (int i = 0; i < pages; i++)
  3627. {
  3628. List<Task<ItemResponse<AbilitySub>>> tempAbilSub = abilitySubs.Skip((i) * 256).Take(256).ToList();
  3629. await Task.WhenAll(tempAbilSub);
  3630. }
  3631. }
  3632. //教师所在学校的基础信息
  3633. SchoolTeacher schoolTeacher = new();
  3634. var resScTeacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{item.oldId}", new PartitionKey($"Teacher-{defaultSc}"));
  3635. if (resScTeacher.StatusCode==System.Net.HttpStatusCode.OK)
  3636. {
  3637. using var json = await JsonDocument.ParseAsync(resScTeacher.Content);
  3638. schoolTeacher = json.ToObject<SchoolTeacher>();
  3639. schoolTeacher.id = item.newId;
  3640. //创建新的教师在学校的基础信息
  3641. try {
  3642. schoolTeacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
  3643. } catch {
  3644. }
  3645. }
  3646. //名单信息
  3647. List<Task<ItemResponse<GroupList>>> groupLists = new();
  3648. await foreach (var grups in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<GroupList>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{defaultSc}") }))
  3649. {
  3650. bool isReplace = false;
  3651. if (grups.members.Count > 0)
  3652. {
  3653. foreach (var griupm in grups.members)
  3654. {
  3655. if (griupm.id.Equals(item.oldId))
  3656. {
  3657. griupm.id = item.newId;
  3658. isReplace = true;
  3659. }
  3660. }
  3661. }
  3662. if (grups.creatorId.Equals(item.oldId))
  3663. {
  3664. grups.creatorId = item.newId;
  3665. isReplace = true;
  3666. }
  3667. if (isReplace == true)
  3668. groupLists.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<GroupList>(grups, grups.id, new PartitionKey(grups.code)));
  3669. }
  3670. if (groupLists.Count < 256)
  3671. await Task.WhenAll(groupLists);
  3672. else
  3673. {
  3674. int pages = (groupLists.Count + 255) / 256;
  3675. for (int i = 0; i < pages; i++)
  3676. {
  3677. List<Task<ItemResponse<GroupList>>> tempGroups = groupLists.Skip((i) * 256).Take(256).ToList();
  3678. await Task.WhenAll(tempGroups);
  3679. }
  3680. }
  3681. //教研活动
  3682. List<Task<ItemResponse<Study>>> studys = new();
  3683. await foreach (var study in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIteratorSql<Study>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Study-{defaultSc}") }))
  3684. {
  3685. bool isReplace = false;
  3686. if (study.creatorId.Equals(item.oldId))
  3687. {
  3688. study.creatorId = item.newId;
  3689. isReplace = true;
  3690. }
  3691. if (study.teacIds.Contains(item.oldId) == true)
  3692. {
  3693. study.teacIds = study.teacIds.Select(x => x.Replace($"{item.oldId}", $"{item.newId}")).ToList();
  3694. isReplace = true;
  3695. }
  3696. //if (isReplace == true)
  3697. studys.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<Study>(study, study.id, new PartitionKey($"Study-{defaultSc}")));
  3698. }
  3699. if (studys.Count < 256)
  3700. await Task.WhenAll(studys);
  3701. else
  3702. {
  3703. int pages = (studys.Count + 255) / 256;
  3704. for (int i = 0; i < pages; i++)
  3705. {
  3706. List<Task<ItemResponse<Study>>> tempStudys = studys.Skip((i) * 256).Take(256).ToList();
  3707. await Task.WhenAll(tempStudys);
  3708. }
  3709. }
  3710. //教研测验活动记录
  3711. List<Task<ItemResponse<ExamLite>>> examLites = new();
  3712. await foreach (var examl in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIteratorSql<ExamLite>(queryText: $"select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"ExamLite-{defaultSc}") }))
  3713. {
  3714. bool isReplace = false;
  3715. if (examl.teachers.Count > 0)
  3716. {
  3717. foreach (var examTch in examl.teachers)
  3718. {
  3719. if (examTch.id.Equals(item.oldId))
  3720. {
  3721. examTch.id = item.newId;
  3722. isReplace = true;
  3723. }
  3724. }
  3725. }
  3726. //if (isReplace == true)
  3727. examLites.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<ExamLite>(examl, examl.id, new PartitionKey($"ExamLite-{defaultSc}")));
  3728. }
  3729. if (examLites.Count < 256)
  3730. await Task.WhenAll(examLites);
  3731. else
  3732. {
  3733. int pages = (examLites.Count + 255) / 256;
  3734. for (int i = 0; i < pages; i++)
  3735. {
  3736. List<Task<ItemResponse<ExamLite>>> tempExam = examLites.Skip((i) * 256).Take(256).ToList();
  3737. await Task.WhenAll(tempExam);
  3738. }
  3739. }
  3740. //作业记录
  3741. List<Task<ItemResponse<HomeworkRecord>>> homeworkRecord = new();
  3742. await foreach (var homerec in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<HomeworkRecord>(queryText: $"select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"HomeworkRecord-{item.oldId}") }))
  3743. {
  3744. bool isReplace = false;
  3745. if (homerec.content.Count > 0)
  3746. {
  3747. foreach (var hrCon in homerec.content)
  3748. {
  3749. if (hrCon.url.Contains($"/{item.oldId}/"))
  3750. {
  3751. string hrUrl = hrCon.url;
  3752. hrCon.url = hrCon.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3753. hrCon.blob = hrCon.blob.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3754. //作业附件地址
  3755. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, hrUrl, item.oldId, item.newId);
  3756. if (tempFileCopy != 200)
  3757. noCopyFiles.Add(hrUrl);
  3758. isReplace = true;
  3759. }
  3760. }
  3761. }
  3762. if (isReplace == true)
  3763. {
  3764. homerec.code = homerec.code.Replace($"-{item.oldId}", $"-{item.newId}");
  3765. try { homeworkRecord.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<HomeworkRecord>(homerec, new PartitionKey(homerec.code))); } catch { }
  3766. }
  3767. }
  3768. if (homeworkRecord.Count < 256)
  3769. await Task.WhenAll(homeworkRecord);
  3770. else
  3771. {
  3772. int pages = (homeworkRecord.Count + 255) / 256;
  3773. for (int i = 0; i < pages; i++)
  3774. {
  3775. List<Task<ItemResponse<HomeworkRecord>>> tempHomeR = homeworkRecord.Skip((i) * 256).Take(256).ToList();
  3776. await Task.WhenAll(tempHomeR);
  3777. }
  3778. }
  3779. //视频点评
  3780. List<Task<ItemResponse<Appraise>>> appraises = new();
  3781. await foreach (var appra in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<Appraise>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Appraise-{item.oldId}") }))
  3782. {
  3783. bool isRepCode = false;
  3784. bool isReplace = false;
  3785. if (appra.code.Contains(item.oldId))
  3786. {
  3787. appra.code = appra.code.Replace($"-{item.oldId}", $"-{item.newId}");
  3788. isRepCode = true;
  3789. }
  3790. if (appra.roles.Count > 0)
  3791. {
  3792. foreach (var appRoles in appra.roles)
  3793. {
  3794. if (appRoles.commentTmdid.Equals(item.oldId))
  3795. {
  3796. appRoles.commentTmdid = item.newId;
  3797. isReplace = true;
  3798. }
  3799. }
  3800. }
  3801. if ((isRepCode == true && isReplace == true) || (isRepCode == true && isReplace == false))
  3802. try { appraises.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Appraise>(appra, new PartitionKey(appra.code))); } catch { }
  3803. if (isReplace == true && isRepCode == false)
  3804. appraises.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Appraise>(appra, appra.id, new PartitionKey(appra.code)));
  3805. }
  3806. if (appraises.Count < 256)
  3807. await Task.WhenAll(appraises);
  3808. else
  3809. {
  3810. int pages = (appraises.Count + 255) / 256;
  3811. for (int i = 0; i < pages; i++)
  3812. {
  3813. List<Task<ItemResponse<Appraise>>> tempAppra = appraises.Skip((i) * 256).Take(256).ToList();
  3814. await Task.WhenAll(tempAppra);
  3815. }
  3816. }
  3817. //话题记录
  3818. List<Task<ItemResponse<Debate>>> debates = new();
  3819. await foreach (var debate in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<Debate>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Debate-{defaultSc}") }))
  3820. {
  3821. bool isReplace = false;
  3822. if (debate.tmdid.Equals(item.oldId))
  3823. {
  3824. debate.tmdid = item.newId;
  3825. isReplace = true;
  3826. }
  3827. if (debate.replies.Count > 0)
  3828. {
  3829. foreach (var deRep in debate.replies)
  3830. {
  3831. if (deRep.tmdid.Equals(item.oldId))
  3832. {
  3833. deRep.tmdid = item.newId;
  3834. isReplace = true;
  3835. }
  3836. }
  3837. }
  3838. if (isReplace == true)
  3839. await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<Debate>(debate, debate.id, new PartitionKey(debate.code));
  3840. }
  3841. }
  3842. return Ok(new { state = 200, noCopyFiles });
  3843. }
  3844. catch (Exception ex)
  3845. {
  3846. return Ok(new { state = 500 });
  3847. }
  3848. }
  3849. /// <summary>
  3850. /// 学校id将大写转换小写 并新增学校相关数据信息;修改教师学校的id
  3851. /// </summary>
  3852. /// <param name="jsonElement"></param>
  3853. /// <returns></returns>
  3854. [HttpPost("fix-uppertolower")]
  3855. public async Task<IActionResult> RepairUpperToLower(JsonElement jsonElement)
  3856. {
  3857. string large = "GXJCXX";
  3858. var cosmosClient = _azureCosmos.GetCosmosClient();
  3859. List<string> containe = new() { "School", "Student", "Teacher" };
  3860. List<dynamic> noFail = new();
  3861. foreach (var itemC in containe)
  3862. {
  3863. await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, itemC).GetItemQueryStreamIteratorSql(queryText: $"select value(c) from c where (contains(c.code,'{large}') or contains(c.id,'{large}'))"))
  3864. {
  3865. using var json = await JsonDocument.ParseAsync(item.Content);
  3866. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  3867. {
  3868. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  3869. {
  3870. string oldId = obj.GetProperty("id").GetString();
  3871. string oldCode = obj.GetProperty("code").GetString();
  3872. var jsonElm = obj.ToJsonString().Replace(large, large.ToLower()).ToObject<JsonElement>();
  3873. jsonElm.TryGetProperty("code", out JsonElement code);
  3874. byte[] bytes = Encoding.UTF8.GetBytes(jsonElm.GetRawText());
  3875. var memoryStream = new MemoryStream(bytes);
  3876. var resp = await cosmosClient.GetContainer(Constant.TEAMModelOS, itemC).CreateItemStreamAsync(memoryStream, new PartitionKey($"{code}"));
  3877. if (resp.StatusCode != HttpStatusCode.Created)
  3878. noFail.Add(new { container = itemC, id = oldId, code = oldCode });
  3879. }
  3880. }
  3881. }
  3882. }
  3883. await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryStreamIteratorSql(queryText: $"select value(c) from c join sc in c.schools where sc.schoolId='{large}'",requestOptions:new QueryRequestOptions() { PartitionKey = new PartitionKey("Base")}))
  3884. {
  3885. using var json = await JsonDocument.ParseAsync(item.Content);
  3886. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  3887. {
  3888. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  3889. {
  3890. var jsonElm = obj.ToJsonString().Replace(large, large.ToLower()).ToObject<JsonElement>();
  3891. jsonElm.TryGetProperty("id", out JsonElement id);
  3892. jsonElm.TryGetProperty("code", out JsonElement code);
  3893. byte[] bytes = Encoding.UTF8.GetBytes(jsonElm.GetRawText());
  3894. var memoryStream = new MemoryStream(bytes);
  3895. var resp = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemStreamAsync(memoryStream, $"{id}", new PartitionKey($"Base"));
  3896. if(resp.StatusCode != HttpStatusCode.OK)
  3897. noFail.Add(new { container = "Teacher", id = id, code = code });
  3898. }
  3899. }
  3900. }
  3901. return Ok(new { state = 200, noFail });
  3902. }
  3903. /// <summary>
  3904. /// 根據錯題庫(ErrorItems)生成各學校學生各科錯題數後記入Redis
  3905. /// </summary>
  3906. /// <returns></returns>
  3907. [ProducesDefaultResponseType]
  3908. [HttpPost("set-erroritems-count")]
  3909. public async Task<IActionResult> SetErrorItemsCount(JsonElement json)
  3910. {
  3911. var azureCosmosClient = _azureCosmos.GetCosmosClient();
  3912. await ErrorItemsService.cntStuErrorItemsAsync(_azureRedis, azureCosmosClient, _dingDing);
  3913. return Ok(new { state = 200 });
  3914. }
  3915. /// <summary>
  3916. /// 刪除學生智慧錯題中 activityId = null 的資料
  3917. /// </summary>
  3918. /// <returns></returns>
  3919. [ProducesDefaultResponseType]
  3920. [HttpPost("del-maLearn-no-activityId")]
  3921. public async Task<IActionResult> DelMaLearnNoActivityId()
  3922. {
  3923. List<object> result = new List<object>();
  3924. var cosmosClient = _azureCosmos.GetCosmosClient();
  3925. await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "Student").GetItemQueryStreamIteratorSql(queryText: $"SELECT * FROM c WHERE CONTAINS(c.code, 'MaLearn') AND c.type = 'answer' AND IS_DEFINED(c.qId) AND ( c.activityId = null OR NOT IS_DEFINED(c.activityId) )", requestOptions: new QueryRequestOptions() { }))
  3926. {
  3927. using var json = await JsonDocument.ParseAsync(item.Content);
  3928. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  3929. {
  3930. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  3931. {
  3932. string id = obj.GetProperty("id").GetString();
  3933. string code = obj.GetProperty("code").GetString();
  3934. await cosmosClient.GetContainer("TEAMModelOS", "Student").DeleteItemStreamAsync(id, new PartitionKey($"{code}"));
  3935. result.Add(new { id = id, code = code });
  3936. }
  3937. }
  3938. }
  3939. return Ok(new { state = 200, result = result });
  3940. }
  3941. public record TrainingId
  3942. {
  3943. public string oldId { get; set; }
  3944. public string newId { get; set; }
  3945. }
  3946. }
  3947. }