FixDataController.cs 374 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291
  1. using 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 HTEXLib.COMM.Helpers;
  23. using Azure.Storage.Blobs.Models;
  24. using Azure.Storage.Blobs;
  25. using System.Security.Cryptography;
  26. using Azure;
  27. using Microsoft.Extensions.Options;
  28. using Microsoft.Extensions.Configuration;
  29. using TEAMModelOS.Models;
  30. using System.Text.RegularExpressions;
  31. using TEAMModelOS.SDK.Services;
  32. using Azure.Messaging.ServiceBus;
  33. using TEAMModelOS.SDK.Models.Cosmos.BI;
  34. using static ICSharpCode.SharpZipLib.Zip.ZipEntryFactory;
  35. using Azure.Storage.Sas;
  36. using DocumentFormat.OpenXml.Drawing.Diagrams;
  37. using TEAMModelOS.SDK.Models.Dtos;
  38. using DocumentFormat.OpenXml.Bibliography;
  39. using System.Formats.Asn1;
  40. using System.Xml.Linq;
  41. using DocumentFormat.OpenXml.Math;
  42. using OpenXmlPowerTools;
  43. using Top.Api;
  44. using DinkToPdf.Contracts;
  45. using DocumentFormat.OpenXml.Office2010.Excel;
  46. using TEAMModelOS.SDK.Models.Cosmos.Student;
  47. using MathNet.Numerics.RootFinding;
  48. using DocumentFormat.OpenXml.Wordprocessing;
  49. using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
  50. using OfficeOpenXml;
  51. using Microsoft.AspNetCore.Components.Web;
  52. using Microsoft.AspNetCore.Cors.Infrastructure;
  53. using MathNet.Numerics.Distributions;
  54. using TEAMModelOS.Models.Dto;
  55. using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
  56. using DocumentFormat.OpenXml.Office2021.DocumentTasks;
  57. using Task = System.Threading.Tasks.Task;
  58. namespace TEAMModelOS.Controllers
  59. {
  60. [Route("fix-data")]
  61. [ApiController]
  62. public class FixDataController : ControllerBase
  63. {
  64. private readonly IHttpClientFactory _httpClient;
  65. private readonly IConfiguration _configuration;
  66. private readonly AzureStorageFactory _azureStorage;
  67. private readonly AzureRedisFactory _azureRedis;
  68. private readonly AzureCosmosFactory _azureCosmos;
  69. private readonly DingDing _dingDing;
  70. private readonly Option _option;
  71. private readonly AzureServiceBusFactory _serviceBus;
  72. private readonly HttpTrigger _httpTrigger;
  73. private readonly CoreAPIHttpService _coreAPIHttpService;
  74. private readonly IConverter _converter;
  75. 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)
  76. {
  77. _azureCosmos = azureCosmos;
  78. _azureRedis = azureRedis;
  79. _azureStorage = azureStorage;
  80. _dingDing = dingDing;
  81. _option = option?.Value;
  82. _configuration = configuration;
  83. _serviceBus = serviceBus;
  84. _httpTrigger = httpTrigger;
  85. _coreAPIHttpService = coreAPIHttpService;
  86. _httpClient = httpClient;
  87. _converter = converter;
  88. }
  89. [ProducesDefaultResponseType]
  90. [HttpPost("fix-debate")]
  91. public async Task<IActionResult> FixElegant(JsonElement json)
  92. {
  93. string sql = "select value c from c where c.code='Base-zjaz' and c.graduate=1";
  94. var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).GetList<Student>(sql, "Base-zjaz");
  95. if (result.list.IsNotEmpty())
  96. {
  97. foreach (var item in result.list) {
  98. item.graduate=0;
  99. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).UpsertItemAsync(item, new PartitionKey(item.code));
  100. }
  101. }
  102. return Ok();
  103. }
  104. /// <summary>
  105. ///
  106. /// </summary>
  107. /// <returns></returns>
  108. [ProducesDefaultResponseType]
  109. [HttpPost("fix-activity")]
  110. public async Task<IActionResult> FixActivity(JsonElement json) {
  111. var client = _azureCosmos.GetCosmosClient();
  112. 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' ";
  113. 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' ";
  114. List<Student> students = new List<Student>();
  115. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<Student>(queryText: stusql,requestOptions: new QueryRequestOptions { PartitionKey= new PartitionKey("Base-fzpdzz") }))
  116. {
  117. students.Add(item);
  118. }
  119. await client.GetContainer(Constant.TEAMModelOS, Constant.Student).DeleteItemsStreamAsync(students.Select(z => z.id).ToList(), "Base-fzpdzz");
  120. List <Class> classes = new List<Class>();
  121. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<Class>(queryText: clasql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Class-fzpdzz") }))
  122. {
  123. classes.Add(item);
  124. }
  125. await client.GetContainer(Constant.TEAMModelOS, Constant.School).DeleteItemsStreamAsync(classes.Select(z => z.id).ToList(), "Class-fzpdzz");
  126. return Ok();
  127. }
  128. [ProducesDefaultResponseType]
  129. [HttpPost("fix-error-activity")]
  130. public async Task<IActionResult> FixErrorActivity(JsonElement json)
  131. {
  132. var client = _azureCosmos.GetCosmosClient();
  133. string stusql = "select value(c) from c where c.pk = 'ErrorItems' and c.its = []";
  134. List<ErrorItems> students = new List<ErrorItems>();
  135. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<ErrorItems>(queryText: stusql))
  136. {
  137. students.Add(item);
  138. }
  139. List<Task<ItemResponse<ErrorItems>>> tasks = new List<Task<ItemResponse<ErrorItems>>>();
  140. foreach (ErrorItems error in students) {
  141. tasks.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Student).DeleteItemAsync<ErrorItems>(error.id, new PartitionKey(error.code)));
  142. }
  143. await tasks.TaskPage(10);
  144. return Ok();
  145. }
  146. [ProducesDefaultResponseType]
  147. [HttpPost("find-school-activity")]
  148. public async Task<IActionResult> findSchoolActivity(JsonElement json)
  149. {
  150. var client = _azureCosmos.GetCosmosClient();
  151. string stusql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  152. List<ArtEvaluation> art = new List<ArtEvaluation>();
  153. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ArtEvaluation>(queryText: stusql))
  154. {
  155. art.Add(item);
  156. }
  157. var artId = art.Select(c => c.id).ToList();
  158. string artResultSql = $"select * from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", artId.Select(o => $"'{o}'"))})";
  159. List<StudentArtResult> artResults = new();
  160. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<StudentArtResult>(queryText: artResultSql))
  161. {
  162. artResults.Add(item);
  163. }
  164. string sql = $"select c.id, c.name from c";
  165. List<(string id,string name)> sc = new();
  166. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
  167. .GetItemQueryStreamIterator(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  168. {
  169. using var sc_json = await JsonDocument.ParseAsync(item.ContentStream);
  170. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  171. {
  172. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  173. while (accounts.MoveNext())
  174. {
  175. JsonElement account = accounts.Current;
  176. sc.Add((account.GetProperty("id").GetString(), account.GetProperty("name").GetString()));
  177. }
  178. }
  179. }
  180. int musicCount = 0;
  181. int examCount = 0;
  182. //int wCount = 0;
  183. //List<Dictionary<string, int>> schoolCount = new();
  184. Dictionary<string, int> optCount = new Dictionary<string, int>();
  185. Dictionary<string, int> ansCount = new Dictionary<string, int>();
  186. foreach (StudentArtResult result in artResults) {
  187. var score = result.results.Where(c => c.quotaId.Equals("quota_21")).Select(z => z.score).ToList();
  188. bool flag = score.Exists(c => c == -1);
  189. if (!flag) {
  190. if (ansCount.ContainsKey(result.school))
  191. {
  192. ansCount[result.school] = ansCount[result.school] + 1;
  193. }
  194. else
  195. {
  196. ansCount[result.school] = 1;
  197. }
  198. examCount++;
  199. }
  200. foreach (ArtQuotaResult artQuotas in result.results) {
  201. if (artQuotas.quotaId.Equals("quota_22") && artQuotas.score > 0 && artQuotas.subjectId.Equals("subject_music")) {
  202. if (optCount.ContainsKey(result.school))
  203. {
  204. optCount[result.school] = optCount[result.school] + 1;
  205. }
  206. else
  207. {
  208. optCount[result.school] = 1;
  209. }
  210. musicCount++;
  211. }
  212. }
  213. }
  214. var stuList = artResults.GroupBy(c => c.school).Select(z => new { z.Key, z.ToList().Count }).Select(p => new {
  215. code = p.Key,
  216. name = sc.Where(x => x.id.Equals(p.Key)).FirstOrDefault().name,
  217. total = p.Count,
  218. realMusicCount = optCount.TryGetValue(p.Key,out int real) ? real : 0,
  219. realAnsCount = ansCount.TryGetValue(p.Key, out int ans) ? ans : 0,
  220. });
  221. /*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();
  222. string examSQL = $"select * from c where c.pk = 'ExamClassResult' and c.examId in ({string.Join(",", examId.Select(o => $"'{o}'"))})";
  223. List<ExamClassResult> classResults = new();
  224. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ExamClassResult>(queryText: examSQL))
  225. {
  226. classResults.Add(item);
  227. }
  228. HashSet<string> scCode = new();
  229. foreach (ExamClassResult result in classResults) {
  230. bool flag = false;
  231. if (scCode.Contains(result.school)) {
  232. continue;
  233. }
  234. foreach (var item in result.studentScores)
  235. {
  236. foreach (var score in item) {
  237. if (score > 0) {
  238. flag = true;
  239. break;
  240. }
  241. }
  242. if (flag) {
  243. break;
  244. }
  245. }
  246. if (flag) {
  247. scCode.Add(result.school);
  248. }
  249. }*/
  250. /*var ans = classResults.SelectMany(c => c.ans).ToList();
  251. foreach (var c in ans) {
  252. foreach (var b in c) {
  253. if (b.Count > 0) {
  254. break;
  255. }
  256. }
  257. }*/
  258. return Ok(new { stuList, artResults.Count, musicCount , examCount });
  259. }
  260. [ProducesDefaultResponseType]
  261. [HttpPost("find-student-activity")]
  262. public async Task<IActionResult> findStudentActivity(JsonElement json)
  263. {
  264. var client = _azureCosmos.GetCosmosClient();
  265. string stusql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  266. List<ArtEvaluation> art = new List<ArtEvaluation>();
  267. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ArtEvaluation>(queryText: stusql))
  268. {
  269. art.Add(item);
  270. }
  271. var artId = art.Select(c => c.id).ToList();
  272. string artResultSql = $"select * from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", artId.Select(o => $"'{o}'"))})";
  273. List<StudentArtResult> artResults = new();
  274. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<StudentArtResult>(queryText: artResultSql))
  275. {
  276. artResults.Add(item);
  277. }
  278. string sql = $"select c.id, c.name from c";
  279. List<(string id, string name)> sc = new();
  280. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
  281. .GetItemQueryStreamIterator(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  282. {
  283. using var sc_json = await JsonDocument.ParseAsync(item.ContentStream);
  284. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  285. {
  286. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  287. while (accounts.MoveNext())
  288. {
  289. JsonElement account = accounts.Current;
  290. sc.Add((account.GetProperty("id").GetString(), account.GetProperty("name").GetString()));
  291. }
  292. }
  293. }
  294. //Dictionary<string, int> optCount = new Dictionary<string, int>();
  295. //Dictionary<string, int> ansCount = new Dictionary<string, int>();
  296. /* List<(string stuId, List<(string type, double score)> stuType)> stus = new();
  297. foreach (StudentArtResult result in artResults)
  298. {
  299. List<(string type, double score)> stuTtpe = new();
  300. foreach (ArtQuotaResult artQuotas in result.results)
  301. {
  302. if (artQuotas.quotaId.Equals("quota_21")) {
  303. stuTtpe.Add((artQuotas.subjectId, artQuotas.score > 0 ? 1 : 0));
  304. }
  305. if (artQuotas.quotaId.Equals("quota_22") && artQuotas.subjectId.Equals("subject_music")) {
  306. stuTtpe.Add(("zy", artQuotas.score > 0 ? 1 : 0));
  307. }
  308. }
  309. stus.Add((result.studentId, stuTtpe));
  310. }*/
  311. var classList = artResults.SelectMany(c => c.classIds).ToList().Distinct();
  312. string classSql = $"select c.id, c.name from c where c.pk = 'Class' and c.id in ({string.Join(",", classList.Select(o => $"'{o}'"))})";
  313. List<(string id, string name)> classInfos = new();
  314. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
  315. .GetItemQueryStreamIterator(queryText: classSql))
  316. {
  317. using var sc_json = await JsonDocument.ParseAsync(item.ContentStream);
  318. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  319. {
  320. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  321. while (accounts.MoveNext())
  322. {
  323. JsonElement account = accounts.Current;
  324. classInfos.Add((account.GetProperty("id").GetString(), account.GetProperty("name").GetString()));
  325. }
  326. }
  327. }
  328. var stuList = artResults.Select(p => new {
  329. id = p.studentId,
  330. name = p.studentName,
  331. school = sc.Where(x => x.id.Equals(p.school)).FirstOrDefault().name,
  332. code = p.school,
  333. classId = classInfos.Where(x => x.id.Equals(p.classIds[0])).FirstOrDefault().name
  334. /*info = p.results.Select(c => new
  335. {
  336. c.score,
  337. c.quotaId,
  338. c.quotaName,
  339. c.subjectId
  340. })*/
  341. });
  342. return Ok(new { stuList });
  343. }
  344. [HttpPost("read-excel-art")]
  345. //[Authorize(Roles = "IES")]
  346. //[AuthToken(Roles = "teacher,admin,business")]
  347. [RequestSizeLimit(102_400_000_00)] //最大10000m左右
  348. public async Task<IActionResult> ReadExcel([FromForm] IFormFile file)
  349. {
  350. ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
  351. var client = _azureCosmos.GetCosmosClient();
  352. //string stusql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  353. string stusql = "select * from c where c.pk = 'Art' and c.pId = '306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2'";
  354. List<ArtEvaluation> art = new List<ArtEvaluation>();
  355. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ArtEvaluation>(queryText: stusql))
  356. {
  357. art.Add(item);
  358. }
  359. var artId = art.Select(c => c.id).ToList();
  360. string artResultSql = $"select * from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", artId.Select(o => $"'{o}'"))})";
  361. List<StudentArtResult> artResults = new();
  362. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<StudentArtResult>(queryText: artResultSql))
  363. {
  364. artResults.Add(item);
  365. }
  366. List<(string code,string sId)> students = new();
  367. using ExcelPackage package = new(file.OpenReadStream());
  368. ExcelWorksheets sheet = package.Workbook.Worksheets;
  369. List<string> baseTitle = new List<string>();
  370. //科目标题的栏位序列
  371. int subjectTitelIndex = -1;
  372. //读取Exam_
  373. var art_sheet = sheet.Where(z => z.Name.Equals("art_cz")).FirstOrDefault();
  374. List<(string code, string stuId, double score)> stus = new();
  375. if (art_sheet != null)
  376. {
  377. var rows = art_sheet.Dimension.Rows;
  378. var columns = art_sheet.Dimension.Columns;
  379. for (int r = 2; r <= rows; r++)
  380. {
  381. var stuId = art_sheet.GetValue(r, 5).ToString();
  382. var code = art_sheet.GetValue(r, 2).ToString();
  383. var score = art_sheet.GetValue(r, 7);
  384. stus.Add((code, stuId, (double)score));
  385. }
  386. }
  387. await foreach (var (school, id) in stuTask(client, artResults, stus))
  388. {
  389. students.Add((school, id));
  390. }
  391. //await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).UpsertItemAsync(examImport, new Azure.Cosmos.PartitionKey(examImport.code));
  392. return Ok(new { code = 200, students });
  393. }
  394. [HttpPost("fix-exam-paper")]
  395. //[Authorize(Roles = "IES")]
  396. //[AuthToken(Roles = "teacher,admin,business")]
  397. [RequestSizeLimit(102_400_000_00)] //最大10000m左右
  398. public async Task<IActionResult> fixExamPaper(JsonElement json)
  399. {
  400. var client = _azureCosmos.GetCosmosClient();
  401. string stusql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  402. //string stusql = "select * from c where c.pk = 'Art' and c.pId = '306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2'";
  403. List<ArtEvaluation> art = new List<ArtEvaluation>();
  404. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ArtEvaluation>(queryText: stusql))
  405. {
  406. art.Add(item);
  407. }
  408. 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();
  409. string examSQL = $"select * from c where c.pk = 'ExamClassResult' and c.examId in ({string.Join(",", examId.Select(o => $"'{o}'"))})";
  410. List<ExamClassResult> classResults = new();
  411. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ExamClassResult>(queryText: examSQL))
  412. {
  413. classResults.Add(item);
  414. }
  415. string stuSql = $"select * from c where c.pk = 'Activity' and c.id in ({string.Join(",", examId.Select(o => $"'{o}'"))})";
  416. List<StuActivity> stus = new();
  417. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<StuActivity>(queryText: stuSql))
  418. {
  419. stus.Add(item);
  420. }
  421. List<(string code, string sId)> students = new();
  422. await foreach (var (school, id) in stuTask(client, stus, classResults))
  423. {
  424. students.Add((school, id));
  425. }
  426. //await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).UpsertItemAsync(examImport, new Azure.Cosmos.PartitionKey(examImport.code));
  427. return Ok(new { code = 200, students });
  428. }
  429. private async IAsyncEnumerable<(string school,string id)> stuTask(CosmosClient client,List<StudentArtResult> artResults, List<(string code, string stuId, double score)> stus) {
  430. foreach (StudentArtResult result in artResults)
  431. {
  432. string value = "";
  433. string code = "";
  434. try {
  435. bool flag = false;
  436. foreach (ArtQuotaResult artQuotas in result.results)
  437. {
  438. if (artQuotas.quotaId.Equals("quota_22") && artQuotas.subjectId.Equals("subject_painting"))
  439. {
  440. if (artQuotas.score < 0)
  441. {
  442. artQuotas.score = stus.Where(c => c.code.Equals(result.school) && c.stuId.Equals(result.studentId)).FirstOrDefault().score;
  443. flag = true;
  444. break;
  445. }
  446. }
  447. }
  448. if (flag) {
  449. await client.GetContainer(Constant.TEAMModelOS, Constant.Student).ReplaceItemAsync(result, result.id, new PartitionKey(result.code));
  450. }
  451. } catch (Exception e) {
  452. code = result.school;
  453. value = result.studentId;
  454. }
  455. yield return (code, value);
  456. }
  457. }
  458. private async IAsyncEnumerable<(string school, string id)> stuTask(CosmosClient client, List<StuActivity> stus, List<ExamClassResult> classResults)
  459. {
  460. foreach (ExamClassResult classResult in classResults)
  461. {
  462. string value = "";
  463. string code = "";
  464. try {
  465. //int n = 0;
  466. var activity = stus.Where(c => c.id.Equals(classResult.examId)).ToList();
  467. //List<(string studentId, string blob)> stuBlob = new();
  468. foreach (StuActivity stu in activity) {
  469. List<string> tas = stu.code.Split('-').ToList();
  470. JsonElement dict = stu.paper;
  471. dict[0].TryGetProperty("blob", out JsonElement element);
  472. string blob = element.ToString();
  473. int index = classResult.studentIds.IndexOf(tas[2]);
  474. if (index != -1)
  475. {
  476. classResult.paper[index] = blob;
  477. }
  478. }
  479. await client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(classResult, classResult.id, new PartitionKey(classResult.code));
  480. } catch (Exception e) {
  481. value = classResult.examId;
  482. code = classResult.school;
  483. }
  484. yield return (code, value);
  485. }
  486. }
  487. [ProducesDefaultResponseType]
  488. [HttpPost("find-xg-activity")]
  489. public async Task<IActionResult> findXgActivity(JsonElement element)
  490. {
  491. var client = _azureCosmos.GetCosmosClient();
  492. string musicSql = $"select c.id from c join A0 in c.results where A0.quotaId = 'quota_21' \r\n" +
  493. $"and c.school = 'qyszgh' \r\n" +
  494. $"and A0.subjectId = 'subject_music' \r\n" +
  495. $"and c.artId = '92fb6d6e-4b6f-403a-b4ac-71095d58d43b'\r\n" +
  496. $"and A0.score > 0";
  497. List<string> musicResults = new();
  498. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryStreamIterator(queryText: musicSql))
  499. {
  500. using var sc_json = await JsonDocument.ParseAsync(item.ContentStream);
  501. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  502. {
  503. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  504. while (accounts.MoveNext())
  505. {
  506. JsonElement account = accounts.Current;
  507. musicResults.Add(account.GetProperty("id").GetString());
  508. }
  509. }
  510. }
  511. string paintingSql = $"select c.id from c join A0 in c.results where A0.quotaId = 'quota_21' \r\n" +
  512. $"and c.school = 'qyszgh' \r\n" +
  513. $"and A0.subjectId = 'subject_painting' \r\n" +
  514. $"and c.artId = '92fb6d6e-4b6f-403a-b4ac-71095d58d43b'\r\n" +
  515. $"and A0.score > 0";
  516. List<string> painResults = new();
  517. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryStreamIterator(queryText: paintingSql))
  518. {
  519. using var sc_json = await JsonDocument.ParseAsync(item.ContentStream);
  520. if (sc_json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  521. {
  522. var accounts = sc_json.RootElement.GetProperty("Documents").EnumerateArray();
  523. while (accounts.MoveNext())
  524. {
  525. JsonElement account = accounts.Current;
  526. painResults.Add(account.GetProperty("id").GetString());
  527. }
  528. }
  529. }
  530. var guiyi = painResults.Except(musicResults);
  531. return Ok(new { guiyi });
  532. }
  533. [ProducesDefaultResponseType]
  534. [HttpPost("update-time")]
  535. public async Task<IActionResult> FixTime(JsonElement json)
  536. {
  537. var client = _azureCosmos.GetCosmosClient();
  538. string stusql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  539. List<ArtEvaluation> art = new List<ArtEvaluation>();
  540. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ArtEvaluation>(queryText: stusql))
  541. {
  542. art.Add(item);
  543. }
  544. 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();
  545. string examSQL = $"select * from c where c.pk = 'Exam' and c.id in ({string.Join(",", examId.Select(o => $"'{o}'"))})";
  546. List<ExamInfo> infos = new();
  547. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ExamInfo>(queryText: examSQL))
  548. {
  549. infos.Add(item);
  550. }
  551. //List<Task<ItemResponse<ArtEvaluation>>> tasks = new List<Task<ItemResponse<ArtEvaluation>>>();
  552. /*foreach (ArtEvaluation evaluation in art)
  553. {
  554. foreach (var tas in evaluation.settings)
  555. {
  556. if (tas.id.Equals("quota_22"))
  557. {
  558. foreach (var quot in tas.task)
  559. {
  560. if (quot.subject.Equals("subject_music"))
  561. {
  562. quot.workEnd = 1704902400000;
  563. }
  564. }
  565. }
  566. }
  567. //evaluation.endTime = 1704902400000;
  568. tasks.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(evaluation, evaluation.id, new PartitionKey(evaluation.code)));
  569. }
  570. await tasks.TaskPage(10);*/
  571. List<Task<ItemResponse<ArtEvaluation>>> tasks = new List<Task<ItemResponse<ArtEvaluation>>>();
  572. foreach (ArtEvaluation evaluation in art)
  573. {
  574. evaluation.endTime = 1709112600000;
  575. tasks.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(evaluation, evaluation.id, new PartitionKey(evaluation.code)));
  576. }
  577. await tasks.TaskPage(10);
  578. List<Task<ItemResponse<ExamInfo>>> taskInfo = new List<Task<ItemResponse<ExamInfo>>>();
  579. foreach (ExamInfo info in infos)
  580. {
  581. info.endTime = 1709112600000;
  582. taskInfo.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(info, info.id, new PartitionKey(info.code)));
  583. }
  584. await taskInfo.TaskPage(10);
  585. return Ok();
  586. }
  587. [ProducesDefaultResponseType]
  588. [HttpPost("find-score")]
  589. public async Task<IActionResult> FindScore(JsonElement element)
  590. {
  591. var client = _azureCosmos.GetCosmosClient();
  592. string sql = "SELECT * FROM c where c.pk = 'Art' and (c.startTime = 1678978800000 or c.startTime = 1678982400000) and c.endTime = 1684382400000";
  593. //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' ";
  594. //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' ";
  595. List<ArtEvaluation> infos = new();
  596. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ArtEvaluation>(queryText: sql))
  597. {
  598. infos.Add(item);
  599. }
  600. //List<Task<ItemResponse<ExamInfo>>> tasks = new List<Task<ItemResponse<ExamInfo>>>();
  601. List<string> ids = infos.SelectMany(x => x.settings).SelectMany(c => c.task).Where(z => z.type == 1).Select(n => n.acId).ToList();
  602. List<ExamClassResult> examClassResults = new List<ExamClassResult>();
  603. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(
  604. queryText: $"select value(c) from c where c.pk = 'ExamClassResult' and c.examId in ({string.Join(",", ids.Select(o => $"'{o}'"))})"))
  605. {
  606. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  607. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  608. {
  609. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  610. {
  611. examClassResults.Add(obj.ToObject<ExamClassResult>());
  612. }
  613. }
  614. }
  615. //List<(string school, string name,string subject, List<(string stuId, List<double> es, double score)> values)> students = new();
  616. List<(string stuId, string school, string name, string subject, List<double> es, double score)> stuInfo = new();
  617. foreach (ExamClassResult classResult in examClassResults)
  618. {
  619. //List<(string stuId, List<double> es,double score)> stuInfo = new();
  620. foreach (var stu in classResult.studentIds) {
  621. stuInfo.Add((stu, classResult.school,classResult.info.name,classResult.subjectId,classResult.studentScores[classResult.studentIds.IndexOf(stu)], classResult.sum[classResult.studentIds.IndexOf(stu)]));
  622. }
  623. //students.Add((classResult.school,classResult.info.name,classResult.subjectId, stuInfo));
  624. }
  625. var stus = stuInfo.Select(x => new {
  626. x.stuId,
  627. x.school,
  628. x.name,
  629. x.subject,
  630. x.es,
  631. x.score
  632. //score = x.values.Select(c => new { c.stuId,c.es,c.score})
  633. });
  634. return Ok(stus);
  635. }
  636. [ProducesDefaultResponseType]
  637. [HttpPost("find-art-result")]
  638. public async Task<IActionResult> FindArtResult(JsonElement element)
  639. {
  640. var client = _azureCosmos.GetCosmosClient();
  641. string sql = "SELECT * FROM c where c.pk = 'Art' and (c.startTime = 1678978800000 or c.startTime = 1678982400000) and c.endTime = 1684382400000";
  642. //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' ";
  643. //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' ";
  644. List<ArtEvaluation> infos = new();
  645. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ArtEvaluation>(queryText: sql))
  646. {
  647. infos.Add(item);
  648. }
  649. //List<Task<ItemResponse<ExamInfo>>> tasks = new List<Task<ItemResponse<ExamInfo>>>();
  650. List<string> ids = infos.Select(x => x.id).ToList();
  651. List<StudentArtResult> examClassResults = new List<StudentArtResult>();
  652. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(
  653. queryText: $"select value(c) from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", ids.Select(o => $"'{o}'"))})"))
  654. {
  655. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  656. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  657. {
  658. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  659. {
  660. examClassResults.Add(obj.ToObject<StudentArtResult>());
  661. }
  662. }
  663. }
  664. List<(string classId,string name)> classes = new();
  665. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(
  666. queryText: $"select value(c) from c where c.pk = 'Class'"))
  667. {
  668. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  669. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  670. {
  671. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  672. {
  673. obj.TryGetProperty("id", out JsonElement classId);
  674. obj.TryGetProperty("name", out JsonElement name);
  675. classes.Add((classId.GetString(),name.GetString()));
  676. }
  677. }
  678. }
  679. List<(string id,string stuName,string school, string name, double values, List<ArtSubjectScore> scores, List<(string subjectId, string quotaName, double score)> results)> students = new();
  680. foreach (StudentArtResult classResult in examClassResults)
  681. {
  682. List<(string subjectId, string quotaName,double score)> results = new();
  683. foreach (var rst in classResult.results) {
  684. results.Add((rst.subjectId, rst.quotaName, rst.score));
  685. }
  686. students.Add((classResult.studentId,classResult.studentName,classResult.school, classResult.classIds[0], classResult.totalScore,classResult.subjectScores, results));
  687. }
  688. var stus = students.Select(x => new {
  689. x.id,
  690. x.stuName,
  691. x.school,
  692. x.name,
  693. className = classes.Where(c => c.classId.Equals(x.name))?.FirstOrDefault().name,
  694. x.values,
  695. x.scores.Where(c => c.subjectId.Equals("subject_music")).FirstOrDefault()?.score,
  696. quotaName = x.results.Where(c => c.subjectId.Equals("subject_music")).Select(z => new {
  697. z.quotaName,
  698. z.score
  699. })
  700. });
  701. return Ok(stus);
  702. }
  703. [ProducesDefaultResponseType]
  704. [HttpPost("update-art-result")]
  705. public async Task<IActionResult> UpdateArtResult(JsonElement element)
  706. {
  707. var client = _azureCosmos.GetCosmosClient();
  708. string sql = "select * from c where c.pk = 'Art' and c.pId in ('2f74d38e-80c1-4c55-9dd0-de0d8f6fdf6d','306fa576-7ae4-4baa-ac24-0b5ad4dd1bc2')";
  709. //string sql = "SELECT * FROM c where c.pk = 'Art' and (c.startTime = 1678978800000 or c.startTime = 1678982400000) and c.endTime = 1684382400000";
  710. //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' ";
  711. //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' ";
  712. List<ArtEvaluation> infos = new();
  713. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ArtEvaluation>(queryText: sql))
  714. {
  715. infos.Add(item);
  716. }
  717. //List<Task<ItemResponse<ExamInfo>>> tasks = new List<Task<ItemResponse<ExamInfo>>>();
  718. List<string> ids = infos.Select(x => x.id).ToList();
  719. List<StudentArtResult> artResults = new List<StudentArtResult>();
  720. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(
  721. queryText: $"select value(c) from c where c.pk = 'ArtResult' and c.artId in ({string.Join(",", ids.Select(o => $"'{o}'"))})"))
  722. {
  723. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  724. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  725. {
  726. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  727. {
  728. artResults.Add(obj.ToObject<StudentArtResult>());
  729. }
  730. }
  731. }
  732. //List<Task<ItemResponse<StudentArtResult>>> tasks = new List<Task<ItemResponse<StudentArtResult>>>();
  733. foreach (StudentArtResult artResult in artResults) {
  734. foreach (var artSubjectScore in artResult.subjectScores) {
  735. double subScore = 0;
  736. var score_1 = artResult.results.Where(c => c.quotaId.Equals("quota_21") && c.subjectId.Equals(artSubjectScore.subjectId)).Select(c => c.score).FirstOrDefault() * 0.75;
  737. var score_2 = artResult.results.Where(c => c.quotaId.Equals("quota_22") && c.subjectId.Equals(artSubjectScore.subjectId)).Select(c => c.score).FirstOrDefault() * 0.25;
  738. subScore = score_1 + score_2;
  739. artSubjectScore.score = Math.Round(subScore,2);
  740. }
  741. artResult.totalScore = Math.Round(artResult.subjectScores.Where(m => m.score >= 0).Sum(z => z.score), 2);
  742. await client.GetContainer(Constant.TEAMModelOS, Constant.Student).ReplaceItemAsync(artResult, artResult.id, new PartitionKey(artResult.code));
  743. }
  744. return Ok();
  745. }
  746. [ProducesDefaultResponseType]
  747. [HttpPost("update-score")]
  748. public async Task<IActionResult> FixScore(JsonElement req)
  749. {
  750. var client = _azureCosmos.GetCosmosClient();
  751. string sql = "SELECT c.id FROM c join A0 in c.papers where A0.id = 'ea54f54a-faf3-9fac-6609-dad8b75f9fd6' and c.pk = 'Exam' ";
  752. List<string> ids = new();
  753. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryStreamIterator(queryText: sql))
  754. {
  755. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  756. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  757. {
  758. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  759. {
  760. obj.TryGetProperty("id", out JsonElement id);
  761. ids.Add(id.GetString());
  762. }
  763. }
  764. }
  765. List<ExamClassResult> classResults = new();
  766. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Common).GetItemQueryIterator<ExamClassResult>(queryText: $"select * from c where c.examId in ({string.Join(",", ids.Select(o => $"'{o}'"))}) and c.pk = 'ExamClassResult' "))
  767. {
  768. classResults.Add(item);
  769. }
  770. List<Task<ItemResponse<ExamClassResult>>> tasks = new List<Task<ItemResponse<ExamClassResult>>>();
  771. foreach (ExamClassResult info in classResults)
  772. {
  773. int n = 0;
  774. foreach (string stu in info.studentIds) {
  775. if (info.status[n] == 1)
  776. {
  777. n++;
  778. continue;
  779. }
  780. info.studentScores[n][2] = 7;
  781. info.studentScores[n][7] = 7;
  782. info.studentScores[n][9] = 7;
  783. info.studentScores[n][13] = 6;
  784. info.studentScores[n][14] = 6;
  785. n++;
  786. }
  787. tasks.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReplaceItemAsync(info, info.id, new PartitionKey(info.code)));
  788. }
  789. await tasks.TaskPage(10);
  790. return Ok();
  791. }
  792. /// <summary>
  793. /// 修复能力点学习记录中 nodeid taskid为空的数据
  794. /// </summary>
  795. /// <returns></returns>
  796. [ProducesDefaultResponseType]
  797. [HttpPost("fix-nodeid-taskid")]
  798. public async Task<IActionResult> FixNodeIdTaskId(JsonElement json)
  799. {
  800. var client = _azureCosmos.GetCosmosClient();
  801. 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 ";
  802. List<TeacherFile> teacherFiles = new List<TeacherFile>();
  803. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<TeacherFile>(queryText: sql))
  804. {
  805. teacherFiles.Add(item);
  806. }
  807. teacherFiles.ForEach(x => {
  808. x.fileRecords.ForEach(y => {
  809. y.files.RemoveAll(x => x.taskId == null || x.nodeId == null);
  810. });
  811. });
  812. foreach (var a in teacherFiles)
  813. {
  814. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(a, a.id, new PartitionKey(a.code));
  815. }
  816. return Ok(teacherFiles);
  817. }
  818. /// <summary>
  819. ///
  820. /// </summary>
  821. /// <returns></returns>
  822. [ProducesDefaultResponseType]
  823. [HttpPost("check-repeat-name")]
  824. public async Task<IActionResult> CheckRepeatName(JsonElement json)
  825. {
  826. var client = _azureCosmos.GetCosmosClient();
  827. string sql = $"SELECT distinct value(c) FROM c join b in c.schools where b.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'";
  828. List<Teacher> teachers = new();
  829. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
  830. {
  831. teachers.Add(item);
  832. }
  833. var group = teachers.SelectMany(x => x.binds).Select(y => y.userid).GroupBy(z => z).Select(m => new { key = m.Key, list = m.ToList() });
  834. Dictionary<string, dynamic> dict = new Dictionary<string, dynamic>();
  835. group.ToList().ForEach(x => {
  836. if (x.list.Count() > 1)
  837. {
  838. HashSet<Teacher> teacherR = new();
  839. teachers.ForEach(z => {
  840. z.binds.ForEach(y => {
  841. if (y.userid.Equals(x.key))
  842. {
  843. teacherR.Add(z);
  844. }
  845. });
  846. });
  847. dict.Add(x.key, teacherR.ToList().Select(x => new { x.name, x.id }));
  848. }
  849. });
  850. return Ok(dict);
  851. }
  852. /// <summary>
  853. ///
  854. /// </summary>
  855. /// <returns></returns>
  856. [ProducesDefaultResponseType]
  857. [HttpPost("set-admin")]
  858. public async Task<IActionResult> SetAdmin(JsonElement json)
  859. {
  860. var client = _azureCosmos.GetCosmosClient();
  861. string sql = $"SELECT value(c) FROM c where c.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'";
  862. Teacher teacher = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>("1528783259", new PartitionKey("Base"));
  863. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
  864. {
  865. var sc = teacher.schools.Find(x => x.schoolId.Equals(item.id));
  866. if (sc != null)
  867. {
  868. if (string.IsNullOrEmpty(sc.status) || !sc.status.Equals("join"))
  869. {
  870. sc.status = "join";
  871. }
  872. try
  873. {
  874. SchoolTeacher schoolTeacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>(teacher.id, new PartitionKey($"Teacher-{sc.schoolId}"));
  875. if (schoolTeacher != null)
  876. {
  877. if (schoolTeacher.roles.IsEmpty() || !schoolTeacher.roles.Contains("admin"))
  878. {
  879. schoolTeacher.roles = new List<string> { "admin" };
  880. }
  881. schoolTeacher.status = "join";
  882. schoolTeacher.pk = "Teacher";
  883. schoolTeacher.name = teacher.name;
  884. schoolTeacher.picture = teacher.picture;
  885. schoolTeacher.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  886. schoolTeacher.ttl = -1;
  887. schoolTeacher.permissions = schoolTeacher.permissions.IsNotEmpty() ? schoolTeacher.permissions : new List<string>();
  888. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
  889. }
  890. }
  891. catch (CosmosException ex)
  892. {
  893. SchoolTeacher schoolTeacher = new SchoolTeacher
  894. {
  895. id = teacher.id,
  896. code = $"Teacher-{sc.schoolId}",
  897. roles = new List<string> { "teacher" },
  898. permissions = new List<string>(),
  899. pk = "Teacher",
  900. name = teacher.name,
  901. picture = teacher.picture,
  902. status = "join",
  903. createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
  904. ttl = -1
  905. };
  906. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
  907. }
  908. }
  909. else
  910. {
  911. teacher.schools.Add(new Teacher.TeacherSchool { schoolId = item.id, name = item.name, areaId = item.areaId, picture = item.picture, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), status = "join" });
  912. SchoolTeacher schoolTeacher = new SchoolTeacher
  913. {
  914. id = teacher.id,
  915. code = $"Teacher-{item.id}",
  916. roles = new List<string> { "admin", "teacher" },
  917. permissions = new List<string>(),
  918. pk = "Teacher",
  919. name = teacher.name,
  920. picture = teacher.picture,
  921. status = "join",
  922. createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
  923. };
  924. await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
  925. }
  926. }
  927. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(teacher, teacher.id, new PartitionKey("Base"));
  928. return Ok();
  929. }
  930. /// <summary>
  931. ///
  932. /// </summary>
  933. /// <returns></returns>
  934. [ProducesDefaultResponseType]
  935. [HttpPost("fix-teacher-statistics")]
  936. public async Task<IActionResult> FixTeacherStatistics(JsonElement json)
  937. {
  938. var client = _azureCosmos.GetCosmosClient();
  939. List<TeacherTrain> teacherTrains = new List<TeacherTrain>();
  940. string sql = $"SELECT distinct value(c) FROM c where c.pk='TeacherTrain' ";
  941. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<TeacherTrain>(queryText: sql))
  942. {
  943. teacherTrains.Add(item);
  944. }
  945. foreach (var train in teacherTrains)
  946. {
  947. train.update.Add(StatisticsService.TeacherAbility);
  948. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(train, train.id, new PartitionKey(train.code));
  949. }
  950. return Ok();
  951. }
  952. /// <summary>
  953. ///
  954. /// </summary>
  955. /// <returns></returns>
  956. [ProducesDefaultResponseType]
  957. [HttpPost("fix-teacher-file")]
  958. public async Task<IActionResult> FixTeacherFile(JsonElement json)
  959. {
  960. var client = _azureCosmos.GetCosmosClient();
  961. List<TeacherFile> teacherFiles = new List<TeacherFile>();
  962. 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) ";
  963. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<TeacherFile>(queryText: sql))
  964. {
  965. teacherFiles.Add(item);
  966. }
  967. foreach (var flie in teacherFiles)
  968. {
  969. var records = flie.fileRecords.FindAll(x => x.type.Equals("video") && x.duration > 0 && x.view < (int)x.duration);
  970. records.ForEach(x => { x.view = (int)x.duration; });
  971. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(flie, flie.id, new PartitionKey(flie.code));
  972. TeacherTrain train = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<TeacherTrain>(flie.id, new PartitionKey($"TeacherTrain-{flie.code.Replace("TeacherFile-", "")}"));
  973. train.update.Add(StatisticsService.TeacherAbility);
  974. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(train, train.id, new PartitionKey(train.code));
  975. }
  976. return Ok();
  977. }
  978. /// <summary>
  979. /// 批量导入自动加入学校
  980. /// </summary>
  981. /// <returns></returns>
  982. [ProducesDefaultResponseType]
  983. [HttpPost("fix-joinschool")]
  984. public async Task<IActionResult> GenerateSchoolCodes(JsonElement json)
  985. {
  986. JsonElement _teachers = json.GetProperty("teachers");
  987. string jsons = _teachers.ToJsonString();
  988. jsons = Regex.Replace(jsons, @"\s", "");
  989. List<JoinSchool> joins = jsons.ToObject<List<JoinSchool>>();
  990. string url = _configuration.GetValue<string>("HaBookAuth:CoreId:userinfo");
  991. var tmdids = joins.Select(x => x.tmdid).ToList();
  992. var content = new StringContent(tmdids.ToJsonString(), Encoding.UTF8, "application/json");
  993. HttpResponseMessage responseMessage = await _httpClient.CreateClient().PostAsync(url, content);
  994. List<Teacher> ids = null;
  995. if (responseMessage.StatusCode == HttpStatusCode.OK)
  996. {
  997. string responseBody = responseMessage.Content.ReadAsStringAsync().Result;
  998. ids = responseBody.ToObject<List<Teacher>>();
  999. }
  1000. if (ids.IsNotEmpty())
  1001. {
  1002. var school = joins.Select(x => x.schoolId);
  1003. HashSet<string> scho = new HashSet<string>(school);
  1004. string sql = $"select value(c) from c where c.id in ({string.Join(",", scho.Select(x => $"'{x}'"))})";
  1005. List<School> schools = new List<School>();
  1006. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").
  1007. GetItemQueryIterator<School>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
  1008. {
  1009. schools.Add(item);
  1010. }
  1011. var noexist = tmdids.Except(ids.Select(x => x.id));
  1012. sql = $"select value(c) from c where c.id in ({string.Join(",", ids.Select(x => $"'{x.id}'"))})";
  1013. List<Teacher> teachers = new List<Teacher>();
  1014. List<Teacher> updTeachers = new List<Teacher>();
  1015. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").
  1016. GetItemQueryIterator<Teacher>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
  1017. {
  1018. teachers.Add(item);
  1019. }
  1020. long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  1021. var nobinds = ids.Select(x => x.id).Except(teachers.Select(t => t.id)).ToList();
  1022. foreach (var tch in teachers)
  1023. {
  1024. var join = joins.Find(x => x.tmdid.Equals(tch.id));
  1025. if (join != null)
  1026. {
  1027. var joinschool = tch.schools.Find(x => x.schoolId.Equals(join.schoolId));
  1028. if (joinschool == null)
  1029. {
  1030. var schoolInfo = schools.Find(x => x.id.Equals(join.schoolId));
  1031. if (schoolInfo != null)
  1032. {
  1033. tch.defaultSchool = join.schoolId;
  1034. tch.schools.Add(new Teacher.TeacherSchool { schoolId = join.schoolId, areaId = schoolInfo.areaId, name = schoolInfo?.name, picture = schoolInfo?.picture, status = "join", time = now });
  1035. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(tch, tch.id, new PartitionKey("Base"));
  1036. updTeachers.Add(tch);
  1037. }
  1038. }
  1039. }
  1040. }
  1041. HashSet<Teacher> changeTeacher = new HashSet<Teacher>();
  1042. List<Teacher> addTeachers = new List<Teacher>();
  1043. if (nobinds != null)
  1044. {
  1045. foreach (var tch in nobinds)
  1046. {
  1047. var teacher = ids.Find(x => x.id.Equals(tch));
  1048. var join = joins.Find(x => x.tmdid.Equals(tch));
  1049. var schoolInfo = schools.Find(x => x.id.Equals(join.schoolId));
  1050. if (schoolInfo != null && teacher != null)
  1051. {
  1052. teacher.ttl = -1;
  1053. teacher.pk = "Teacher";
  1054. teacher.code = "Base";
  1055. teacher.size = 2;
  1056. 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 } };
  1057. teacher.defaultSchool = schoolInfo?.id;
  1058. List<string> roles = new List<string> { "teacher" };
  1059. if (!string.IsNullOrEmpty(join.role) && join.role.Equals("admin"))
  1060. {
  1061. roles.Add("admin");
  1062. }
  1063. var container = _azureStorage.GetBlobContainerClient(teacher.id);
  1064. await container.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建Teacher私有容器,如存在則不做任何事,保障容器一定存在
  1065. teacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey("Base"));
  1066. addTeachers.Add(teacher);
  1067. }
  1068. }
  1069. }
  1070. foreach (var sch in schools)
  1071. {
  1072. StringBuilder queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain'");
  1073. List<GroupList> yxtrain = new List<GroupList>();
  1074. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupList>(queryText: queryText.ToString(),
  1075. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{sch.id}") }))
  1076. {
  1077. yxtrain.Add(item);
  1078. }
  1079. if (yxtrain.IsNotEmpty())
  1080. {
  1081. var schjoins = joins.FindAll(x => x.schoolId.Equals(sch.id));
  1082. schjoins.RemoveAll(x => noexist.Contains(x.tmdid));
  1083. GroupList groupList = yxtrain[0];
  1084. //不在研修名单
  1085. schjoins = schjoins.FindAll(z => !yxtrain.SelectMany(x => x.members).Where(y => y.type == 1).Select(m => m.id).Contains(z.tmdid));
  1086. if (schjoins.IsNotEmpty())
  1087. {
  1088. foreach (var schjoin in schjoins)
  1089. {
  1090. groupList.members.Add(new Member { id = schjoin.tmdid, type = 1 });
  1091. }
  1092. await GroupListService.UpsertList(groupList, _azureCosmos, _configuration, _serviceBus, _client: "web");
  1093. }
  1094. }
  1095. else
  1096. {
  1097. var schjoins = joins.FindAll(x => x.schoolId.Equals(sch.id));
  1098. schjoins.RemoveAll(x => noexist.Contains(x.tmdid));
  1099. if (schjoins.IsNotEmpty())
  1100. {
  1101. List<Member> members = new List<Member>();
  1102. foreach (var schjoin in schjoins)
  1103. {
  1104. members.Add(new Member { id = schjoin.tmdid, type = 1 });
  1105. }
  1106. GroupList groupList = new GroupList()
  1107. {
  1108. id = Guid.NewGuid().ToString(),
  1109. code = $"GroupList-{sch.id}",
  1110. creatorId = schjoins[0].tmdid,
  1111. type = "yxtrain",
  1112. year = DateTimeOffset.UtcNow.Year,
  1113. expire = 0,
  1114. members = members,
  1115. scope = "school",
  1116. school = sch.id,
  1117. name = "研修名单",
  1118. pk = "GroupList",
  1119. ttl = -1
  1120. };
  1121. await GroupListService.UpsertList(groupList, _azureCosmos, _configuration, _serviceBus, _client: "web");
  1122. }
  1123. }
  1124. var schtch = joins.FindAll(x => x.schoolId.Equals(sch.id));
  1125. schtch.RemoveAll(x => noexist.Contains(x.tmdid));
  1126. var tchs = teachers.FindAll(x => schtch.Select(x => x.tmdid).Contains(x.id));
  1127. foreach (var joinc in tchs)
  1128. {
  1129. SchoolTeacher schoolTeacher = null;
  1130. var join = joins.Find(x => x.tmdid.Equals(joinc.id));
  1131. joinc.schools.ForEach(x => {
  1132. if (x.schoolId.Equals(sch.id) && x.status.Equals("request"))
  1133. {
  1134. x.status = "join";
  1135. changeTeacher.Add(joinc);
  1136. }
  1137. });
  1138. List<string> roles = new List<string> { "teacher" };
  1139. if (!string.IsNullOrEmpty(join.role) && join.role.Equals("admin"))
  1140. {
  1141. roles.Add("admin");
  1142. }
  1143. try
  1144. {
  1145. schoolTeacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>(joinc.id, new PartitionKey($"Teacher-{join.schoolId}"));
  1146. if (roles.Contains("admin") && !schoolTeacher.roles.Contains("admin"))
  1147. {
  1148. schoolTeacher.roles.Add("admin");
  1149. }
  1150. if (roles.Contains("teacher") && !schoolTeacher.roles.Contains("teacher"))
  1151. {
  1152. schoolTeacher.roles.Add("teacher");
  1153. }
  1154. schoolTeacher.permissions = schoolTeacher.permissions.IsNotEmpty() ? schoolTeacher.permissions : new List<string>();
  1155. schoolTeacher.status = "join";
  1156. }
  1157. catch (CosmosException)
  1158. {
  1159. schoolTeacher = new SchoolTeacher
  1160. {
  1161. id = joinc.id,
  1162. name = joinc.name,
  1163. picture = joinc.picture,
  1164. code = $"Teacher-{sch.id}",
  1165. pk = "SchoolTeacher",
  1166. ttl = -1,
  1167. size = 0,
  1168. roles = roles,
  1169. status = "join",
  1170. createTime = now,
  1171. permissions = new List<string>()
  1172. };
  1173. }
  1174. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
  1175. }
  1176. }
  1177. foreach (var tch in changeTeacher)
  1178. {
  1179. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(tch, tch.id, new PartitionKey("Base"));
  1180. }
  1181. return Ok(new { noexist, update = updTeachers, add = addTeachers });
  1182. }
  1183. return Ok(new { status = 404 });
  1184. }
  1185. public class JoinSchool
  1186. {
  1187. public string name { get; set; }
  1188. public string schoolId { get; set; }
  1189. public string mobile { get; set; }
  1190. public string tmdid { get; set; }
  1191. public string role { get; set; }
  1192. }
  1193. [ProducesDefaultResponseType]
  1194. [HttpPost("fix-md5-duration")]
  1195. public async Task<IActionResult> FixMD5Duration(JsonElement json)
  1196. {
  1197. json.TryGetProperty("standard", out JsonElement standard);
  1198. json.TryGetProperty("abilityIds", out JsonElement _abilityIds);
  1199. if (string.IsNullOrEmpty($"{standard}")
  1200. && (!$"{standard}".Equals("standard1")
  1201. || !$"{standard}".Equals("standard2")
  1202. || !$"{standard}".Equals("standard3")
  1203. || !$"{standard}".Equals("standard4")
  1204. || !$"{standard}".Equals("standard7")))
  1205. {
  1206. return Ok();
  1207. }
  1208. var client = _azureStorage.GetBlobContainerClient($"teammodelos");
  1209. await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/standard1/jyzx/15d96330-54d8-95fd-cf9a-8785836fad03"))
  1210. {
  1211. string hash = Md5Hash.GetbyteToString(item.Properties.ContentHash);
  1212. Console.WriteLine($"{item.Name}-{hash}");
  1213. }
  1214. var CosmosClient = _azureCosmos.GetCosmosClient();
  1215. HashSet<AbilityTask> abilityTasks = new HashSet<AbilityTask>();
  1216. List<string> abilityIds = _abilityIds.ToObject<List<string>>();
  1217. if (abilityIds.IsEmpty())
  1218. {
  1219. return Ok();
  1220. }
  1221. MD5 md5 = new MD5CryptoServiceProvider();
  1222. string sql = $"select value(c) from c where c.abilityId in ({string.Join(",", abilityIds.Select(x => $"'{x}'"))}) ";
  1223. await foreach (var item in CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"AbilityTask-{standard}") }))
  1224. {
  1225. var nodes = item.children.SelectMany(x => x.rnodes).Where(m => !m.type.Equals("link") && string.IsNullOrEmpty(m.hash));
  1226. if (nodes != null && nodes.Count() > 0)
  1227. {
  1228. foreach (var node in item.children)
  1229. {
  1230. foreach (var r in node.rnodes)
  1231. {
  1232. if (!r.type.Equals("link") && (string.IsNullOrWhiteSpace(r.hash) || r.size == 0))
  1233. {
  1234. abilityTasks.Add(item);
  1235. }
  1236. }
  1237. }
  1238. }
  1239. abilityTasks.Add(item);
  1240. }
  1241. foreach (var item in abilityTasks)
  1242. {
  1243. var nodes = item.children.SelectMany(x => x.rnodes).Where(m => !m.type.Equals("link") && string.IsNullOrEmpty(m.hash));
  1244. if (nodes != null && nodes.Count() > 0)
  1245. {
  1246. foreach (var node in item.children)
  1247. {
  1248. foreach (var r in node.rnodes)
  1249. {
  1250. if (!r.type.Equals("link") && (string.IsNullOrWhiteSpace(r.hash) || r.size == 0))
  1251. {
  1252. BlobDownloadInfo blobDownload = await client.GetBlobClient(r.link).DownloadAsync(range: new HttpRange(0, 4 * 1048576), rangeGetContentHash: true);
  1253. if (blobDownload.Details.ContentHash != null)
  1254. {
  1255. string hash = Md5Hash.GetbyteToString(blobDownload.Details.ContentHash);
  1256. r.hash = hash;
  1257. }
  1258. //byte[] retVal = md5.ComputeHash(blobDownload.Content);
  1259. //string hash = Md5Hash.GetbyteToString(retVal);
  1260. //r.hash = hash;
  1261. //r.size = blobDownload.Content.Length;
  1262. }
  1263. }
  1264. }
  1265. await CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").ReplaceItemAsync<AbilityTask>(item, item.id, new PartitionKey(item.code));
  1266. }
  1267. }
  1268. return Ok(abilityTasks);
  1269. }
  1270. /// <summary>
  1271. /// 修复能力点任务的资源节点的文件大小,hash值等。
  1272. /// </summary>
  1273. /// <returns></returns>
  1274. [ProducesDefaultResponseType]
  1275. [HttpPost("fix-blobitem-md5")]
  1276. public async Task<IActionResult> GetBlobitemMd5(JsonElement jsonMsg)
  1277. {
  1278. List<string> standards = new List<string>() { "standard1", "standard2", "standard3", "standard4" };
  1279. var client = _azureStorage.GetBlobContainerClient($"teammodelos");
  1280. var CosmosClient = _azureCosmos.GetCosmosClient();
  1281. List<BlobFile> itemInfos = new List<BlobFile>();
  1282. List<string> fils = new List<string>();
  1283. foreach (var standard in standards)
  1284. {
  1285. await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/{standard}/jyzx/"))
  1286. {
  1287. if (item.Properties.ContentHash.Length < 16)
  1288. {
  1289. fils.Add(item.Name);
  1290. }
  1291. string hash = Md5Hash.GetbyteToString(item.Properties.ContentHash);
  1292. if (string.IsNullOrEmpty(hash))
  1293. {
  1294. fils.Add(item.Name);
  1295. }
  1296. var blobitem = itemInfos.Find(x => x.id.Equals(hash));
  1297. if (blobitem != null)
  1298. {
  1299. blobitem.paths.Add(item.Name);
  1300. }
  1301. else
  1302. {
  1303. long? ContentLength = item.Properties.ContentLength;
  1304. blobitem = new BlobFile() { code = $"BlobFile-{standard}", source = "standard", pk = "BlobFile", ttl = -1, id = hash, size = ContentLength != null ? ContentLength.Value : 0 };
  1305. blobitem.paths.Add(item.Name);
  1306. itemInfos.Add(blobitem);
  1307. }
  1308. }
  1309. }
  1310. List<Rnode> rnode = new List<Rnode>();
  1311. foreach (var standard in standards)
  1312. {
  1313. List<AbilityTask> abilityTasks = new List<AbilityTask>();
  1314. string sql = "select value(c) from c ";
  1315. await foreach (var item in CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"AbilityTask-{standard}") }))
  1316. {
  1317. var nodes = item.children.SelectMany(x => x.rnodes).Where(m => !m.type.Equals("link") && string.IsNullOrEmpty(m.hash));
  1318. if (nodes != null && nodes.Count() > 0)
  1319. {
  1320. foreach (var node in item.children)
  1321. {
  1322. foreach (var r in node.rnodes)
  1323. {
  1324. if (!r.type.Equals("link") && string.IsNullOrEmpty(r.hash))
  1325. {
  1326. string str = r.link.Substring(1);
  1327. BlobFile itemInfo = itemInfos.Find(s => s.paths.Contains(str));
  1328. if (itemInfo != null)
  1329. {
  1330. r.size = itemInfo.size;
  1331. r.hash = itemInfo.id;
  1332. }
  1333. rnode.Add(r);
  1334. }
  1335. }
  1336. node.rnodes.RemoveAll(x => x.hash == null);
  1337. }
  1338. await CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  1339. }
  1340. abilityTasks.Add(item);
  1341. }
  1342. }
  1343. await _dingDing.SendBotMsg($"fix-blobitem-md5, {fils.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  1344. return Ok(new { rnode, itemInfos });
  1345. }
  1346. /// <summary>
  1347. /// 修复学生的id
  1348. /// </summary>
  1349. /// <param name="data"></param>
  1350. /// <returns></returns>
  1351. [ProducesDefaultResponseType]
  1352. //[AuthToken(Roles = "teacher")]
  1353. [HttpPost("fix-student-id")]
  1354. public async Task<IActionResult> FixStudentId(JsonElement data)
  1355. {
  1356. var client = _azureCosmos.GetCosmosClient();
  1357. var queryslt = $"SELECT value(c) FROM c ";
  1358. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<Student>(queryText: queryslt))
  1359. {
  1360. //item.id
  1361. }
  1362. return Ok();
  1363. }
  1364. /// <summary>
  1365. /// 修复学生的id
  1366. /// </summary>
  1367. /// <param name="data"></param>
  1368. /// <returns></returns>
  1369. [ProducesDefaultResponseType]
  1370. //[AuthToken(Roles = "teacher")]
  1371. [HttpPost("fix-school")]
  1372. public async Task<IActionResult> FixSchool(JsonElement data)
  1373. {
  1374. List<string> arr = new List<string> {
  1375. "pjzx",
  1376. "pjsazx",
  1377. "pjsywgyxx",
  1378. "pjbjxx",
  1379. "pjhszcjzx",
  1380. "pjcyhzjnzxx",
  1381. "pjxnxx",
  1382. "pjthxx",
  1383. "pjsazsmxx",
  1384. "pjcyxx",
  1385. "pjsazcjzx",
  1386. "pjwxjnzxx",
  1387. "ptsxxpjfx",
  1388. "pjjysxx",
  1389. "pjxlzjnzxx",
  1390. "pjfxxx",
  1391. "pjdtjnzxx",
  1392. "pjgxzjnzxx",
  1393. "pjcjzjnzxx",
  1394. "pjdxjnzxx",
  1395. "pjwjxx",
  1396. "pjzyzx",
  1397. "pjnjyey",
  1398. "pjbjyey",
  1399. "pjcbyey",
  1400. "pjcxyey",
  1401. "pjcnyey",
  1402. "pjxj5hyey",
  1403. "pjxlyey",
  1404. "pjsazxyey",
  1405. "pjsaxcyey",
  1406. "pjthyey",
  1407. "pjsmyey",
  1408. "pjshyey",
  1409. "pjwxyey",
  1410. "pjjysyey",
  1411. "pjfxyey",
  1412. "pjgxyey",
  1413. "pjcjyey",
  1414. "pjcyhyey",
  1415. "pjbyyey",
  1416. "pjdtyey",
  1417. "pjnjyeydxfy",
  1418. "pjcxyeygmfy",
  1419. "pjcbyeygqfy",
  1420. "pjsaxcyeyzqfy",
  1421. "pjxyheyey",
  1422. "pjxhyey",
  1423. "pjxbeyey",
  1424. "pjhhzyey",
  1425. "pjxxyey",
  1426. "sazxgyey",
  1427. "xlzlxyey",
  1428. "dxzxmyey",
  1429. "dtzxmyey",
  1430. "dtzydyey"
  1431. };
  1432. var client = _azureCosmos.GetCosmosClient();
  1433. foreach (var ar in arr)
  1434. {
  1435. SchoolTeacher teacher = new SchoolTeacher
  1436. {
  1437. id = "1528783259",
  1438. code = $"Teacher-{ar}",
  1439. picture = "https://corestorageservice.blob.core.windows.net/account/avatar/1528783259",
  1440. name = "郭杰",
  1441. job = "管理员",
  1442. roles = new List<string> { "admin", "teacher" },
  1443. status = "join",
  1444. pk = "Teacher",
  1445. ttl = -1,
  1446. createTime = 1631703528741,
  1447. };
  1448. await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(teacher, partitionKey: new PartitionKey(teacher.code));
  1449. }
  1450. //await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1451. //{
  1452. // if (arr.Contains(item.id)) {
  1453. // string periodid = Guid.NewGuid().ToString();
  1454. // string campuses = Guid.NewGuid().ToString();
  1455. // item.period = new List<Period> { new Period { name = "默认学段", id = periodid, campusId = campuses } };
  1456. // item.campuses = new List<Campus> { new Campus { name = "本部", id = campuses } };
  1457. // item.timeZone.label = "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐";
  1458. // item.timeZone.value = "+08:00";
  1459. // await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(item, item.id, new PartitionKey(item.code));
  1460. // }
  1461. //}
  1462. return Ok();
  1463. }
  1464. /// <summary>
  1465. /// 修复学生的id
  1466. /// </summary>
  1467. /// <param name="data"></param>
  1468. /// <returns></returns>
  1469. [ProducesDefaultResponseType]
  1470. //[AuthToken(Roles = "teacher")]
  1471. [HttpPost("fix-teacher")]
  1472. public async Task<IActionResult> FixTeacher(JsonElement data)
  1473. {
  1474. var client = _azureCosmos.GetCosmosClient();
  1475. List<Teacher> teachers = new List<Teacher>();
  1476. string sql = $"SELECT value(c) FROM c ";
  1477. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1478. {
  1479. teachers.Add(item);
  1480. }
  1481. List<School> schools = new List<School>(0);
  1482. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1483. {
  1484. schools.Add(item);
  1485. }
  1486. teachers.ForEach(x => {
  1487. x.schools.ForEach(y => {
  1488. School? school = schools.Find(z => z.id.Equals(y.schoolId));
  1489. if (school != null)
  1490. {
  1491. y.name = school.name;
  1492. y.picture = school.picture;
  1493. y.areaId = school.areaId;
  1494. }
  1495. });
  1496. });
  1497. foreach (var item in teachers)
  1498. {
  1499. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(item, item.id, new PartitionKey($"Base"));
  1500. }
  1501. return Ok();
  1502. }
  1503. [ProducesDefaultResponseType]
  1504. //[AuthToken(Roles = "teacher")]
  1505. [HttpPost("fix-item")]
  1506. public async Task<IActionResult> FixItem(JsonElement data)
  1507. {
  1508. var client = _azureCosmos.GetCosmosClient();
  1509. List<School> schools = new List<School>();
  1510. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1511. {
  1512. schools.Add(item);
  1513. }
  1514. Random random = new Random();
  1515. foreach (var school in schools)
  1516. {
  1517. List<ItemInfo> items = new List<ItemInfo>();
  1518. var queryslt = $"SELECT value(c) FROM c where c.pid = null ";
  1519. List<ItemInfo> noPeriodId = new List<ItemInfo>();
  1520. List<ItemInfo> noSubjectId = new List<ItemInfo>();
  1521. List<ItemInfo> noGradeIds = new List<ItemInfo>();
  1522. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<ItemInfo>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{school.id}") }))
  1523. {
  1524. if (string.IsNullOrEmpty(item.periodId))
  1525. {
  1526. noPeriodId.Add(item);
  1527. }
  1528. if (string.IsNullOrEmpty(item.subjectId))
  1529. {
  1530. noSubjectId.Add(item);
  1531. }
  1532. if (!item.gradeIds.IsNotEmpty())
  1533. {
  1534. noGradeIds.Add(item);
  1535. }
  1536. bool errorData = false;
  1537. foreach (var x in item.gradeIds)
  1538. {
  1539. if (string.IsNullOrEmpty(x))
  1540. {
  1541. errorData = true;
  1542. }
  1543. }
  1544. if (errorData)
  1545. {
  1546. List<string> grds = new List<string>();
  1547. item.gradeIds.ForEach(x => {
  1548. if (string.IsNullOrEmpty(x))
  1549. {
  1550. grds.Add($"{random.Next(0, 5)}");
  1551. }
  1552. else
  1553. {
  1554. grds.Add(x);
  1555. }
  1556. });
  1557. item.gradeIds = grds;
  1558. await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<ItemInfo>(item, item.id, new PartitionKey(item.code));
  1559. }
  1560. items.Add(item);
  1561. }
  1562. List<ItemInfo> unMatch = new List<ItemInfo>();
  1563. foreach (var item in items)
  1564. {
  1565. bool match = false;
  1566. school.period.ForEach(x =>
  1567. {
  1568. if (item.periodId.Equals(x.id))
  1569. {
  1570. if (x.subjects.Select(y => y.id).Contains(item.subjectId))
  1571. {
  1572. match = true;
  1573. }
  1574. }
  1575. });
  1576. if (!match)
  1577. {
  1578. unMatch.Add(item);
  1579. }
  1580. }
  1581. if (noGradeIds.IsNotEmpty())
  1582. {
  1583. var ids = noGradeIds.Select(x => x.id);
  1584. await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
  1585. foreach (var rm in noGradeIds)
  1586. {
  1587. items.Remove(rm);
  1588. }
  1589. }
  1590. if (noPeriodId.IsNotEmpty())
  1591. {
  1592. var ids = noPeriodId.Select(x => x.id);
  1593. await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
  1594. foreach (var rm in noPeriodId)
  1595. {
  1596. items.Remove(rm);
  1597. }
  1598. }
  1599. if (noSubjectId.IsNotEmpty())
  1600. {
  1601. var ids = noSubjectId.Select(x => x.id);
  1602. await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
  1603. foreach (var rm in noSubjectId)
  1604. {
  1605. items.Remove(rm);
  1606. }
  1607. }
  1608. if (unMatch.IsNotEmpty())
  1609. {
  1610. var ids = unMatch.Select(x => x.id);
  1611. await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
  1612. foreach (var rm in unMatch)
  1613. {
  1614. items.Remove(rm);
  1615. }
  1616. }
  1617. List<ItemCond> itemConds = new List<ItemCond>();
  1618. items.GroupBy(x => x.periodId).Select(y => new { key = y.Key, list = y.ToList() }).ToList().ForEach(z =>
  1619. {
  1620. 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>() };
  1621. z.list.ForEach(y =>
  1622. {
  1623. ItemService.CountItemCond(y, null, cond);
  1624. });
  1625. itemConds.Add(cond);
  1626. });
  1627. itemConds.ForEach(async cond =>
  1628. {
  1629. await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<ItemCond>(cond, new PartitionKey(cond.code));
  1630. });
  1631. }
  1632. return Ok(new { });
  1633. }
  1634. [ProducesDefaultResponseType]
  1635. //[AuthToken(Roles = "teacher")]
  1636. [HttpPost("fix-item-teacher")]
  1637. public async Task<IActionResult> FixItemTeacher(JsonElement data)
  1638. {
  1639. var client = _azureCosmos.GetCosmosClient();
  1640. List<Teacher> teachers = new List<Teacher>();
  1641. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  1642. {
  1643. teachers.Add(item);
  1644. }
  1645. Random random = new Random();
  1646. foreach (var teacher in teachers)
  1647. {
  1648. List<ItemInfo> items = new List<ItemInfo>();
  1649. var queryslt = $"SELECT value(c) FROM c where c.pid = null ";
  1650. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<ItemInfo>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{teacher.id}") }))
  1651. {
  1652. items.Add(item);
  1653. }
  1654. List<ItemInfo> unMatch = new List<ItemInfo>();
  1655. ItemCond cond = new ItemCond() { id = teacher.id, code = $"ItemCond", pk = "ItemCond", ttl = -1, count = items.Count };
  1656. items.ForEach(z =>
  1657. {
  1658. ItemService.CountItemCond(z, null, cond);
  1659. });
  1660. await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<ItemCond>(cond, new PartitionKey(cond.code));
  1661. }
  1662. return Ok(new { });
  1663. }
  1664. [ProducesDefaultResponseType]
  1665. //[AuthToken(Roles = "teacher")]
  1666. [HttpPost("fix-activity-art")]
  1667. public async Task<IActionResult> FixActivityArt(JsonElement data)
  1668. {
  1669. var client = _azureCosmos.GetCosmosClient();
  1670. List<StuActivity> activities = new List<StuActivity>();
  1671. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<StuActivity>(queryText: "SELECT value(c) FROM c where c.pk = 'Activity' and c.type = 'Atr'"))
  1672. {
  1673. activities.Add(item);
  1674. }
  1675. foreach (var activity in activities)
  1676. {
  1677. activity.type = "Art";
  1678. await client.GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync<StuActivity>(activity, activity.id,new PartitionKey(activity.code));
  1679. }
  1680. return Ok(new { });
  1681. }
  1682. /// <summary>
  1683. /// 修复名单的scope,school,creatorid
  1684. /// </summary>
  1685. /// <param name="request"></param>
  1686. /// <returns></returns>
  1687. [ProducesDefaultResponseType]
  1688. //[AuthToken(Roles = "teacher")]
  1689. [HttpPost("fix-stulist-scope&school&creatorid")]
  1690. public async Task<IActionResult> FixStulist(JsonElement data)
  1691. {
  1692. try
  1693. {
  1694. var client = _azureCosmos.GetCosmosClient();
  1695. //先处理未关联课程的教师私人名单
  1696. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<StuList>(queryText: "select value(c) from c ", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("StuList") }))
  1697. {
  1698. string scdsql = $"SELECT value(A1) FROM c join A1 in c.schedule where A1.stulist='{item.id}'";
  1699. int count = 0;
  1700. await foreach (var schedule in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Schedule>(queryText: scdsql))
  1701. {
  1702. count += 1;
  1703. }
  1704. if (count == 0)
  1705. {
  1706. await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemStreamAsync(item.id, new PartitionKey("StuList"));
  1707. }
  1708. }
  1709. HashSet<string> plistId = new HashSet<string>();
  1710. List<KeyValuePair<string, string>> pkeyValuePairs = new List<KeyValuePair<string, string>>();
  1711. List<StuList> pstuLists = new List<StuList>();
  1712. //List<Course> pcourses = new List<Course>();
  1713. //处理私人名单
  1714. string sql = "select value(c) from c where c.pk='Course' ";
  1715. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Course>(queryText: sql))
  1716. {
  1717. if (item.schedule.IsNotEmpty())
  1718. {
  1719. foreach (var scd in item.schedule)
  1720. {
  1721. if (!string.IsNullOrEmpty(scd.stulist))
  1722. {
  1723. plistId.Add(scd.stulist);
  1724. var tmdid = item.code.Replace("Course-", "");
  1725. pkeyValuePairs.Add(new KeyValuePair<string, string>(scd.stulist, tmdid));
  1726. item.creatorId = tmdid;
  1727. item.scope = "private";
  1728. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  1729. }
  1730. }
  1731. }
  1732. }
  1733. List<string> pfaildId = new List<string>();
  1734. foreach (var list in plistId)
  1735. {
  1736. try
  1737. {
  1738. StuList stuList = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<StuList>(list, new PartitionKey("StuList"));
  1739. var a = pkeyValuePairs.Where(x => x.Key == list).FirstOrDefault();
  1740. if (stuList.students.IsNotEmpty())
  1741. {
  1742. stuList.school = stuList.students[0].code.Replace("Base-", "");
  1743. }
  1744. stuList.creatorId = a.Value;
  1745. stuList.scope = "private";
  1746. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<StuList>(stuList, list, new PartitionKey("StuList"));
  1747. }
  1748. catch (CosmosException ex)
  1749. {
  1750. pfaildId.Add(list);
  1751. }
  1752. }
  1753. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-stulist-scope&school&creatorid()\n修复失败私人的名单pfaildId:\n {pfaildId.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  1754. //处理学校的名单
  1755. HashSet<string> slistId = new HashSet<string>();
  1756. List<KeyValuePair<string, string>> skeyValuePairs = new List<KeyValuePair<string, string>>();
  1757. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Course>(queryText: sql))
  1758. {
  1759. if (item.schedule.IsNotEmpty())
  1760. {
  1761. foreach (var scd in item.schedule)
  1762. {
  1763. if (!string.IsNullOrEmpty(scd.stulist))
  1764. {
  1765. slistId.Add(scd.stulist);
  1766. var school = item.code.Replace("Course-", "");
  1767. skeyValuePairs.Add(new KeyValuePair<string, string>(scd.stulist, school));
  1768. item.scope = "school";
  1769. item.school = school;
  1770. await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  1771. }
  1772. }
  1773. }
  1774. }
  1775. List<string> sfaildId = new List<string>();
  1776. foreach (var list in skeyValuePairs)
  1777. {
  1778. try
  1779. {
  1780. StuList stuList = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<StuList>(list.Key, new PartitionKey($"StuList-{list.Value}"));
  1781. stuList.scope = "school";
  1782. stuList.school = list.Value;
  1783. await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<StuList>(stuList, list.Key, new PartitionKey(stuList.code));
  1784. }
  1785. catch (CosmosException ex)
  1786. {
  1787. sfaildId.Add(list.Key);
  1788. }
  1789. }
  1790. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-stulist-scope&school&creatorid()\n修复失败学校的的名单sfaildId:\n {sfaildId.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  1791. return Ok(new { });
  1792. }
  1793. catch (Exception ex)
  1794. {
  1795. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-stulist-scope&school&creatorid()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1796. return BadRequest();
  1797. }
  1798. }
  1799. /// <summary>
  1800. /// 修复blob容器逻辑
  1801. /// </summary>
  1802. /// <param name="request"></param>
  1803. /// <returns></returns>
  1804. [ProducesDefaultResponseType]
  1805. //[AuthToken(Roles = "teacher")]
  1806. [HttpPost("fix-blob-content")]
  1807. public async Task<IActionResult> FixBlobContent(JsonElement data)
  1808. {
  1809. try
  1810. {
  1811. var client = _azureCosmos.GetCosmosClient();
  1812. await FixDataService.FixBlobContent(client, _dingDing, _azureStorage, data);
  1813. return Ok(new { });
  1814. }
  1815. catch (Exception ex)
  1816. {
  1817. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1818. return BadRequest();
  1819. }
  1820. }
  1821. public class SchoolIdSid
  1822. {
  1823. public string id { get; set; }
  1824. public string sid { get; set; }
  1825. public string name { get; set; }
  1826. }
  1827. /// <summary>
  1828. /// 修复blob容器逻辑
  1829. /// </summary>
  1830. /// <param name="request"></param>
  1831. /// <returns></returns>
  1832. [ProducesDefaultResponseType]
  1833. //[AuthToken(Roles = "teacher")]
  1834. [HttpPost("fix-long-schoolid")]
  1835. public async Task<IActionResult> FixLongSchoolId(JsonElement data)
  1836. {
  1837. try
  1838. {
  1839. //{\"id\":\"cdqcsxx\",\"sid\":\"qcsxx\",\"name\":\"青城山学校\"},
  1840. //{\"id\":\"xagxdsbxx\",\"sid\":\"xagxsb\",\"name\":\"西安高新第十八小学\"},{\"id\":\"xajkdbxx\",\"sid\":\"xajkbx\",\"name\":\"西安经开第八小学\"}
  1841. List<JsonElement> elements = new List<JsonElement>();
  1842. // 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\":\"金牛区智慧教育种子教师培训班\"}]";
  1843. string josn = "[{\"id\":\"xagxdsbxx\",\"sid\":\"xagxsb\",\"name\":\"西安高新第十八小学\"},{\"id\":\"xajkdbxx\",\"sid\":\"xajkbx\",\"name\":\"西安经开第八小学\"}]";
  1844. List<SchoolIdSid> schools = josn.ToObject<List<SchoolIdSid>>();
  1845. var client = _azureCosmos.GetCosmosClient();
  1846. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryText: "select value(c) from c ", requestOptions: new QueryRequestOptions() { }))
  1847. {
  1848. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  1849. List<string> ids = schools.Select(x => x.id).ToList();
  1850. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  1851. {
  1852. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  1853. {
  1854. string s = obj.ToJsonString();
  1855. IdCode idcode = s.ToObject<IdCode>();
  1856. foreach (var id in ids)
  1857. {
  1858. if (idcode.id.Contains(id) || idcode.code.Contains(id))
  1859. {
  1860. await client.GetContainer(Constant.TEAMModelOS, "Common").DeleteItemStreamAsync(idcode.id, new PartitionKey(idcode.code));
  1861. elements.Add(s.ToObject<JsonElement>());
  1862. }
  1863. }
  1864. }
  1865. }
  1866. }
  1867. return Ok(new { elements });
  1868. }
  1869. catch (Exception ex)
  1870. {
  1871. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1872. return BadRequest();
  1873. }
  1874. }
  1875. public class IdCode
  1876. {
  1877. public string id { get; set; }
  1878. public string code { get; set; }
  1879. }
  1880. public class CSchool
  1881. {
  1882. public string id { get; set; }
  1883. public string name { get; set; }
  1884. public string admin { get; set; }
  1885. public List<string> period { get; set; } = new List<string>();
  1886. public int size { get; set; } = 100;
  1887. }
  1888. /// <summary>
  1889. /// 修复blob容器逻辑
  1890. /// </summary>
  1891. /// <param name="request"></param>
  1892. /// <returns></returns>
  1893. [ProducesDefaultResponseType]
  1894. //[AuthToken(Roles = "teacher")]
  1895. [HttpPost("create-school")]
  1896. public async Task<IActionResult> CreateSchool(JsonElement data)
  1897. {
  1898. try
  1899. {
  1900. List<CSchool> schools = new List<CSchool>() {
  1901. new CSchool{
  1902. id="sqtszx",
  1903. name="四川师范大学附属青台山中学",
  1904. admin="1530606136",
  1905. period=new List<string>(){ "初中","高中"},
  1906. size=100,
  1907. }
  1908. };
  1909. var client = _azureCosmos.GetCosmosClient();
  1910. foreach (var sc in schools)
  1911. {
  1912. List<Period> periods = new List<Period>();
  1913. string campusId = Guid.NewGuid().ToString();
  1914. sc.period.ForEach(x => {
  1915. periods.Add(new Period { id = Guid.NewGuid().ToString(), name = x, campusId = campusId });
  1916. });
  1917. School school = new School
  1918. {
  1919. id = sc.id,
  1920. name = sc.name,
  1921. size = sc.size,
  1922. code = "Base",
  1923. campuses = new List<Campus> { new Campus { name = sc.name, id = campusId } },
  1924. region = "中国",
  1925. province = "四川",
  1926. city = "成都",
  1927. timeZone = new SDK.Models.TimeZone { label = "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐", value = "+08:00" },
  1928. type = 2,
  1929. pk = "School",
  1930. ttl = -1,
  1931. schoolCode = sc.id,
  1932. period = periods
  1933. };
  1934. await client.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<School>(school, new PartitionKey(school.code));
  1935. Teacher teacher = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>(sc.admin, new PartitionKey("Base"));
  1936. teacher.schools.Add(new Teacher.TeacherSchool { schoolId = sc.id, name = sc.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
  1937. await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, sc.admin, new PartitionKey("Base"));
  1938. SchoolTeacher schoolTeacher = new SchoolTeacher
  1939. {
  1940. id = sc.admin,
  1941. code = $"Teacher-{sc.id}",
  1942. roles = new List<string> { "admin", "teacher" },
  1943. job = "管理员",
  1944. name = teacher.name,
  1945. picture = teacher.picture,
  1946. status = "join",
  1947. createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
  1948. pk = "Teacher",
  1949. ttl = -1,
  1950. };
  1951. await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
  1952. }
  1953. return Ok(new { });
  1954. }
  1955. catch (Exception ex)
  1956. {
  1957. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1958. return BadRequest();
  1959. }
  1960. }
  1961. /// <summary>
  1962. /// 修复blob容器逻辑
  1963. /// </summary>
  1964. /// <param name="request"></param>
  1965. /// <returns></returns>
  1966. [ProducesDefaultResponseType]
  1967. //[AuthToken(Roles = "teacher")]
  1968. [HttpPost("fix-student-info")]
  1969. public async Task<IActionResult> FixStudentInfo(JsonElement data)
  1970. {
  1971. try
  1972. {
  1973. var client = _azureCosmos.GetCosmosClient();
  1974. var list = await FixDataService.FixStudentInfo(client, _dingDing, _azureStorage, data);
  1975. return Ok(new { list });
  1976. }
  1977. catch (Exception ex)
  1978. {
  1979. await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  1980. return BadRequest();
  1981. }
  1982. }
  1983. /// <summary>
  1984. /// 修正學段ID非英數邏輯
  1985. /// </summary>
  1986. /// <param name="request"></param>
  1987. /// <returns></returns>
  1988. [ProducesDefaultResponseType]
  1989. //[AuthToken(Roles = "teacher")]
  1990. [HttpPost("fix-periodid")]
  1991. public async Task<IActionResult> FixPeriodid(JsonElement data)
  1992. {
  1993. try
  1994. {
  1995. if (!data.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  1996. string schoolCode = school_code.GetString();
  1997. var client = _azureCosmos.GetCosmosClient();
  1998. //學校 Base
  1999. List<string> periodList = await FixDataService.FixSchoolPeriodId(client, schoolCode);
  2000. if (periodList.Count > 0)
  2001. {
  2002. string periodId = periodList[0]; //修正的問題校都只有一個學段,以第一個學段ID為其餘資料的學段ID
  2003. Dictionary<string, string> dataDic = new Dictionary<string, string>();
  2004. dataDic["periodId"] = periodId;
  2005. //班級 Class
  2006. List<string> fixClassIdList = await FixDataService.FixClassInfo(client, schoolCode, dataDic);
  2007. //課程 Course
  2008. List<string> fixCourseIdList = await FixDataService.FixCourseInfo(client, schoolCode, dataDic);
  2009. //知識點 Knowledge
  2010. List<string> fixKnowledgeIdList = await FixDataService.FixKnowledgeInfo(client, schoolCode, dataDic);
  2011. //試題 Item
  2012. List<string> fixItemIdList = await FixDataService.FixItemInfo(client, schoolCode, dataDic);
  2013. //試卷 Paper
  2014. List<string> fixPaperIdList = await FixDataService.FixPaperInfo(client, schoolCode, dataDic);
  2015. //課綱 Volume
  2016. List<string> fixVolumeIdList = await FixDataService.FixVolumeInfo(client, schoolCode, dataDic);
  2017. //評測 Exam
  2018. List<string> fixExamIdList = await FixDataService.FixExamInfo(client, schoolCode, dataDic);
  2019. //學生 Student
  2020. List<string> fixStudentIdList = await FixDataService.FixStudentInfo(client, schoolCode, dataDic);
  2021. return Ok(new { schoolCode, fixClassIdList, fixCourseIdList, fixKnowledgeIdList, fixItemIdList, fixPaperIdList, fixVolumeIdList, fixExamIdList, fixStudentIdList });
  2022. }
  2023. else
  2024. {
  2025. string message = "No period is changed";
  2026. return Ok(new { message });
  2027. }
  2028. }
  2029. catch (Exception ex)
  2030. {
  2031. //await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-periodid()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  2032. return BadRequest();
  2033. }
  2034. }
  2035. /// <summary>
  2036. /// 修复评测publish字段内容
  2037. /// </summary>
  2038. /// <param name="req"></param>
  2039. /// <param name="log"></param>
  2040. /// <returns></returns>
  2041. [ProducesDefaultResponseType]
  2042. //[AuthToken(Roles = "teacher")]
  2043. [HttpPost("fix-exam-publish")]
  2044. public async Task<IActionResult> FixExamPublish(JsonElement data)
  2045. {
  2046. var client = _azureCosmos.GetCosmosClient();
  2047. List<string> infos = await FixDataService.FixExamPublish(client, _dingDing, data, _option);
  2048. return Ok(new { infos });
  2049. }
  2050. [ProducesDefaultResponseType]
  2051. //[AuthToken(Roles = "teacher")]
  2052. [HttpPost("fix-exam-class-result")]
  2053. public async Task<IActionResult> FixExamClassResult(JsonElement data)
  2054. {
  2055. var client = _azureCosmos.GetCosmosClient();
  2056. List<string> infos = await FixDataService.FixExamClassResult(client, data, _dingDing, _coreAPIHttpService, _option);
  2057. return Ok(new { infos });
  2058. }
  2059. [ProducesDefaultResponseType]
  2060. //[AuthToken(Roles = "teacher")]
  2061. [HttpPost("fix-school-type")]
  2062. public async Task<IActionResult> FixSchoolType(JsonElement data)
  2063. {
  2064. var client = _azureCosmos.GetCosmosClient();
  2065. List<string> infos = await FixDataService.FixSchoolType(client, data, _dingDing, _coreAPIHttpService, _option);
  2066. return Ok(new { infos });
  2067. }
  2068. [ProducesDefaultResponseType]
  2069. //[AuthToken(Roles = "teacher")]
  2070. [HttpPost("fix-lesson-count")]
  2071. public async Task<IActionResult> FixLessonCount(JsonElement data)
  2072. {
  2073. if (!data.TryGetProperty("code", out JsonElement code)) return BadRequest();
  2074. var client = _azureCosmos.GetCosmosClient();
  2075. var queryClass = $"select value(c) from c";
  2076. List<LessonRecord> records = new List<LessonRecord>();
  2077. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<LessonRecord>(queryText: queryClass, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"LessonRecord-{code}") }))
  2078. {
  2079. records.Add(item);
  2080. }
  2081. List<string> infos = new();
  2082. foreach (LessonRecord lesson in records) {
  2083. LessonDis dis = new();
  2084. dis = LessonService.DisLessonCount_2(null, lesson, dis);
  2085. await LessonService.FixLessonCount(client, _dingDing, lesson, null, dis);
  2086. }
  2087. return Ok(new { infos });
  2088. }
  2089. /// <summary>
  2090. /// add admin
  2091. /// </summary>
  2092. /// <param name="req"></param>
  2093. /// <param name="log"></param>
  2094. /// <returns></returns>
  2095. [ProducesDefaultResponseType]
  2096. //[AuthToken(Roles = "teacher")]
  2097. [HttpPost("add-area-school-admin")]
  2098. public async Task<IActionResult> AddAreaSchoolAdmin(JsonElement data)
  2099. {
  2100. List<School> errorSchool = new List<School>();
  2101. var client = _azureCosmos.GetCosmosClient();
  2102. List<string> tmdids = data.GetProperty("tmdids").ToObject<List<string>>();
  2103. data.TryGetProperty("areaId", out JsonElement areaId);
  2104. data.TryGetProperty("schoolIds", out JsonElement schoolIds);
  2105. data.TryGetProperty("addSchool", out JsonElement addSchool);
  2106. data.TryGetProperty("areaAdmin", out JsonElement areaAdmin);
  2107. List<string> ids = new List<string>();
  2108. string idsSql = "";
  2109. if (schoolIds.ValueKind.Equals(JsonValueKind.Array))
  2110. {
  2111. ids = schoolIds.ToObject<List<string>>();
  2112. if (ids.IsNotEmpty())
  2113. {
  2114. idsSql = $" c.id in ({string.Join(",", ids.Select(x => $"'{x}'"))})";
  2115. }
  2116. }
  2117. List<School> schools = new List<School>();
  2118. if (addSchool.ValueKind.Equals(JsonValueKind.Array))
  2119. {
  2120. List<School> codes = new();
  2121. codes = addSchool.ToObject<List<School>>();
  2122. List<School> schoolsNew = new List<School>();
  2123. string _areaId = null;
  2124. if (!string.IsNullOrWhiteSpace($"{areaId}"))
  2125. {
  2126. _areaId = $"{areaId}";
  2127. }
  2128. int scale = 0;
  2129. data.TryGetProperty("scale", out JsonElement _scale);
  2130. if (!string.IsNullOrWhiteSpace($"{_scale}"))
  2131. {
  2132. int.TryParse($"{_scale}", out scale);
  2133. }
  2134. int size = 0;
  2135. data.TryGetProperty("size", out JsonElement _size);
  2136. if (!string.IsNullOrWhiteSpace($"{_size}"))
  2137. {
  2138. int.TryParse($"{_size}", out size);
  2139. }
  2140. codes.ForEach(x => {
  2141. string campusId = Guid.NewGuid().ToString();
  2142. List<Period> periods = new List<Period>();
  2143. periods.Add(new Period
  2144. {
  2145. id = Guid.NewGuid().ToString(),
  2146. name = x.name,
  2147. campusId = campusId,
  2148. semesterCount = 2,
  2149. gradeCount = 1,
  2150. grades = new List<string> { "一年级" },
  2151. subjectCount = 1,
  2152. subjects = new List<Subject> { new Subject { name = "预设学科", id = Guid.NewGuid().ToString() } },
  2153. semesters = new List<Semester>
  2154. {
  2155. new Semester { name = "上学期", start = 1, month = 9, day = 1, id = Guid.NewGuid().ToString() },
  2156. new Semester { name = "下学期", start = 0, month = 3, day = 1, id = Guid.NewGuid().ToString() }
  2157. },
  2158. });
  2159. School school = new School
  2160. {
  2161. id = x.id,
  2162. name = x.name,
  2163. size = size,
  2164. code = "Base",
  2165. campuses = new List<Campus> { new Campus { name = x.name, id = campusId } },
  2166. region = "中国",
  2167. province = x.province,
  2168. city = $"{x.city}",
  2169. timeZone = new SDK.Models.TimeZone { label = "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐", value = "+08:00" },
  2170. type = 1,
  2171. pk = "School",
  2172. ttl = -1,
  2173. schoolCode = x.id,
  2174. dist = $"{x.dist}",
  2175. period = periods,
  2176. areaId = String.IsNullOrWhiteSpace($"{areaId}") ? null : $"{areaId}",
  2177. standard = $"standard2"
  2178. };
  2179. schoolsNew.Add(school);
  2180. });
  2181. foreach (var sch in schoolsNew) {
  2182. try
  2183. {
  2184. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(sch, new PartitionKey("Base"));
  2185. schools.Add(sch);
  2186. }
  2187. catch (CosmosException ex) {
  2188. errorSchool.Add(sch);
  2189. }
  2190. }
  2191. }
  2192. string areaIdsql = string.IsNullOrWhiteSpace($"{areaId}") ? "-0000000" : $"{areaId}";
  2193. string sql = $"select distinct value(c) from c where {idsSql}";
  2194. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<School>(
  2195. queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2196. {
  2197. schools.Add(item);
  2198. }
  2199. long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  2200. Azure.Response responseArea = await client.GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemStreamAsync($"{areaId}", new PartitionKey("Base-Area"));
  2201. Area area = null;
  2202. if (responseArea.Status == 200)
  2203. {
  2204. area = JsonDocument.Parse(responseArea.ContentStream).RootElement.ToObject<Area>();
  2205. }
  2206. List<Teacher> teachers = new List<Teacher>();
  2207. List<SchoolTeacher> schoolsTeachers = new List<SchoolTeacher>();
  2208. foreach (var tmdid in tmdids)
  2209. {
  2210. Teacher teacher = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<Teacher>(tmdid, new PartitionKey("Base"));
  2211. if (areaAdmin.ValueKind.Equals(JsonValueKind.True) && !string.IsNullOrWhiteSpace($"{areaId}") && area != null)
  2212. {
  2213. if (teacher.areas.IsNotEmpty())
  2214. {
  2215. if (!teacher.areas.Select(x => x.areaId).Contains(area.id))
  2216. {
  2217. teacher.areas.Add(new Teacher.TeacherArea { areaId = area.id, name = area.name, status = "join" });
  2218. }
  2219. }
  2220. else
  2221. {
  2222. teacher.areas = new List<Teacher.TeacherArea> { new Teacher.TeacherArea { areaId = area.id, name = area.name, status = "join" } };
  2223. }
  2224. }
  2225. foreach (var school in schools)
  2226. {
  2227. if (!string.IsNullOrWhiteSpace($"{areaId}")) {
  2228. school.areaId = $"{areaId}";
  2229. }
  2230. data.TryGetProperty("scale", out JsonElement _scale);
  2231. if (!string.IsNullOrWhiteSpace($"{_scale}"))
  2232. {
  2233. int scale = 0;
  2234. int.TryParse($"{_scale}", out scale);
  2235. if (scale > 0) {
  2236. school.scale = scale;
  2237. }
  2238. }
  2239. data.TryGetProperty("size", out JsonElement _size);
  2240. if (!string.IsNullOrWhiteSpace($"{_size}"))
  2241. {
  2242. int size = 0;
  2243. int.TryParse($"{_size}", out size);
  2244. if (size > 0)
  2245. {
  2246. school.size = size;
  2247. }
  2248. }
  2249. await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(school, school.id, new PartitionKey("Base"));
  2250. Azure.Response response = await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemStreamAsync(tmdid, new PartitionKey($"Teacher-{school.id}"));
  2251. if (response.Status == 200)
  2252. {
  2253. SchoolTeacher schoolTeacher = JsonDocument.Parse(response.ContentStream).RootElement.ToObject<SchoolTeacher>();
  2254. if (schoolTeacher.roles == null)
  2255. {
  2256. schoolTeacher.roles = new List<string> { "admin" };
  2257. }
  2258. if (!schoolTeacher.roles.Contains("admin"))
  2259. {
  2260. schoolTeacher.roles.Add("admin");
  2261. }
  2262. schoolTeacher.name = teacher.name;
  2263. schoolTeacher.picture = teacher.picture;
  2264. schoolTeacher.createTime = now;
  2265. schoolTeacher.subjectIds = schoolTeacher.subjectIds == null ? new List<string>() : schoolTeacher.subjectIds;
  2266. schoolTeacher.status = "join";
  2267. schoolTeacher.job = "管理员";
  2268. schoolTeacher.pk = "Teacher";
  2269. await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(schoolTeacher, tmdid, new PartitionKey($"Teacher-{school.id}"));
  2270. schoolsTeachers.Add(schoolTeacher);
  2271. }
  2272. else
  2273. {
  2274. SchoolTeacher schoolTeacher = new SchoolTeacher()
  2275. {
  2276. id = tmdid,
  2277. code = $"Teacher-{school.id}",
  2278. roles = new List<string> { "admin", "teacher" },
  2279. permissions = new List<string>(),
  2280. };
  2281. schoolTeacher.name = teacher.name;
  2282. schoolTeacher.picture = teacher.picture;
  2283. schoolTeacher.createTime = now;
  2284. schoolTeacher.subjectIds = schoolTeacher.subjectIds == null ? new List<string>() : schoolTeacher.subjectIds;
  2285. schoolTeacher.status = "join";
  2286. schoolTeacher.job = "管理员";
  2287. schoolTeacher.pk = "Teacher";
  2288. await client.GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(schoolTeacher, new PartitionKey($"Teacher-{school.id}"));
  2289. schoolsTeachers.Add(schoolTeacher);
  2290. }
  2291. if (teacher.schools.IsNotEmpty())
  2292. {
  2293. if (!teacher.schools.Select(x => x.schoolId).Contains(school.id))
  2294. {
  2295. teacher.schools.Add(new Teacher.TeacherSchool { schoolId = school.id, areaId = school.areaId, picture = school.picture, name = school.name, status = "join", time = now });
  2296. }
  2297. else
  2298. {
  2299. var sch = teacher.schools.Find(x => x.schoolId.Equals(school.id));
  2300. if (sch != null)
  2301. {
  2302. sch.time = now;
  2303. sch.name = school.name;
  2304. sch.areaId = school.areaId;
  2305. sch.picture = school.picture;
  2306. sch.status = "join";
  2307. }
  2308. }
  2309. }
  2310. else
  2311. {
  2312. 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 } };
  2313. }
  2314. }
  2315. await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(teacher, tmdid, new PartitionKey($"Base"));
  2316. teachers.Add(teacher);
  2317. }
  2318. return Ok(new { teachers, schoolsTeachers, errorSchool });
  2319. }
  2320. /// <summary>
  2321. /// 修复评测publish字段内容
  2322. /// </summary>
  2323. /// <param name="req"></param>
  2324. /// <param name="log"></param>
  2325. /// <returns></returns>
  2326. [ProducesDefaultResponseType]
  2327. //[AuthToken(Roles = "teacher")]
  2328. [HttpGet("fix-group-list")]
  2329. public async Task<IActionResult> FixGroupList()
  2330. {
  2331. List<GroupList> groupLists = new List<GroupList>();
  2332. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<GroupList>
  2333. (queryText: "select value(c) from c ", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("GroupList") }))
  2334. {
  2335. groupLists.Add(item);
  2336. }
  2337. List<GroupList> groupLists_up = new List<GroupList>();
  2338. groupLists.ForEach(async list => {
  2339. var smembers = list.members.Where(x => x.type == 2);
  2340. list.scount = smembers.Count();
  2341. if (smembers.Count() > 0 && smembers.Select(x => x.code).ToHashSet().Count() >= 2)
  2342. {
  2343. //处理移除多个学校的名单,只保留一个学校的。
  2344. if (string.IsNullOrWhiteSpace(list.school))
  2345. {
  2346. HashSet<string> codes = smembers.Select(x => x.code).ToHashSet();
  2347. list.school = codes.First();
  2348. codes.Remove(codes.First());
  2349. list.members.RemoveAll(x => codes.Contains(x.code));
  2350. }
  2351. else
  2352. {
  2353. list.members.RemoveAll(x => !x.code.Equals(list.school));
  2354. }
  2355. groupLists_up.Add(list);
  2356. }
  2357. if (smembers.Count() > 0 && smembers.Select(x => x.code).ToHashSet().Count() == 1)
  2358. {
  2359. if (string.IsNullOrWhiteSpace(list.school))
  2360. {
  2361. HashSet<string> codes = smembers.Select(x => x.code).ToHashSet();
  2362. list.school = codes.First();
  2363. }
  2364. groupLists_up.Add(list);
  2365. }
  2366. });
  2367. foreach (var item in groupLists_up)
  2368. {
  2369. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2370. }
  2371. return Ok();
  2372. }
  2373. /// 设置省平台相关账号为管理员,直接操作School的 PK=Teacher
  2374. /// </summary>
  2375. /// <param name="request"></param>
  2376. /// <returns></returns>
  2377. [ProducesDefaultResponseType]
  2378. [HttpPost("set-sc-admin-by-tmdid")]
  2379. public async Task<IActionResult> SetScAdminByTmdid(JsonElement request) {
  2380. if (!request.TryGetProperty("userkeys", out JsonElement _userkeys)) { return BadRequest(); }
  2381. List<string> userkeys = _userkeys.ToObject<List<string>>();
  2382. List<string> nokey = new List<string>();
  2383. var content = new StringContent(userkeys.Select(x => x).ToJsonString(), Encoding.UTF8, "application/json");
  2384. string json = await _coreAPIHttpService.GetUserInfos(content);
  2385. List<CoreUser> tmdInfos = json.ToObject<List<CoreUser>>();
  2386. List<string> noreg = new List<string>();
  2387. var notin = userkeys.Except(tmdInfos.Select(x => x.searchKey));
  2388. if (notin.Any())
  2389. {
  2390. noreg.AddRange(notin);
  2391. }
  2392. string sql = $"select value(c) from c where c.pk='Teacher' and c.id in ({string.Join(",", tmdInfos.Select(x => $"'{x.id}'"))})";
  2393. List<SchoolTeacher> schoolTeachers = new List<SchoolTeacher>();
  2394. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<SchoolTeacher>(queryText: sql))
  2395. {
  2396. schoolTeachers.Add(item);
  2397. }
  2398. var noid= tmdInfos.Select(x => x.id).Except(schoolTeachers.Select(z => z.id));
  2399. if (noid.Any()) {
  2400. var a = tmdInfos.FindAll(x => noid.Contains(x.id));
  2401. nokey.AddRange(a.Select(x=>x.searchKey));
  2402. }
  2403. var groups = schoolTeachers.GroupBy(x => x.id).Select(y => new { key = y.Key, list = y.ToList() });
  2404. var countMore1 = groups.Where(x => x.list.Count > 1).SelectMany(x => x.list);
  2405. var countEqual1 = groups.Where(x => x.list.Count == 1).SelectMany(x => x.list);
  2406. countEqual1.ToList().ForEach(x => {
  2407. if (!x.roles.Contains("admin")) {
  2408. x.roles.Add("admin");
  2409. }
  2410. });
  2411. foreach (var item in countEqual1) {
  2412. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2413. }
  2414. return Ok(new { countMore1, countEqual1 , nokey,noreg});
  2415. }
  2416. /// <summary>
  2417. /// 学生活动中间表ClassIds去重
  2418. /// </summary>
  2419. /// <param name="jsonElement"></param>
  2420. /// <returns></returns>
  2421. [HttpPost("fix-classIds")]
  2422. public async Task<IActionResult> CorrectActivityClassIds()
  2423. {
  2424. try
  2425. {
  2426. var cosmosClient = _azureCosmos.GetCosmosClient();
  2427. //string sqlTxt = "SELECT select c.id,c.code,c.classIds FROM c where c.pk='Activity' and c.classIds <> []";
  2428. string sqlTxt = "select c.id,c.code,c.classIds from c where c.classIds <> []";
  2429. List<CorrectStu> correctStus = new List<CorrectStu>();
  2430. await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "Student").GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { }))
  2431. {
  2432. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  2433. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  2434. {
  2435. obj.TryGetProperty("id", out JsonElement tempTd);
  2436. obj.TryGetProperty("code", out JsonElement code);
  2437. obj.TryGetProperty("classIds", out JsonElement _classIds);
  2438. List<string> templist = _classIds.ToObject<List<string>>();
  2439. //List<string> newList = templist.Distinct().ToList(); //Equals实现去重
  2440. //List<string> newLis1 = templist.Where((x, i) => templist.FindIndex(z => z == x) == i).ToList(); //Lambda表达式去重
  2441. HashSet<string> hashSet = new HashSet<string>(templist);//哈希自动去重
  2442. if (hashSet.Count != templist.Count)
  2443. {
  2444. CorrectStu correctList = new CorrectStu() { id = $"{tempTd}", code = $"{code}", classIds = hashSet.ToList() };
  2445. correctStus.Add(correctList);
  2446. }
  2447. }
  2448. }
  2449. List<Task<ItemResponse<StuActivity>>> tasks = new List<Task<ItemResponse<StuActivity>>>();
  2450. if (correctStus.Count > 0)
  2451. {
  2452. foreach (var correct in correctStus)
  2453. {
  2454. StuActivity stuActivity = await cosmosClient.GetContainer("TEAMModelOS", "Student").ReadItemAsync<StuActivity>(correct.id, new PartitionKey(correct.code));
  2455. if (stuActivity != null)
  2456. {
  2457. stuActivity.classIds = correct.classIds;
  2458. tasks.Add(cosmosClient.GetContainer("TEAMModelOS", "Student").ReplaceItemAsync<StuActivity>(stuActivity, stuActivity.id, new PartitionKey(stuActivity.code)));
  2459. }
  2460. }
  2461. int pagesize = 1000;
  2462. if (tasks.Count <= pagesize)
  2463. {
  2464. await Task.WhenAll(tasks);
  2465. }
  2466. else
  2467. {
  2468. int pages = (tasks.Count + pagesize) / pagesize; //256是批量操作最大值,pages = (total + max -1) / max;
  2469. for (int i = 0; i < pages; i++)
  2470. {
  2471. var listssb = tasks.Skip((i) * pagesize).Take(pagesize).ToList();
  2472. await Task.WhenAll(listssb);
  2473. }
  2474. }
  2475. return Ok(new { state = 200, msg = "去重成功" });
  2476. }
  2477. else
  2478. {
  2479. return Ok(new { state = 201, msg = "学生活动中间表无重复班级ID" });
  2480. }
  2481. }
  2482. catch (Exception ex)
  2483. {
  2484. await _dingDing.SendBotMsg($"OS,{_option.Location} /fix-data/fix-classIds \n {ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  2485. return Ok(new { state = 401 });
  2486. }
  2487. }
  2488. /// <summary>
  2489. /// 所有学校添加国家智慧教育公共服务平台 https://www.smartedu.cn/
  2490. /// </summary>
  2491. /// <param name="jsonElement"></param>
  2492. /// <returns></returns>
  2493. [HttpPost("set-school-smartedu")]
  2494. public async Task<IActionResult> SetSchoolSmartedu(JsonElement json)
  2495. {
  2496. 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/'";
  2497. List<string> schoolIdsAdded = new List<string>();
  2498. //已经添加的
  2499. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<string>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("SchoolSetting") }))
  2500. {
  2501. schoolIdsAdded.Add(item);
  2502. }
  2503. string sqlSchool = "select value(c.id) from c ";
  2504. List<string> schoolIdsAddHas = new List<string>();
  2505. //未添加的=有SchoolSetting的-已经添加的
  2506. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<string>(queryText: sqlSchool, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("SchoolSetting") }))
  2507. {
  2508. schoolIdsAddHas.Add(item);
  2509. }
  2510. string linkName = "国家智慧教育公共服务平台";
  2511. string linkUrl = "https://www.smartedu.cn/";
  2512. //没有添加的
  2513. var schoolIdsAddNo = schoolIdsAddHas.Except(schoolIdsAdded);
  2514. //新添加的
  2515. List<string> schoolIdsAddNew = new List<string>();
  2516. if (schoolIdsAddHas.IsNotEmpty()) {
  2517. string sqlAdd = $"select value(c.id) from c where c.id not in ({string.Join(",", schoolIdsAddHas.Select(x => $"'{x}'"))})";
  2518. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<string>(queryText: sqlAdd, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2519. {
  2520. schoolIdsAddNew.Add(item);
  2521. }
  2522. foreach (var item in schoolIdsAddNew) {
  2523. SchoolSetting setting = new SchoolSetting
  2524. {
  2525. id = item,
  2526. code = "SchoolSetting",
  2527. pk = "SchoolSetting",
  2528. third = new List<Policy> { new Policy { tag = "default", links = new List<Link> { new Link { name = linkName, url = linkUrl } } } }
  2529. };
  2530. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(setting, new PartitionKey("SchoolSetting"));
  2531. }
  2532. }
  2533. foreach (var item in schoolIdsAddNo) {
  2534. SchoolSetting setting = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<SchoolSetting>(item, new PartitionKey("SchoolSetting"));
  2535. if (setting.third.IsNotEmpty())
  2536. {
  2537. var defaultTag = setting.third.Find(x => x.tag.Equals("default"));
  2538. if (defaultTag != null)
  2539. {
  2540. if (defaultTag.links.IsNotEmpty())
  2541. {
  2542. defaultTag.links.Add(new Link { name = linkName, url = linkUrl });
  2543. }
  2544. else {
  2545. defaultTag.links = new List<Link> { new Link { name = linkName, url = linkUrl } };
  2546. }
  2547. }
  2548. else {
  2549. setting.third.Add(new Policy { tag = "default", links = new List<Link> { new Link { name = linkName, url = linkUrl } } });
  2550. }
  2551. }
  2552. else {
  2553. setting.third = new List<Policy> { new Policy { tag = "default", links = new List<Link> { new Link { name = linkName, url = linkUrl } } } };
  2554. }
  2555. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(setting, setting.id, new PartitionKey("SchoolSetting"));
  2556. }
  2557. return Ok(new { schoolIdsAddNo, schoolIdsAddNew });
  2558. }
  2559. /// <summary>
  2560. /// 给学校空间设置1024T,按区域。
  2561. /// </summary>
  2562. /// <param name="jsonElement"></param>
  2563. /// <returns></returns>
  2564. [HttpPost("fix-school-blobsize")]
  2565. public async Task<IActionResult> FixSchoolBlobSize(JsonElement json) {
  2566. string sql = "select value(c) from c where c.areaId in " +
  2567. "('99a4a33b-e21b-44ac-80a1-b31dc40496e0','f35e0031-a53f-45e5-b307-1cd39446a2cf'," +
  2568. "'2c1b01fe-3641-464f-8499-7be95a489b7c','9ae614ba-0771-4502-a56e-0537bc5207c3'," +
  2569. "'870a5a6b-1ab3-461a-bdeb-baec19780ddb','dd15017a-f361-4346-852e-8eee71d027ad')";
  2570. List<School> schools = new List<School>();
  2571. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") })) {
  2572. schools.Add(item);
  2573. }
  2574. schools.ForEach(x => { x.size = 1024; });
  2575. foreach (var item in schools) {
  2576. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2577. }
  2578. return Ok(schools);
  2579. }
  2580. /// <summary>
  2581. /// 给学校空间设置1024T,按区域。
  2582. /// </summary>
  2583. /// <param name="jsonElement"></param>
  2584. /// <returns></returns>
  2585. [HttpPost("fix-school-subjects-type")]
  2586. public async Task<IActionResult> FixSchoolSubjectsType(JsonElement json)
  2587. {
  2588. string sql = " SELECT distinct value(c) FROM c join p in c. period join s in p.subjects where s.type=0 ";
  2589. List<School> schools = new List<School>();
  2590. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2591. {
  2592. schools.Add(item);
  2593. }
  2594. schools.ForEach(x => {
  2595. x.period.ForEach(p => {
  2596. p.subjects.ForEach(s => {
  2597. if (s.type == 0)
  2598. {
  2599. s.type = 1;
  2600. }
  2601. });
  2602. });
  2603. });
  2604. foreach (var item in schools)
  2605. {
  2606. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2607. }
  2608. return Ok(schools);
  2609. }
  2610. /// <summary>
  2611. /// 重置能力点上传作品的评分状态
  2612. /// </summary>
  2613. /// <param name="jsonElement"></param>
  2614. /// <returns></returns>
  2615. [HttpPost("reset-ability-upload-school")]
  2616. public async Task<IActionResult> ResetAbilityUploadSchool(JsonElement json) {
  2617. var client = _azureCosmos.GetCosmosClient();
  2618. 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' ";
  2619. List<AbilitySub> abilitySubs = new List<AbilitySub>();
  2620. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<AbilitySub>(queryText: sql))
  2621. {
  2622. abilitySubs.Add(item);
  2623. }
  2624. List<TeacherTrain> teacherTrains = new List<TeacherTrain>();
  2625. foreach (var item in abilitySubs) {
  2626. item.otherScore.RemoveAll(x => x.roleType.Equals("school"));
  2627. // TeacherAbility item.creatorId
  2628. TeacherTrain teacherTrain = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<TeacherTrain>(item.creatorId, new PartitionKey($"TeacherTrain-{item.school}"));
  2629. teacherTrain.update.Add("TeacherAbility");
  2630. teacherTrains.Add(teacherTrain);
  2631. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(teacherTrain, teacherTrain.id, new PartitionKey(teacherTrain.code));
  2632. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  2633. }
  2634. return Ok(new { teacherTrains, abilitySubs });
  2635. }
  2636. /// <summary>
  2637. /// 学校设置学期
  2638. /// </summary>
  2639. /// <param name="jsonElement"></param>
  2640. /// <returns></returns>
  2641. [HttpPost("fix-school-semester")]
  2642. public async Task<IActionResult> FixSchoolSemester(JsonElement json) {
  2643. var client = _azureCosmos.GetCosmosClient();
  2644. string sql = " SELECT value(c) FROM c ";
  2645. var schools = new List<School>();
  2646. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2647. {
  2648. schools.Add(item);
  2649. }
  2650. HashSet<School> schoolsSet = new HashSet<School>();
  2651. schools.ForEach(x => {
  2652. if (x.period.IsNotEmpty())
  2653. {
  2654. x.period.ForEach(y => {
  2655. if (y.semesters.IsEmpty())
  2656. {
  2657. y.semesters = new List<Semester>
  2658. {
  2659. new Semester { name = "上学期", start = 1, month = 9, day = 1, id = Guid.NewGuid().ToString() },
  2660. new Semester { name = "下学期", start = 0, month = 3, day = 1, id = Guid.NewGuid().ToString() }
  2661. };
  2662. }
  2663. y.semesterCount = y.semesters.Count;
  2664. schoolsSet.Add(x);
  2665. });
  2666. }
  2667. else {
  2668. string campusId = Guid.NewGuid().ToString();
  2669. List<Period> periods = new List<Period>();
  2670. periods.Add(new Period
  2671. {
  2672. id = Guid.NewGuid().ToString(),
  2673. name = x.name,
  2674. campusId = campusId,
  2675. semesterCount = 2,
  2676. semesters = new List<Semester>
  2677. {
  2678. new Semester { name = "上学期", start = 1, month = 9, day = 1, id = Guid.NewGuid().ToString() },
  2679. new Semester { name = "下学期", start = 0, month = 3, day = 1, id = Guid.NewGuid().ToString() }
  2680. },
  2681. });
  2682. x.period = periods;
  2683. schoolsSet.Add(x);
  2684. x.campuses = new List<Campus> { new Campus { id = campusId, name = x.name } };
  2685. }
  2686. });
  2687. int count = schoolsSet.Count();
  2688. foreach (var item in schoolsSet) {
  2689. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync<School>(item, item.id, new PartitionKey(item.code));
  2690. }
  2691. return Ok(schoolsSet);
  2692. }
  2693. [HttpPost("fix-teacher-train-nickname")]
  2694. public async Task<IActionResult> FixTeacherPrivateLessonRecord(JsonElement json)
  2695. {
  2696. var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
  2697. List<ScTeacher> scTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object> { { "PartitionKey", "ScTeacher" } });
  2698. scTeachers = scTeachers.FindAll(x => !string.IsNullOrWhiteSpace(x.tmdid) && !string.IsNullOrWhiteSpace(x.schoolCode));
  2699. var groups = scTeachers.GroupBy(x => x.schoolCode).Select(x => new { key = x.Key, list = x.ToList() });
  2700. foreach (var item in groups) {
  2701. List<TeacherTrain> teacherTrains = new List<TeacherTrain>();
  2702. string sql = $" select value(c) from c where c.id in ({string.Join(",", item.list.Select(x => $"'{x.tmdid}'"))}) ";
  2703. await foreach (var tr in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<TeacherTrain>(queryText: sql,
  2704. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"TeacherTrain-{item.key}") }))
  2705. {
  2706. teacherTrains.Add(tr);
  2707. }
  2708. List<Task<ItemResponse<TeacherTrain>>> update = new List<Task<ItemResponse<TeacherTrain>>>();
  2709. teacherTrains.ForEach(x => {
  2710. var sc = scTeachers.Find(s => s.tmdid.Equals(x.id));
  2711. if (sc != null) {
  2712. if (string.IsNullOrWhiteSpace(x.nickname))
  2713. {
  2714. x.nickname = sc.TeacherName;
  2715. update.Add(_azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(x, x.id, new PartitionKey(x.code)));
  2716. }
  2717. else if (!sc.TeacherName.Equals(x.nickname)) {
  2718. x.nickname = sc.TeacherName;
  2719. update.Add(_azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(x, x.id, new PartitionKey(x.code)));
  2720. }
  2721. }
  2722. });
  2723. await Task.WhenAll(update);
  2724. }
  2725. return Ok();
  2726. }
  2727. /// <summary>
  2728. /// 修复学校课例及blob计算
  2729. /// </summary>
  2730. /// <param name="jsonElement"></param>
  2731. /// <returns></returns>
  2732. [HttpPost("ReloadBlob")]
  2733. public async Task<IActionResult> ReloadBlob(JsonElement json)
  2734. {
  2735. //var client = _azureCosmos.GetCosmosClient();
  2736. //string sql = " SELECT distinct value(c) FROM c where c.pk='LessonRecord' ";
  2737. //List<LessonRecord> lessonRecords = new List<LessonRecord>();
  2738. //await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<LessonRecord>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("LessonRecord-ydzt") }))
  2739. //{
  2740. // lessonRecords.Add(item);
  2741. //}
  2742. //var list = await _azureStorage.GetBlobContainerClient("ydzt").List($"records");
  2743. //HashSet<string> ids = new HashSet<string>();
  2744. //list.ForEach(x => {
  2745. // var a = x.Split("/");
  2746. // if (a.Length >= 2) {
  2747. // ids.Add(a[1]);
  2748. // }
  2749. //});
  2750. List<string> lists = new List<string> { };
  2751. foreach (var l in lists) {
  2752. await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, "ydzt", new List<string> { $"records/{l}" });
  2753. }
  2754. return Ok(new { });
  2755. }
  2756. /// <summary>
  2757. /// 修复学校课例及blob计算
  2758. /// </summary>
  2759. /// <param name="jsonElement"></param>
  2760. /// <returns></returns>
  2761. [HttpPost("fix-school-lesson-record")]
  2762. public async Task<IActionResult> FixSchoolLessonRecord(JsonElement json)
  2763. {
  2764. var client = _azureCosmos.GetCosmosClient();
  2765. string sql = " SELECT distinct value(c) FROM c where c.pk='LessonRecord' ";
  2766. List<LessonRecord> lessonRecords = new List<LessonRecord>();
  2767. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<LessonRecord>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("LessonRecord-ydzt") }))
  2768. {
  2769. lessonRecords.Add(item);
  2770. }
  2771. //await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<LessonRecord>(queryText: sql, requestOptions: new QueryRequestOptions { }))
  2772. //{
  2773. // lessonRecords.Add(item);
  2774. //}
  2775. HashSet<string> courseIds = new HashSet<string>();
  2776. lessonRecords.ForEach(item => {
  2777. if (!string.IsNullOrWhiteSpace(item.courseId)) {
  2778. courseIds.Add(item.courseId);
  2779. }
  2780. });
  2781. List<Course> courses = new List<Course>();
  2782. if (courseIds.Any()) {
  2783. string sqlCourse = $" SELECT distinct value(c) FROM c where c.pk='Course' and c.id in ({string.Join(",", courseIds.Select(x => $"'{x}'"))}) ";
  2784. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<Course>(queryText: sqlCourse, requestOptions: new QueryRequestOptions { }))
  2785. {
  2786. courses.Add(item);
  2787. }
  2788. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<Course>(queryText: sqlCourse, requestOptions: new QueryRequestOptions { }))
  2789. {
  2790. courses.Add(item);
  2791. }
  2792. }
  2793. HashSet<string> schoolIds = new HashSet<string>();
  2794. lessonRecords.ForEach(item => {
  2795. if (!string.IsNullOrWhiteSpace(item.school))
  2796. {
  2797. schoolIds.Add(item.school);
  2798. }
  2799. });
  2800. List<School> schools = new List<School>();
  2801. if (schoolIds.Any()) {
  2802. string sqlSchool = $" SELECT distinct value(c) FROM c where c.id in ({string.Join(",", schoolIds.Select(x => $"'{x}'"))}) ";
  2803. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<School>(queryText: sqlSchool, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  2804. {
  2805. schools.Add(item);
  2806. }
  2807. }
  2808. var lists = lessonRecords.Where(x => !string.IsNullOrWhiteSpace(x.school)).GroupBy(y => y.school).Select(a => new { key = a.Key, list = a.ToList() });
  2809. Dictionary<string, List<GroupListDto>> dict = new Dictionary<string, List<GroupListDto>>();
  2810. foreach (var item in lists) {
  2811. var gids = item.list.SelectMany(x => x.groupIds).Where(y => !string.IsNullOrWhiteSpace(y));
  2812. HashSet<string> grades = new HashSet<string>();
  2813. List<GroupListDto> groups = await GroupListService.GetGroupListByListids(client, _dingDing, gids.ToList(), item.key);
  2814. List<GroupListDto> groupLists = groups?.FindAll(x => !string.IsNullOrEmpty(x.periodId) && !string.IsNullOrEmpty(x.school));
  2815. dict.Add(item.key, groupLists);
  2816. }
  2817. foreach (var lessonRecord in lessonRecords) {
  2818. LessonRecord old = lessonRecord.ToJsonString().ToObject<LessonRecord>();
  2819. if (string.IsNullOrWhiteSpace(lessonRecord.courseId)) {
  2820. var course = courses.Find(x => x.id.Equals(lessonRecord.courseId));
  2821. if (course != null)
  2822. {
  2823. lessonRecord.periodId = course.period?.id;
  2824. lessonRecord.subjectId = course.subject?.id;
  2825. }
  2826. }
  2827. //处理课堂选用的名单
  2828. if (lessonRecord.groupIds.IsNotEmpty() && !string.IsNullOrWhiteSpace(lessonRecord.school) && !string.IsNullOrWhiteSpace(lessonRecord.periodId))
  2829. {
  2830. HashSet<string> grades = new HashSet<string>();
  2831. List<GroupListDto> groupLists = null;
  2832. dict.TryGetValue(lessonRecord.school, out groupLists);
  2833. if (groupLists.IsNotEmpty())
  2834. {
  2835. var gplist = groupLists.FindAll(x => lessonRecord.groupIds.Contains(x.id));
  2836. School schoolObj = schools.Find(x => x.id.Equals(lessonRecord.school));
  2837. if (schoolObj != null)
  2838. {
  2839. //年级算法
  2840. var period = schoolObj.period.Find(x => x.id.Equals(lessonRecord.periodId));
  2841. int? Count = period?.grades?.Count;
  2842. if (Count.HasValue)
  2843. {
  2844. int Day = DateTimeOffset.UtcNow.Day;
  2845. int Month = DateTimeOffset.UtcNow.Month;
  2846. int Year = DateTimeOffset.UtcNow.Year;
  2847. int start = int.Parse($"{Year}0901");
  2848. var se = period.semesters.Find(x => x.start == 1);
  2849. if (se == null) {
  2850. se = period.semesters.First();
  2851. }
  2852. if (se != null) {
  2853. string sm = se.month >= 10 ? $"{se.month}" : $"0{se.month}";
  2854. string sd = se.day >= 10 ? $"{se.day}" : $"0{se.day}";
  2855. start = int.Parse($"{Year}{sm}{sd}");
  2856. }
  2857. int curr = int.Parse(DateTimeOffset.UtcNow.ToString("yyyyMMdd"));
  2858. //新学年开学时间大于当前时间,计算年级需要减1 20220901-20220408 > 0 则当前20220408是2021年入学的,
  2859. //当前时间大于新学年开学时间,计算年级则不需要 20220901-20221203 < 1 则当前20221203是2022年入学的,
  2860. //20230901-20230101 > 0 则当前20230101是2022年入学的,
  2861. int dis = start - curr;
  2862. foreach (int year in gplist.Select(x => x.year))
  2863. {
  2864. int grade;
  2865. if (dis > 0)
  2866. {
  2867. grade = (Year - year - 1) % Count.Value;
  2868. }
  2869. else
  2870. {
  2871. grade = (Year - year) % Count.Value;
  2872. }
  2873. grades.Add($"{grade}");
  2874. }
  2875. }
  2876. }
  2877. }
  2878. lessonRecord.grade = grades.ToList();
  2879. }
  2880. string scope = lessonRecord.scope;
  2881. string tmdid = lessonRecord.tmdid;
  2882. string lessonId = lessonRecord.id;
  2883. string school = lessonRecord.school;
  2884. string tbname = "";
  2885. string code;
  2886. string blobname = "";
  2887. if ($"{scope}".Equals("school") && !string.IsNullOrEmpty($"{school}"))
  2888. {
  2889. blobname = $"{school}";
  2890. code = $"LessonRecord-{school}";
  2891. tbname = "School";
  2892. }
  2893. else if ($"{scope}".Equals("private"))
  2894. {
  2895. blobname = $"{tmdid}";
  2896. code = $"LessonRecord";
  2897. tbname = "Teacher";
  2898. }
  2899. //如果有更新 则去读取/{_lessonId}/IES/base.json
  2900. try
  2901. {
  2902. BlobDownloadResult baseblobDownload = await _azureStorage.GetBlobContainerClient(blobname).GetBlobClient($"/records/{lessonId}/IES/base.json").DownloadContentAsync();
  2903. LessonBase lessonBase = baseblobDownload.Content.ToObjectFromJson<LessonBase>();
  2904. if (lessonBase != null && lessonBase.summary != null)
  2905. {
  2906. lessonRecord.attendCount = lessonBase.summary.attendCount;
  2907. lessonRecord.clientCount = lessonBase.summary.clientCount;
  2908. lessonRecord.attendRate = lessonBase.summary.attendRate;
  2909. lessonRecord.groupCount = lessonBase.summary.groupCount;
  2910. lessonRecord.collateTaskCount = lessonBase.summary.collateTaskCount;
  2911. lessonRecord.collateCount = lessonBase.summary.collateCount;
  2912. lessonRecord.pushCount = lessonBase.summary.pushCount;
  2913. lessonRecord.totalPoint = lessonBase.summary.totalPoint;
  2914. lessonRecord.examQuizCount = lessonBase.summary.examQuizCount;
  2915. lessonRecord.interactionCount = lessonBase.summary.interactionCount;
  2916. lessonRecord.examPointRate = lessonBase.summary.examPointRate;
  2917. lessonRecord.clientInteractionCount = lessonBase.summary.clientInteractionCount;
  2918. lessonRecord.clientInteractionAverge = lessonBase.summary.clientInteractionAverge;
  2919. lessonRecord.examCount = lessonBase.summary.examCount;
  2920. lessonRecord.totalInteractPoint = lessonBase.summary.totalInteractPoint;
  2921. }
  2922. long? size = await _azureStorage.GetBlobContainerClient(blobname).GetBlobsSize($"records/{lessonId}");
  2923. Bloblog bloblog = new Bloblog
  2924. {
  2925. id = lessonRecord.id,
  2926. code = $"Bloblog-{blobname}",
  2927. name = lessonRecord.name,
  2928. pk = "Bloblog",
  2929. time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
  2930. type = "records",
  2931. url = $"records/{lessonId}",
  2932. subjectId = string.IsNullOrWhiteSpace(lessonRecord.subjectId) ? new List<string>() : new List<string> { lessonRecord.subjectId },
  2933. periodId = string.IsNullOrWhiteSpace(lessonRecord.periodId) ? new List<string>() : new List<string> { lessonRecord.periodId },
  2934. size = size.HasValue ? size.Value : 0,
  2935. };
  2936. await client.GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(bloblog);
  2937. await BlobService.RefreshBlobRoot(new BlobRefreshMessage { progress = "update", root = "records", name = $"{blobname}" }, _serviceBus, _configuration, _azureRedis);
  2938. }
  2939. catch (RequestFailedException ex) when (ex.Status == 404)
  2940. {
  2941. }
  2942. catch (Exception ex)
  2943. {
  2944. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}课程读取base.json,{lessonId}\n{ex.Message}\n{ex.StackTrace}\n", GroupNames.醍摩豆服務運維群組);
  2945. }
  2946. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).ReplaceItemAsync<LessonRecord>(lessonRecord, lessonId, new PartitionKey(lessonRecord.code));
  2947. LessonDis lessonDis = new LessonDis();
  2948. //计算课堂更新前后的差值
  2949. lessonDis = LessonService.DisLessonCount(old, lessonRecord, lessonDis);
  2950. await LessonService.FixLessonCount(client, _dingDing, lessonRecord, old, lessonDis);
  2951. }
  2952. return Ok(new { lessonRecords });
  2953. }
  2954. /// <summary>
  2955. /// 修复学校课例及blob计算
  2956. /// </summary>
  2957. /// <param name="jsonElement"></param>
  2958. /// <returns></returns>
  2959. [HttpPost("check-scteacher")]
  2960. public async Task<IActionResult> CheckScTeacher(JsonElement request) {
  2961. if (!request.TryGetProperty("accessConfig", out JsonElement accessConfig)) return BadRequest();
  2962. if (!request.TryGetProperty("city", out JsonElement city)) return BadRequest();
  2963. if (!request.TryGetProperty("dist", out JsonElement dist)) return BadRequest();
  2964. if (!request.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
  2965. if (!request.TryGetProperty("standard", out JsonElement standard)) return BadRequest();
  2966. var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
  2967. var ScTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object>() { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaId}" } });
  2968. Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", $"{accessConfig}" }, { "areaId", $"{areaId}" } };
  2969. //(int status, string json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetTeachersListByProject");
  2970. (int status, string json) = await ScsStudyApisService.GetTeachersListByProject(_httpClient.CreateClient(), _dingDing, _azureStorage, $"{areaId}", $"{accessConfig}");
  2971. var teachers = json.ToObject<List<ScTeacher>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
  2972. var dbIds = ScTeachers.Select(x => x.PXID);
  2973. var scIds = teachers.Select(x => x.PXID);
  2974. var dbMore = dbIds.Except(scIds);
  2975. List<ScTeacher> dbtech = new List<ScTeacher>();
  2976. foreach (var item in dbMore) {
  2977. dbtech.Add(ScTeachers.Find(x => x.PXID == item));
  2978. }
  2979. List<ScTeacher> sctech = new List<ScTeacher>();
  2980. var scMore = scIds.Except(dbIds);
  2981. foreach (var item in scMore)
  2982. {
  2983. sctech.Add(teachers.Find(x => x.PXID == item));
  2984. }
  2985. List<string> tmdids = new List<string>();
  2986. var group = ScTeachers.Where(x => !string.IsNullOrWhiteSpace(x.tmdid)).GroupBy(x => x.tmdid).Select(x => new { x.Key, list = x.ToList() });
  2987. group.ToList().ForEach(x =>
  2988. {
  2989. if (x.list.Count > 1) {
  2990. tmdids.Add(x.Key);
  2991. }
  2992. });
  2993. List<string> teacherTrainsIds = new List<string>();
  2994. string insql = $"where c.id in ({string.Join(",", ScTeachers.Select(x => $"'{x.tmdid}'"))})";
  2995. string selsql = $"select value(c.id) from c {insql} and c.pk='TeacherTrain' ";
  2996. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<string>(queryText: selsql,
  2997. requestOptions: new QueryRequestOptions() { }))
  2998. {
  2999. teacherTrainsIds.Add(item);
  3000. }
  3001. var bindids = ScTeachers.Where(x => !string.IsNullOrWhiteSpace(x.tmdid)).Select(x => x.tmdid);
  3002. var noTrains = bindids.Except(teacherTrainsIds);
  3003. return Ok(new { dbtech, sctech, ScCount = teachers.Count, DBCount = ScTeachers.Count, ScTeachers, tmdids, noTrains });
  3004. }
  3005. /// <summary>
  3006. /// 筛查能力点未上传认证材料的
  3007. /// </summary>
  3008. /// <param name="jsonElement"></param>
  3009. /// <returns></returns>
  3010. [HttpPost("un-upload-abilitysub")]
  3011. public async Task<IActionResult> UnUploadAbilitysub(JsonElement json)
  3012. {
  3013. try {
  3014. List<string> schools = json.Deserialize<List<string>>();
  3015. if (!schools.Any()) {
  3016. return BadRequest();
  3017. }
  3018. var client = _azureCosmos.GetCosmosClient();
  3019. //金牛直属。
  3020. //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'" +
  3021. // $" and array_length(c.binds)>0 and s.schoolId in ({string.Join(",", schools.Select(s => $"'{s}'"))})";
  3022. 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'" +
  3023. $" and array_length(c.binds)>0 and c.id in ({string.Join(",", schools.Select(s => $"'{s}'"))})";
  3024. List<IdNameCode> tmdidSchooCode = new List<IdNameCode>();
  3025. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<IdNameCode>(queryText: sql,
  3026. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  3027. {
  3028. tmdidSchooCode.Add(item);
  3029. }
  3030. List<Ability> abilities = new List<Ability>();
  3031. string abilitysql = "select value c from c ";
  3032. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetItemQueryIterator<Ability>(queryText: abilitysql,
  3033. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Ability-standard4") }))
  3034. {
  3035. abilities.Add(item);
  3036. }
  3037. List<dynamic> dynamics = new List<dynamic>();
  3038. var group = tmdidSchooCode.GroupBy(idcode => idcode.code).ToList();
  3039. List<Task<List<dynamic>>> dynamicsTask = new List<Task<List<dynamic>>>();
  3040. group.ForEach(x => {
  3041. dynamicsTask .Add(GetDynamics(x.ToList(), abilities));
  3042. });
  3043. var aa= await Task.WhenAll(dynamicsTask);
  3044. foreach (var a in aa) {
  3045. if (a.Any()) {
  3046. dynamics.AddRange(a);
  3047. }
  3048. }
  3049. return Ok(new { dynamics });
  3050. } catch (Exception ex) {
  3051. return BadRequest($"{ex.Message}{ex.StackTrace}");
  3052. }
  3053. }
  3054. private async Task<List<dynamic>> GetDynamics(List<IdNameCode> tmdidSchooCode,List<Ability> abilities) {
  3055. List<dynamic> dynamics = new List<dynamic>();
  3056. List<Task<List<dynamic>>> dynamicsTask = new List<Task<List<dynamic>>>();
  3057. tmdidSchooCode.ForEach(idcode => {
  3058. dynamicsTask.Add(GetDynamicsTmd(idcode, abilities));
  3059. });
  3060. var aa = await Task.WhenAll(dynamicsTask);
  3061. foreach (var a in aa)
  3062. {
  3063. if (a.Any())
  3064. {
  3065. dynamics.AddRange(a);
  3066. }
  3067. }
  3068. return dynamics;
  3069. }
  3070. private async Task<List<dynamic>> GetDynamicsTmd(IdNameCode idcode, List<Ability> abilities) {
  3071. List<dynamic> dynamics = new List<dynamic>();
  3072. string subsql = "select value c from c ";
  3073. List<AbilitySub> abilitySubs = new List<AbilitySub>();
  3074. List<UnUpload> unUploads = new List<UnUpload>();
  3075. (string blobPix, string sas) = _azureStorage.GetBlobContainerSAS99Year(idcode.code, Azure.Storage.Sas.BlobContainerSasPermissions.Read);
  3076. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<AbilitySub>(queryText: subsql,
  3077. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"AbilitySub-{idcode.code}-{idcode.id}") }))
  3078. {
  3079. abilitySubs.Add(item);
  3080. }
  3081. //移除通识
  3082. abilitySubs.RemoveAll(ab => ab.id.Equals("2438e72f-4de8-4ccb-8cae-3f1dce89a769"));
  3083. if (abilitySubs.Count > 3)
  3084. {
  3085. //一个都没上传
  3086. if (!abilitySubs.SelectMany(upsl => upsl.uploads).Any())
  3087. {
  3088. try
  3089. {
  3090. var a = abilitySubs.Count - 3;
  3091. abilitySubs = abilitySubs.Take(a).ToList();
  3092. }
  3093. catch { await _dingDing.SendBotMsg($"{idcode.ToJsonString()},{abilitySubs.ToJsonString()}", GroupNames.成都开发測試群組); }
  3094. }
  3095. else
  3096. {
  3097. //检查
  3098. var 上传了的 = abilitySubs.FindAll(x => x.uploads.Count > 0);
  3099. //如果上传大于三个能力点,则清空掉多余的没有上传的
  3100. if (上传了的.Count >= 3)
  3101. {
  3102. abilitySubs.RemoveAll(x => x.uploads.Count == 0);
  3103. }
  3104. //如果上传不足三个的,保证有三个能力点
  3105. else
  3106. {
  3107. if (上传了的.Any())
  3108. {
  3109. int 需要增加的 = 3 - 上传了的.Count;
  3110. var 未上传的 = abilitySubs.FindAll(x => x.uploads.Count == 0);
  3111. List<AbilitySub> newAb = 上传了的;
  3112. var a = 未上传的.Take(需要增加的);
  3113. if (a.Any())
  3114. {
  3115. newAb.AddRange(a);
  3116. }
  3117. abilitySubs = newAb;
  3118. }
  3119. else
  3120. {
  3121. abilitySubs = abilitySubs.Take(3).ToList();
  3122. }
  3123. }
  3124. }
  3125. }
  3126. List<Task<List<UnUpload>>> uploads = new List<Task<List<UnUpload>>>();
  3127. abilitySubs.ForEach(item => {
  3128. uploads.Add(GetSub(item, abilities, blobPix, sas));
  3129. });
  3130. var aa = await Task.WhenAll(uploads);
  3131. int index = 0;
  3132. foreach (var a in aa)
  3133. {
  3134. if (a.Any())
  3135. {
  3136. unUploads.AddRange(a);
  3137. }
  3138. else {
  3139. //没有任何问题的。
  3140. index += 1;
  3141. }
  3142. }
  3143. if (index < 3) {
  3144. if (unUploads.Any())
  3145. {
  3146. foreach (var un in unUploads)
  3147. {
  3148. un.stdsUnUpload.ForEach(ii =>
  3149. {
  3150. dynamics.Add(new { idcode.id, idcode.name, idcode.nickname, un.abilityNo, un.abilityName, msg = "认证材料未上传", stdname = ii.stdname });
  3151. });
  3152. un.taskUnUplaod.ForEach(ii =>
  3153. {
  3154. dynamics.Add(new { idcode.id, idcode.name, idcode.nickname, un.abilityNo, un.abilityName, msg = "认证材料任务未上传", stdname = ii.stdname, taskname = ii.taskname });
  3155. });
  3156. un.urlUnExsit.ToList().ForEach(ii =>
  3157. {
  3158. string msg = "";
  3159. if (ii.enough == 0)
  3160. {
  3161. msg = "认证上传数量不达标";
  3162. }
  3163. else
  3164. {
  3165. msg = "认证材料文件因操作原因";
  3166. }
  3167. StringBuilder uploadUrls = new StringBuilder();
  3168. dynamics.Add(new
  3169. {
  3170. idcode.id,
  3171. idcode.name,
  3172. idcode.nickname,
  3173. idcode.code,
  3174. un.abilityNo,
  3175. un.abilityName,
  3176. msg = msg,
  3177. stdname = ii.stdname,
  3178. taskname = ii.taskname,
  3179. errorUrls = string.Join("\n\r\t ", ii.errorUrls),
  3180. enough = ii.enough,
  3181. limit = ii.limit,
  3182. count = ii.count,
  3183. uploadUrls = string.Join("\n\r\t ", ii.uploadUrls),
  3184. });
  3185. });
  3186. }
  3187. }
  3188. }
  3189. return dynamics;
  3190. }
  3191. private async Task<List<UnUpload>> GetSub(AbilitySub item , List<Ability> abilities, string blobPix, string sas) {
  3192. List<UnUpload> unUploads = new List<UnUpload>();
  3193. var ability = abilities.Find(x => x.id.Equals(item.id));
  3194. foreach (var x in ability.stds)
  3195. {
  3196. UnUpload unUpload = new UnUpload { abilityNo = ability.no, abilityName = ability.name };
  3197. var upload = item.uploads.FindAll(u => u.stdid.Equals(x.id));
  3198. if (upload != null)
  3199. {
  3200. AbilityStdTask abilityStdTask = null;
  3201. x.task.ForEach(t => {
  3202. if (upload.Where(u => u.taskid.Equals(t.id)).Any())
  3203. {
  3204. abilityStdTask = t;
  3205. }
  3206. });
  3207. //检查是否正确上传任务的。
  3208. if (abilityStdTask == null)
  3209. {
  3210. //var dict = new Dictionary<string, List<string>>();
  3211. //dict.Add(x.id, new List<string>(x.task.Select(t => t.id)));
  3212. //x.task.ForEach(t => {
  3213. // unUpload.taskUnUplaod.Add(new aburls { stdid = x.id, stdname = x.std, taskid = t.id, taskname = t.stddesc });
  3214. //});
  3215. }
  3216. else
  3217. {
  3218. SubUpload subUpload = upload.Find(ap => ap.taskid.Equals(abilityStdTask.id));
  3219. if (subUpload != null)
  3220. {
  3221. List<string> urlUn = new List<string>();
  3222. foreach (var url in subUpload.urls)
  3223. {
  3224. string blobItem = url.url.Replace($"{blobPix}/", "");
  3225. bool Exist = await _azureStorage.GetBlobContainerClient(item.school).GetBlobClient(blobItem).ExistsAsync();
  3226. // List<string> items = await _azureStorage.GetBlobContainerClient(item.school).ExistsAsync(blobItem);
  3227. if (!Exist)
  3228. {
  3229. urlUn.Add($"{url.url}?{sas}");
  3230. }
  3231. }
  3232. aburls aburls = new aburls
  3233. {
  3234. stdid = x.id,
  3235. stdname = x.std,
  3236. taskid = abilityStdTask.id,
  3237. taskname = abilityStdTask.stddesc,
  3238. errorUrls = urlUn,
  3239. };
  3240. //if (abilityStdTask.limit > subUpload.urls.Count)
  3241. //{
  3242. // aburls.enough = 0;
  3243. // aburls.limit = abilityStdTask.limit;
  3244. // aburls.count = subUpload.urls.Count;
  3245. // aburls.uploadUrls = subUpload.urls.Select(x => $"{x.url}?{sas}").ToList();
  3246. // unUpload.urlUnExsit.Add(aburls);
  3247. //}
  3248. if (urlUn.Any())
  3249. {
  3250. unUpload.urlUnExsit.Add(aburls);
  3251. }
  3252. }
  3253. else
  3254. {
  3255. //var dict = new Dictionary<string, List<string>>();
  3256. //dict.Add(x.id, new List<string>(x.task.Select(t => t.id)));
  3257. //x.task.ForEach(t => {
  3258. // unUpload.taskUnUplaod.Add(new aburls { stdid = x.id, stdname = x.std, taskid = t.id, taskname = t.stddesc });
  3259. //});
  3260. }
  3261. }
  3262. }
  3263. else
  3264. {
  3265. //unUpload.stdsUnUpload.Add(new aburls { stdid = x.id, stdname = x.std });
  3266. }
  3267. if (/*unUpload.stdsUnUpload.Any() || unUpload.taskUnUplaod.Any() ||*/ unUpload.urlUnExsit.Any())
  3268. {
  3269. unUploads.Add(unUpload);
  3270. }
  3271. }
  3272. return unUploads;
  3273. }
  3274. public class UnUpload {
  3275. public string abilityNo { get; set; }
  3276. public string abilityName { get; set; }
  3277. public List<aburls> stdsUnUpload { get; set; } = new List<aburls>();
  3278. public List<aburls> taskUnUplaod { get; set; } = new List<aburls>();
  3279. public HashSet<aburls> urlUnExsit { get; set; } = new HashSet<aburls>();
  3280. }
  3281. public class aburls
  3282. {
  3283. public string stdid { get; set; }
  3284. public string stdname { get; set; }
  3285. public string taskid { get; set; }
  3286. public string taskname { get; set; }
  3287. public int enough { get; set; } = 1;
  3288. public int limit { get; set; }
  3289. public int count { get; set; }
  3290. public List<string> uploadUrls { get; set; } = new List<string>();
  3291. public List<string> errorUrls { get; set; } = new List<string>();
  3292. }
  3293. [HttpPost("gen-school-teacher-pdf")]
  3294. public async Task<IActionResult> GenSchoolTeacherPdf(JsonElement json) {
  3295. var client = _azureCosmos.GetCosmosClient();
  3296. //金牛直属。
  3297. if (!json.TryGetProperty("areaId", out JsonElement areaId)) { BadRequest(); }
  3298. //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'" +
  3299. // $" and array_length(c.binds)>0 and s.schoolId in ({string.Join(",", schools.Select(s => $"'{s}'") )})";
  3300. 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}'" +
  3301. $" and array_length(c.binds)>0 ";
  3302. List<IdNameCode> tmdidSchooCode = new List<IdNameCode>();
  3303. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<IdNameCode>(queryText: sql,
  3304. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  3305. {
  3306. tmdidSchooCode.Add(item);
  3307. }
  3308. if (json.TryGetProperty("schools", out JsonElement schools))
  3309. {
  3310. List<string> pschools = schools.ToObject<List<string>>();
  3311. tmdidSchooCode = tmdidSchooCode.FindAll(z => pschools.Contains(z.code));
  3312. }
  3313. if (json.TryGetProperty("pushTeachers", out JsonElement pushTeachers)) {
  3314. List<string> teachers = pushTeachers.ToObject<List<string>>();
  3315. tmdidSchooCode = tmdidSchooCode.FindAll(z => teachers.Contains(z.id));
  3316. }
  3317. foreach (var g in tmdidSchooCode)
  3318. {
  3319. //var messageBlobPDF = new ServiceBusMessage(new { id = g.ToList().Select(x => x.id).ToHashSet(), school = g.Key, userType = "tmdid", bizType = "OfflineRecord" }.ToJsonString());
  3320. //var GenPdfQueue = _configuration.GetValue<string>("Azure:ServiceBus:GenPdfQueue");
  3321. //await _serviceBus.GetServiceBusClient().SendMessageAsync(GenPdfQueue, messageBlobPDF);
  3322. string msg = new { id = new List<string> { g.id }, school = g.code, userType = "tmdid", bizType = "OfflineRecord" }.ToJsonString();
  3323. JsonElement element = msg.ToObject<JsonElement>();
  3324. // https://dotblogs.com.tw/yc421206/2013/04/25/102300 // C# 原子操作。Interlocked
  3325. // ConcurrentQueue http://t.zoukankan.com/hohoa-p-12622459.html
  3326. switch (true)
  3327. {
  3328. case bool when element.TryGetProperty("bizType", out JsonElement _bizType) && $"{_bizType}".Equals("OfflineRecord"):
  3329. //处理教师线下研修报告的生成。
  3330. await FixDataService.GenOfflineRecordPdf(_azureCosmos,_dingDing,_azureStorage,_coreAPIHttpService,_converter,element, msg);
  3331. break;
  3332. }
  3333. }
  3334. return Ok(tmdidSchooCode);
  3335. }
  3336. [HttpPost("restore-teacher-pdf")]
  3337. public async Task<IActionResult> restoreteacherpdf(JsonElement json)
  3338. {
  3339. var client = _azureStorage.GetBlobContainerClient($"teammodelos");
  3340. 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'" +
  3341. $" and array_length(c.binds)>0 ";
  3342. List<IdNameCode> tmdidSchooCode = new List<IdNameCode>();
  3343. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<IdNameCode>(queryText: sql,
  3344. requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
  3345. {
  3346. tmdidSchooCode.Add(item);
  3347. }
  3348. var blobclient = _azureStorage.GetBlobContainerClient($"teammodelos");
  3349. List<Task> tasks = new List<Task>();
  3350. tmdidSchooCode.ForEach(idcode =>
  3351. {
  3352. tasks.Add(resot(idcode, blobclient));
  3353. });
  3354. int pagesize = 500;
  3355. if (tasks.Count <= pagesize)
  3356. {
  3357. await Task.WhenAll(tasks);
  3358. }
  3359. else
  3360. {
  3361. int pages = (tasks.Count + pagesize) / pagesize; //256是批量操作最大值,pages = (total + max -1) / max;
  3362. for (int i = 0; i < pages; i++)
  3363. {
  3364. var listssb = tasks.Skip((i) * pagesize).Take(pagesize).ToList();
  3365. await Task.WhenAll(listssb);
  3366. }
  3367. }
  3368. return Ok();
  3369. }
  3370. private async Task resot(IdNameCode idcode, BlobContainerClient blobclient) {
  3371. Azure.Response teacherTrainRes = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemStreamAsync(idcode.id, new PartitionKey($"TeacherTrain-{idcode.code}"));
  3372. if (teacherTrainRes.Status == 200)
  3373. {
  3374. TeacherTrain teacherTrain = JsonDocument.Parse(teacherTrainRes.Content).RootElement.Deserialize<TeacherTrain>();
  3375. try
  3376. {
  3377. if (!string.IsNullOrWhiteSpace(teacherTrain.offlineUrl))
  3378. {
  3379. BlobDownloadInfo blobDownload = await blobclient.GetBlobClient(teacherTrain.offlineUrl).DownloadAsync(range: new HttpRange(0, 4 * 1048576), rangeGetContentHash: true);
  3380. if (blobDownload.Details.ContentHash != null)
  3381. {
  3382. string hash = Md5Hash.GetbyteToString(blobDownload.Details.ContentHash);
  3383. teacherTrain.offlineReport = new Attachment
  3384. {
  3385. hash = hash,
  3386. url = teacherTrain.offlineUrl,
  3387. blob = $"{blobclient.Uri}/{teacherTrain.offlineUrl}",
  3388. extension = "pdf",
  3389. name = $"{teacherTrain.nickname}-校本研修汇总报告.pdf",
  3390. type = "doc",
  3391. size = blobDownload.ContentLength
  3392. };
  3393. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync<TeacherTrain>(teacherTrain, idcode.id, new PartitionKey($"TeacherTrain-{idcode.code}"));
  3394. }
  3395. }
  3396. }
  3397. catch
  3398. {
  3399. }
  3400. }
  3401. }
  3402. /// <summary>
  3403. /// 修复学校课例及blob计算
  3404. /// </summary>
  3405. /// <param name="jsonElement"></param>
  3406. /// <returns></returns>
  3407. [HttpPost("fix-student-irs")]
  3408. public async Task<IActionResult> FixStudentIrs(JsonElement json) {
  3409. string sql = "select value(c.id) from c ";
  3410. List<string> ids = new List<string>();
  3411. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
  3412. .GetItemQueryIterator<string>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") })) {
  3413. ids.Add(item);
  3414. }
  3415. List<Student> studentsData = new List<Student>();
  3416. foreach (var id in ids) {
  3417. if (id.Equals("ydzt")) {
  3418. continue;
  3419. }
  3420. List<Student> students = new List<Student>();
  3421. string sqlstu = "select value(c) from c ";
  3422. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student)
  3423. .GetItemQueryIterator<Student>(sqlstu, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base-{id}") }))
  3424. {
  3425. students.Add(item);
  3426. }
  3427. List<Task<ItemResponse<Student>>> tasks = new List<Task<ItemResponse<Student>>>();
  3428. var groups= students.Where(x => !string.IsNullOrWhiteSpace(x.classId)).GroupBy(y => y.classId).Select(z => new { key = z.Key,list = z.ToList() });
  3429. foreach (var group in groups) {
  3430. var list= DoIrs(group.list);
  3431. if (list != null) {
  3432. list.ForEach(stu => {
  3433. tasks.Add(_azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).ReplaceItemAsync(stu, stu.id, new PartitionKey($"Base-{id}")));
  3434. });
  3435. }
  3436. }
  3437. int pagesize = 1000;
  3438. if (tasks.Count <= pagesize)
  3439. {
  3440. await Task.WhenAll(tasks);
  3441. }
  3442. else
  3443. {
  3444. int pages = (tasks.Count + pagesize) / pagesize; //256是批量操作最大值,pages = (total + max -1) / max;
  3445. for (int i = 0; i < pages; i++)
  3446. {
  3447. var listssb = tasks.Skip((i) * pagesize).Take(pagesize).ToList();
  3448. await Task.WhenAll(listssb);
  3449. }
  3450. }
  3451. studentsData.AddRange(students);
  3452. }
  3453. return Ok(studentsData);
  3454. }
  3455. private List<Student> DoIrs(List<Student> students) {
  3456. List<int> ids = new List<int>(students.Count);
  3457. bool hasAbc=false;
  3458. int index = students.Count;
  3459. if (!students.Select(x => x.irs).Contains("1"))
  3460. {
  3461. foreach (var stu in students)
  3462. {
  3463. if (int.TryParse(stu.id, out int id))
  3464. {
  3465. ids.Add(id);
  3466. }
  3467. else
  3468. {
  3469. hasAbc = true;
  3470. }
  3471. }
  3472. ids = ids.OrderBy(x => x).ToList();
  3473. if (!hasAbc)
  3474. {
  3475. for (int i = 0; i < ids.Count; i++)
  3476. {
  3477. var stu = students.Find(x => x.id.Equals($"{ids[i]}"));
  3478. if (stu != null)
  3479. {
  3480. stu.irs = $"{(i + 1)}";
  3481. stu.no = $"{(i + 1)}";
  3482. }
  3483. }
  3484. }
  3485. return students;
  3486. }
  3487. else { return null; }
  3488. }
  3489. public record CorrectStu
  3490. {
  3491. public string id { get; set; }
  3492. public string code { get; set; }
  3493. public List<string> classIds { get; set; }
  3494. }
  3495. /// <summary>
  3496. /// 补充学校教室字段学段id接口
  3497. /// </summary>
  3498. /// <param name="jsonElement"></param>
  3499. /// <returns></returns>
  3500. [HttpPost("fix-room-periodid")]
  3501. public async Task<IActionResult> FixRoomPeriodId(JsonElement jsonElement)
  3502. {
  3503. try
  3504. {
  3505. List<string> schoolId = new();
  3506. var cosmosClient = _azureCosmos.GetCosmosClient();
  3507. await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<string>(queryText: "select distinct value(REPLACE(c.code, 'Room-', '')) from c where c.pk='Room'", requestOptions: new QueryRequestOptions() { }))
  3508. {
  3509. schoolId.Add(item);
  3510. }
  3511. List<Task<ItemResponse<Room>>> allRooms = new(); //存储区域数据
  3512. if (schoolId.Count > 0)
  3513. {
  3514. foreach (var scId in schoolId)
  3515. {
  3516. string periodId = null;
  3517. School scBase = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(scId, new PartitionKey("Base"));
  3518. if(scBase.period.Count > 0)
  3519. periodId = scBase.period[0].id;
  3520. await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Room>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Room-{scId}") }))
  3521. {
  3522. allRooms.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<Room>(item, item.id, new PartitionKey($"Room-{scId}")));
  3523. }
  3524. }
  3525. }
  3526. if (allRooms.Count < 256)
  3527. {
  3528. await Task.WhenAll(allRooms);
  3529. }
  3530. else
  3531. {
  3532. int pages = (allRooms.Count + 255) / 256;
  3533. for (int i = 0; i < pages; i++)
  3534. {
  3535. List<Task<ItemResponse<Room>>> tempRoom = allRooms.Skip((i) * 256).Take(256).ToList();
  3536. await Task.WhenAll(tempRoom);
  3537. }
  3538. }
  3539. return Ok(new { state = 200, allRooms });
  3540. }
  3541. catch (Exception ex)
  3542. {
  3543. return BadRequest(ex.StackTrace);
  3544. }
  3545. }
  3546. /// <summary>
  3547. /// 修复研修平台账号重复的问题
  3548. /// </summary>
  3549. /// <param name="jsonElement"></param>
  3550. /// <returns></returns>
  3551. [HttpPost("fix-training")]
  3552. public async Task<IActionResult> RepairTraining(JsonElement jsonElement)
  3553. {
  3554. try
  3555. {
  3556. if (!jsonElement.TryGetProperty("trainingIds", out JsonElement ids)) return BadRequest();
  3557. List<TrainingId> trainingIds = ids.ToObject<List<TrainingId>>();
  3558. List<string> noCopyFiles = new();
  3559. var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
  3560. var cosmosClient = _azureCosmos.GetCosmosClient();
  3561. foreach (var item in trainingIds)
  3562. {
  3563. List<ScTeacher> scTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object>() { { "PartitionKey", "ScTeacher" }, { "tmdid", $"{item.oldId}" } });
  3564. if (scTeachers.Count > 0)
  3565. {
  3566. scTeachers.ForEach(sct => sct.tmdid = item.newId);
  3567. //保存和更新研修信息
  3568. await table.SaveOrUpdateAll(scTeachers);
  3569. }
  3570. string defaultSc = null;
  3571. //教师基础信息
  3572. Teacher teacher = new();
  3573. var resTchBase = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync($"{item.oldId}", new PartitionKey("Base"));
  3574. if (resTchBase.Status == 200)
  3575. {
  3576. using var json = await JsonDocument.ParseAsync(resTchBase.ContentStream);
  3577. teacher = json.ToObject<Teacher>();
  3578. defaultSc = teacher.defaultSchool;
  3579. if (string.IsNullOrEmpty(teacher.defaultSchool))
  3580. defaultSc = teacher.schools[0].schoolId;
  3581. teacher.id = $"{item.newId}";
  3582. //教师基础信息
  3583. try {
  3584. teacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey(teacher.code));
  3585. } catch { }
  3586. }
  3587. //教师研修文件
  3588. TeacherFile teacherFile = new();
  3589. var resTchFile = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync($"{item.oldId}", new PartitionKey($"TeacherFile-{defaultSc}"));
  3590. if (resTchFile.Status == 200)
  3591. {
  3592. using var json = await JsonDocument.ParseAsync(resTchFile.ContentStream);
  3593. teacherFile = json.ToObject<TeacherFile>();
  3594. teacherFile.id = $"{item.newId}";
  3595. //创建新的教师研修文件
  3596. try {
  3597. teacherFile = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<TeacherFile>(teacherFile, new PartitionKey(teacherFile.code));
  3598. } catch { }
  3599. }
  3600. //研修统计
  3601. TeacherTrain teacherTrain = new();
  3602. var resTchTrain = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync($"{item.oldId}", new PartitionKey($"TeacherTrain-{defaultSc}"));
  3603. if (resTchTrain.Status == 200)
  3604. {
  3605. using var json = await JsonDocument.ParseAsync(resTchTrain.ContentStream);
  3606. teacherTrain = json.ToObject<TeacherTrain>();
  3607. teacherTrain.tmdid = $"{item.newId}";
  3608. teacherTrain.id = $"{item.newId}";
  3609. //研修报告外层文件路径
  3610. if (!string.IsNullOrEmpty($"{teacherTrain.offlineUrl}"))
  3611. {
  3612. string oldOffUrl = teacherTrain.offlineUrl;
  3613. teacherTrain.offlineUrl = teacherTrain.offlineUrl.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3614. if (!oldOffUrl.Equals(teacherTrain.offlineUrl))
  3615. {
  3616. //复制研修报告
  3617. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, "teammodelos", teacherTrain.offlineUrl, item.oldId, item.newId);
  3618. if (tempFileCopy != 200)
  3619. noCopyFiles.Add(oldOffUrl);
  3620. }
  3621. }
  3622. if (teacherTrain.offlineRecords.Count > 0)
  3623. {
  3624. foreach (var off in teacherTrain.offlineRecords)
  3625. {
  3626. if (!string.IsNullOrEmpty(off.url))
  3627. {
  3628. string oldOffRe = off.url;
  3629. off.url = off.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3630. if (!oldOffRe.Equals(off.url))
  3631. {
  3632. //线下研修文件
  3633. var tempFileRe = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, oldOffRe, item.oldId, item.newId);
  3634. if (tempFileRe != 200)
  3635. noCopyFiles.Add(oldOffRe);
  3636. }
  3637. }
  3638. if (off.other != null)
  3639. {
  3640. //作业附件
  3641. foreach (var offOther in off.other)
  3642. {
  3643. //替换文件路径
  3644. string oldOffOther = offOther.url;
  3645. offOther.url = offOther.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3646. offOther.blob = offOther.blob.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3647. if (!oldOffOther.Equals(offOther.url))
  3648. {
  3649. //复制作业附件
  3650. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, oldOffOther, item.oldId, item.newId);
  3651. if (tempFileCopy != 200)
  3652. noCopyFiles.Add(oldOffOther);
  3653. }
  3654. }
  3655. }
  3656. }
  3657. }
  3658. if (teacherTrain.teacherClasses.Count > 0)
  3659. {
  3660. //课堂实录
  3661. foreach (var tchClass in teacherTrain.teacherClasses)
  3662. {
  3663. string tchCla = tchClass.url;
  3664. //替换课堂实录路径地址
  3665. tchClass.url = tchClass.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3666. if (!tchCla.Equals(tchClass.url))
  3667. {
  3668. //复制课堂实录文件
  3669. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, tchCla, item.oldId, item.newId);
  3670. if (tempFileCopy != 200)
  3671. noCopyFiles.Add(tchCla);
  3672. }
  3673. }
  3674. }
  3675. //研修报告信息
  3676. if (teacherTrain.offlineReport != null)
  3677. {
  3678. //替换研修报告信息文件路径地址
  3679. string tchTrain = teacherTrain.offlineReport.url;
  3680. teacherTrain.offlineReport.url = teacherTrain.offlineReport.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3681. teacherTrain.offlineReport.blob = teacherTrain.offlineReport.blob.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3682. if (!tchTrain.Equals(teacherTrain.offlineReport.url))
  3683. {
  3684. //研修报告信息文件路径
  3685. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, "teammodelos", tchTrain, item.oldId, item.newId);
  3686. if (tempFileCopy != 200)
  3687. noCopyFiles.Add(tchTrain);
  3688. }
  3689. }
  3690. teacherTrain.id = item.newId;
  3691. //创建新的教师研修统计
  3692. try { teacherTrain = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<TeacherTrain>(teacherTrain, new PartitionKey(teacherTrain.code)); } catch { }
  3693. }
  3694. //课堂实录
  3695. ClassVideo classVideo = new();
  3696. var respCalsVideo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync($"{item.oldId}", new PartitionKey($"ClassVideo-{defaultSc}"));
  3697. if (respCalsVideo.Status == 200)
  3698. {
  3699. using var json = await JsonDocument.ParseAsync(respCalsVideo.ContentStream);
  3700. classVideo = json.ToObject<ClassVideo>();
  3701. classVideo.creatorId = $"{item.newId}";
  3702. if (classVideo.files.Count > 0)
  3703. {
  3704. foreach (var cv in classVideo.files)
  3705. {
  3706. string tchCla = cv.url;
  3707. cv.url = cv.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3708. if (!tchCla.Equals(cv.url))
  3709. {
  3710. //复制课堂实录文件
  3711. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, tchCla, item.oldId, item.newId);
  3712. if (tempFileCopy != 200)
  3713. noCopyFiles.Add(tchCla);
  3714. }
  3715. }
  3716. }
  3717. classVideo.id = $"{item.newId}";
  3718. //创建新的教师课堂实录
  3719. try { classVideo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<ClassVideo>(classVideo, new PartitionKey(classVideo.code)); } catch { }
  3720. }
  3721. //订阅记录和学习记录
  3722. List<Task<ItemResponse<AbilitySub>>> abilitySubs = new();
  3723. await foreach (var abilitySub in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<AbilitySub>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilitySub-{defaultSc}-{item.oldId}") }))
  3724. {
  3725. abilitySub.creatorId = item.newId;
  3726. if (abilitySub.uploads.Count > 0)
  3727. {
  3728. foreach (var asup in abilitySub.uploads)
  3729. {
  3730. if (asup.urls.Count > 0)
  3731. {
  3732. foreach (var asupurl in asup.urls)
  3733. {
  3734. string asupUr = asupurl.url;
  3735. asupurl.url = asupurl.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3736. if (!asupUr.Equals(asupurl.url))
  3737. {
  3738. //订阅记录和学习记录文件地址
  3739. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, asupUr, item.oldId, item.newId);
  3740. if (tempFileCopy != 200)
  3741. noCopyFiles.Add(asupUr);
  3742. }
  3743. }
  3744. }
  3745. }
  3746. }
  3747. if (abilitySub.otherScore.Count > 0)
  3748. {
  3749. foreach (var abother in abilitySub.otherScore)
  3750. {
  3751. if (abother.tmdid.Equals(item.oldId))
  3752. abother.tmdid = item.oldId;
  3753. }
  3754. }
  3755. abilitySub.code = abilitySub.code.Replace($"-{item.oldId}", $"-{item.newId}");
  3756. try { abilitySubs.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<AbilitySub>(abilitySub, new PartitionKey($"AbilitySub-{defaultSc}-{item.newId}"))); } catch { }
  3757. }
  3758. if (abilitySubs.Count < 256)
  3759. await Task.WhenAll(abilitySubs);
  3760. else
  3761. {
  3762. int pages = (abilitySubs.Count + 255) / 256;
  3763. for (int i = 0; i < pages; i++)
  3764. {
  3765. List<Task<ItemResponse<AbilitySub>>> tempAbilSub = abilitySubs.Skip((i) * 256).Take(256).ToList();
  3766. await Task.WhenAll(tempAbilSub);
  3767. }
  3768. }
  3769. //教师所在学校的基础信息
  3770. SchoolTeacher schoolTeacher = new();
  3771. var resScTeacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{item.oldId}", new PartitionKey($"Teacher-{defaultSc}"));
  3772. if (resScTeacher.Status == 200)
  3773. {
  3774. using var json = await JsonDocument.ParseAsync(resScTeacher.ContentStream);
  3775. schoolTeacher = json.ToObject<SchoolTeacher>();
  3776. schoolTeacher.id = item.newId;
  3777. //创建新的教师在学校的基础信息
  3778. try {
  3779. schoolTeacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
  3780. } catch {
  3781. }
  3782. }
  3783. //名单信息
  3784. List<Task<ItemResponse<GroupList>>> groupLists = new();
  3785. await foreach (var grups in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupList>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{defaultSc}") }))
  3786. {
  3787. bool isReplace = false;
  3788. if (grups.members.Count > 0)
  3789. {
  3790. foreach (var griupm in grups.members)
  3791. {
  3792. if (griupm.id.Equals(item.oldId))
  3793. {
  3794. griupm.id = item.newId;
  3795. isReplace = true;
  3796. }
  3797. }
  3798. }
  3799. if (grups.creatorId.Equals(item.oldId))
  3800. {
  3801. grups.creatorId = item.newId;
  3802. isReplace = true;
  3803. }
  3804. if (isReplace == true)
  3805. groupLists.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<GroupList>(grups, grups.id, new PartitionKey(grups.code)));
  3806. }
  3807. if (groupLists.Count < 256)
  3808. await Task.WhenAll(groupLists);
  3809. else
  3810. {
  3811. int pages = (groupLists.Count + 255) / 256;
  3812. for (int i = 0; i < pages; i++)
  3813. {
  3814. List<Task<ItemResponse<GroupList>>> tempGroups = groupLists.Skip((i) * 256).Take(256).ToList();
  3815. await Task.WhenAll(tempGroups);
  3816. }
  3817. }
  3818. //教研活动
  3819. List<Task<ItemResponse<Study>>> studys = new();
  3820. await foreach (var study in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<Study>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Study-{defaultSc}") }))
  3821. {
  3822. bool isReplace = false;
  3823. if (study.creatorId.Equals(item.oldId))
  3824. {
  3825. study.creatorId = item.newId;
  3826. isReplace = true;
  3827. }
  3828. if (study.teacIds.Contains(item.oldId) == true)
  3829. {
  3830. study.teacIds = study.teacIds.Select(x => x.Replace($"{item.oldId}", $"{item.newId}")).ToList();
  3831. isReplace = true;
  3832. }
  3833. //if (isReplace == true)
  3834. studys.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<Study>(study, study.id, new PartitionKey($"Study-{defaultSc}")));
  3835. }
  3836. if (studys.Count < 256)
  3837. await Task.WhenAll(studys);
  3838. else
  3839. {
  3840. int pages = (studys.Count + 255) / 256;
  3841. for (int i = 0; i < pages; i++)
  3842. {
  3843. List<Task<ItemResponse<Study>>> tempStudys = studys.Skip((i) * 256).Take(256).ToList();
  3844. await Task.WhenAll(tempStudys);
  3845. }
  3846. }
  3847. //教研测验活动记录
  3848. List<Task<ItemResponse<ExamLite>>> examLites = new();
  3849. await foreach (var examl in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamLite>(queryText: $"select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"ExamLite-{defaultSc}") }))
  3850. {
  3851. bool isReplace = false;
  3852. if (examl.teachers.Count > 0)
  3853. {
  3854. foreach (var examTch in examl.teachers)
  3855. {
  3856. if (examTch.id.Equals(item.oldId))
  3857. {
  3858. examTch.id = item.newId;
  3859. isReplace = true;
  3860. }
  3861. }
  3862. }
  3863. //if (isReplace == true)
  3864. examLites.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<ExamLite>(examl, examl.id, new PartitionKey($"ExamLite-{defaultSc}")));
  3865. }
  3866. if (examLites.Count < 256)
  3867. await Task.WhenAll(examLites);
  3868. else
  3869. {
  3870. int pages = (examLites.Count + 255) / 256;
  3871. for (int i = 0; i < pages; i++)
  3872. {
  3873. List<Task<ItemResponse<ExamLite>>> tempExam = examLites.Skip((i) * 256).Take(256).ToList();
  3874. await Task.WhenAll(tempExam);
  3875. }
  3876. }
  3877. //作业记录
  3878. List<Task<ItemResponse<HomeworkRecord>>> homeworkRecord = new();
  3879. await foreach (var homerec in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<HomeworkRecord>(queryText: $"select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"HomeworkRecord-{item.oldId}") }))
  3880. {
  3881. bool isReplace = false;
  3882. if (homerec.content.Count > 0)
  3883. {
  3884. foreach (var hrCon in homerec.content)
  3885. {
  3886. if (hrCon.url.Contains($"/{item.oldId}/"))
  3887. {
  3888. string hrUrl = hrCon.url;
  3889. hrCon.url = hrCon.url.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3890. hrCon.blob = hrCon.blob.Replace($"/{item.oldId}/", $"/{item.newId}/");
  3891. //作业附件地址
  3892. var tempFileCopy = await BatchCopyFileService.SingleCopyFile(_azureStorage, defaultSc, hrUrl, item.oldId, item.newId);
  3893. if (tempFileCopy != 200)
  3894. noCopyFiles.Add(hrUrl);
  3895. isReplace = true;
  3896. }
  3897. }
  3898. }
  3899. if (isReplace == true)
  3900. {
  3901. homerec.code = homerec.code.Replace($"-{item.oldId}", $"-{item.newId}");
  3902. try { homeworkRecord.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<HomeworkRecord>(homerec, new PartitionKey(homerec.code))); } catch { }
  3903. }
  3904. }
  3905. if (homeworkRecord.Count < 256)
  3906. await Task.WhenAll(homeworkRecord);
  3907. else
  3908. {
  3909. int pages = (homeworkRecord.Count + 255) / 256;
  3910. for (int i = 0; i < pages; i++)
  3911. {
  3912. List<Task<ItemResponse<HomeworkRecord>>> tempHomeR = homeworkRecord.Skip((i) * 256).Take(256).ToList();
  3913. await Task.WhenAll(tempHomeR);
  3914. }
  3915. }
  3916. //视频点评
  3917. List<Task<ItemResponse<Appraise>>> appraises = new();
  3918. await foreach (var appra in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Appraise>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Appraise-{item.oldId}") }))
  3919. {
  3920. bool isRepCode = false;
  3921. bool isReplace = false;
  3922. if (appra.code.Contains(item.oldId))
  3923. {
  3924. appra.code = appra.code.Replace($"-{item.oldId}", $"-{item.newId}");
  3925. isRepCode = true;
  3926. }
  3927. if (appra.roles.Count > 0)
  3928. {
  3929. foreach (var appRoles in appra.roles)
  3930. {
  3931. if (appRoles.commentTmdid.Equals(item.oldId))
  3932. {
  3933. appRoles.commentTmdid = item.newId;
  3934. isReplace = true;
  3935. }
  3936. }
  3937. }
  3938. if ((isRepCode == true && isReplace == true) || (isRepCode == true && isReplace == false))
  3939. try { appraises.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Appraise>(appra, new PartitionKey(appra.code))); } catch { }
  3940. if (isReplace == true && isRepCode == false)
  3941. appraises.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Appraise>(appra, appra.id, new PartitionKey(appra.code)));
  3942. }
  3943. if (appraises.Count < 256)
  3944. await Task.WhenAll(appraises);
  3945. else
  3946. {
  3947. int pages = (appraises.Count + 255) / 256;
  3948. for (int i = 0; i < pages; i++)
  3949. {
  3950. List<Task<ItemResponse<Appraise>>> tempAppra = appraises.Skip((i) * 256).Take(256).ToList();
  3951. await Task.WhenAll(tempAppra);
  3952. }
  3953. }
  3954. //话题记录
  3955. List<Task<ItemResponse<Debate>>> debates = new();
  3956. await foreach (var debate in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Debate>(queryText: "select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Debate-{defaultSc}") }))
  3957. {
  3958. bool isReplace = false;
  3959. if (debate.tmdid.Equals(item.oldId))
  3960. {
  3961. debate.tmdid = item.newId;
  3962. isReplace = true;
  3963. }
  3964. if (debate.replies.Count > 0)
  3965. {
  3966. foreach (var deRep in debate.replies)
  3967. {
  3968. if (deRep.tmdid.Equals(item.oldId))
  3969. {
  3970. deRep.tmdid = item.newId;
  3971. isReplace = true;
  3972. }
  3973. }
  3974. }
  3975. if (isReplace == true)
  3976. await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<Debate>(debate, debate.id, new PartitionKey(debate.code));
  3977. }
  3978. }
  3979. return Ok(new { state = 200, noCopyFiles });
  3980. }
  3981. catch (Exception ex)
  3982. {
  3983. return Ok(new { state = 500 });
  3984. }
  3985. }
  3986. /// <summary>
  3987. /// 学校id将大写转换小写 并新增学校相关数据信息;修改教师学校的id
  3988. /// </summary>
  3989. /// <param name="jsonElement"></param>
  3990. /// <returns></returns>
  3991. [HttpPost("fix-uppertolower")]
  3992. public async Task<IActionResult> RepairUpperToLower(JsonElement jsonElement)
  3993. {
  3994. string large = "GXJCXX";
  3995. var cosmosClient = _azureCosmos.GetCosmosClient();
  3996. List<string> containe = new() { "School", "Student", "Teacher" };
  3997. List<dynamic> noFail = new();
  3998. foreach (var itemC in containe)
  3999. {
  4000. await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, itemC).GetItemQueryStreamIterator(queryText: $"select value(c) from c where (contains(c.code,'{large}') or contains(c.id,'{large}'))"))
  4001. {
  4002. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  4003. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  4004. {
  4005. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  4006. {
  4007. string oldId = obj.GetProperty("id").GetString();
  4008. string oldCode = obj.GetProperty("code").GetString();
  4009. var jsonElm = obj.ToJsonString().Replace(large, large.ToLower()).ToObject<JsonElement>();
  4010. jsonElm.TryGetProperty("code", out JsonElement code);
  4011. byte[] bytes = Encoding.UTF8.GetBytes(jsonElm.GetRawText());
  4012. var memoryStream = new MemoryStream(bytes);
  4013. var resp = await cosmosClient.GetContainer(Constant.TEAMModelOS, itemC).CreateItemStreamAsync(memoryStream, new PartitionKey($"{code}"));
  4014. if (resp.Status != 201)
  4015. noFail.Add(new { container = itemC, id = oldId, code = oldCode });
  4016. }
  4017. }
  4018. }
  4019. }
  4020. await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryStreamIterator(queryText: $"select value(c) from c join sc in c.schools where sc.schoolId='{large}'",requestOptions:new QueryRequestOptions() { PartitionKey = new PartitionKey("Base")}))
  4021. {
  4022. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  4023. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  4024. {
  4025. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  4026. {
  4027. var jsonElm = obj.ToJsonString().Replace(large, large.ToLower()).ToObject<JsonElement>();
  4028. jsonElm.TryGetProperty("id", out JsonElement id);
  4029. jsonElm.TryGetProperty("code", out JsonElement code);
  4030. byte[] bytes = Encoding.UTF8.GetBytes(jsonElm.GetRawText());
  4031. var memoryStream = new MemoryStream(bytes);
  4032. var resp = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemStreamAsync(memoryStream, $"{id}", new PartitionKey($"Base"));
  4033. if(resp.Status != 200)
  4034. noFail.Add(new { container = "Teacher", id = id, code = code });
  4035. }
  4036. }
  4037. }
  4038. return Ok(new { state = 200, noFail });
  4039. }
  4040. /// <summary>
  4041. /// 根據錯題庫(ErrorItems)生成各學校學生各科錯題數後記入Redis
  4042. /// </summary>
  4043. /// <returns></returns>
  4044. [ProducesDefaultResponseType]
  4045. [HttpPost("set-erroritems-count")]
  4046. public async Task<IActionResult> SetErrorItemsCount(JsonElement json)
  4047. {
  4048. var azureCosmosClient = _azureCosmos.GetCosmosClient();
  4049. await ErrorItemsService.cntStuErrorItemsAsync(_azureRedis, azureCosmosClient, _dingDing);
  4050. return Ok(new { state = 200 });
  4051. }
  4052. /// <summary>
  4053. /// 刪除學生智慧錯題中 activityId = null 的資料
  4054. /// </summary>
  4055. /// <returns></returns>
  4056. [ProducesDefaultResponseType]
  4057. [HttpPost("del-maLearn-no-activityId")]
  4058. public async Task<IActionResult> DelMaLearnNoActivityId()
  4059. {
  4060. List<object> result = new List<object>();
  4061. var cosmosClient = _azureCosmos.GetCosmosClient();
  4062. await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "Student").GetItemQueryStreamIterator(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() { }))
  4063. {
  4064. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  4065. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  4066. {
  4067. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  4068. {
  4069. string id = obj.GetProperty("id").GetString();
  4070. string code = obj.GetProperty("code").GetString();
  4071. await cosmosClient.GetContainer("TEAMModelOS", "Student").DeleteItemStreamAsync(id, new PartitionKey($"{code}"));
  4072. result.Add(new { id = id, code = code });
  4073. }
  4074. }
  4075. }
  4076. return Ok(new { state = 200, result = result });
  4077. }
  4078. public record TrainingId
  4079. {
  4080. public string oldId { get; set; }
  4081. public string newId { get; set; }
  4082. }
  4083. }
  4084. }