123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975 |
- using NPOI.HSSF.UserModel;
- using NPOI.SS.UserModel;
- using NPOI.SS.Util;
- using NPOI.XSSF.UserModel;
- using System.Data;
- using YBEE.EQM.Core;
- using YBEE.EQM.Core.Enums;
- namespace YBEE.EQM.Application;
- /// <summary>
- /// 高中模拟分析导出服务
- /// </summary>
- public class NceeExportService(IRepository<NceeLineTotal> rep, IExportExcelService exportExcelService) : INceeExportService, ITransient
- {
- private readonly IRepository<NceeLineTotal> _rep = rep;
- private readonly IExportExcelService _exportExcelService = exportExcelService;
- #region 导出报表
- /// <summary>
- /// 导出联盟区县模拟划线报表
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- /// <exception cref="Exception"></exception>
- public async Task<(string, byte[])> ExportAllianceDistrict(int nceePlanId)
- {
- var nceePlan = await _rep.Change<NceePlan>().DetachedEntities.ProjectToType<NceePlanOutput>().FirstOrDefaultAsync(t => t.Id == nceePlanId) ?? throw Oops.Oh(ErrorCode.E2001);
- var orgList = await GetSysOrgList(nceePlanId);
- var courses = await _rep.Change<Course>().Where(t => t.Id < 10 || t.Id == 100 || t.Id == 101).ProjectToType<NceeCourseDto>().OrderBy(t => t.Sequence).ToListAsync();
- var baseLineTable = await GetBaseLineTable(nceePlanId);
- var lineLevelTable = baseLineTable.DefaultView.ToTable(true, "ncee_line_level", "ncee_line_level_name");
- // 临时存放目录
- string fileRoot = Path.Combine(FileUtil.GetTempFileRoot(), $"{Guid.NewGuid()}");
- Directory.CreateDirectory(fileRoot);
- string filePath = Path.Combine(fileRoot, $"{nceePlan.Name}-统计结果");
- Directory.CreateDirectory(filePath);
- try
- {
- // 导出物理类分段统计
- string rangePath4 = Path.Combine(filePath, $"{nceePlan.Name}-物理类分段统计表.xlsx");
- var bytes4 = await ExportScoreRange(nceePlanId, 4, orgList, courses);
- await File.WriteAllBytesAsync(rangePath4, bytes4);
- // 导出历史类分段统计
- string rangePath8 = Path.Combine(filePath, $"{nceePlan.Name}-历史类分段统计表.xlsx");
- var bytes8 = await ExportScoreRange(nceePlanId, 8, orgList, courses);
- await File.WriteAllBytesAsync(rangePath8, bytes8);
- // 导出有效分统计表
- string lbPath = Path.Combine(filePath, $"{nceePlan.Name}-有效分及上线统计表.xlsx");
- var lbs = await ExportLine(nceePlanId, courses, lineLevelTable, "区县");
- await File.WriteAllBytesAsync(lbPath, lbs);
- if (nceePlan.Config.ExportConvertScoreEnabled)
- {
- // 导出机构转换成绩
- var orgConvertScores = await ExportOrgConvertScore(nceePlanId, orgList, isExportConvertRange: nceePlan.Config.ConvertEnabled, isExportOrder: nceePlan.Config.ExportOrderEnabled);
- foreach (var convertScore in orgConvertScores)
- {
- string orgPath = Path.Combine(filePath, convertScore.Key);
- Directory.CreateDirectory(orgPath);
- await File.WriteAllBytesAsync(Path.Combine(orgPath, $"{nceePlan.Name}-转换成绩-{convertScore.Key.Split("-")[1]}.xlsx"), convertScore.Value);
- File.Copy(rangePath4, Path.Combine(orgPath, Path.GetFileName(rangePath4)));
- File.Copy(rangePath8, Path.Combine(orgPath, Path.GetFileName(rangePath8)));
- File.Copy(lbPath, Path.Combine(orgPath, Path.GetFileName(lbPath)));
- }
- // 导出全部转换成绩
- //var convertScoreBytes = await ExportConvertScore(nceePlanId, "区县", isExportConvertRange: nceePlan.Config.ConvertEnabled, isExportOrder: nceePlan.Config.ExportOrderEnabled);
- var convertScoreBytes = await ExportConvertScore(new ExportConvertScoreDto
- {
- NceePlanId = nceePlanId,
- OrgTitle = "区县",
- IsExportConvertRange = nceePlan.Config.ConvertEnabled,
- IsExportOrder = nceePlan.Config.ExportOrderEnabled,
- });
- await File.WriteAllBytesAsync(Path.Combine(filePath, $"{nceePlan.Name}-转换成绩-总表.xlsx"), convertScoreBytes);
- }
- string outFileName = $"{nceePlan.Name}-统计结果.zip";
- string outFilePath = Path.Combine(fileRoot, outFileName);
- ICSharpCode.SharpZipLib.Zip.FastZip zip = new();
- zip.CreateZip(outFilePath, filePath, true, string.Empty);
- var retBytes = await File.ReadAllBytesAsync(outFilePath);
- return (outFileName, retBytes);
- }
- catch (Exception ex)
- {
- throw new Exception("导出错误", ex);
- }
- finally
- {
- Directory.Delete(fileRoot, true);
- }
- }
- /// <summary>
- /// 导出已选科的模拟划线报表
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- /// <exception cref="Exception"></exception>
- public async Task<(string, byte[])> ExportDirectionSeleted(NceeExportInput input)
- {
- var nceePlan = await _rep.Change<NceePlan>().DetachedEntities.ProjectToType<NceePlanOutput>().FirstOrDefaultAsync(t => t.Id == input.NceePlanId) ?? throw Oops.Oh(ErrorCode.E2001);
- var orgList = await GetSysOrgList(input.NceePlanId);
- var courses = await _rep.Change<Course>().Where(t => t.Id < 10 || t.Id == 100 || t.Id == 101).ProjectToType<NceeCourseDto>().OrderBy(t => t.Sequence).ToListAsync();
- var baseLineTable = await GetBaseLineTable(input.NceePlanId);
- var lineLevelTable = baseLineTable.DefaultView.ToTable(true, "ncee_line_level", "ncee_line_level_name");
- // 临时存放目录
- string fileRoot = Path.Combine(FileUtil.GetTempFileRoot(), $"{Guid.NewGuid()}");
- Directory.CreateDirectory(fileRoot);
- string filePath = Path.Combine(fileRoot, $"{nceePlan.Name}-统计结果");
- Directory.CreateDirectory(filePath);
- try
- {
- // 导出整体分段统计
- if (input.IsExportScoreRange)
- {
- // 导出物理类分段统计
- string rangePath4 = Path.Combine(filePath, $"{nceePlan.Name}-物理类分段统计表.xlsx");
- var bytes4 = await ExportScoreRange(input.NceePlanId, (short)NceeDirectionCourse.PHYSICS, orgList, courses);
- await File.WriteAllBytesAsync(rangePath4, bytes4);
- // 导出历史类分段统计
- string rangePath8 = Path.Combine(filePath, $"{nceePlan.Name}-历史类分段统计表.xlsx");
- var bytes8 = await ExportScoreRange(input.NceePlanId, (short)NceeDirectionCourse.HISTORY, orgList, courses);
- await File.WriteAllBytesAsync(rangePath8, bytes8);
- }
- // 导出有效分统计表
- if (input.IsExportLine)
- {
- string lbPath = Path.Combine(filePath, $"{nceePlan.Name}-有效分及上线统计表.xlsx");
- var lbs = await ExportLine(input.NceePlanId, courses, lineLevelTable, "学校", false);
- await File.WriteAllBytesAsync(lbPath, lbs);
- }
- // 导出各班级上线情况
- if (input.IsExportClassLine)
- {
- string classPath = Path.Combine(filePath, $"{nceePlan.Name}-各班上线情况统计表.xlsx");
- var classBs = await ExportClassLine(input.NceePlanId, baseLineTable);
- await File.WriteAllBytesAsync(classPath, classBs);
- }
- // 导出各机构上线统计数据
- if (input.IsExportOrgLine)
- {
- var orgClassLines = await ExportOrgClassLine(input.NceePlanId, orgList, baseLineTable, courses);
- foreach (var orgClassLine in orgClassLines)
- {
- string orgPath = Path.Combine(filePath, orgClassLine.Key);
- if (!Directory.Exists(orgPath)) { Directory.CreateDirectory(orgPath); }
- await File.WriteAllBytesAsync(Path.Combine(orgPath, $"{nceePlan.Name}-{orgClassLine.Key}-上线统计.xlsx"), orgClassLine.Value);
- }
- }
- // 导出各机构分段统计
- if (input.IsExportOrgScoreRange)
- {
- // 导出各机构分段数据(物理)
- var orgRanges4 = await ExportOrgScoreRange(input.NceePlanId, (short)NceeDirectionCourse.PHYSICS, orgList, courses);
- foreach (var range in orgRanges4)
- {
- string orgPath = Path.Combine(filePath, range.Key);
- if (!Directory.Exists(orgPath)) { Directory.CreateDirectory(orgPath); }
- await File.WriteAllBytesAsync(Path.Combine(orgPath, $"{nceePlan.Name}-{range.Key}-分段统计-物理类.xlsx"), range.Value);
- }
- // 导出各机构分段数据(历史)
- var orgRanges8 = await ExportOrgScoreRange(input.NceePlanId, (short)NceeDirectionCourse.HISTORY, orgList, courses);
- foreach (var range in orgRanges8)
- {
- string orgPath = Path.Combine(filePath, range.Key);
- if (!Directory.Exists(orgPath)) { Directory.CreateDirectory(orgPath); }
- await File.WriteAllBytesAsync(Path.Combine(orgPath, $"{nceePlan.Name}-{range.Key}-分段统计-历史类.xlsx"), range.Value);
- }
- }
- if (nceePlan.Config.ExportConvertScoreEnabled)
- {
- // 导出各机构转换成绩
- if (input.IsExportOrgConvertScore)
- {
- var orgConvertScores = await ExportOrgConvertScore(input.NceePlanId, orgList, isExportConvertRange: nceePlan.Config.ConvertEnabled);
- foreach (var convertScore in orgConvertScores)
- {
- string orgPath = Path.Combine(filePath, convertScore.Key);
- Directory.CreateDirectory(orgPath);
- await File.WriteAllBytesAsync(Path.Combine(orgPath, $"{nceePlan.Name}-转换成绩-{convertScore.Key}.xlsx"), convertScore.Value);
- }
- }
- // 导出全部转换成绩
- if (input.IsExportConvertScore)
- {
- var convertScoreBytes = await ExportConvertScore(new ExportConvertScoreDto
- {
- NceePlanId = input.NceePlanId,
- IsExportConvertRange = nceePlan.Config.ConvertEnabled,
- IsExportStudentName = true,
- IsExportComb = true,
- IsExportDirectionCourse = true,
- IsExportOrder = true,
- IsExportClassNumber = true,
- });
- await File.WriteAllBytesAsync(Path.Combine(filePath, $"{nceePlan.Name}-转换成绩-总表.xlsx"), convertScoreBytes);
- }
- }
- string outFileName = $"{nceePlan.Name}-统计结果.zip";
- string outFilePath = Path.Combine(fileRoot, outFileName);
- ICSharpCode.SharpZipLib.Zip.FastZip zip = new();
- zip.CreateZip(outFilePath, filePath, true, string.Empty);
- var retBytes = await File.ReadAllBytesAsync(outFilePath);
- return (outFileName, retBytes);
- }
- catch (Exception ex)
- {
- throw new Exception("导出错误", ex);
- }
- finally
- {
- Directory.Delete(fileRoot, true);
- }
- }
- /// <summary>
- /// 导出未选科的模拟划线报表
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- /// <exception cref="Exception"></exception>
- public async Task<(string, byte[])> ExportDirectionUnseleted(int nceePlanId)
- {
- var nceePlan = await _rep.Change<NceePlan>().DetachedEntities.ProjectToType<NceePlanOutput>().FirstOrDefaultAsync(t => t.Id == nceePlanId) ?? throw Oops.Oh(ErrorCode.E2001);
- var orgList = await GetSysOrgList(nceePlanId);
- var courses = await _rep.Change<Course>().Where(t => t.Id < 10 || t.Id == 100).ProjectToType<NceeCourseDto>().OrderBy(t => t.Sequence).ToListAsync();
- var baseLineTable = await GetBaseLineTable(nceePlanId);
- var lineLevelTable = baseLineTable.DefaultView.ToTable(true, "ncee_line_level", "ncee_line_level_name");
- // 临时存放目录
- string fileRoot = Path.Combine(FileUtil.GetTempFileRoot(), $"{Guid.NewGuid()}");
- Directory.CreateDirectory(fileRoot);
- string filePath = Path.Combine(fileRoot, $"{nceePlan.Name}-统计结果");
- Directory.CreateDirectory(filePath);
- try
- {
- // 导出分段统计
- string rangePath4 = Path.Combine(filePath, $"{nceePlan.Name}-分段统计表.xlsx");
- var bytes4 = await ExportScoreRangeUnselected(nceePlanId, orgList, courses);
- await File.WriteAllBytesAsync(rangePath4, bytes4);
- // 导出有效分统计表
- string lbPath = Path.Combine(filePath, $"{nceePlan.Name}-有效分及上线统计表.xlsx");
- var lbs = await ExportLineUnselected(nceePlanId, courses, lineLevelTable);
- await File.WriteAllBytesAsync(lbPath, lbs);
- // 导出各班级上线情况
- string classPath = Path.Combine(filePath, $"{nceePlan.Name}-各班上线情况统计表.xlsx");
- var classBs = await ExportClassLineUnselected(nceePlanId, baseLineTable);
- await File.WriteAllBytesAsync(classPath, classBs);
- // 导出各机构上线统计数据
- var orgClassLines = await ExportOrgClassLineUnselected(nceePlanId, orgList, baseLineTable, courses);
- foreach (var orgClassLine in orgClassLines)
- {
- string orgPath = Path.Combine(filePath, orgClassLine.Key);
- if (!Directory.Exists(orgPath)) { Directory.CreateDirectory(orgPath); }
- await File.WriteAllBytesAsync(Path.Combine(orgPath, $"{nceePlan.Name}-{orgClassLine.Key}-上线统计.xlsx"), orgClassLine.Value);
- }
- // 导出各机构分段数据
- var orgRanges4 = await ExportOrgScoreRangeUnselected(nceePlanId, orgList, courses);
- foreach (var range in orgRanges4)
- {
- string orgPath = Path.Combine(filePath, range.Key);
- if (!Directory.Exists(orgPath)) { Directory.CreateDirectory(orgPath); }
- await File.WriteAllBytesAsync(Path.Combine(orgPath, $"{nceePlan.Name}-{range.Key}-分段统计.xlsx"), range.Value);
- }
- string outFileName = $"{nceePlan.Name}-统计结果.zip";
- string outFilePath = Path.Combine(fileRoot, outFileName);
- ICSharpCode.SharpZipLib.Zip.FastZip zip = new();
- zip.CreateZip(outFilePath, filePath, true, string.Empty);
- var retBytes = await File.ReadAllBytesAsync(outFilePath);
- return (outFileName, retBytes);
- }
- catch (Exception ex)
- {
- throw new Exception("导出错误", ex);
- }
- finally
- {
- Directory.Delete(fileRoot, true);
- }
- }
- #endregion
- #region 导出方法
- /// <summary>
- /// 导出分数段统计表
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="directionCourseId"></param>
- /// <param name="orgList"></param>
- /// <param name="courses"></param>
- /// <returns></returns>
- private async Task<byte[]> ExportScoreRange(int nceePlanId, short directionCourseId, List<SysOrgOutput> orgList, List<NceeCourseDto> courses)
- {
- var tcourses = courses.Where(t => t.Id < 10).ToList();
- tcourses.Insert(0, courses.FirstOrDefault(t => t.Id == 100));
- XSSFWorkbook wb = new();
- foreach (var course in tcourses)
- {
- if (course.IsSkip(directionCourseId)) { continue; }
- DataTable table;
- if (course.Id == 100)
- {
- table = await GetTotalScoreRangeTable(nceePlanId, directionCourseId, orgList);
- }
- else
- {
- table = await GetCourseScoreRangeTable(nceePlanId, directionCourseId, course.Id, orgList);
- }
- string sheetName = course.Name;
- if (course.Id == 100 || course.Id > 4 && course.Id != 8)
- {
- sheetName = $"{sheetName}X";
- }
- ISheet sheet = wb.CreateSheet(sheetName);
- sheet.DisplayGridlines = false;
- var cellStyle = _exportExcelService.GetCellStyle(wb);
- // 行索引号
- int rowNum = 0;
- #region 列头
- IRow headerRow = sheet.CreateRow(rowNum++);
- int ci = 0;
- _exportExcelService.AddCell("分数段", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 9);
- foreach (var org in orgList)
- {
- _exportExcelService.AddCell(org.ShortName2, headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 7);
- }
- _exportExcelService.AddCell("该段人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 9);
- _exportExcelService.AddCell("人数累计", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 9);
- sheet.CreateFreezePane(0, rowNum);
- #endregion
- #region 数据
- foreach (DataRow dr in table.Rows)
- {
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- _exportExcelService.AddCell(dr["exam_score_range_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var org in orgList)
- {
- _exportExcelService.AddCell(dr[$"total_count_{org.Id}"], row, rci++, cellStyle.CenterCellStyle);
- }
- _exportExcelService.AddCell(dr["total_count_range_current"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["total_count_range_sum"], row, rci++, cellStyle.CenterCellStyle);
- }
- #endregion
- #region 图表
- int oi = 0;
- const int CHART_ROW_COUNT = 13;
- foreach (var org in orgList)
- {
- XSSFDrawing drawing = (XSSFDrawing)sheet.CreateDrawingPatriarch();
- int startRow = oi * CHART_ROW_COUNT + oi + 1;
- int endRow = startRow + CHART_ROW_COUNT;
- XSSFClientAnchor anchor = (XSSFClientAnchor)drawing.CreateAnchor(0, 0, 0, 0, ci + 1, startRow, ci + 10, endRow);
- //CreateBarChart(sheet, drawing, anchor, 1, table.Rows.Count + 1, oi + 1, org.ShortName2, org.ShortName2, "人数", "分数段");
- _exportExcelService.CreateBarChart(sheet, drawing, anchor, 1, table.Rows.Count, oi + 1, org.ShortName2, org.ShortName2, "人数", "分数段");
- oi++;
- }
- #endregion
- }
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- return ms.ToArray();
- }
- /// <summary>
- /// 导出分数段统计表(未选科)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="orgList"></param>
- /// <param name="courses"></param>
- /// <returns></returns>
- private async Task<byte[]> ExportScoreRangeUnselected(int nceePlanId, List<SysOrgOutput> orgList, List<NceeCourseDto> courses)
- {
- var tcourses = courses.Where(t => t.Id < 10).ToList();
- tcourses.Insert(0, courses.FirstOrDefault(t => t.Id == 100));
- XSSFWorkbook wb = new();
- foreach (var course in tcourses)
- {
- DataTable table;
- if (course.Id == 100)
- {
- table = await GetTotalScoreRangeTableUnselected(nceePlanId, orgList);
- }
- else
- {
- table = await GetCourseScoreRangeTableUnselected(nceePlanId, course.Id, orgList);
- }
- string sheetName = course.Name;
- ISheet sheet = wb.CreateSheet(sheetName);
- sheet.DisplayGridlines = false;
- var cellStyle = _exportExcelService.GetCellStyle(wb);
- // 行索引号
- int rowNum = 0;
- #region 列头
- IRow headerRow = sheet.CreateRow(rowNum++);
- int ci = 0;
- _exportExcelService.AddCell("分数段", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 9);
- foreach (var org in orgList)
- {
- _exportExcelService.AddCell(org.ShortName2, headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 7);
- }
- _exportExcelService.AddCell("该段人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 9);
- _exportExcelService.AddCell("人数累计", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 9);
- sheet.CreateFreezePane(0, rowNum);
- #endregion
- #region 数据
- foreach (DataRow dr in table.Rows)
- {
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- _exportExcelService.AddCell(dr["exam_score_range_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var org in orgList)
- {
- _exportExcelService.AddCell(dr[$"total_count_{org.Id}"], row, rci++, cellStyle.CenterCellStyle);
- }
- _exportExcelService.AddCell(dr["total_count_range_current"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["total_count_range_sum"], row, rci++, cellStyle.CenterCellStyle);
- }
- #endregion
- #region 图表
- int oi = 0;
- const int CHART_ROW_COUNT = 13;
- foreach (var org in orgList)
- {
- XSSFDrawing drawing = (XSSFDrawing)sheet.CreateDrawingPatriarch();
- int startRow = oi * CHART_ROW_COUNT + oi + 1;
- int endRow = startRow + CHART_ROW_COUNT;
- XSSFClientAnchor anchor = (XSSFClientAnchor)drawing.CreateAnchor(0, 0, 0, 0, ci + 1, startRow, ci + 10, endRow);
- //CreateBarChart(sheet, drawing, anchor, 1, table.Rows.Count + 1, oi + 1, org.ShortName2, org.ShortName2, "人数", "分数段");
- _exportExcelService.CreateBarChart(sheet, drawing, anchor, 1, table.Rows.Count, oi + 1, org.ShortName2, org.ShortName2, "人数", "分数段");
- oi++;
- }
- #endregion
- }
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- return ms.ToArray();
- }
- /// <summary>
- /// 导出机构分数段统计表
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="directionCourseId"></param>
- /// <param name="orgList"></param>
- /// <param name="courses"></param>
- /// <returns></returns>
- private async Task<Dictionary<string, byte[]>> ExportOrgScoreRange(int nceePlanId, short directionCourseId, List<SysOrgOutput> orgList, List<NceeCourseDto> courses)
- {
- Dictionary<string, byte[]> ret = [];
- var tcourses = courses.Where(t => t.Id < 10).ToList();
- tcourses.Insert(0, courses.FirstOrDefault(t => t.Id == 100));
- foreach (var org in orgList)
- {
- XSSFWorkbook wb = new();
- foreach (var course in tcourses)
- {
- if (course.IsSkip(directionCourseId)) { continue; }
- DataTable table;
- if (course.Id == 100)
- {
- table = await GetTotalScoreRangeTable(nceePlanId, directionCourseId, orgList);
- }
- else
- {
- table = await GetCourseScoreRangeTable(nceePlanId, directionCourseId, course.Id, orgList);
- }
- string sheetName = course.Name;
- if (course.Id == 100 || course.Id > 4 && course.Id != 8)
- {
- sheetName = $"{sheetName}X";
- }
- ISheet sheet = wb.CreateSheet(sheetName);
- sheet.DisplayGridlines = false;
- var cellStyle = _exportExcelService.GetCellStyle(wb);
- // 行索引号
- int rowNum = 0;
- #region 列头
- IRow headerRow = sheet.CreateRow(rowNum++);
- int ci = 0;
- _exportExcelService.AddCell("分数段", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 9);
- _exportExcelService.AddCell("人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 7);
- _exportExcelService.AddCell("累计", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 7);
- sheet.CreateFreezePane(0, rowNum);
- #endregion
- #region 数据
- decimal scount = 0;
- foreach (DataRow dr in table.Rows)
- {
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- _exportExcelService.AddCell(dr["exam_score_range_name"], row, rci++, cellStyle.CenterCellStyle);
- decimal c = (decimal)dr[$"total_count_{org.Id}"];
- scount += c;
- _exportExcelService.AddCell(c, row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(scount, row, rci++, cellStyle.CenterCellStyle);
- }
- #endregion
- #region 图表
- const int CHART_ROW_COUNT = 13;
- XSSFDrawing drawing = (XSSFDrawing)sheet.CreateDrawingPatriarch();
- int startRow = 1;
- int endRow = startRow + CHART_ROW_COUNT;
- XSSFClientAnchor anchor = (XSSFClientAnchor)drawing.CreateAnchor(0, 0, 0, 0, ci + 1, startRow, ci + 10, endRow);
- //CreateBarChart(sheet, drawing, anchor, 1, table.Rows.Count + 1, 1, org.ShortName, org.ShortName, "人数", "分数段");
- _exportExcelService.CreateBarChart(sheet, drawing, anchor, 1, table.Rows.Count, 1, org.ShortName, org.ShortName, "人数", "分数段");
- #endregion
- }
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- ret.Add($"{org.Code}-{org.ShortName}", ms.ToArray());
- }
- return ret;
- }
- /// <summary>
- /// 导出机构分数段统计表(未选科)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="orgList"></param>
- /// <param name="courses"></param>
- /// <returns></returns>
- private async Task<Dictionary<string, byte[]>> ExportOrgScoreRangeUnselected(int nceePlanId, List<SysOrgOutput> orgList, List<NceeCourseDto> courses)
- {
- Dictionary<string, byte[]> ret = [];
- var tcourses = courses.Where(t => t.Id < 10).ToList();
- tcourses.Insert(0, courses.FirstOrDefault(t => t.Id == 100));
- foreach (var org in orgList)
- {
- XSSFWorkbook wb = new();
- foreach (var course in tcourses)
- {
- DataTable table;
- if (course.Id == 100)
- {
- table = await GetTotalScoreRangeTableUnselected(nceePlanId, orgList);
- }
- else
- {
- table = await GetCourseScoreRangeTableUnselected(nceePlanId, course.Id, orgList);
- }
- string sheetName = course.Name;
- ISheet sheet = wb.CreateSheet(sheetName);
- sheet.DisplayGridlines = false;
- var cellStyle = _exportExcelService.GetCellStyle(wb);
- // 行索引号
- int rowNum = 0;
- #region 列头
- IRow headerRow = sheet.CreateRow(rowNum++);
- int ci = 0;
- _exportExcelService.AddCell("分数段", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 9);
- _exportExcelService.AddCell("人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 7);
- _exportExcelService.AddCell("累计", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 7);
- sheet.CreateFreezePane(0, rowNum);
- #endregion
- #region 数据
- decimal scount = 0;
- foreach (DataRow dr in table.Rows)
- {
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- _exportExcelService.AddCell(dr["exam_score_range_name"], row, rci++, cellStyle.CenterCellStyle);
- decimal c = (decimal)dr[$"total_count_{org.Id}"];
- scount += c;
- _exportExcelService.AddCell(c, row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(scount, row, rci++, cellStyle.CenterCellStyle);
- }
- #endregion
- #region 图表
- const int CHART_ROW_COUNT = 13;
- XSSFDrawing drawing = (XSSFDrawing)sheet.CreateDrawingPatriarch();
- int startRow = 1;
- int endRow = startRow + CHART_ROW_COUNT;
- XSSFClientAnchor anchor = (XSSFClientAnchor)drawing.CreateAnchor(0, 0, 0, 0, ci + 1, startRow, ci + 10, endRow);
- //CreateBarChart(sheet, drawing, anchor, 1, table.Rows.Count + 1, 1, org.ShortName, org.ShortName, "人数", "分数段");
- _exportExcelService.CreateBarChart(sheet, drawing, anchor, 1, table.Rows.Count, 1, org.ShortName, org.ShortName, "人数", "分数段");
- #endregion
- }
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- ret.Add($"{org.Code}-{org.ShortName}", ms.ToArray());
- }
- return ret;
- }
- /// <summary>
- /// 导出有效分
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="wb"></param>
- /// <param name="cellStyle"></param>
- /// <param name="lineScoreTable"></param>
- /// <param name="isExportRate"></param>
- /// <returns></returns>
- private async Task ExportLineScore(int nceePlanId, IWorkbook wb, ExportExcelCellStyle cellStyle, DataTable lineScoreTable = null, bool isExportRate = false)
- {
- var cellStylePercent = wb.CreateCellStyle();
- cellStylePercent.CloneStyleFrom(cellStyle.CenterCellStyle);
- cellStylePercent.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
- lineScoreTable ??= await GetLineScoreTable(nceePlanId);
- int mcount = isExportRate ? 8 : 7;
- ISheet sheet = wb.CreateSheet("有效分");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- #region 表头
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 8;
- _exportExcelService.AddCell($"{directionCourse.Name}类有效分", headerRow1, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- for (; ci < mcount; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- headerRow2.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("类型", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("语文", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("数学", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("英语", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell(directionCourse.Name, headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("综合X", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("总分X", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- if (isExportRate)
- {
- _exportExcelService.AddCell("划线率", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- #endregion
- #region 数据
- foreach (DataRow dr in lineScoreTable.Select($"direction_course_id = {directionCourse.Id}"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["ncee_line_level_name"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["line_score_x_1"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["line_score_x_2"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["line_score_x_3"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr[$"line_score_x_{directionCourse.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["line_score_x_101"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["line_score_x_100"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- if (isExportRate)
- {
- _exportExcelService.AddCell(dr["line_rate"], row, rci++, cellStylePercent, zeroToBlank: true);
- }
- }
- #endregion
- rowNum += 2;
- }
- }
- /// <summary>
- /// 导出有效分(未选科)
- /// </summary>
- /// <param name="wb"></param>
- /// <param name="cellStyle"></param>
- /// <param name="lineScoreTable"></param>
- /// <param name="courses"></param>
- /// <returns></returns>
- private void ExportLineScore(IWorkbook wb, ExportExcelCellStyle cellStyle, DataTable lineScoreTable, List<NceeCourseDto> courses)
- {
- var cellStylePercent = wb.CreateCellStyle();
- cellStylePercent.CloneStyleFrom(cellStyle.CenterCellStyle);
- cellStylePercent.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
- ISheet sheet = wb.CreateSheet("有效分");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- #region 表头
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 8;
- _exportExcelService.AddCell($"有效分", headerRow1, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- for (; ci < courses.Count + 1; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- headerRow2.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("类型", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- foreach (var course in courses)
- {
- _exportExcelService.AddCell(course.Name, headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- #endregion
- #region 数据
- foreach (DataRow dr in lineScoreTable.Select($"direction_course_id = 99"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["ncee_line_level_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var course in courses)
- {
- _exportExcelService.AddCell(dr[$"line_score_x_{course.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- }
- }
- #endregion
- }
- /// <summary>
- /// 导出转换区间
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="wb"></param>
- /// <param name="cellStyle"></param>
- /// <returns></returns>
- private async Task ExportConvertRange(int nceePlanId, IWorkbook wb, ExportExcelCellStyle cellStyle)
- {
- var convertRangeTable = await GetConvertRangeTable(nceePlanId);
- var convertGrades = await _rep.Change<NceeConvertGrade>().Entities.ToListAsync();
- ISheet convertRangeSheet = wb.CreateSheet("原始分转换区间");
- convertRangeSheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- // 标题1
- IRow titleRow1 = convertRangeSheet.CreateRow(rowNum++);
- titleRow1.HeightInPoints = 30;
- int ci = 0;
- int colWidth = 13;
- _exportExcelService.AddCell("等级比例赋分区间", titleRow1, ci++, cellStyle.TitleStyle, convertRangeSheet, colWidth);
- foreach (var rg in convertGrades)
- {
- _exportExcelService.AddCell("", titleRow1, ci++, cellStyle.TitleStyle, convertRangeSheet, colWidth);
- }
- convertRangeSheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, convertGrades.Count));
- // 表头1
- IRow headerRow1 = convertRangeSheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("等级", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, convertRangeSheet, colWidth);
- foreach (var rg in convertGrades)
- {
- _exportExcelService.AddCell(rg.Name, headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, convertRangeSheet, colWidth);
- }
- // 表头:比例
- IRow headerRow2 = convertRangeSheet.CreateRow(rowNum++);
- headerRow2.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("比例", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, convertRangeSheet, colWidth);
- foreach (var rg in convertGrades)
- {
- _exportExcelService.AddCell($"约{Math.Round(rg.Rate * 100, 0)}%", headerRow2, ci++, cellStyle.CenterCellStyle, convertRangeSheet, colWidth);
- }
- // 表头:赋分区间
- IRow headerRow3 = convertRangeSheet.CreateRow(rowNum++);
- headerRow3.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("赋分区间", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, convertRangeSheet, colWidth);
- foreach (var rg in convertGrades)
- {
- _exportExcelService.AddCell($"{Math.Round(rg.MinScore)}~{Math.Round(rg.MaxScore)}", headerRow3, ci++, cellStyle.CenterCellStyle, convertRangeSheet, colWidth);
- }
- rowNum += 2;
- // 标题2
- IRow titleRow2 = convertRangeSheet.CreateRow(rowNum++);
- titleRow2.HeightInPoints = 30;
- ci = 0;
- _exportExcelService.AddCell("原始分转换区间", titleRow2, ci++, cellStyle.TitleStyle, convertRangeSheet, colWidth);
- foreach (var rg in convertGrades)
- {
- _exportExcelService.AddCell("", titleRow2, ci++, cellStyle.TitleStyle, convertRangeSheet, colWidth);
- }
- convertRangeSheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, convertGrades.Count));
- // 表头4
- IRow headerRow4 = convertRangeSheet.CreateRow(rowNum++);
- headerRow4.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学科", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, convertRangeSheet, colWidth);
- foreach (var rg in convertGrades)
- {
- _exportExcelService.AddCell(rg.Name, headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, convertRangeSheet, colWidth);
- }
- // 数据
- foreach (DataRow dr in convertRangeTable.Rows)
- {
- IRow row = convertRangeSheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["course_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var rg in convertGrades)
- {
- var a1 = ((decimal)dr[$"min_score_{rg.Name.ToLower()}"]).ToString("0.#");
- var a2 = ((decimal)dr[$"max_score_{rg.Name.ToLower()}"]).ToString("0.#");
- _exportExcelService.AddCell($"[{a1}, {a2}]", row, rci++, cellStyle.LeftCellStyle);
- }
- }
- }
- /// <summary>
- /// 导出上线合并
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="wb"></param>
- /// <param name="cellStyle"></param>
- /// <param name="orgTitle"></param>
- /// <returns></returns>
- private async Task ExportLineTotal(int nceePlanId, IWorkbook wb, ExportExcelCellStyle cellStyle, string orgTitle)
- {
- var table = await GetLineCountTable(nceePlanId);
- ISheet sheet = wb.CreateSheet("上线合并");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- #region 表头
- IRow titleRow = sheet.CreateRow(rowNum++);
- titleRow.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 10;
- _exportExcelService.AddCell("上线合并汇总", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- for (; ci < 16; ci++)
- {
- _exportExcelService.AddCell("", titleRow, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow0 = sheet.CreateRow(rowNum++);
- headerRow0.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell(orgTitle, headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("两类合并", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("物理类", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("历史类", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow0, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("参考人数", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("特控", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("本科", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("参考人数", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("特控", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("本科", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("参考人数", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("特控", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("本科", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow1, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 3, rowNum - 1, 0, 0));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 3, rowNum - 3, 1, 5));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 3, rowNum - 3, 6, 10));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 3, rowNum - 3, 11, 15));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 1, 1));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 2, 2, 3));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 2, 4, 5));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 6, 6));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 2, 7, 8));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 2, 9, 10));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 11, 11));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 2, 12, 13));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 2, 14, 15));
- #endregion
- #region 数据
- foreach (DataRow dr in table.Rows)
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_name"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["total_count"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["line_count_1"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["line_rate_1"], row, rci++, cellStyle.PercentCellStyleP2, zeroToBlank: true);
- _exportExcelService.AddCell(dr["line_count_2"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["line_rate_2"], row, rci++, cellStyle.PercentCellStyleP2, zeroToBlank: true);
- _exportExcelService.AddCell(dr["d_4_total_count"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["d_4_line_count_1"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["d_4_line_rate_1"], row, rci++, cellStyle.PercentCellStyleP2, zeroToBlank: true);
- _exportExcelService.AddCell(dr["d_4_line_count_2"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["d_4_line_rate_2"], row, rci++, cellStyle.PercentCellStyleP2, zeroToBlank: true);
- _exportExcelService.AddCell(dr["d_8_total_count"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["d_8_line_count_1"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["d_8_line_rate_1"], row, rci++, cellStyle.PercentCellStyleP2, zeroToBlank: true);
- _exportExcelService.AddCell(dr["d_8_line_count_2"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["d_8_line_rate_2"], row, rci++, cellStyle.PercentCellStyleP2, zeroToBlank: true);
- }
- #endregion
- }
- /// <summary>
- /// 导出上线统计
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="courses"></param>
- /// <param name="lineLevelTable"></param>
- /// <param name="orgTitle">区县或学校标题名称</param>
- /// <param name="isExportConvertRange">是否导出转换区间</param>
- /// <returns></returns>
- private async Task<byte[]> ExportLine(int nceePlanId, List<NceeCourseDto> courses, DataTable lineLevelTable, string orgTitle, bool isExportConvertRange = true)
- {
- XSSFWorkbook wb = new();
- var cellStyle = _exportExcelService.GetCellStyle(wb, titleFontSize: 14);
- #region 上线合并
- await ExportLineTotal(nceePlanId, wb, cellStyle, orgTitle);
- #endregion
- #region 平均分
- {
- var tcourses = courses.Where(t => t.Id != 101).ToList();
- ISheet sheet = wb.CreateSheet("平均分");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- var table = await GetAvgScoreTable(nceePlanId, directionCourse.Id);
- #region 表头
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 8;
- _exportExcelService.AddCell($"{directionCourse.Name}类平均分", headerRow1, ci++, cellStyle.TitleStyle, sheet, 10);
- for (; ci < 19; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- headerRow2.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学科", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var course in tcourses)
- {
- if (course.IsSkip(directionCourse.Id)) { continue; }
- string cn = course.Name;
- if (course.Id == 5 || course.Id == 6 || course.Id == 7 || course.Id == 9 || course.Id == 100)
- {
- cn = $"{cn}X";
- }
- _exportExcelService.AddCell(cn, headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- if (ci % 2 == 1)
- {
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- }
- IRow headerRow3 = sheet.CreateRow(rowNum++);
- headerRow3.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell(orgTitle, headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var course in tcourses)
- {
- if (course.IsSkip(directionCourse.Id)) { continue; }
- _exportExcelService.AddCell("人数", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("平均", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- #endregion
- #region 数据
- foreach (DataRow dr in table.Rows)
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_short_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var course in tcourses)
- {
- if (course.IsSkip(directionCourse.Id)) { continue; }
- _exportExcelService.AddCell(dr[$"total_count_{course.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr[$"avg_score_x_{course.Id}"], row, rci++, cellStyle.NumberCellStyleP2, zeroToBlank: true);
- }
- }
- #endregion
- rowNum += 2;
- }
- }
- #endregion
- #region 有效分
- var lineScoreTable = await GetLineScoreTable(nceePlanId);
- await ExportLineScore(nceePlanId, wb, cellStyle, lineScoreTable);
- #endregion
- #region 单上线
- {
- var table = await GetLineTotalTable(nceePlanId);
- ISheet sheet = wb.CreateSheet("有效分总分单上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (DataRow lineLevel in lineLevelTable.Rows)
- {
- #region 表头
- // 分类标题
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int countWidth = 6;
- int scoreWidth = 8;
- int orgWidth = 10;
- _exportExcelService.AddCell($"{lineLevel["ncee_line_level_name"]}有效分总分单上线", headerRow1, ci++, cellStyle.TitleStyle, sheet, orgWidth);
- for (; ci < 30; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- // 方向标题
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- headerRow2.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell(orgTitle, headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- _exportExcelService.AddCell($"{directionCourse.Name}类", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- for (int i = 0; i < 12; i++)
- {
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 13, ci - 1));
- }
- _exportExcelService.AddCell("合计", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- // 学科上有效分标题
- IRow headerRow3 = sheet.CreateRow(rowNum++);
- headerRow3.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- _exportExcelService.AddCell("学科上有效分人数及比例", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- for (int i = 0; i < 9; i++)
- {
- _exportExcelService.AddCell("", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 10, ci - 1));
- _exportExcelService.AddCell("总分上\n线情况", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("上线率", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- _exportExcelService.AddCell("", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- // 科目标题
- IRow headerRow4 = sheet.CreateRow(rowNum++);
- headerRow4.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- foreach (var cu in courses.Where(t => t.Id < 4 || t.Id == directionCourse.Id || t.Id == 101))
- {
- _exportExcelService.AddCell(cu.Name, headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, ci - 2, ci - 1));
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 3, rowNum - 1, 0, 0));
- // 有效分标题
- IRow headerRow5 = sheet.CreateRow(rowNum++);
- headerRow5.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("有效分", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- var lineScore = lineScoreTable.Select($"direction_course_id = {directionCourse.Id} AND ncee_line_level = {lineLevel["ncee_line_level"]}").First();
- foreach (var cu in courses.Where(t => t.Id < 4 || t.Id == directionCourse.Id || t.Id == 100 || t.Id == 101))
- {
- _exportExcelService.AddCell(lineScore[$"line_score_x_{cu.Id}"], headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- _exportExcelService.AddCell("", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- _exportExcelService.AddCell("", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 4, rowNum - 1, ci - 3, ci - 1));
- // 人数比例标题
- IRow headerRow6 = sheet.CreateRow(rowNum++);
- headerRow6.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- foreach (var cu in courses.Where(t => t.Id < 4 || t.Id == directionCourse.Id || t.Id == 101))
- {
- _exportExcelService.AddCell("人数", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, countWidth);
- _exportExcelService.AddCell("比例", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- _exportExcelService.AddCell("参考", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, countWidth);
- _exportExcelService.AddCell("上线", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, countWidth);
- _exportExcelService.AddCell("", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 4, rowNum - 1, ci - 1, ci - 1));
- }
- _exportExcelService.AddCell("参考", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, countWidth);
- _exportExcelService.AddCell("上线", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, countWidth);
- _exportExcelService.AddCell("比例", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- #endregion
- #region 数据
- foreach (DataRow dr in table.Select($"ncee_line_level = {lineLevel["ncee_line_level"]} AND direction_course_id = 4"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_short_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var cu in courses.Where(t => t.Id < 5 || t.Id == 101))
- {
- _exportExcelService.AddCell(dr[$"line_count_{cu.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr[$"line_rate_{cu.Id}"], row, rci++, cellStyle.NumberCellStyleP4, zeroToBlank: true);
- }
- _ = int.TryParse(dr["total_count_100"]?.ToString() ?? "", out int tc_4_100);
- _ = int.TryParse(dr["line_count_100"]?.ToString() ?? "", out int lc_4_100);
- _exportExcelService.AddCell(tc_4_100, row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(lc_4_100, row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr["line_rate_100"], row, rci++, cellStyle.NumberCellStyleP4, zeroToBlank: true);
- var dr8 = table.Select($"ncee_line_level = {lineLevel["ncee_line_level"]} AND direction_course_id = 8 AND sys_org_id = {dr["sys_org_id"]}").FirstOrDefault();
- int tc_8_100 = 0;
- int lc_8_100 = 0;
- if (dr8 != null)
- {
- foreach (var cu in courses.Where(t => t.Id < 4 || t.Id == 8 || t.Id == 101))
- {
- _exportExcelService.AddCell(dr8[$"line_count_{cu.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr8[$"line_rate_{cu.Id}"], row, rci++, cellStyle.NumberCellStyleP4, zeroToBlank: true);
- }
- _ = int.TryParse(dr8["total_count_100"]?.ToString() ?? "", out int t8100);
- tc_8_100 = t8100;
- _ = int.TryParse(dr8["line_count_100"]?.ToString() ?? "", out int l8100);
- lc_8_100 = l8100;
- _exportExcelService.AddCell(tc_8_100, row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(lc_8_100, row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr8["line_rate_100"], row, rci++, cellStyle.NumberCellStyleP4, zeroToBlank: true);
- }
- _exportExcelService.AddCell(tc_4_100 + tc_8_100, row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(lc_4_100 + lc_8_100, row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell((lc_4_100 + lc_8_100) * 1.0 / (tc_4_100 + tc_8_100), row, rci++, cellStyle.NumberCellStyleP4, zeroToBlank: true);
- }
- #endregion
- rowNum += 2;
- }
- sheet.CreateFreezePane(1, 0);
- }
- #endregion
- #region 双上线
- {
- var table = await GetLineCourseTable(nceePlanId);
- ISheet sheet = wb.CreateSheet("有效分总分双上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (DataRow lineLevel in lineLevelTable.Rows)
- {
- #region 表头
- // 分类标题
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int countWidth = 6;
- int scoreWidth = 8;
- int orgWidth = 10;
- _exportExcelService.AddCell($"{lineLevel["ncee_line_level_name"]}有效分总分双上线", headerRow1, ci++, cellStyle.TitleStyle, sheet, orgWidth);
- for (; ci < 21; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- // 方向标题
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- headerRow2.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell(orgTitle, headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- _exportExcelService.AddCell($"{directionCourse.Name}类", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- for (int i = 0; i < 9; i++)
- {
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 10, ci - 1));
- }
- // 科目标题
- IRow headerRow4 = sheet.CreateRow(rowNum++);
- headerRow4.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- foreach (var cu in courses.Where(t => t.Id < 4 || t.Id == directionCourse.Id || t.Id == 101))
- {
- var cuName = cu.Name;
- if (cu.Id == 101)
- {
- cuName = $"{cuName}X";
- }
- _exportExcelService.AddCell(cuName, headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 0, 0));
- // 有效分标题
- IRow headerRow5 = sheet.CreateRow(rowNum++);
- headerRow5.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("有效分", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- var lineScore = lineScoreTable.Select($"direction_course_id = {directionCourse.Id} AND ncee_line_level = {lineLevel["ncee_line_level"]}").First();
- foreach (var cu in courses.Where(t => t.Id < 4 || t.Id == directionCourse.Id || t.Id == 101))
- {
- _exportExcelService.AddCell(lineScore[$"line_score_x_{cu.Id}"], headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- }
- // 人数比例标题
- IRow headerRow6 = sheet.CreateRow(rowNum++);
- headerRow6.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- foreach (var cu in courses.Where(t => t.Id < 4 || t.Id == directionCourse.Id || t.Id == 101))
- {
- _exportExcelService.AddCell("人数", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, countWidth);
- _exportExcelService.AddCell("比例", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- }
- #endregion
- #region 数据
- foreach (DataRow dr in table.Select($"ncee_line_level = {lineLevel["ncee_line_level"]} AND direction_course_id = 4"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_short_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var cu in courses.Where(t => t.Id < 5 || t.Id == 101))
- {
- _exportExcelService.AddCell(dr[$"line_count_{cu.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr[$"line_rate_{cu.Id}"], row, rci++, cellStyle.NumberCellStyleP4, zeroToBlank: true);
- }
- var dr8 = table.Select($"ncee_line_level = {lineLevel["ncee_line_level"]} AND direction_course_id = 8 AND sys_org_id = {dr["sys_org_id"]}").FirstOrDefault();
- if (dr8 != null)
- {
- foreach (var cu in courses.Where(t => t.Id < 4 || t.Id == 8 || t.Id == 101))
- {
- _exportExcelService.AddCell(dr8[$"line_count_{cu.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr8[$"line_rate_{cu.Id}"], row, rci++, cellStyle.NumberCellStyleP4, zeroToBlank: true);
- }
- }
- }
- #endregion
- rowNum += 2;
- }
- sheet.CreateFreezePane(1, 0);
- }
- #endregion
- #region 转换区间
- if (isExportConvertRange)
- {
- await ExportConvertRange(nceePlanId, wb, cellStyle);
- }
- #endregion
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- return ms.ToArray();
- }
- /// <summary>
- /// 导出上线统计(未选科)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="courses"></param>
- /// <param name="lineLevelTable"></param>
- /// <returns></returns>
- private async Task<byte[]> ExportLineUnselected(int nceePlanId, List<NceeCourseDto> courses, DataTable lineLevelTable)
- {
- XSSFWorkbook wb = new();
- var cellStyle = _exportExcelService.GetCellStyle(wb, titleFontSize: 14);
- #region 上线合并
- await ExportLineTotal(nceePlanId, wb, cellStyle, "学校");
- #endregion
- #region 平均分
- {
- ISheet sheet = wb.CreateSheet("平均分");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- var table = await GetAvgScoreTable(nceePlanId, 99);
- #region 表头
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 8;
- _exportExcelService.AddCell($"平均分", headerRow1, ci++, cellStyle.TitleStyle, sheet, 10);
- for (; ci < courses.Count * 2 + 1; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- headerRow2.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学科", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var course in courses)
- {
- string cn = course.Name;
- _exportExcelService.AddCell(cn, headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- if (ci % 2 == 1)
- {
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- }
- IRow headerRow3 = sheet.CreateRow(rowNum++);
- headerRow3.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学校", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var course in courses)
- {
- _exportExcelService.AddCell("人数", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("平均", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- #endregion
- #region 数据
- foreach (DataRow dr in table.Rows)
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_short_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var course in courses)
- {
- _exportExcelService.AddCell(dr[$"total_count_{course.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr[$"avg_score_x_{course.Id}"], row, rci++, cellStyle.NumberCellStyleP2, zeroToBlank: true);
- }
- }
- #endregion
- }
- #endregion
- #region 有效分
- var lineScoreTable = await GetLineScoreTable(nceePlanId);
- ExportLineScore(wb, cellStyle, lineScoreTable, courses);
- #endregion
- #region 单上线
- {
- var table = await GetLineTotalTable(nceePlanId);
- ISheet sheet = wb.CreateSheet("有效分总分单上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (DataRow lineLevel in lineLevelTable.Rows)
- {
- #region 表头
- // 分类标题
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int countWidth = 6;
- int scoreWidth = 8;
- int orgWidth = 10;
- _exportExcelService.AddCell($"{lineLevel["ncee_line_level_name"]}有效分总分单上线", headerRow1, ci++, cellStyle.TitleStyle, sheet, orgWidth);
- for (; ci < courses.Count * 2 + 1; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- // 科目标题
- IRow headerRow4 = sheet.CreateRow(rowNum++);
- headerRow4.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("科目", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var cu in courses)
- {
- _exportExcelService.AddCell(cu.Name, headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- // 有效分标题
- IRow headerRow5 = sheet.CreateRow(rowNum++);
- headerRow5.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("有效分", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- var lineScore = lineScoreTable.Select($"direction_course_id = 99 AND ncee_line_level = {lineLevel["ncee_line_level"]}").First();
- foreach (var cu in courses)
- {
- _exportExcelService.AddCell(lineScore[$"line_score_x_{cu.Id}"], headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- // 人数比例标题
- IRow headerRow6 = sheet.CreateRow(rowNum++);
- headerRow6.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学校", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var cu in courses)
- {
- _exportExcelService.AddCell("人数", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, countWidth);
- _exportExcelService.AddCell("比例", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- #endregion
- #region 数据
- foreach (DataRow dr in table.Select($"ncee_line_level = {lineLevel["ncee_line_level"]} AND direction_course_id = 99"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_short_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var cu in courses)
- {
- _exportExcelService.AddCell(dr[$"line_count_{cu.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr[$"line_rate_{cu.Id}"], row, rci++, cellStyle.NumberCellStyleP4, zeroToBlank: true);
- }
- }
- #endregion
- }
- sheet.CreateFreezePane(1, 0);
- }
- #endregion
- #region 双上线
- {
- var tcourse = courses.Where(t => t.Id < 100).ToList();
- var table = await GetLineCourseTable(nceePlanId);
- ISheet sheet = wb.CreateSheet("有效分总分双上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (DataRow lineLevel in lineLevelTable.Rows)
- {
- #region 表头
- // 分类标题
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int countWidth = 6;
- int scoreWidth = 8;
- int orgWidth = 10;
- _exportExcelService.AddCell($"{lineLevel["ncee_line_level_name"]}有效分总分双上线", headerRow1, ci++, cellStyle.TitleStyle, sheet, orgWidth);
- for (; ci < tcourse.Count * 2 + 1; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- // 科目标题
- IRow headerRow4 = sheet.CreateRow(rowNum++);
- headerRow4.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("科目", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var cu in tcourse)
- {
- _exportExcelService.AddCell(cu.Name, headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow4, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- // 有效分标题
- IRow headerRow5 = sheet.CreateRow(rowNum++);
- headerRow5.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("有效分", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- var lineScore = lineScoreTable.Select($"direction_course_id = 99 AND ncee_line_level = {lineLevel["ncee_line_level"]}").First();
- foreach (var cu in tcourse)
- {
- _exportExcelService.AddCell(lineScore[$"line_score_x_{cu.Id}"], headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow5, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- // 人数比例标题
- IRow headerRow6 = sheet.CreateRow(rowNum++);
- headerRow6.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学校", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, orgWidth);
- foreach (var cu in tcourse)
- {
- _exportExcelService.AddCell("人数", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, countWidth);
- _exportExcelService.AddCell("比例", headerRow6, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- #endregion
- #region 数据
- foreach (DataRow dr in table.Select($"ncee_line_level = {lineLevel["ncee_line_level"]} AND direction_course_id = 99"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_short_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var cu in tcourse)
- {
- _exportExcelService.AddCell(dr[$"line_count_{cu.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr[$"line_rate_{cu.Id}"], row, rci++, cellStyle.NumberCellStyleP4, zeroToBlank: true);
- }
- }
- #endregion
- }
- sheet.CreateFreezePane(1, 0);
- }
- #endregion
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- return ms.ToArray();
- }
- /// <summary>
- /// 导出转换成绩
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- private async Task<byte[]> ExportConvertScore(ExportConvertScoreDto input)
- {
- XSSFWorkbook wb = new();
- var cellStyle = _exportExcelService.GetCellStyle(wb, titleFontSize: 14);
- foreach (var dc in NceeUtil.DirectionCourses)
- {
- var table = await GetConvertScoreTable(input.NceePlanId, dc.Id, input.Org?.Id ?? 0);
- ISheet sheet = wb.CreateSheet($"{dc.Name}类");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- #region 表头
- IRow headerRow = sheet.CreateRow(rowNum++);
- int ci = 0;
- int scoreWidth = 8;
- _exportExcelService.AddCell(input.OrgTitle, headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell(input.ExamNumberTitle, headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 12);
- if (input.IsExportStudentName)
- {
- _exportExcelService.AddCell("姓名", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 12);
- }
- if (input.IsExportClassNumber)
- {
- _exportExcelService.AddCell("班级", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- if (input.IsExportDirectionCourse)
- {
- _exportExcelService.AddCell("选科方向", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 12);
- }
- if (input.IsExportComb)
- {
- _exportExcelService.AddCell("选科组合", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 12);
- }
- _exportExcelService.AddCell("总分", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("总分X", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- if (input.IsExportOrder)
- {
- _exportExcelService.AddCell(input.OrderTotalTitle, headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell(input.OrderOrgTitle, headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- _exportExcelService.AddCell("语文", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("数学", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("英语", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell(dc.Name, headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("综合", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("综合X", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("等级", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth + 2);
- _exportExcelService.AddCell("化学", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("化学X", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("等级", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("生物", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("生物X", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("等级", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("政治", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("政治X", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("等级", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("地理", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("地理X", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("等级", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.CreateFreezePane(0, rowNum);
- #endregion
- #region 数据
- foreach (DataRow dr in table.Rows)
- {
- List<string> cgns =
- [
- dr["ncee_convert_grade_name_5"].ToString(),
- dr["ncee_convert_grade_name_6"].ToString(),
- dr["ncee_convert_grade_name_7"].ToString(),
- dr["ncee_convert_grade_name_9"].ToString()
- ];
- //cgns = cgns.Where(t => t != "").ToList();
- //string cg = string.Join("", cgns);
- //if (cg != "")
- //{
- // cg = $"[{cg}]";
- //}
- string cg = GetMergeGradeName(cgns);
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_short_name"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["exam_number"], row, rci++, cellStyle.CenterCellStyle);
- if (input.IsExportStudentName)
- {
- _exportExcelService.AddCell(dr["name"], row, rci++, cellStyle.CenterCellStyle);
- }
- if (input.IsExportClassNumber)
- {
- _exportExcelService.AddCell(dr["class_number"], row, rci++, cellStyle.CenterCellStyle);
- }
- if (input.IsExportDirectionCourse)
- {
- _exportExcelService.AddCell(dr["direction_course_name"], row, rci++, cellStyle.CenterCellStyle);
- }
- if (input.IsExportComb)
- {
- _exportExcelService.AddCell(dr["ncee_course_comb_short_name"], row, rci++, cellStyle.CenterCellStyle);
- }
- _exportExcelService.AddCell(dr["score"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_x"], row, rci++, cellStyle.CenterCellStyle);
- if (input.IsExportOrder)
- {
- _exportExcelService.AddCell(dr["order_in_total_x"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["order_in_org_x"], row, rci++, cellStyle.CenterCellStyle);
- }
- _exportExcelService.AddCell(dr["score_1"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_2"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_3"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr[$"score_{dc.Id}"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["comb_score"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["comb_score_x"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(cg, row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_5"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_x_5"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["ncee_convert_grade_name_5"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_6"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_x_6"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["ncee_convert_grade_name_6"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_7"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_x_7"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["ncee_convert_grade_name_7"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_9"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["score_x_9"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr["ncee_convert_grade_name_9"], row, rci++, cellStyle.CenterCellStyle);
- }
- #endregion
- }
- // 导出转换区间
- if (input.IsExportConvertRange)
- {
- await ExportConvertRange(input.NceePlanId, wb, cellStyle);
- }
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- return ms.ToArray();
- }
- /// <summary>
- /// 导出汇总班级上线情况
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="baseLineTable"></param>
- /// <returns></returns>
- private async Task<byte[]> ExportClassLine(int nceePlanId, DataTable baseLineTable)
- {
- XSSFWorkbook wb = new();
- var cellStyle = _exportExcelService.GetCellStyle(wb, titleFontSize: 14);
- var cellStyleIndent1 = wb.CreateCellStyle();
- cellStyleIndent1.CloneStyleFrom(cellStyle.LeftCellStyle);
- cellStyleIndent1.Indention = 1;
- var cellStyleIndent2 = wb.CreateCellStyle();
- cellStyleIndent2.CloneStyleFrom(cellStyle.LeftCellStyle);
- cellStyleIndent2.Indention = 2;
- #region 总分上线
- {
- var table = await GetOrgLineTotalTable2(nceePlanId, 0);
- ISheet sheet = wb.CreateSheet("总分上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- var nls = baseLineTable.Select($"direction_course_id = {directionCourse.Id}");
- #region 标题
- IRow titleRow = sheet.CreateRow(rowNum++);
- titleRow.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 10;
- _exportExcelService.AddCell($"{directionCourse.Name}类总分上线情况", titleRow, ci++, cellStyle.TitleStyle, sheet, 13);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- #endregion
- #region 表头
- IRow headerRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("名称", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("实考人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell($"{nl["ncee_line_level_name"]}({nl["line_score_x"]})", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 0, 0));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 1, 1));
- #endregion
- foreach (DataRow dr in table.Select($"direction_course_id = {directionCourse.Id}"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- var type = (long)dr["type"];
- string itemName = "";
- switch (type)
- {
- case 1:
- itemName = $"{dr["sys_org_name"]}";
- break;
- case 2:
- itemName = $"{dr["ncee_course_comb_name"]}";
- break;
- case 3:
- itemName = $"{dr["class_number"]}班";
- break;
- }
- _exportExcelService.AddCell(itemName, row, rci++, type == 1 ? cellStyle.LeftCellStyle : type == 2 ? cellStyleIndent1 : cellStyleIndent2);
- _exportExcelService.AddCell(dr["total_count"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell(dr[$"line_count_{nl["ncee_line_level"]}"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr[$"line_rate_{nl["ncee_line_level"]}"], row, rci++, cellStyle.PercentCellStyleP2);
- }
- }
- rowNum += 1;
- }
- }
- #endregion
- #region 双上线
- {
- var table = await GetOrgLineCourseTable2(nceePlanId, 0);
- ISheet sheet = wb.CreateSheet("双上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- var nls = baseLineTable.Select($"direction_course_id = {directionCourse.Id}");
- #region 标题
- IRow titleRow = sheet.CreateRow(rowNum++);
- titleRow.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 10;
- _exportExcelService.AddCell($"{directionCourse.Name}类双上线情况", titleRow, ci++, cellStyle.TitleStyle, sheet, 13);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- #endregion
- var lineScoreTable = await GetLineScoreTable2(nceePlanId);
- foreach (var lst in lineScoreTable.Select($"direction_course_id = {directionCourse.Id} AND course_id <> 100"))
- {
- #region 表头
- IRow subTitleRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell($"{lst["course_name"]}", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("名称", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("实考人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell($"{nl["ncee_line_level_name"]}({lst[$"line_score_x_{nl["ncee_line_level"]}"]})", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 0, 0));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 1, 1));
- #endregion
- foreach (DataRow dr in table.Select($"direction_course_id = {directionCourse.Id} AND course_id = {lst["course_id"]}"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- short type = (short)dr["type"];
- string itemName = "";
- switch (type)
- {
- case 1:
- itemName = $"{dr["sys_org_name"]}";
- break;
- case 2:
- itemName = $"{dr["ncee_course_comb_name"]}";
- break;
- case 3:
- itemName = $"{dr["class_number"]}班";
- break;
- }
- _exportExcelService.AddCell(itemName, row, rci++, type == 1 ? cellStyle.LeftCellStyle : type == 2 ? cellStyleIndent1 : cellStyleIndent2);
- _exportExcelService.AddCell(dr["total_count"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell(dr[$"line_count_{nl["ncee_line_level"]}"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr[$"line_rate_{nl["ncee_line_level"]}"], row, rci++, cellStyle.PercentCellStyleP2);
- }
- }
- rowNum += 1;
- }
- }
- }
- #endregion
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- return ms.ToArray();
- }
- /// <summary>
- /// 导出汇总班级上线情况(未选科)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="baseLineTable"></param>
- /// <returns></returns>
- private async Task<byte[]> ExportClassLineUnselected(int nceePlanId, DataTable baseLineTable)
- {
- XSSFWorkbook wb = new();
- var cellStyle = _exportExcelService.GetCellStyle(wb, titleFontSize: 14);
- var cellStyleIndent1 = wb.CreateCellStyle();
- cellStyleIndent1.CloneStyleFrom(cellStyle.LeftCellStyle);
- cellStyleIndent1.Indention = 1;
- var cellStyleIndent2 = wb.CreateCellStyle();
- cellStyleIndent2.CloneStyleFrom(cellStyle.LeftCellStyle);
- cellStyleIndent2.Indention = 2;
- #region 总分上线
- {
- var table = await GetOrgLineTotalTable2(nceePlanId, 0);
- ISheet sheet = wb.CreateSheet("总分上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- var nls = baseLineTable.Select($"direction_course_id = 99");
- #region 标题
- IRow titleRow = sheet.CreateRow(rowNum++);
- titleRow.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 10;
- _exportExcelService.AddCell($"总分上线情况", titleRow, ci++, cellStyle.TitleStyle, sheet, 13);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- #endregion
- #region 表头
- IRow headerRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("名称", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("实考人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell($"{nl["ncee_line_level_name"]}({nl["line_score_x"]})", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 0, 0));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 1, 1));
- #endregion
- foreach (DataRow dr in table.Select($"direction_course_id = 99"))
- {
- short type = (short)dr["type"];
- if (type == 2)
- {
- continue;
- }
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- string itemName = "";
- switch (type)
- {
- case 1:
- itemName = $"{dr["sys_org_name"]}";
- break;
- case 3:
- itemName = $"{dr["class_number"]}班";
- break;
- }
- _exportExcelService.AddCell(itemName, row, rci++, type == 1 ? cellStyle.LeftCellStyle : type == 2 ? cellStyleIndent1 : cellStyleIndent2);
- _exportExcelService.AddCell(dr["total_count"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell(dr[$"line_count_{nl["ncee_line_level"]}"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr[$"line_rate_{nl["ncee_line_level"]}"], row, rci++, cellStyle.PercentCellStyleP2);
- }
- }
- }
- #endregion
- #region 双上线
- {
- var table = await GetOrgLineCourseTable2(nceePlanId, 0);
- ISheet sheet = wb.CreateSheet("双上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- var nls = baseLineTable.Select($"direction_course_id = 99");
- #region 标题
- IRow titleRow = sheet.CreateRow(rowNum++);
- titleRow.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 10;
- _exportExcelService.AddCell($"双上线情况", titleRow, ci++, cellStyle.TitleStyle, sheet, 13);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- #endregion
- var lineScoreTable = await GetLineScoreTable2(nceePlanId);
- foreach (var lst in lineScoreTable.Select($"direction_course_id = 99 AND course_id <> 100"))
- {
- #region 表头
- IRow subTitleRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell($"{lst["course_name"]}", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("名称", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("实考人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell($"{nl["ncee_line_level_name"]}({lst[$"line_score_x_{nl["ncee_line_level"]}"]})", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 0, 0));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 1, 1));
- #endregion
- foreach (DataRow dr in table.Select($"direction_course_id = 99 AND course_id = {lst["course_id"]}"))
- {
- short type = (short)dr["type"];
- if (type == 2)
- {
- continue;
- }
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- string itemName = "";
- switch (type)
- {
- case 1:
- itemName = $"{dr["sys_org_name"]}";
- break;
- case 2:
- itemName = $"{dr["ncee_course_comb_name"]}";
- break;
- case 3:
- itemName = $"{dr["class_number"]}班";
- break;
- }
- _exportExcelService.AddCell(itemName, row, rci++, type == 1 ? cellStyle.LeftCellStyle : type == 2 ? cellStyleIndent1 : cellStyleIndent2);
- _exportExcelService.AddCell(dr["total_count"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell(dr[$"line_count_{nl["ncee_line_level"]}"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr[$"line_rate_{nl["ncee_line_level"]}"], row, rci++, cellStyle.PercentCellStyleP2);
- }
- }
- }
- }
- #endregion
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- return ms.ToArray();
- }
- /// <summary>
- /// 导出各机构转换成绩
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="orgList"></param>
- /// <param name="isExportConvertRange">导出转换区间</param>
- /// <param name="isExportOrder">导出排名</param>
- /// <returns></returns>
- private async Task<Dictionary<string, byte[]>> ExportOrgConvertScore(int nceePlanId, List<SysOrgOutput> orgList, bool isExportConvertRange = false, bool isExportOrder = false)
- {
- Dictionary<string, byte[]> ret = [];
- foreach (var org in orgList)
- {
- var bs = await ExportConvertScore(new ExportConvertScoreDto
- {
- NceePlanId = nceePlanId,
- Org = org,
- IsExportConvertRange = isExportConvertRange,
- IsExportOrder = isExportOrder,
- IsExportStudentName = true,
- IsExportComb = true,
- IsExportDirectionCourse = true,
- IsExportClassNumber = true,
- });
- ret.Add($"{org.Code}-{org.ShortName}", bs);
- }
- return ret;
- }
- /// <summary>
- /// 导出各机构班级上线情况
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="orgList"></param>
- /// <param name="baseLineTable"></param>
- /// <param name="courses"></param>
- /// <returns></returns>
- private async Task<Dictionary<string, byte[]>> ExportOrgClassLine(int nceePlanId, List<SysOrgOutput> orgList, DataTable baseLineTable, List<NceeCourseDto> courses)
- {
- Dictionary<string, byte[]> ret = [];
- foreach (var org in orgList)
- {
- IWorkbook wb = new XSSFWorkbook();
- var cellStyle = _exportExcelService.GetCellStyle(wb, titleFontSize: 14);
- var cellStyleIndent1 = wb.CreateCellStyle();
- cellStyleIndent1.CloneStyleFrom(cellStyle.LeftCellStyle);
- cellStyleIndent1.Indention = 1;
- var cellStyleIndent2 = wb.CreateCellStyle();
- cellStyleIndent2.CloneStyleFrom(cellStyle.LeftCellStyle);
- cellStyleIndent2.Indention = 2;
- #region 有效分
- await ExportLineScore(nceePlanId, wb, cellStyle, isExportRate: false);
- #endregion
- #region 平均分
- {
- var tcourses = courses.Where(t => t.Id != 101).ToList();
- ISheet sheet = wb.CreateSheet("平均分");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- var table = await GetAvgScoreTable(nceePlanId, directionCourse.Id);
- #region 表头
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 8;
- _exportExcelService.AddCell($"{directionCourse.Name}类平均分", headerRow1, ci++, cellStyle.TitleStyle, sheet, 10);
- for (; ci < 19; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- headerRow2.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学科", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var course in tcourses)
- {
- if (course.IsSkip(directionCourse.Id)) { continue; }
- string cn = course.Name;
- if (course.Id == 5 || course.Id == 6 || course.Id == 7 || course.Id == 9 || course.Id == 100)
- {
- cn = $"{cn}X";
- }
- _exportExcelService.AddCell(cn, headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- if (ci % 2 == 1)
- {
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- }
- IRow headerRow3 = sheet.CreateRow(rowNum++);
- headerRow3.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学校", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var course in tcourses)
- {
- if (course.IsSkip(directionCourse.Id)) { continue; }
- _exportExcelService.AddCell("人数", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("平均", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- #endregion
- #region 数据
- foreach (DataRow dr in table.Rows)
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_short_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var course in tcourses)
- {
- if (course.IsSkip(directionCourse.Id)) { continue; }
- _exportExcelService.AddCell(dr[$"total_count_{course.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr[$"avg_score_x_{course.Id}"], row, rci++, cellStyle.NumberCellStyleP2, zeroToBlank: true);
- }
- }
- #endregion
- rowNum += 2;
- }
- }
- #endregion
- #region 总分上线
- {
- var table = await GetOrgLineTotalTable2(nceePlanId, org.Id);
- ISheet sheet = wb.CreateSheet("总分上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- var nls = baseLineTable.Select($"direction_course_id = {directionCourse.Id}");
- #region 表头
- IRow titleRow = sheet.CreateRow(rowNum++);
- titleRow.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 10;
- _exportExcelService.AddCell($"{org.ShortName}{directionCourse.Name}类总分上线情况", titleRow, ci++, cellStyle.TitleStyle, sheet, 13);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("名称", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("实考人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell($"{nl["ncee_line_level_name"]}({nl["line_score_x"]})", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 0, 0));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 1, 1));
- #endregion
- #region 数据
- foreach (DataRow dr in table.Select($"direction_course_id = {directionCourse.Id}"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- var type = (long)dr["type"];
- string itemName = "";
- switch (type)
- {
- case 1:
- itemName = $"{dr["sys_org_name"]}";
- break;
- case 2:
- itemName = $"{dr["ncee_course_comb_name"]}";
- break;
- case 3:
- itemName = $"{dr["class_number"]}班";
- break;
- }
- _exportExcelService.AddCell(itemName, row, rci++, type == 1 ? cellStyle.LeftCellStyle : type == 2 ? cellStyleIndent1 : cellStyleIndent2);
- _exportExcelService.AddCell(dr["total_count"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell(dr[$"line_count_{nl["ncee_line_level"]}"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr[$"line_rate_{nl["ncee_line_level"]}"], row, rci++, cellStyle.PercentCellStyleP2);
- }
- }
- #endregion
- rowNum += 1;
- }
- }
- #endregion
- #region 双上线
- {
- var table = await GetOrgLineCourseTable2(nceePlanId, org.Id);
- var lineScoreTable = await GetLineScoreTable2(nceePlanId);
- ISheet sheet = wb.CreateSheet("双上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- foreach (var directionCourse in NceeUtil.DirectionCourses)
- {
- var nls = baseLineTable.Select($"direction_course_id = {directionCourse.Id}");
- IRow titleRow = sheet.CreateRow(rowNum++);
- titleRow.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 10;
- _exportExcelService.AddCell($"{org.ShortName}{directionCourse.Name}类双上线情况", titleRow, ci++, cellStyle.TitleStyle, sheet, 13);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- foreach (var lst in lineScoreTable.Select($"direction_course_id = {directionCourse.Id} AND course_id <> 100"))
- {
- #region 表头
- IRow subTitleRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell($"{lst["course_name"]}", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("名称", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("实考人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell($"{nl["ncee_line_level_name"]}({lst[$"line_score_x_{nl["ncee_line_level"]}"]})", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 0, 0));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 1, 1));
- #endregion
- #region 数据
- foreach (DataRow dr in table.Select($"direction_course_id = {directionCourse.Id} AND course_id = {lst["course_id"]}"))
- {
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- short type = (short)dr["type"];
- string itemName = "";
- switch (type)
- {
- case 1:
- itemName = $"{dr["sys_org_name"]}";
- break;
- case 2:
- itemName = $"{dr["ncee_course_comb_name"]}";
- break;
- case 3:
- itemName = $"{dr["class_number"]}班";
- break;
- }
- _exportExcelService.AddCell(itemName, row, rci++, type == 1 ? cellStyle.LeftCellStyle : type == 2 ? cellStyleIndent1 : cellStyleIndent2);
- _exportExcelService.AddCell(dr["total_count"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell(dr[$"line_count_{nl["ncee_line_level"]}"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr[$"line_rate_{nl["ncee_line_level"]}"], row, rci++, cellStyle.PercentCellStyleP2);
- }
- }
- #endregion
- rowNum += 1;
- }
- }
- }
- #endregion
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- ret.Add($"{org.Code}-{org.ShortName}", ms.ToArray());
- }
- return ret;
- }
- /// <summary>
- /// 导出各机构班级上线情况(未选科)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="orgList"></param>
- /// <param name="baseLineTable"></param>
- /// <param name="courses"></param>
- /// <returns></returns>
- private async Task<Dictionary<string, byte[]>> ExportOrgClassLineUnselected(int nceePlanId, List<SysOrgOutput> orgList, DataTable baseLineTable, List<NceeCourseDto> courses)
- {
- Dictionary<string, byte[]> ret = [];
- foreach (var org in orgList)
- {
- IWorkbook wb = new XSSFWorkbook();
- var cellStyle = _exportExcelService.GetCellStyle(wb, titleFontSize: 14);
- var cellStyleIndent1 = wb.CreateCellStyle();
- cellStyleIndent1.CloneStyleFrom(cellStyle.LeftCellStyle);
- cellStyleIndent1.Indention = 1;
- var cellStyleIndent2 = wb.CreateCellStyle();
- cellStyleIndent2.CloneStyleFrom(cellStyle.LeftCellStyle);
- cellStyleIndent2.Indention = 2;
- #region 有效分
- var lstable = await GetLineScoreTable(nceePlanId);
- ExportLineScore(wb, cellStyle, lstable, courses);
- #endregion
- #region 平均分
- {
- ISheet sheet = wb.CreateSheet("平均分");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- var table = await GetAvgScoreTable(nceePlanId, 99);
- #region 表头
- IRow headerRow1 = sheet.CreateRow(rowNum++);
- headerRow1.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 8;
- _exportExcelService.AddCell($"平均分", headerRow1, ci++, cellStyle.TitleStyle, sheet, 10);
- for (; ci < courses.Count * 2 + 1; ci++)
- {
- _exportExcelService.AddCell("", headerRow1, ci, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- headerRow2.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学科", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var course in courses)
- {
- string cn = course.Name;
- _exportExcelService.AddCell(cn, headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- if (ci % 2 == 1)
- {
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- }
- IRow headerRow3 = sheet.CreateRow(rowNum++);
- headerRow3.HeightInPoints = 15;
- ci = 0;
- _exportExcelService.AddCell("学校", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var course in courses)
- {
- _exportExcelService.AddCell("人数", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("平均", headerRow3, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- #endregion
- #region 数据
- foreach (DataRow dr in table.Rows)
- {
- IRow row = sheet.CreateRow(rowNum++);
- row.HeightInPoints = 15;
- int rci = 0;
- _exportExcelService.AddCell(dr["sys_org_short_name"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var course in courses)
- {
- _exportExcelService.AddCell(dr[$"total_count_{course.Id}"], row, rci++, cellStyle.CenterCellStyle, zeroToBlank: true);
- _exportExcelService.AddCell(dr[$"avg_score_x_{course.Id}"], row, rci++, cellStyle.NumberCellStyleP2, zeroToBlank: true);
- }
- }
- #endregion
- }
- #endregion
- #region 总分上线
- {
- var table = await GetOrgLineTotalTable2(nceePlanId, org.Id);
- ISheet sheet = wb.CreateSheet("总分上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- var nls = baseLineTable.Select($"direction_course_id = 99");
- #region 表头
- IRow titleRow = sheet.CreateRow(rowNum++);
- titleRow.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 10;
- _exportExcelService.AddCell($"{org.ShortName}总分上线情况", titleRow, ci++, cellStyle.TitleStyle, sheet, 13);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("名称", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("实考人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell($"{nl["ncee_line_level_name"]}({nl["line_score_x"]})", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 0, 0));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 1, 1));
- #endregion
- #region 数据
- foreach (DataRow dr in table.Select($"direction_course_id = 99"))
- {
- short type = (short)dr["type"];
- if (type == 2)
- {
- continue;
- }
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- string itemName = "";
- switch (type)
- {
- case 1:
- itemName = $"{dr["sys_org_name"]}";
- break;
- case 3:
- itemName = $"{dr["class_number"]}班";
- break;
- }
- _exportExcelService.AddCell(itemName, row, rci++, type == 1 ? cellStyle.LeftCellStyle : type == 2 ? cellStyleIndent1 : cellStyleIndent2);
- _exportExcelService.AddCell(dr["total_count"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell(dr[$"line_count_{nl["ncee_line_level"]}"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr[$"line_rate_{nl["ncee_line_level"]}"], row, rci++, cellStyle.PercentCellStyleP2);
- }
- }
- #endregion
- }
- #endregion
- #region 双上线
- {
- var table = await GetOrgLineCourseTable2(nceePlanId, org.Id);
- var lineScoreTable = await GetLineScoreTable2(nceePlanId);
- ISheet sheet = wb.CreateSheet("双上线");
- sheet.DisplayGridlines = false;
- // 行索引号
- int rowNum = 0;
- var nls = baseLineTable.Select($"direction_course_id = 99");
- IRow titleRow = sheet.CreateRow(rowNum++);
- titleRow.HeightInPoints = 30;
- int ci = 0;
- int scoreWidth = 10;
- _exportExcelService.AddCell($"{org.ShortName}双上线情况", titleRow, ci++, cellStyle.TitleStyle, sheet, 13);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", titleRow, ci++, cellStyle.TitleStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- foreach (var lst in lineScoreTable.Select($"direction_course_id = 99 AND course_id <> 100"))
- {
- #region 表头
- IRow subTitleRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell($"{lst["course_name"]}", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", subTitleRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, 0, ci - 1));
- IRow headerRow = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("名称", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("实考人数", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell($"{nl["ncee_line_level_name"]}({lst[$"line_score_x_{nl["ncee_line_level"]}"]})", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("", headerRow, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 1, rowNum - 1, ci - 2, ci - 1));
- }
- IRow headerRow2 = sheet.CreateRow(rowNum++);
- ci = 0;
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 13);
- _exportExcelService.AddCell("", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, 10);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell("人数", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- _exportExcelService.AddCell("比例(%)", headerRow2, ci++, cellStyle.ColumnFillHeaderStyle, sheet, scoreWidth);
- }
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 0, 0));
- sheet.AddMergedRegion(new CellRangeAddress(rowNum - 2, rowNum - 1, 1, 1));
- #endregion
- #region 数据
- foreach (DataRow dr in table.Select($"direction_course_id = 99 AND course_id = {lst["course_id"]}"))
- {
- short type = (short)dr["type"];
- if (type == 2)
- {
- continue;
- }
- IRow row = sheet.CreateRow(rowNum++);
- int rci = 0;
- string itemName = "";
- switch (type)
- {
- case 1:
- itemName = $"{dr["sys_org_name"]}";
- break;
- case 3:
- itemName = $"{dr["class_number"]}班";
- break;
- }
- _exportExcelService.AddCell(itemName, row, rci++, type == 1 ? cellStyle.LeftCellStyle : type == 2 ? cellStyleIndent1 : cellStyleIndent2);
- _exportExcelService.AddCell(dr["total_count"], row, rci++, cellStyle.CenterCellStyle);
- foreach (var nl in nls)
- {
- _exportExcelService.AddCell(dr[$"line_count_{nl["ncee_line_level"]}"], row, rci++, cellStyle.CenterCellStyle);
- _exportExcelService.AddCell(dr[$"line_rate_{nl["ncee_line_level"]}"], row, rci++, cellStyle.PercentCellStyleP2);
- }
- }
- #endregion
- rowNum += 1;
- }
- }
- #endregion
- MemoryStream ms = new();
- wb.Write(ms, false);
- ms.Flush();
- ret.Add($"{org.Code}-{org.ShortName}", ms.ToArray());
- }
- return ret;
- }
- #endregion
- #region 获取数据
- /// <summary>
- /// 获取上线合并数据
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetLineCountTable(int nceePlanId)
- {
- var dt = await _rep.SqlQueryAsync($@"
- SELECT T1.*,
- T2.d_4_total_count, T2.d_4_line_count_1, T2.d_4_line_count_2, T2.d_4_line_count_3,
- T2.d_4_line_count_1 / T2.d_4_total_count AS d_4_line_rate_1,
- T2.d_4_line_count_2 / T2.d_4_total_count AS d_4_line_rate_2,
- T2.d_4_line_count_3 / T2.d_4_total_count AS d_4_line_rate_3,
- T2.d_8_total_count, T2.d_8_line_count_1, T2.d_8_line_count_2, T2.d_8_line_count_3,
- T2.d_8_line_count_1 / T2.d_8_total_count AS d_8_line_rate_1,
- T2.d_8_line_count_2 / T2.d_8_total_count AS d_8_line_rate_2,
- T2.d_8_line_count_3 / T2.d_8_total_count AS d_8_line_rate_3
- FROM
- (
- SELECT IFNULL(T2.short_name, '合计') AS sys_org_name, T1.*,
- T1.line_count_1 / T1.total_count AS line_rate_1,
- T1.line_count_2 / T1.total_count AS line_rate_2,
- T1.line_count_3 / T1.total_count AS line_rate_3
- FROM
- (
- SELECT T1.type, T1.sys_org_id,
- MAX(T1.total_count) AS total_count,
- SUM(CASE WHEN T1.ncee_line_level = 1 THEN T1.line_count ELSE 0 END) AS line_count_1,
- SUM(CASE WHEN T1.ncee_line_level = 2 THEN T1.line_count ELSE 0 END) AS line_count_2,
- SUM(CASE WHEN T1.ncee_line_level = 3 THEN T1.line_count ELSE 0 END) AS line_count_3
- FROM
- (
- SELECT T1.type, T1.sys_org_id, T1.ncee_line_level, SUM(T1.line_count) AS line_count, SUM(T1.total_count) AS total_count
- FROM ncee_line_total AS T1
- WHERE T1.ncee_plan_id = {nceePlanId} AND (T1.type = 1 OR T1.type = 4) AND T1.ncee_course_comb_id IS NULL
- GROUP BY T1.type, T1.sys_org_id, T1.ncee_line_level
- ) AS T1
- GROUP BY T1.type, T1.sys_org_id
- ) AS T1
- LEFT JOIN sys_org AS T2 ON T1.sys_org_id = T2.id
- ) AS T1
- LEFT JOIN
- (
- SELECT T1.type, T1.sys_org_id,
- MAX(CASE WHEN T1.direction_course_id = 4 THEN T1.total_count ELSE 0 END) AS d_4_total_count,
- SUM(CASE WHEN T1.direction_course_id = 4 AND T1.ncee_line_level = 1 THEN T1.line_count ELSE 0 END) AS d_4_line_count_1,
- SUM(CASE WHEN T1.direction_course_id = 4 AND T1.ncee_line_level = 2 THEN T1.line_count ELSE 0 END) AS d_4_line_count_2,
- SUM(CASE WHEN T1.direction_course_id = 4 AND T1.ncee_line_level = 3 THEN T1.line_count ELSE 0 END) AS d_4_line_count_3,
- MAX(CASE WHEN T1.direction_course_id = 8 THEN T1.total_count ELSE 0 END) AS d_8_total_count,
- SUM(CASE WHEN T1.direction_course_id = 8 AND T1.ncee_line_level = 1 THEN T1.line_count ELSE 0 END) AS d_8_line_count_1,
- SUM(CASE WHEN T1.direction_course_id = 8 AND T1.ncee_line_level = 2 THEN T1.line_count ELSE 0 END) AS d_8_line_count_2,
- SUM(CASE WHEN T1.direction_course_id = 8 AND T1.ncee_line_level = 3 THEN T1.line_count ELSE 0 END) AS d_8_line_count_3
- FROM
- (
- SELECT T1.direction_course_id, T1.type, T1.sys_org_id, T1.ncee_line_level, SUM(T1.line_count) AS line_count, SUM(T1.total_count) AS total_count
- FROM ncee_line_total AS T1
- WHERE T1.ncee_plan_id = {nceePlanId} AND (T1.type = 1 OR T1.type = 4) AND T1.ncee_course_comb_id IS NULL
- GROUP BY T1.direction_course_id, T1.type, T1.sys_org_id, T1.ncee_line_level
- ) AS T1
- GROUP BY T1.type, T1.sys_org_id
- ) AS T2 ON T1.type = T2.type AND IFNULL(T1.sys_org_id, 0) = IFNULL(T2.sys_org_id, 0)
- ORDER BY T1.type, T1.sys_org_id
- ");
- return dt;
- }
- /// <summary>
- /// 获取有效分数据
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetLineScoreTable(int nceePlanId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT T2.`name` AS direction_course_name,
- T3.`name` AS ncee_line_level_name,
- T1.*,
- T4.line_rate,
- COUNT(T1.ncee_line_level) OVER(PARTITION BY direction_course_id) AS ncee_level_count
- FROM
- (
- SELECT T1.ncee_plan_id, T1.direction_course_id, T1.ncee_line_level,
- MAX(IF(T1.course_id = 1, T1.line_score_x, NULL)) AS line_score_x_1,
- MAX(IF(T1.course_id = 2, T1.line_score_x, NULL)) AS line_score_x_2,
- MAX(IF(T1.course_id = 3, T1.line_score_x, NULL)) AS line_score_x_3,
- MAX(IF(T1.course_id = 4, T1.line_score_x, NULL)) AS line_score_x_4,
- MAX(IF(T1.course_id = 5, T1.line_score_x, NULL)) AS line_score_x_5,
- MAX(IF(T1.course_id = 6, T1.line_score_x, NULL)) AS line_score_x_6,
- MAX(IF(T1.course_id = 7, T1.line_score_x, NULL)) AS line_score_x_7,
- MAX(IF(T1.course_id = 8, T1.line_score_x, NULL)) AS line_score_x_8,
- MAX(IF(T1.course_id = 9, T1.line_score_x, NULL)) AS line_score_x_9,
- MAX(IF(T1.course_id = 101, T1.line_score_x, NULL)) AS line_score_x_101,
- MAX(IF(T1.course_id = 100, T1.line_score_x, NULL)) AS line_score_x_100
- FROM ncee_course_line_score AS T1
- WHERE T1.ncee_plan_id = @nceePlanId
- GROUP BY T1.direction_course_id, T1.ncee_line_level
- ) AS T1
- JOIN base_course AS T2 ON T1.direction_course_id = T2.id
- JOIN (SELECT * FROM sys_dict_data WHERE sys_dict_type_id = 211) AS T3 ON T1.ncee_line_level = T3.`value`
- JOIN ncee_base_line AS T4 ON T1.ncee_plan_id = T4.ncee_plan_id AND T1.direction_course_id = T4.direction_course_id AND T1.ncee_line_level = T4.ncee_line_level
- ORDER BY T1.direction_course_id, T1.ncee_line_level
- ", new { NceePlanId = nceePlanId });
- return dt;
- }
- /// <summary>
- /// 获取有效分数据(科目未转置)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetLineScoreTable2(int nceePlanId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT T2.`name` AS course_name, T1.*
- FROM
- (
- SELECT T1.direction_course_id, T1.course_id,
- MAX(CASE WHEN T1.ncee_line_level = 1 THEN T1.line_score ELSE NULL END) AS line_score_1,
- MAX(CASE WHEN T1.ncee_line_level = 2 THEN T1.line_score ELSE NULL END) AS line_score_2,
- MAX(CASE WHEN T1.ncee_line_level = 3 THEN T1.line_score ELSE NULL END) AS line_score_3,
- MAX(CASE WHEN T1.ncee_line_level = 1 THEN T1.line_score_x ELSE NULL END) AS line_score_x_1,
- MAX(CASE WHEN T1.ncee_line_level = 2 THEN T1.line_score_x ELSE NULL END) AS line_score_x_2,
- MAX(CASE WHEN T1.ncee_line_level = 3 THEN T1.line_score_x ELSE NULL END) AS line_score_x_3
- FROM ncee_course_line_score AS T1
- WHERE T1.ncee_plan_id = @nceePlanId
- GROUP BY T1.direction_course_id, T1.course_id
- ) AS T1
- JOIN base_course AS T2 ON T1.course_id = T2.id
- ORDER BY T1.direction_course_id, T1.course_id
- ", new { NceePlanId = nceePlanId });
- return dt;
- }
- /// <summary>
- /// 获取平均分数据
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="directionCourseId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetAvgScoreTable(int nceePlanId, short directionCourseId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT IFNULL(T2.short_name, '合计') AS sys_org_short_name, T1.*
- FROM
- (
- SELECT T1.direction_course_id, T1.sys_org_id,
- MAX(T1.total_count) AS total_count,
- SUM(CASE WHEN T1.course_id = 1 THEN T1.total_count ELSE 0 END) AS total_count_1,
- SUM(CASE WHEN T1.course_id = 2 THEN T1.total_count ELSE 0 END) AS total_count_2,
- SUM(CASE WHEN T1.course_id = 3 THEN T1.total_count ELSE 0 END) AS total_count_3,
- SUM(CASE WHEN T1.course_id = 4 THEN T1.total_count ELSE 0 END) AS total_count_4,
- SUM(CASE WHEN T1.course_id = 5 THEN T1.total_count ELSE 0 END) AS total_count_5,
- SUM(CASE WHEN T1.course_id = 6 THEN T1.total_count ELSE 0 END) AS total_count_6,
- SUM(CASE WHEN T1.course_id = 7 THEN T1.total_count ELSE 0 END) AS total_count_7,
- SUM(CASE WHEN T1.course_id = 8 THEN T1.total_count ELSE 0 END) AS total_count_8,
- SUM(CASE WHEN T1.course_id = 9 THEN T1.total_count ELSE 0 END) AS total_count_9,
- SUM(CASE WHEN T1.course_id = 100 THEN T1.total_count ELSE 0 END) AS total_count_100,
- SUM(CASE WHEN T1.course_id = 1 THEN T1.avg_score ELSE 0 END) AS avg_score_1,
- SUM(CASE WHEN T1.course_id = 2 THEN T1.avg_score ELSE 0 END) AS avg_score_2,
- SUM(CASE WHEN T1.course_id = 3 THEN T1.avg_score ELSE 0 END) AS avg_score_3,
- SUM(CASE WHEN T1.course_id = 4 THEN T1.avg_score ELSE 0 END) AS avg_score_4,
- SUM(CASE WHEN T1.course_id = 5 THEN T1.avg_score ELSE 0 END) AS avg_score_5,
- SUM(CASE WHEN T1.course_id = 6 THEN T1.avg_score ELSE 0 END) AS avg_score_6,
- SUM(CASE WHEN T1.course_id = 7 THEN T1.avg_score ELSE 0 END) AS avg_score_7,
- SUM(CASE WHEN T1.course_id = 8 THEN T1.avg_score ELSE 0 END) AS avg_score_8,
- SUM(CASE WHEN T1.course_id = 9 THEN T1.avg_score ELSE 0 END) AS avg_score_9,
- SUM(CASE WHEN T1.course_id = 100 THEN T1.avg_score ELSE 0 END) AS avg_score_100,
- SUM(CASE WHEN T1.course_id = 1 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_1,
- SUM(CASE WHEN T1.course_id = 2 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_2,
- SUM(CASE WHEN T1.course_id = 3 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_3,
- SUM(CASE WHEN T1.course_id = 4 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_4,
- SUM(CASE WHEN T1.course_id = 5 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_5,
- SUM(CASE WHEN T1.course_id = 6 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_6,
- SUM(CASE WHEN T1.course_id = 7 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_7,
- SUM(CASE WHEN T1.course_id = 8 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_8,
- SUM(CASE WHEN T1.course_id = 9 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_9,
- SUM(CASE WHEN T1.course_id = 100 THEN T1.avg_score_x ELSE 0 END) AS avg_score_x_100
- FROM
- (
- SELECT T1.direction_course_id, 9999 AS sys_org_id, 100 AS course_id, COUNT(1) total_count, AVG(T1.score) avg_score, AVG(T1.score_x) avg_score_x
- FROM ncee_student AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- GROUP BY T1.direction_course_id
-
- UNION ALL
- SELECT T1.direction_course_id, T1.sys_org_id, 100 AS course_id, COUNT(1) total_count, AVG(T1.score) avg_score, AVG(T1.score_x) avg_score_x
- FROM ncee_student AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- GROUP BY T1.direction_course_id, T1.sys_org_id
-
- UNION ALL
- SELECT T1.direction_course_id, 9999 AS sys_org_id, T2.course_id, COUNT(1) total_count, AVG(T2.score) avg_score, AVG(T2.score_x) avg_score_x
- FROM ncee_student AS T1
- JOIN ncee_score AS T2 ON T1.id = T2.ncee_student_id
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- GROUP BY T1.direction_course_id, T2.course_id
-
- UNION ALL
- SELECT T1.direction_course_id, T1.sys_org_id, T2.course_id, COUNT(1) total_count, AVG(T2.score) avg_score, AVG(T2.score_x) avg_score_x
- FROM ncee_student AS T1
- JOIN ncee_score AS T2 ON T1.id = T2.ncee_student_id
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- GROUP BY T1.direction_course_id, T1.sys_org_id, T2.course_id
- ) AS T1
- GROUP BY T1.direction_course_id, T1.sys_org_id
- ) AS T1
- LEFT JOIN sys_org AS T2 ON T1.sys_org_id = T2.id
- ORDER BY T1.direction_course_id, T1.sys_org_id
- ", new { NceePlanId = nceePlanId, DirectionCourseId = directionCourseId });
- return dt;
- }
- /// <summary>
- /// 获取有效分上线(单上线)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetLineTotalTable(int nceePlanId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT IFNULL(T2.short_name, '合计') AS sys_org_short_name, T1.*,
- T3.line_count AS line_count_100,
- T3.total_count AS total_count_100,
- T3.line_rate AS line_rate_100
- FROM
- (
- SELECT T1.type, T1.direction_course_id, IFNULL(T1.sys_org_id, 0) AS sys_org_id, T1.ncee_line_level,
- MAX(IF(T1.course_id = 1, T1.total_count, NULL)) AS total_count_1,
- MAX(IF(T1.course_id = 2, T1.total_count, NULL)) AS total_count_2,
- MAX(IF(T1.course_id = 3, T1.total_count, NULL)) AS total_count_3,
- MAX(IF(T1.course_id = 4, T1.total_count, NULL)) AS total_count_4,
- MAX(IF(T1.course_id = 5, T1.total_count, NULL)) AS total_count_5,
- MAX(IF(T1.course_id = 6, T1.total_count, NULL)) AS total_count_6,
- MAX(IF(T1.course_id = 7, T1.total_count, NULL)) AS total_count_7,
- MAX(IF(T1.course_id = 8, T1.total_count, NULL)) AS total_count_8,
- MAX(IF(T1.course_id = 9, T1.total_count, NULL)) AS total_count_9,
- MAX(IF(T1.course_id = 101, T1.total_count, NULL)) AS total_count_101,
-
- MAX(IF(T1.course_id = 1, T1.line_count, NULL)) AS line_count_1,
- MAX(IF(T1.course_id = 2, T1.line_count, NULL)) AS line_count_2,
- MAX(IF(T1.course_id = 3, T1.line_count, NULL)) AS line_count_3,
- MAX(IF(T1.course_id = 4, T1.line_count, NULL)) AS line_count_4,
- MAX(IF(T1.course_id = 5, T1.line_count, NULL)) AS line_count_5,
- MAX(IF(T1.course_id = 6, T1.line_count, NULL)) AS line_count_6,
- MAX(IF(T1.course_id = 7, T1.line_count, NULL)) AS line_count_7,
- MAX(IF(T1.course_id = 8, T1.line_count, NULL)) AS line_count_8,
- MAX(IF(T1.course_id = 9, T1.line_count, NULL)) AS line_count_9,
- MAX(IF(T1.course_id = 101, T1.line_count, NULL)) AS line_count_101,
-
- MAX(IF(T1.course_id = 1, T1.line_rate, NULL)) AS line_rate_1,
- MAX(IF(T1.course_id = 2, T1.line_rate, NULL)) AS line_rate_2,
- MAX(IF(T1.course_id = 3, T1.line_rate, NULL)) AS line_rate_3,
- MAX(IF(T1.course_id = 4, T1.line_rate, NULL)) AS line_rate_4,
- MAX(IF(T1.course_id = 5, T1.line_rate, NULL)) AS line_rate_5,
- MAX(IF(T1.course_id = 6, T1.line_rate, NULL)) AS line_rate_6,
- MAX(IF(T1.course_id = 7, T1.line_rate, NULL)) AS line_rate_7,
- MAX(IF(T1.course_id = 8, T1.line_rate, NULL)) AS line_rate_8,
- MAX(IF(T1.course_id = 9, T1.line_rate, NULL)) AS line_rate_9,
- MAX(IF(T1.course_id = 101, T1.line_rate, NULL)) AS line_rate_101
- FROM ncee_line_course AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND (T1.type = 1 OR T1.type = 4) AND T1.is_double_line = 0
- GROUP BY T1.type, T1.direction_course_id, T1.sys_org_id, T1.ncee_line_level
- ) AS T1
- LEFT JOIN sys_org AS T2 ON T1.sys_org_id = T2.id
- LEFT JOIN
- (
- SELECT type, IFNULL(sys_org_id, 0) AS sys_org_id, ncee_line_level, direction_course_id, line_count, total_count, line_rate
- FROM ncee_line_total AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND (T1.type = 1 OR T1.type = 4)
- ) AS T3 ON T1.type = T3.type AND T1.sys_org_id = T3.sys_org_id AND T1.ncee_line_level = T3.ncee_line_level AND T1.direction_course_id = T3.direction_course_id
- ORDER BY T1.ncee_line_level, T1.direction_course_id, T1.type, T1.sys_org_id
- ", new { NceePlanId = nceePlanId });
- return dt;
- }
- /// <summary>
- /// 获取有效分双上线数据
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetLineCourseTable(int nceePlanId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT IFNULL(T2.short_name, '合计') AS sys_org_short_name, T1.*
- FROM
- (
- SELECT T1.type, T1.direction_course_id, IFNULL(T1.sys_org_id, 0) AS sys_org_id, T1.ncee_line_level,
- MAX(IF(T1.course_id = 1, T1.total_count, NULL)) AS total_count_1,
- MAX(IF(T1.course_id = 2, T1.total_count, NULL)) AS total_count_2,
- MAX(IF(T1.course_id = 3, T1.total_count, NULL)) AS total_count_3,
- MAX(IF(T1.course_id = 4, T1.total_count, NULL)) AS total_count_4,
- MAX(IF(T1.course_id = 5, T1.total_count, NULL)) AS total_count_5,
- MAX(IF(T1.course_id = 6, T1.total_count, NULL)) AS total_count_6,
- MAX(IF(T1.course_id = 7, T1.total_count, NULL)) AS total_count_7,
- MAX(IF(T1.course_id = 8, T1.total_count, NULL)) AS total_count_8,
- MAX(IF(T1.course_id = 9, T1.total_count, NULL)) AS total_count_9,
- MAX(IF(T1.course_id = 101, T1.total_count, NULL)) AS total_count_101,
-
- MAX(IF(T1.course_id = 1, T1.line_count, NULL)) AS line_count_1,
- MAX(IF(T1.course_id = 2, T1.line_count, NULL)) AS line_count_2,
- MAX(IF(T1.course_id = 3, T1.line_count, NULL)) AS line_count_3,
- MAX(IF(T1.course_id = 4, T1.line_count, NULL)) AS line_count_4,
- MAX(IF(T1.course_id = 5, T1.line_count, NULL)) AS line_count_5,
- MAX(IF(T1.course_id = 6, T1.line_count, NULL)) AS line_count_6,
- MAX(IF(T1.course_id = 7, T1.line_count, NULL)) AS line_count_7,
- MAX(IF(T1.course_id = 8, T1.line_count, NULL)) AS line_count_8,
- MAX(IF(T1.course_id = 9, T1.line_count, NULL)) AS line_count_9,
- MAX(IF(T1.course_id = 101, T1.line_count, NULL)) AS line_count_101,
-
- MAX(IF(T1.course_id = 1, T1.line_rate, NULL)) AS line_rate_1,
- MAX(IF(T1.course_id = 2, T1.line_rate, NULL)) AS line_rate_2,
- MAX(IF(T1.course_id = 3, T1.line_rate, NULL)) AS line_rate_3,
- MAX(IF(T1.course_id = 4, T1.line_rate, NULL)) AS line_rate_4,
- MAX(IF(T1.course_id = 5, T1.line_rate, NULL)) AS line_rate_5,
- MAX(IF(T1.course_id = 6, T1.line_rate, NULL)) AS line_rate_6,
- MAX(IF(T1.course_id = 7, T1.line_rate, NULL)) AS line_rate_7,
- MAX(IF(T1.course_id = 8, T1.line_rate, NULL)) AS line_rate_8,
- MAX(IF(T1.course_id = 9, T1.line_rate, NULL)) AS line_rate_9,
- MAX(IF(T1.course_id = 101, T1.line_rate, NULL)) AS line_rate_101
- FROM ncee_line_course AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND (T1.type = 1 OR T1.type = 4) AND T1.is_double_line = 1
- GROUP BY T1.type, T1.direction_course_id, T1.sys_org_id, T1.ncee_line_level
- ) AS T1
- LEFT JOIN sys_org AS T2 ON T1.sys_org_id = T2.id
- ORDER BY T1.ncee_line_level, T1.direction_course_id, T1.type, T1.sys_org_id
- ", new { NceePlanId = nceePlanId });
- return dt;
- }
- /// <summary>
- /// 获取机构组合班级有效分上线(单上线,含各单科)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="sysOrgId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetOrgLineTotalTable(int nceePlanId, short sysOrgId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT T2.short_name AS sys_org_name,
- T1.*,
- T3.line_count AS line_count_100,
- T3.total_count AS total_count_100,
- T3.line_rate AS line_rate_100
- FROM
- (
- SELECT T1.type,
- T1.sys_org_id,
- T1.direction_course_id,
- T1.ncee_course_comb_id,
- T1.class_number,
- T1.ncee_line_level,
- MAX(IF(T1.course_id = 1, T1.total_count, NULL)) AS total_count_1,
- MAX(IF(T1.course_id = 2, T1.total_count, NULL)) AS total_count_2,
- MAX(IF(T1.course_id = 3, T1.total_count, NULL)) AS total_count_3,
- MAX(IF(T1.course_id = 4, T1.total_count, NULL)) AS total_count_4,
- MAX(IF(T1.course_id = 8, T1.total_count, NULL)) AS total_count_8,
- MAX(IF(T1.course_id = 101, T1.total_count, NULL)) AS total_count_101,
-
- MAX(IF(T1.course_id = 1, T1.line_count, NULL)) AS line_count_1,
- MAX(IF(T1.course_id = 2, T1.line_count, NULL)) AS line_count_2,
- MAX(IF(T1.course_id = 3, T1.line_count, NULL)) AS line_count_3,
- MAX(IF(T1.course_id = 4, T1.line_count, NULL)) AS line_count_4,
- MAX(IF(T1.course_id = 8, T1.line_count, NULL)) AS line_count_8,
- MAX(IF(T1.course_id = 101, T1.line_count, NULL)) AS line_count_101,
-
- MAX(IF(T1.course_id = 1, T1.line_rate, NULL)) AS line_rate_1,
- MAX(IF(T1.course_id = 2, T1.line_rate, NULL)) AS line_rate_2,
- MAX(IF(T1.course_id = 3, T1.line_rate, NULL)) AS line_rate_3,
- MAX(IF(T1.course_id = 4, T1.line_rate, NULL)) AS line_rate_4,
- MAX(IF(T1.course_id = 8, T1.line_rate, NULL)) AS line_rate_8,
- MAX(IF(T1.course_id = 101, T1.line_rate, NULL)) AS line_rate_101
- FROM ncee_line_course AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.sys_org_id = @sysOrgId AND T1.type < 4 AND T1.is_double_line = 0
- GROUP BY T1.type, T1.direction_course_id, T1.sys_org_id, T1.ncee_line_level, T1.ncee_course_comb_id, T1.class_number
- ) AS T1
- LEFT JOIN sys_org AS T2 ON T1.sys_org_id = T2.id
- LEFT JOIN
- (
- SELECT sys_org_id, type, ncee_line_level, direction_course_id, ncee_course_comb_id, class_number,line_count, total_count, line_rate
- FROM ncee_line_total AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.sys_org_id = @sysOrgId AND T1.type < 4
- ) AS T3
- ON T1.type = T3.type AND T1.sys_org_id = T3.sys_org_id AND
- T1.ncee_line_level = T3.ncee_line_level AND
- T1.direction_course_id = T3.direction_course_id AND
- IFNULL(T1.ncee_course_comb_id, 0) = IFNULL(T3.ncee_course_comb_id, 0) AND
- IFNULL(T1.class_number, 0) = IFNULL(T3.class_number, 0)
- ORDER BY T1.ncee_line_level, T1.direction_course_id, T1.type, T1.ncee_course_comb_id
- ", new { NceePlanId = nceePlanId, SysOrgId = sysOrgId });
- return dt;
- }
- /// <summary>
- /// 获取机构组合班级有效分上线(总分上线,不含单科)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="sysOrgId">0表示全部</param>
- /// <returns></returns>
- private async Task<DataTable> GetOrgLineTotalTable2(int nceePlanId, short sysOrgId = 0)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT *
- FROM
- (
- SELECT T1.*, IFNULL(T1.total_count_1, IFNULL(T1.total_count_2, T1.total_count_3)) AS total_count
- FROM
- (
- SELECT
- T1.direction_course_id,
- T1.type,
- T1.sys_org_id,
- T3.short_name AS sys_org_name,
- T1.ncee_course_comb_id,
- T2.short_name AS ncee_course_comb_name,
- T1.class_number,
- MAX(CASE WHEN T1.ncee_line_level = 1 THEN T1.line_count ELSE NULL END) AS line_count_1,
- MAX(CASE WHEN T1.ncee_line_level = 1 THEN T1.line_rate ELSE NULL END) AS line_rate_1,
- MAX(CASE WHEN T1.ncee_line_level = 1 THEN T1.total_count ELSE NULL END) AS total_count_1,
- MAX(CASE WHEN T1.ncee_line_level = 2 THEN T1.line_count ELSE NULL END) AS line_count_2,
- MAX(CASE WHEN T1.ncee_line_level = 2 THEN T1.line_rate ELSE NULL END) AS line_rate_2,
- MAX(CASE WHEN T1.ncee_line_level = 2 THEN T1.total_count ELSE NULL END) AS total_count_2,
- MAX(CASE WHEN T1.ncee_line_level = 3 THEN T1.line_count ELSE NULL END) AS line_count_3,
- MAX(CASE WHEN T1.ncee_line_level = 3 THEN T1.line_rate ELSE NULL END) AS line_rate_3,
- MAX(CASE WHEN T1.ncee_line_level = 3 THEN T1.total_count ELSE NULL END) AS total_count_3
- FROM ncee_line_total AS T1
- LEFT JOIN ncee_course_comb AS T2 ON T1.ncee_course_comb_id = T2.id
- LEFT JOIN sys_org AS T3 ON T1.sys_org_id = T3.id
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.type < 4 AND (T1.sys_org_id = @sysOrgId OR @sysOrgId = 0)
- GROUP BY T1.direction_course_id, T1.type, T1.sys_org_id, T3.short_name, T1.ncee_course_comb_id, T2.short_name, T1.class_number
- ) AS T1
-
- UNION ALL
-
- SELECT
- T1.direction_course_id,
- CAST(3 AS SIGNED) AS type,
- T1.sys_org_id,
- T4.short_name AS sys_org_name,
- T1.ncee_course_comb_id,
- T3.short_name AS ncee_course_comb_name,
- T1.class_number,
- NULL AS line_count_1,
- NULL AS line_rate_1,
- NULL AS total_count_1,
- NULL AS line_count_2,
- NULL AS line_rate_2,
- NULL AS total_count_2,
- NULL AS line_count_3,
- NULL AS line_rate_3,
- NULL AS total_count_3,
- COUNT(1) AS total_count
- FROM (SELECT * FROM ncee_student WHERE ncee_plan_id = @nceePlanId AND (sys_org_id = @sysOrgId OR @sysOrgId = 0)) AS T1
- LEFT JOIN
- (
- SELECT DISTINCT T1.sys_org_id, T1.class_number, T1.ncee_course_comb_id
- FROM ncee_line_total AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.type = 3 AND (T1.sys_org_id = @sysOrgId OR @sysOrgId = 0)
- ) AS T2 ON T1.sys_org_id = T2.sys_org_id AND T1.class_number = T2.class_number AND T1.ncee_course_comb_id = T2.ncee_course_comb_id
- LEFT JOIN ncee_course_comb AS T3 ON T1.ncee_course_comb_id = T3.id
- LEFT JOIN sys_org AS T4 ON T1.sys_org_id = T4.id
- WHERE T2.class_number IS NULL AND T1.score_x > 0
- GROUP BY T1.direction_course_id, T1.sys_org_id, T4.short_name, T1.ncee_course_comb_id, T3.short_name, T1.class_number
-
- UNION ALL
-
- SELECT
- T1.direction_course_id,
- CAST(2 AS SIGNED) AS type,
- T1.sys_org_id,
- T4.short_name AS sys_org_name,
- T1.ncee_course_comb_id,
- T3.short_name AS ncee_course_comb_name,
- NULL AS class_number,
- NULL AS line_count_1,
- NULL AS line_rate_1,
- NULL AS total_count_1,
- NULL AS line_count_2,
- NULL AS line_rate_2,
- NULL AS total_count_2,
- NULL AS line_count_3,
- NULL AS line_rate_3,
- NULL AS total_count_3,
- COUNT(1) AS total_count
- FROM (SELECT * FROM ncee_student WHERE ncee_plan_id = @nceePlanId AND (sys_org_id = @sysOrgId OR @sysOrgId = 0)) AS T1
- LEFT JOIN
- (
- SELECT DISTINCT T1.sys_org_id, T1.ncee_course_comb_id
- FROM ncee_line_total AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.type = 2 AND (T1.sys_org_id = @sysOrgId OR @sysOrgId = 0)
- ) AS T2 ON T1.sys_org_id = T2.sys_org_id AND T1.ncee_course_comb_id = T2.ncee_course_comb_id
- LEFT JOIN ncee_course_comb AS T3 ON T1.ncee_course_comb_id = T3.id
- LEFT JOIN sys_org AS T4 ON T1.sys_org_id = T4.id
- WHERE T2.ncee_course_comb_id IS NULL AND T1.score_x > 0
- GROUP BY T1.direction_course_id, T1.sys_org_id, T4.short_name, T1.ncee_course_comb_id, T3.short_name
- ) AS T1
- ORDER BY T1.direction_course_id, T1.sys_org_id, T1.ncee_course_comb_id, T1.class_number
- ;
- ", new { NceePlanId = nceePlanId, SysOrgId = sysOrgId });
- return dt;
- }
- /// <summary>
- /// 获取机构组合班级有效分双上线数据
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="sysOrgId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetOrgLineCourseTable(int nceePlanId, short sysOrgId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT T2.short_name AS sys_org_name, T1.*
- FROM
- (
- SELECT T1.type,
- T1.sys_org_id,
- T1.direction_course_id,
- T1.ncee_course_comb_id,
- T1.class_number,
- T1.ncee_line_level,
- MAX(IF(T1.course_id = 1, T1.total_count, NULL)) AS total_count_1,
- MAX(IF(T1.course_id = 2, T1.total_count, NULL)) AS total_count_2,
- MAX(IF(T1.course_id = 3, T1.total_count, NULL)) AS total_count_3,
- MAX(IF(T1.course_id = 4, T1.total_count, NULL)) AS total_count_4,
- MAX(IF(T1.course_id = 101, T1.total_count, NULL)) AS total_count_101,
-
- MAX(IF(T1.course_id = 1, T1.line_count, NULL)) AS line_count_1,
- MAX(IF(T1.course_id = 2, T1.line_count, NULL)) AS line_count_2,
- MAX(IF(T1.course_id = 3, T1.line_count, NULL)) AS line_count_3,
- MAX(IF(T1.course_id = 4, T1.line_count, NULL)) AS line_count_4,
- MAX(IF(T1.course_id = 101, T1.line_count, NULL)) AS line_count_101,
-
- MAX(IF(T1.course_id = 1, T1.line_rate, NULL)) AS line_rate_1,
- MAX(IF(T1.course_id = 2, T1.line_rate, NULL)) AS line_rate_2,
- MAX(IF(T1.course_id = 3, T1.line_rate, NULL)) AS line_rate_3,
- MAX(IF(T1.course_id = 4, T1.line_rate, NULL)) AS line_rate_4,
- MAX(IF(T1.course_id = 101, T1.line_rate, NULL)) AS line_rate_101
- FROM ncee_line_course AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.sys_org_id = @sysOrgId AND T1.type < 4 AND T1.is_double_line = 1
- GROUP BY T1.type, T1.direction_course_id, T1.sys_org_id, T1.ncee_line_level, T1.ncee_course_comb_id, T1.class_number
- ) AS T1
- LEFT JOIN sys_org AS T2 ON T1.sys_org_id = T2.id
- ORDER BY T1.ncee_line_level, T1.direction_course_id, T1.type, T1.sys_org_id
- ", new { NceePlanId = nceePlanId, SysOrgId = sysOrgId });
- return dt;
- }
- /// <summary>
- /// 获取机构组合班级有效分双上线数据(科目未转置)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="sysOrgId">0表示全部</param>
- /// <returns></returns>
- private async Task<DataTable> GetOrgLineCourseTable2(int nceePlanId, short sysOrgId = 0)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT T1.*, IFNULL(T1.total_count_1, IFNULL(T1.total_count_2, T1.total_count_3)) AS total_count
- FROM
- (
- SELECT
- T1.direction_course_id,
- T1.course_id,
- T1.type,
- T1.sys_org_id,
- T3.short_name AS sys_org_name,
- T1.ncee_course_comb_id,
- T2.short_name AS ncee_course_comb_name,
- T1.class_number,
- MAX(CASE WHEN T1.ncee_line_level = 1 THEN T1.line_count ELSE NULL END) AS line_count_1,
- MAX(CASE WHEN T1.ncee_line_level = 1 THEN T1.line_rate ELSE NULL END) AS line_rate_1,
- MAX(CASE WHEN T1.ncee_line_level = 1 THEN T1.total_count ELSE NULL END) AS total_count_1,
- MAX(CASE WHEN T1.ncee_line_level = 2 THEN T1.line_count ELSE NULL END) AS line_count_2,
- MAX(CASE WHEN T1.ncee_line_level = 2 THEN T1.line_rate ELSE NULL END) AS line_rate_2,
- MAX(CASE WHEN T1.ncee_line_level = 2 THEN T1.total_count ELSE NULL END) AS total_count_2,
- MAX(CASE WHEN T1.ncee_line_level = 3 THEN T1.line_count ELSE NULL END) AS line_count_3,
- MAX(CASE WHEN T1.ncee_line_level = 3 THEN T1.line_rate ELSE NULL END) AS line_rate_3,
- MAX(CASE WHEN T1.ncee_line_level = 3 THEN T1.total_count ELSE NULL END) AS total_count_3
- FROM ncee_line_course AS T1
- LEFT JOIN ncee_course_comb AS T2 ON T1.ncee_course_comb_id = T2.id
- LEFT JOIN sys_org AS T3 ON T1.sys_org_id = T3.id
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.type < 4 AND T1.is_double_line = 1 AND (T1.sys_org_id = @sysOrgId OR @sysOrgId = 0)
- GROUP BY T1.direction_course_id, T1.course_id, T1.type, T1.sys_org_id, T3.short_name, T1.ncee_course_comb_id, T2.short_name, T1.class_number
- ) AS T1
- ORDER BY T1.direction_course_id, T1.course_id, T1.sys_org_id, T1.ncee_course_comb_id, T1.class_number
- ", new { NceePlanId = nceePlanId, SysOrgId = sysOrgId });
- return dt;
- }
- /// <summary>
- /// 获取总分分数段统计表
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="directionCourseId"></param>
- /// <param name="orgList"></param>
- /// <returns></returns>
- private async Task<DataTable> GetTotalScoreRangeTable(int nceePlanId, short directionCourseId, List<SysOrgOutput> orgList)
- {
- var orgSumSelects = orgList.Select(t => @$"
- SUM(CASE WHEN T2.sys_org_id = {t.Id} THEN T2.total_count ELSE 0 END) AS total_count_{t.Id}");
- var orgSum = string.Join(",", orgSumSelects);
- var dt = await _rep.SqlQueryAsync(@$"
- SELECT T1.id AS exam_score_range_id, T1.`name` AS exam_score_range_name,{orgSum},
- SUM(CASE WHEN T2.sys_org_id = 9998 THEN T2.total_count ELSE 0 END) AS total_count_range_current,
- SUM(CASE WHEN T2.sys_org_id = 9999 THEN T2.total_count ELSE 0 END) AS total_count_range_sum
- FROM exam_score_range AS T1
- LEFT JOIN
- (
- -- 全部分段统计
- SELECT 9998 AS sys_org_id, T1.exam_score_range_id, COUNT(T1.exam_score_range_id) AS total_count
- FROM
- (
- SELECT get_exam_score_range_id_s(1, 10, 200, 750, T1.score_x) AS exam_score_range_id
- FROM ncee_student AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- ) AS T1
- GROUP BY T1.exam_score_range_id
-
- UNION ALL
- -- 全部分段累计
- SELECT 9999 AS sys_org_id, T1.exam_score_range_id,
- SUM(T1.total_count) OVER (ORDER BY T1.sequence ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS total_count
- FROM
- (
- SELECT T1.*, T2.sequence
- FROM
- (
- SELECT T1.exam_score_range_id, SUM(T1.count) AS total_count
- FROM
- (
- SELECT get_exam_score_range_id_s(1, 10, 200, 750, T1.score_x) AS exam_score_range_id, 1 AS count
- FROM ncee_student AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- UNION ALL
- SELECT id, 0 FROM exam_score_range WHERE type = 1
- ) AS T1
- GROUP BY T1.exam_score_range_id
- ) AS T1
- LEFT JOIN exam_score_range AS T2 ON T1.exam_score_range_id = T2.id
- ) AS T1
- GROUP BY T1.exam_score_range_id
-
- UNION ALL
- -- 机构分段统计
- SELECT T1.sys_org_id, T1.exam_score_range_id, COUNT(T1.exam_score_range_id) AS total_count
- FROM
- (
- SELECT T1.sys_org_id, get_exam_score_range_id_s(1, 10, 200, 750, T1.score_x) AS exam_score_range_id
- FROM ncee_student AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- ) AS T1
- GROUP BY T1.sys_org_id, T1.exam_score_range_id
- ) AS T2 ON T1.id = T2.exam_score_range_id
- WHERE T1.type = 1
- GROUP BY T1.id, T1.`name`
- ORDER BY T1.sequence
- ", new { NceePlanId = nceePlanId, DirectionCourseId = directionCourseId });
- return dt;
- }
- /// <summary>
- /// 获取总分分数段统计表(未选科)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="orgList"></param>
- /// <returns></returns>
- private async Task<DataTable> GetTotalScoreRangeTableUnselected(int nceePlanId, List<SysOrgOutput> orgList)
- {
- var orgSumSelects = orgList.Select(t => @$"
- SUM(CASE WHEN T2.sys_org_id = {t.Id} THEN T2.total_count ELSE 0 END) AS total_count_{t.Id}");
- var orgSum = string.Join(",", orgSumSelects);
- var dt = await _rep.SqlQueryAsync(@$"
- SELECT T1.id AS exam_score_range_id, T1.`name` AS exam_score_range_name,{orgSum},
- SUM(CASE WHEN T2.sys_org_id = 9998 THEN T2.total_count ELSE 0 END) AS total_count_range_current,
- SUM(CASE WHEN T2.sys_org_id = 9999 THEN T2.total_count ELSE 0 END) AS total_count_range_sum
- FROM exam_score_range AS T1
- LEFT JOIN
- (
- -- 全部分段统计
- SELECT 9998 AS sys_org_id, T1.exam_score_range_id, COUNT(T1.exam_score_range_id) AS total_count
- FROM
- (
- SELECT get_exam_score_range_id_s(4, 10, 240, 900, T1.score_x) AS exam_score_range_id
- FROM ncee_student AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- ) AS T1
- GROUP BY T1.exam_score_range_id
-
- UNION ALL
- -- 全部分段累计
- SELECT 9999 AS sys_org_id, T1.exam_score_range_id,
- SUM(T1.total_count) OVER (ORDER BY T1.sequence ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS total_count
- FROM
- (
- SELECT T1.*, T2.sequence
- FROM
- (
- SELECT T1.exam_score_range_id, SUM(T1.count) AS total_count
- FROM
- (
- SELECT get_exam_score_range_id_s(4, 10, 240, 900, T1.score_x) AS exam_score_range_id, 1 AS count
- FROM ncee_student AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- UNION ALL
- SELECT id, 0 FROM exam_score_range WHERE type = 4
- ) AS T1
- GROUP BY T1.exam_score_range_id
- ) AS T1
- LEFT JOIN exam_score_range AS T2 ON T1.exam_score_range_id = T2.id
- ) AS T1
- GROUP BY T1.exam_score_range_id
-
- UNION ALL
- -- 机构分段统计
- SELECT T1.sys_org_id, T1.exam_score_range_id, COUNT(T1.exam_score_range_id) AS total_count
- FROM
- (
- SELECT T1.sys_org_id, get_exam_score_range_id_s(4, 10, 240, 900, T1.score_x) AS exam_score_range_id
- FROM ncee_student AS T1
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId
- ) AS T1
- GROUP BY T1.sys_org_id, T1.exam_score_range_id
- ) AS T2 ON T1.id = T2.exam_score_range_id
- WHERE T1.type = 4
- GROUP BY T1.id, T1.`name`
- ORDER BY T1.sequence
- ", new { NceePlanId = nceePlanId, DirectionCourseId = 99 });
- return dt;
- }
- /// <summary>
- /// 获取单科分数段统计表
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="directionCourseId"></param>
- /// <param name="courseId"></param>
- /// <param name="orgList"></param>
- /// <returns></returns>
- private async Task<DataTable> GetCourseScoreRangeTable(int nceePlanId, short directionCourseId, short courseId, List<SysOrgOutput> orgList)
- {
- int type = 3; // 总分100分
- int rangeScore = 5;
- int highScore = 100;
- if (courseId == 1 || courseId == 2 || courseId == 3)
- {
- type = 2; // 总分150分
- highScore = 150;
- }
- var orgSumSelects = orgList.Select(t => @$"
- SUM(CASE WHEN T2.sys_org_id = {t.Id} THEN T2.total_count ELSE 0 END) AS total_count_{t.Id}");
- var orgSum = string.Join(",", orgSumSelects);
- var dt = await _rep.SqlQueryAsync($@"
- SELECT T1.id AS exam_score_range_id, T1.`name` AS exam_score_range_name,{orgSum},
- SUM(CASE WHEN T2.sys_org_id = 9998 THEN T2.total_count ELSE 0 END) AS total_count_range_current,
- SUM(CASE WHEN T2.sys_org_id = 9999 THEN T2.total_count ELSE 0 END) AS total_count_range_sum
- FROM exam_score_range AS T1
- LEFT JOIN
- (
- -- 全部分段统计
- SELECT 9998 AS sys_org_id, T1.exam_score_range_id, COUNT(T1.exam_score_range_id) AS total_count
- FROM
- (
- SELECT get_exam_score_range_id_s(@type, @rangeScore, @rangeScore, @highScore, T2.score_x) AS exam_score_range_id
- FROM ncee_student AS T1
- JOIN ncee_score AS T2 ON T1.id = T2.ncee_student_id
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId AND T2.course_id = @courseId
- ) AS T1
- GROUP BY T1.exam_score_range_id
-
- UNION ALL
- -- 全部分段累计
- SELECT 9999 AS sys_org_id, T1.exam_score_range_id,
- SUM(T1.total_count) OVER (ORDER BY T1.sequence ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS total_count
- FROM
- (
- SELECT T1.*, T2.sequence
- FROM
- (
- SELECT T1.exam_score_range_id, SUM(T1.count) AS total_count
- FROM
- (
- SELECT get_exam_score_range_id_s(@type, @rangeScore, @rangeScore, @highScore, T2.score_x) AS exam_score_range_id, 1 AS count
- FROM ncee_student AS T1
- JOIN ncee_score AS T2 ON T1.id = T2.ncee_student_id
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId AND T2.course_id = @courseId
- UNION ALL
- SELECT id, 0 FROM exam_score_range WHERE type = @type
- ) AS T1
- GROUP BY T1.exam_score_range_id
- ) AS T1
- LEFT JOIN exam_score_range AS T2 ON T1.exam_score_range_id = T2.id
- ) AS T1
- GROUP BY T1.exam_score_range_id
-
- UNION ALL
- -- 机构分段统计
- SELECT T1.sys_org_id, T1.exam_score_range_id, COUNT(T1.exam_score_range_id) AS total_count
- FROM
- (
- SELECT T1.sys_org_id, get_exam_score_range_id_s(@type, @rangeScore, @rangeScore, @highScore, T2.score_x) AS exam_score_range_id
- FROM ncee_student AS T1
- JOIN ncee_score AS T2 ON T1.id = T2.ncee_student_id
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId AND T2.course_id = @courseId
- ) AS T1
- GROUP BY T1.sys_org_id, T1.exam_score_range_id
- ) AS T2 ON T1.id = T2.exam_score_range_id
- WHERE T1.type = @type
- GROUP BY T1.id, T1.`name`
- ORDER BY T1.sequence
- ", new { NceePlanId = nceePlanId, DirectionCourseId = directionCourseId, CourseId = courseId, Type = type, RangeScore = rangeScore, HighScore = highScore });
- return dt;
- }
- /// <summary>
- /// 获取单科分数段统计表(未选科)
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="courseId"></param>
- /// <param name="orgList"></param>
- /// <returns></returns>
- private async Task<DataTable> GetCourseScoreRangeTableUnselected(int nceePlanId, short courseId, List<SysOrgOutput> orgList)
- {
- return await GetCourseScoreRangeTable(nceePlanId, 99, courseId, orgList);
- }
- /// <summary>
- /// 获取各科原始分转换区间表
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetConvertRangeTable(int nceePlanId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT T2.`name` AS course_name, T1.*
- FROM
- (
- SELECT course_id,
- MAX(IF(ncee_convert_grade_id = 1, min_score, NULL)) AS min_score_a,
- MAX(IF(ncee_convert_grade_id = 1, max_score, NULL)) AS max_score_a,
- MAX(IF(ncee_convert_grade_id = 2, min_score, NULL)) AS min_score_b,
- MAX(IF(ncee_convert_grade_id = 2, max_score, NULL)) AS max_score_b,
- MAX(IF(ncee_convert_grade_id = 3, min_score, NULL)) AS min_score_c,
- MAX(IF(ncee_convert_grade_id = 3, max_score, NULL)) AS max_score_c,
- MAX(IF(ncee_convert_grade_id = 4, min_score, NULL)) AS min_score_d,
- MAX(IF(ncee_convert_grade_id = 4, max_score, NULL)) AS max_score_d,
- MAX(IF(ncee_convert_grade_id = 5, min_score, NULL)) AS min_score_e,
- MAX(IF(ncee_convert_grade_id = 5, max_score, NULL)) AS max_score_e
- FROM ncee_convert_range
- WHERE ncee_plan_id = @nceePlanId
- GROUP BY course_id
- ) AS T1
- JOIN base_course AS T2 ON T1.course_id = T2.id
- ", new { NceePlanId = nceePlanId });
- return dt;
- }
- /// <summary>
- /// 获取转换分明细表
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <param name="directionCourseId"></param>
- /// <param name="sysOrgId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetConvertScoreTable(int nceePlanId, short directionCourseId, short sysOrgId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT
- T2.`name` AS sys_org_name,
- T2.short_name AS sys_org_short_name,
- T3.`name` AS direction_course_name,
- T4.short_name AS ncee_course_comb_short_name,
- T1.*,
- IFNULL(T1.score_5, 0) + IFNULL(T1.score_6, 0) + IFNULL(T1.score_7, 0) + IFNULL(T1.score_9, 0) AS comb_score,
- IFNULL(T1.score_x_5, 0) + IFNULL(T1.score_x_6, 0) + IFNULL(T1.score_x_7, 0) + IFNULL(T1.score_x_9, 0) AS comb_score_x
- FROM
- (
- SELECT
- T1.sys_org_id,
- T1.direction_course_id,
- T1.ncee_course_comb_id,
- T1.class_number,
- T1.id,
- T1.exam_number,
- T1.`name`,
- MAX(T1.score) AS score,
- MAX(T1.score_x) AS score_x,
- MAX(T1.order_in_total) AS order_in_total,
- MAX(T1.order_in_total_x) AS order_in_total_x,
- MAX(T1.order_in_org) AS order_in_org,
- MAX(T1.order_in_org_x) AS order_in_org_x,
- MAX(CASE WHEN T2.course_id = 1 THEN T2.score ELSE NULL END) AS score_1,
- MAX(CASE WHEN T2.course_id = 2 THEN T2.score ELSE NULL END) AS score_2,
- MAX(CASE WHEN T2.course_id = 3 THEN T2.score ELSE NULL END) AS score_3,
- MAX(CASE WHEN T2.course_id = 4 THEN T2.score ELSE NULL END) AS score_4,
- MAX(CASE WHEN T2.course_id = 5 THEN T2.score ELSE NULL END) AS score_5,
- MAX(CASE WHEN T2.course_id = 6 THEN T2.score ELSE NULL END) AS score_6,
- MAX(CASE WHEN T2.course_id = 7 THEN T2.score ELSE NULL END) AS score_7,
- MAX(CASE WHEN T2.course_id = 8 THEN T2.score ELSE NULL END) AS score_8,
- MAX(CASE WHEN T2.course_id = 9 THEN T2.score ELSE NULL END) AS score_9,
-
- MAX(CASE WHEN T2.course_id = 5 THEN T2.score_x ELSE NULL END) AS score_x_5,
- MAX(CASE WHEN T2.course_id = 6 THEN T2.score_x ELSE NULL END) AS score_x_6,
- MAX(CASE WHEN T2.course_id = 7 THEN T2.score_x ELSE NULL END) AS score_x_7,
- MAX(CASE WHEN T2.course_id = 9 THEN T2.score_x ELSE NULL END) AS score_x_9,
-
- MAX(CASE WHEN T2.course_id = 5 THEN T2.ncee_convert_grade_name ELSE '' END) AS ncee_convert_grade_name_5,
- MAX(CASE WHEN T2.course_id = 6 THEN T2.ncee_convert_grade_name ELSE '' END) AS ncee_convert_grade_name_6,
- MAX(CASE WHEN T2.course_id = 7 THEN T2.ncee_convert_grade_name ELSE '' END) AS ncee_convert_grade_name_7,
- MAX(CASE WHEN T2.course_id = 9 THEN T2.ncee_convert_grade_name ELSE '' END) AS ncee_convert_grade_name_9
- FROM ncee_student AS T1
- JOIN ncee_score AS T2 ON T1.id = T2.ncee_student_id
- WHERE T1.ncee_plan_id = @nceePlanId AND T1.direction_course_id = @directionCourseId AND (T1.sys_org_id = @sysOrgId OR @sysOrgId = 0)
- GROUP BY T1.sys_org_id, T1.direction_course_id, T1.ncee_course_comb_id, T1.class_number, T1.id, T1.exam_number, T1.`name`
- ) AS T1
- JOIN sys_org AS T2 ON T1.sys_org_id = T2.id
- LEFT JOIN base_course AS T3 ON T1.direction_course_id = T3.id
- LEFT JOIN ncee_course_comb AS T4 ON T1.ncee_course_comb_id = T4.id
- ORDER BY T1.direction_course_id, T1.score_x DESC
- ", new { NceePlanId = nceePlanId, DirectionCourseId = directionCourseId, SysOrgId = sysOrgId });
- return dt;
- }
- /// <summary>
- /// 获取参与划线机构列表
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- private async Task<List<SysOrgOutput>> GetSysOrgList(int nceePlanId)
- {
- var ret = await _rep.Change<NceeStudent>().DetachedEntities.Where(t => t.NceePlanId == nceePlanId && t.Score > 0)
- .Select(t => t.SysOrg).Distinct()
- .OrderBy(t => t.Id)
- .ProjectToType<SysOrgOutput>().ToListAsync();
- return ret;
- }
- /// <summary>
- /// 获取划线依据
- /// </summary>
- /// <param name="nceePlanId"></param>
- /// <returns></returns>
- private async Task<DataTable> GetBaseLineTable(int nceePlanId)
- {
- var dt = await _rep.SqlQueryAsync(@"
- SELECT T1.ncee_line_level, T2.`name` AS ncee_line_level_name, T1.direction_course_id, T1.line_rate, T1.line_score, T1.line_score_x
- FROM ncee_base_line AS T1
- JOIN (SELECT * FROM sys_dict_data WHERE sys_dict_type_id = 211) AS T2 ON T1.ncee_line_level = T2.`value`
- WHERE T1.ncee_plan_id = @nceePlanId
- ", new { NceePlanId = nceePlanId });
- return dt;
- }
- #endregion
- #region 静态方法
- /// <summary>
- /// 获取等级合并名
- /// </summary>
- /// <param name="gradeNames"></param>
- /// <returns></returns>
- private static string GetMergeGradeName(List<string> gradeNames)
- {
- if (gradeNames == null)
- {
- return "";
- }
- var gns = gradeNames.Where(t => !string.IsNullOrEmpty(t) && !string.IsNullOrWhiteSpace(t)).OrderBy(t => t).ToList();
- Dictionary<string, int> cs = [];
- for (int i = 0; i < gns.Count; i++)
- {
- var g = gns[i];
- if (cs.TryGetValue(g, out int value))
- {
- cs[g] = ++value;
- }
- else
- {
- cs.Add(g, 1);
- }
- }
- string cgn = "";
- foreach (var c in cs)
- {
- cgn = $"{cgn}{c.Value}[{c.Key}]";
- }
- return cgn;
- }
- ///// <summary>
- ///// 导出柱状图
- ///// </summary>
- ///// <param name="sheet"></param>
- ///// <param name="drawing"></param>
- ///// <param name="anchor"></param>
- ///// <param name="startDataRow"></param>
- ///// <param name="endDataRow"></param>
- ///// <param name="columnIndex"></param>
- ///// <param name="title"></param>
- ///// <param name="serieTitle"></param>
- ///// <param name="catalogTitle"></param>
- ///// <param name="valueTile"></param>
- //private static void CreateBarChart(ISheet sheet, IDrawing drawing, IClientAnchor anchor, int startDataRow, int endDataRow, int columnIndex, string title = null, string serieTitle = null, string catalogTitle = null, string valueTile = null)
- //{
- // XSSFChart chart = (XSSFChart)drawing.CreateChart(anchor);
- // if (!string.IsNullOrEmpty(title))
- // {
- // chart.SetTitle(title);
- // chart.GetCTChart().title.tx.rich.p[0].pPr = new NPOI.OpenXmlFormats.Dml.CT_TextParagraphProperties
- // {
- // defRPr = new NPOI.OpenXmlFormats.Dml.CT_TextCharacterProperties() { sz = 1400 }
- // };
- // }
- // IBarChartData<string, double> barChartData = chart.ChartDataFactory.CreateBarChartData<string, double>();
- // IChartLegend legend = chart.GetOrCreateLegend();
- // legend.Position = LegendPosition.TopRight;
- // legend.IsOverlay = true;
- // IChartAxis bottomAxis = chart.ChartAxisFactory.CreateCategoryAxis(AxisPosition.Bottom);
- // bottomAxis.MajorTickMark = AxisTickMark.None;
- // IValueAxis leftAxis = chart.ChartAxisFactory.CreateValueAxis(AxisPosition.Left);
- // leftAxis.Crosses = AxisCrosses.AutoZero;
- // leftAxis.SetCrossBetween(AxisCrossBetween.Between);
- // IChartDataSource<string> categoryAxis = DataSources.FromStringCellRange(sheet, new CellRangeAddress(startDataRow, endDataRow, 0, 0));
- // IChartDataSource<double> valueAxis = DataSources.FromNumericCellRange(sheet, new CellRangeAddress(startDataRow, endDataRow, columnIndex, columnIndex));
- // var serie = barChartData.AddSeries(categoryAxis, valueAxis);
- // if (!string.IsNullOrEmpty(serieTitle))
- // {
- // serie.SetTitle(serieTitle);
- // }
- // chart.Plot(barChartData, bottomAxis, leftAxis);
- // var plotArea = chart.GetCTChart().plotArea;
- // plotArea.catAx[0].txPr = new CT_TextBody();
- // plotArea.catAx[0].txPr.AddNewP().pPr = new NPOI.OpenXmlFormats.Dml.CT_TextParagraphProperties()
- // {
- // defRPr = new NPOI.OpenXmlFormats.Dml.CT_TextCharacterProperties() { sz = 900 }
- // };
- // plotArea.catAx[0].majorTickMark = new CT_TickMark() { val = ST_TickMark.@out };
- // plotArea.valAx[0].txPr = new CT_TextBody();
- // plotArea.valAx[0].txPr.AddNewP().pPr = new NPOI.OpenXmlFormats.Dml.CT_TextParagraphProperties()
- // {
- // defRPr = new NPOI.OpenXmlFormats.Dml.CT_TextCharacterProperties() { sz = 900 }
- // };
- // plotArea.valAx[0].majorTickMark = new CT_TickMark() { val = ST_TickMark.@out };
- // var barChart = plotArea.barChart.First();
- // barChart.barDir = new CT_BarDir { val = ST_BarDir.col };
- // if (!string.IsNullOrEmpty(catalogTitle))
- // {
- // var aTitle = new CT_Title
- // {
- // tx = new CT_Tx()
- // };
- // aTitle.tx.rich = new CT_TextBody();
- // aTitle.tx.rich.AddNewP().AddNewR().t = catalogTitle;
- // plotArea.valAx[0].title = aTitle;
- // }
- // if (!string.IsNullOrEmpty(valueTile))
- // {
- // var aTitle = new CT_Title
- // {
- // tx = new CT_Tx()
- // };
- // aTitle.tx.rich = new CT_TextBody();
- // aTitle.tx.rich.AddNewP().AddNewR().t = valueTile;
- // plotArea.catAx[0].title = aTitle;
- // }
- //}
- #endregion
- }
|