FixDataController.cs 335 KB

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