From 4a08c5604238873abc79f8f81865d5dede89e004 Mon Sep 17 00:00:00 2001 From: youngq Date: Tue, 12 Nov 2024 17:51:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=AD=BE=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Frontend/HomeController.cs | 22 +++- .../Controllers/Frontend/RoomController.cs | 28 +++++ .../Controllers/Frontend/UserController.cs | 116 ++++++++++++++++++ WGShare.API/WGShare.API.csproj | 3 + WGShare.API/WGShare.API.xml | 32 +++++ WGShare.API/meetingRecordTemplate.xlsx | Bin 10143 -> 11132 bytes WGShare.API/signInListImportTemplate.xlsx | Bin 0 -> 10408 bytes .../DTOs/Room/RoomMettingRecordExportDTO.cs | 16 ++- .../DTOs/User/SignInListExcelDto.cs | 33 +++++ WGShare.Domain/DTOs/User/UserSignInListDto.cs | 18 +++ .../DTOs/User/UserSignInRecordDto.cs | 18 +++ WGShare.Domain/Entities/UserSignInList.cs | 48 ++++++++ WGShare.Domain/Entities/UserSignInRecord.cs | 44 +++++++ 13 files changed, 376 insertions(+), 2 deletions(-) create mode 100644 WGShare.API/signInListImportTemplate.xlsx create mode 100644 WGShare.Domain/DTOs/User/SignInListExcelDto.cs create mode 100644 WGShare.Domain/DTOs/User/UserSignInListDto.cs create mode 100644 WGShare.Domain/DTOs/User/UserSignInRecordDto.cs create mode 100644 WGShare.Domain/Entities/UserSignInList.cs create mode 100644 WGShare.Domain/Entities/UserSignInRecord.cs diff --git a/WGShare.API/Controllers/Frontend/HomeController.cs b/WGShare.API/Controllers/Frontend/HomeController.cs index 0b6a8cd..c2873e2 100644 --- a/WGShare.API/Controllers/Frontend/HomeController.cs +++ b/WGShare.API/Controllers/Frontend/HomeController.cs @@ -4,6 +4,8 @@ using Mapster; using Masuit.Tools; using Microsoft.AspNetCore.Mvc; using MiniExcelLibs; +using MiniExcelLibs.Attributes; +using MiniExcelLibs.OpenXml; using SqlSugar; using System.IO; using System.Text.RegularExpressions; @@ -211,9 +213,11 @@ namespace WGShare.API.Controllers.Frontend RoomNum = room.RoomNum, BeginTime = beginDatetime.ToString("yyyy-MM-dd HH:mm:ss"), EndTime = endDaetime.ToString("yyyy-MM-dd HH:mm:ss"), - Users = new List() + Users = new List(), + Signin = new List() }; + #region 计算入会次数、累计参会时长 foreach (var userRecord in groupByUser) { if (userRecord.IsNullOrEmpty()) @@ -262,6 +266,22 @@ namespace WGShare.API.Controllers.Frontend SumTime = sumTime, }); } + #endregion + + #region 计算签到次数 + var signins = await _sqlSugar.Queryable() + .InnerJoin((u, us) => u.UId == us.Id) + .Where((u, us) => u.RoomNum == roomNum && u.CreateTime >= beginDatetime && u.CreateTime <= endDaetime) + .Select((u, us) => new SignInListRecordExcelDto + { + Account = us.Account, + SignInTime = u.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), + UserName = us.UserName, + SignInName = u.SignInName + }) + .ToListAsync(); + value.Signin.AddRange(signins); + #endregion using var stream = new MemoryStream(); diff --git a/WGShare.API/Controllers/Frontend/RoomController.cs b/WGShare.API/Controllers/Frontend/RoomController.cs index 5f1468f..613b835 100644 --- a/WGShare.API/Controllers/Frontend/RoomController.cs +++ b/WGShare.API/Controllers/Frontend/RoomController.cs @@ -658,5 +658,33 @@ namespace WGShare.API.Controllers.Frontend return _ossHelper.GetAccessFileUrl(fileUrl); } #endregion + + /// + /// 获取签到列表 + /// + /// + [HttpGet("sign-in")] + public async Task> GetSignInList() + { + var list = await _sqlSugar.Queryable() + .Where(x => x.UId == UId) + .ToListAsync(); + + return list.Adapt>(); + } + + /// + /// 提交签到 + /// + /// + /// + [HttpPost("sign-in")] + public async Task SignIn([FromBody] List list) + { + var entitys = list.Adapt>(); + entitys.ForEach(x => x.UId = UId); + + await _sqlSugar.Insertable(entitys).ExecuteCommandAsync(); + } } } diff --git a/WGShare.API/Controllers/Frontend/UserController.cs b/WGShare.API/Controllers/Frontend/UserController.cs index 4229893..a49bb7d 100644 --- a/WGShare.API/Controllers/Frontend/UserController.cs +++ b/WGShare.API/Controllers/Frontend/UserController.cs @@ -16,6 +16,8 @@ using WGShare.Domain.FriendlyException; using WGShare.Domain.GeneralModel; using Yitter.IdGenerator; using WGShare.Domain.Enums; +using Microsoft.AspNetCore.Routing.Template; +using MiniExcelLibs.OpenXml; namespace WGShare.API.Controllers.Frontend { @@ -115,6 +117,45 @@ namespace WGShare.API.Controllers.Frontend .UpdateColumns(x => new { x.Account, x.UserName, x.RoleId, x.Year, x.Subject }).ExecuteCommandAsync() > 0; } + /// + /// 获取用户签到名单列表 + /// + /// + /// + [HttpGet("signs")] + public async Task> GetUserSignInList([FromQuery] string uid) + { + var list = await _sqlSugar.Queryable().Where(x => x.UId == uid) + .ToListAsync(); + + return list.Adapt>(); + } + + + /// + /// 修改用户签到列表 + /// + /// + [HttpPut("signs")] + public async Task ModifySignList([FromQuery] string uid, [FromBody] List signInList) + { + var entities = signInList.Adapt>(); + + using (var tran = _sqlSugar.AsTenant().UseTran()) + { + await _sqlSugar.Deleteable().Where(x => x.UId == uid).ExecuteCommandAsync(); + + if (!entities.IsNullOrEmpty()) + { + var stor = await _sqlSugar.Storageable(entities).ToStorageAsync(); + await stor.AsInsertable.ExecuteCommandAsync(); //不存在插入 + await stor.AsUpdateable.UpdateColumns(x => x.SignInName).ExecuteCommandAsync(); //存在更新 + } + tran.CommitTran(); + } + + } + /// /// 更改密码 /// @@ -245,6 +286,81 @@ namespace WGShare.API.Controllers.Frontend } + /// + /// 获取签到绑定列表 + /// + /// + [HttpGet("signin-list")] + public async Task GetSignInBinding() + { + var userWithSign = await _sqlSugar.Queryable() + .InnerJoin((u, r) => u.RoleId == r.Id) + .LeftJoin((u, r, s) => u.Id == s.UId) + .Where((u, r, s) => u.IsDelete == false && TenantId == u.TenantId) + .Select((u, r, s) => new SignInListExcelDto + { + UId = u.Id, + Account = u.Account, + RoleId = u.RoleId, + RoleName = r.RoleName, + SignInName = s.SignInName, + UserName = u.UserName, + }).ToListAsync(); + var value = new Dictionary() + { + ["Users"] = userWithSign + }; + + using var stream = new MemoryStream(); + await MiniExcel.SaveAsByTemplateAsync(stream, $@"{AppDomain.CurrentDomain.BaseDirectory}signInListImportTemplate.xlsx", value); + stream.Seek(0, SeekOrigin.Begin); + var fileName = $@"excel/签到绑定导入-{DateTime.Now.ToString("MMddHHmmss")}.xlsx"; + _ossHelper.UploadWithExpireTime(fileName, stream, 10); + return _ossHelper.GetAccessFileUrl(fileName, 5); + } + + + [HttpPost("import/signin-list")] + public async Task ImportSigninList([FromForm] IFormFile file) + { + using var stream = file.OpenReadStream(); + var rows = stream.Query().ToList(); + rows.RemoveAll(x => x == null || string.IsNullOrWhiteSpace(x.Account) || string.IsNullOrWhiteSpace(x.UId)); + if (rows.IsNullOrEmpty()) + { + throw Oops.Oh("无有效数据,请检查文件数据!"); + } + + // 获取已存在用户Id + var existsUIds = await _sqlSugar.Queryable() + .Where(x => x.IsDelete == false).Select(x => x.Id).ToListAsync(); + // 去除不存在用户Id + rows.RemoveAll(x => !existsUIds.Contains(x.UId)); + + var delUids = rows.Select(x => x.UId).Distinct().ToList(); + + + var entities = rows.Where(x => !string.IsNullOrWhiteSpace(x.SignInName)).Adapt>(); + + using (var tran = _sqlSugar.AsTenant().UseTran()) + { + await _sqlSugar.Deleteable().Where(x => delUids.Contains(x.UId)).ExecuteCommandAsync(); + + var store = await _sqlSugar.Storageable(entities) + .WhereColumns(x => new { x.UId, x.SignInName }) + .ToStorageAsync(); + + + await store.AsInsertable.ExecuteCommandAsync(); + await store.AsUpdateable.UpdateColumns(x => x.SignInName).ExecuteCommandHasChangeAsync(); + + tran.CommitTran(); + } + + + + return; + } } } diff --git a/WGShare.API/WGShare.API.csproj b/WGShare.API/WGShare.API.csproj index b2a151f..e1639d3 100644 --- a/WGShare.API/WGShare.API.csproj +++ b/WGShare.API/WGShare.API.csproj @@ -35,6 +35,9 @@ Never + + PreserveNewest + PreserveNewest diff --git a/WGShare.API/WGShare.API.xml b/WGShare.API/WGShare.API.xml index ec7eb40..95c3f6f 100644 --- a/WGShare.API/WGShare.API.xml +++ b/WGShare.API/WGShare.API.xml @@ -303,6 +303,19 @@ 文件Id + + + 获取签到列表 + + + + + + 提交签到 + + + + 获取用户列表 @@ -325,6 +338,19 @@ + + + 获取用户签到名单列表 + + + + + + + 修改用户签到列表 + + + 更改密码 @@ -353,6 +379,12 @@ + + + 获取签到绑定列表 + + + 前后端共用接口 diff --git a/WGShare.API/meetingRecordTemplate.xlsx b/WGShare.API/meetingRecordTemplate.xlsx index 824af456cd9e85c533a62df7ac9b363a393464e3..7144d8ef89d4c332a00efe230e790f6d0fd58461 100644 GIT binary patch delta 8192 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 YUzz|&9uet}3Gd}peCd~z>Ce;u10P= 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 diff --git a/WGShare.API/signInListImportTemplate.xlsx b/WGShare.API/signInListImportTemplate.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5068256d14b5d2d5722c45b69068f9686dadd404 GIT binary patch literal 10408 zcma)iWmp|s(lzc7Ah^4`yF>8c1a}K^aCZw%aCZ$(aCdii0t9#Wzz509y*HV8=lS-J z?(=k)>|WKoPFL+ECj|-y1N1sR$!-X|p8q|dUw#+@4CHJ9)^_xAFJdS!7odKMHL)+0 zGXMhtv48*pA^uZL&)S;K+0r5{szVZ#5k>UI_ZjgkfSHy^fr-*Lh#OMf0hbxD*e;D6 zy)%AKOJ`4b3u$!;P+43Ph zB7y>%LWa`ZoS;Ah%AW4}#(BLIG!hFW7?o_(K77|W47?^#EYPM}#-8c`JJ{xu+PGMf znxk?*AK1?#+2|7-8&tl(?Pe>i*~iqH+i#PTMG^Fxbaiwfu%3sSrE%TPdG%Cin-}YQ z-=6}i*17pX7gn^ykNnnXN7dy_d7=q@<^E&32dnU&Z7Qrt!e%zfM zUD464)78Dwng0+bS+=dMfxYY1^`>5S9rstM_%C#xbZz;ooXnAoaVSwHV%2ps2Pf_BPNO8H7w0tyDQYcy`B27wJa6gA#L2j zj6rQX^G=>y1ehY;E{n{=o*Az;LS7eFIn}tqmoM2*)bH|?Krgvsxjk-x6@$DTB0ZNz zuQ4)z)XcZiNb&P@ZHutW86kT#mrgSDY%K32^cn}8+XvsARIU&yT`6{vYC+psf~%MT zDj*XKrq7wFJ@VY0{MwLWi~QJBMtzh4DdzlBWXE(VRq7VY%+y#0@+e2yian=y#O~~k z&1GVi(8|Xlz>;rAp_m1ZRw#k&mz=&lE*4s9>Y+Sbo0 zIM0N=-%o?=iILL|5$n9G2V0&6Cjq~Q1C8KBljlyH^fd z^)Y9rNCMt4ShE>WV(-_2NXNs*03DlGaXcy{8EcQit{5#ZpL8oFD?4fr-$9%-)CC+> z3-wp?3u3jXqNE7%)8|U-AhM3=rv@QCX2`TR*3U;&4-e;{5**{qC zxH>Xd_3(tP#2?^$qI^O@-ft?nCyB6rOo8XpI(Qs<1bv0}zo#3}7igU=ekPj#E`ab$ zzzJY$Zf9y_WdCPUy4!vh;sXN$l7j~V!uSu_pDK($SC6VpOb#1jO99oh&qizSJo8f` z)9PZ)+?jv^YupNn3EWp1cmg6r=F#%87%&WIsxu?QbnTl1E7ok2t2<(;QffUTA-gfh zcLqyDE+XGa_+75?`5iORYL(9!BD-R@yQ=`X)%@jNPiD&U*V^gO>u5Zic_ta0^x8ND zVWT9lLrApZ5oyFmYW-*Zva)In$i0&kQfULuJa%6h1}wMM19&(5@FFEdYFQc$Np=RI ziOu?vyj)~MzMfqp@o&-_>jh}0ICBwN&Bz{%dF=NjkRs)f@}A3!Fux0!9kbn|so|+A z+%e7kpw_=i-$Twp_j#F6;;m=Q9vd){=Z&KBOd-{veC(XOJN5V3X5GUlz(vh5Vo+V&KN+3dZ{Zq@}EndM6|>;$!a|U)Ky~3ZFqX zbFD|Ol8O5PbGm)6EMxxHKGEGa3LsW9VXs-4O^t&E3WuS@y)e}+gH^688G>CPgpfrQ zG}4$j4+RfSIduj(br!v1zPXvUYfRX*%01?IE`ueL`d(;H>`aVz^{TOMxY{!9>^_;G zrU6JdF-5)EQ>JdfZjSFdz}(+Lae3!^6XPo&R^;n~v_ga73Me81b_5VWW>KVn>A;wV z5`qJp!;r0|2#f=>fG?W~!~El}ejs*Xv^OjG+tb&XCHvNIL!f|_P$qfK9{$7cM{Li!RB{1nU`vcHrog@aK`OutcqN%s|JB1~4iNk;~^~i}pYl&P3^hjGn zX^R5qMw{o3b%m%q-`>$0l6RZtVXzP~B2OVHeou96|4hZ-@exm1$KbJ;2oxEAlUVdh z#Qx(o_fSh37*hJw6Mgj)`v0B4UcZ-K5}3WIk)_ce-%I}Y4{*2OKtQc8dFk~pE(K@k3PlWRwuy9Hwex~ zAMESUCBTN|8}X87z=cRq$9>Fml-r#HqMEZwb1j(tf_l#a1pjF*zp`hdL8H7nnR6B- z>0RXUs8z$V!)g4JlsTKz(1>5*;TmiIZh6W2!HjX!#s+KuTCw@9lsxrE6`UVfhNm^G z?gi>*%G?Ore)^J=dsti{gEg|O@6bOp=6uq2Zc*IFtG2sE2DhLn%*)59QgRKB&wL1T zS}zuoCy~JFcM0q>g{rnBl!QnHduNC&#R|FD)qigl7^rV4E`uIKNS%Ub{nIIA&JYrh$X+*^``t)^m;06c>BCgH4&T#qBs$wu z!U_M=UBTF+07Z75D1EE*`9T#qee2_99RS~L4H5_5!a0NF0~q_Mnsq4YS_(p#Ip<3v zjM?oA;y|W=SizgY#pG_swiEHFCv)_3`Xu~(3S2&N%w2n}&ll6pd~wBL zBqDiPpJ9KJt^wvUvEW-IfcU-P8loAcy*P6J(6R|Z?qcxBSz6{m;n)EipF@-!VvuXt ziNU`A8CJ4H?5)zZywH(1J|X5q*x|_Cc&~%Mzw~GEX zi*8X{iG04acR`HU3&v9_VbQ~%j-psJ>vTI z*lRv}$uvG)w=m?2bYJU}=Ui4-U8^vlXv?dWo?e5|-mC_bWy!MTPWI95gfXj{dA;lkv;mJY;c%i%i7$hC%{sy=)*#0#1fid6nw>lk5ZsSh1-mEr;gx zVVfK~>HC#tc`Kg;x;JOeVV@?A^I5a&b+s>4x{L)7S>AC7dApC+hh4K>szd?T3v3Q zZo`w02vyJNPu&T+6_kv4{N~-MEu|Nayrqg;&1qdps^*pIF!p*tv%|JBkGI`?(MkTs z>ikCMnGs#ll|qfU=$@^iwl+EH^-Nj_5J!QKkqL;ee5|+6K|lJo#gJc0Lh1*dGkPc?76-pp+W5Wn`p5Kqd4O!B=G1y3&TJu*Ofu@vP2E;?cs`D8tN~!dx@w+ z>-vlDV^u+F zQ->L4)S97kjTUXESuNKItUKV#%@=Er`Xos{!q!mRJRDd8&&%Z&%{QR5m|u*7Z>p%l z3V-jpeqSZ}T&nvF-VSk-HB`Mm=pdHIfGgm4{S5Ydtzr7;Lz47TYgE3}8n5N{%O8cE zsh+Kop`yL5nU#s%>-VcibcZB}AWrXz;7P?W?;Mv%cO#PEc%JYUC=J)1FSq$9hA0>s zsySIaYL+tvLrrE_$Rf?Y-r|DR`&J>ZrSl52x}=lmhwYR|OtX(NQc%SlqRMIhx97yWZntmh#}1JsVJgY!3Hu}z`ViG z((zZZ`3&><`b0AM707uuVM+0beZCzw@`_5n{z2(vaJGG)Ka=fCVvSvbsbv?@Fmm#s z$BB?h={p@r92Y^YfM6e8%KNx;)XquEsY+`VYhj0u zW_2-1Ov?;O$DLA1y|9``Fu+#6SQDtlVR3@W4cN*+VKzvbOP@ICC^nMg$x#LWdN}p& zX2V5ft+|npo%L4GKQ~o$JZS+D zG5*5$s{t7Q39~u0k5VFP{dSnhX@IyhuGeG5e!cV4=pFMoh_qORLJ>Stw2LSfjY%`9 z^tV_|mJepCI8heh9RVd!@-pF?ORYli`EUp@S&7*lL($tLTX$awrQwNur$6jn8i{H^ ze^-_;x5c0Wskc0_$+_U0L!AClBqNAQNwjO0;Is*UN{Cp%#yO$>4I=$W2&E0}j-cA0 zh*xfMfPJ|>GpA&252Y*p9u8*-9?mayCQYdYoLrFjmia6p_z1j=bu4u_ zncK&bbYN!rd}{atUDmbgtV-uQ#;91OJ9}v0wy%_Sk=iIWOW68~NE+#W4zvn+7CNam z{KqW8D%g9Ncu;G~ALWppS|24FM4lsW3(;%H-VQA25uI&&Hhq)bT(!LZmj3n2<`tX7 z+|=E{iq#K?wmT+1pQi=6T$8c{^Hd(JXX8ig-vf_T>t=QY2L#k+2n6&}ivC=~_AVAi zKNs(c)=}h=IOcOi_p@%E@0+0M;P1`O0H+}EfpXJTgjP-5mqT*t>tpyuuq*bBn9`6qXv)ZQ9i?{OpDm-fSp8%Irs_>7U#k>ngfpEdB5$~XYTs|L{it8 zI$YQ6JphMSexdD>SN9$T=Hx6TY)ao+*AY)J@GLu`G649A&$BEB!|LEn7A7)dQT- zG(%&`fd`=9uOx~hhCJoqdtDrMJnT%aB+>Mh=9nso0JlgIAEr8JN?an}-OPo_joBBE zA$(y{J%83To*ZQo8cu7Vip{J+!-{9_TqTlHvDVQcZuS(~Z{2nstvaD8JR3yaM} zTLK}XYiYwF0mD+4%pJ#Ex@p!CO5F(kJUW?&d8U!>Kp#h>)6(ESH@LqLNZS=EhRxKG zH0vv^7kX81LL367BWkr3aF-1KObMZ22pH$fncm!B zET!GhC9JPou4#C%fklFQCt92)O)6$?mQz`Qu8&18B61X3K+!STm9msl$Rh(#CC4Kb zUeOTH+hpE!tUNjF*@j=Y#%0#|=H8SMnC61u?TBFuNP~aW*l9HD+@Z1EifvlUdOKd{ zWz7+!Y=X3>)B3D2^DN{K%vvrjJch_}{cy44Ea>wu_KuKLr%jg0KDR$qav{C!du~9Q zu*Z$4Q5jD1l=GW60*2>x>2{Iy9zkYZiu3QNwlTDyg771Kva6F0t<= zQ){dC=R&q=2yF>rbtQIkPGPVHji;VLAXUhu6rte5jx2y+(QGR2wr4PB2kM5!(JF)v+64Tr9wV9nSeT~f;Llt-A- zF6l^1ebsMAR33?x%Npm6rK7>umRme52@^ehW#TzK8Spt&C5hPO_AlVd$Xf{KopN%t z@{I&1a61B0r{;n+-AL$MECEI9AEegdv*gtEHDMMSD%4^28s*eCg3#G7bZJ9VTp8#> zQ`|nsljNYcwM>VkxFOQ9*3%Wz+jOtr^EyK+BXEW z<~<|46dN@g+ju3Uw>6oiToD|m&FZwuJoID6dlO(D2TB(ggM!c1Z?EJ)vnx?;F%e3K zXG4Sdv5PyIk7pW~k8_+owQX9CH4F{juE^(;p}`YqjYCP+(pj7Vp%mnpT8Ps(3j6g= zv>6s z~R6Bvz;6ykEzkH>|UJ$g^i^Cti?lQ$cYfeEI_!GI8F-?Jx+$Nf~0 zw{zN1R?4dJR`cz5bb`&@lS;(sP)_)j4pu2<(Z(N{=Q-k7?dbB8GJ;jH(!3(Vu9BKq zD|*qHcVlTW4>~wM?)6AMU21T^bK@KI!cV>D=kz?^8t@~hU-i0ij!(a&;NaDQ5Ey{naK*kFPJl!=W%MYBh_qKkhiwjI=B!t=t1h zA|j#*kty@@-(>V`iHe&lh)eT(ASa+tWJ*j}+a8#VW$;Bvh|riS&`9$?AKv2E0e_$B zdn3ztzjm9DVLji8=0(^)DOsZ2njae{%|@h>xkGuD&zBJ%guja=InT0Pg~X^Fqc5p1 zt4Ys_^nsPKLZJn@Dht;d0mG4E)*?^p3dV#vrYyJq^#`bGA!_NsdSbWa@~JmA7=(g* zzH7jX0gV`awi)Ww@Sx>nl!hlPxL`wE+q707iZtVmVXH0fYfKd%mVe$|3bQ7X4) zBeK=YYV?;WQq^Z$gTVQywa6ve48o{)7nq6=)SfTJn6i&LD%M>>*JDwn%7Km4(D=)4 zJO4Zdr7fv8a8Q6Yuu7s2%D?Q+<|WF!%#WC;j!x9-mxe=#CLaP=`E?6u>pRd@n_a&K z^6_E3bL11G;2S5SRFSCSipyP0)L342m`-m5ixb!}&0JPq8x;d*St2&`2_*|Kh53Ar zsv8P~H!QMLD|jd;Im6`?q8|2eBw>d}sUEQ*q@VFE$Ii>34*I# z)cU{##AuBAp!P4X;zL0DE*+Y7)CAE z_1qkC&-4_9YGdP*D3!(Fs6LXUZODeo-;WvRQPsdz1HNL%_P04mf~?H7CS!nABd>&n zE!TbOmNd?mjVX^;T-X7jR}r4Q-I3)^(qziIZ{*;5-@+T7AYSTobL@?S_?}&&&tQK% zV}HTJd;?-`gPvXT@je95MY&pYprQ5k8I#LKZ;yHuo<6gLP4Y20ZgykxgCR#mdWWls z^W=}@b!eP%e4n?6b7Tn8*-yDvhZgMW>P?z+@GT`L$A|HCSaB*13TD_%4psVC>PNV{ zQr5&yS{&Ip*Vd4i%|j^<>E?=ix?l&M6RQU5cOD#Hzg@R|UkMAH;xku2YxiqV(oA-Y znv%T1^}?y)ZF$P-9nk<$xV-<&;-=H|VR3qk6yiyh)zEWD$plDgMe^gr1P6pZo zvDDB=goqqfWDLPJ665ln`@7^k5=0Wa3_I1~es0V(BlDs`(*eAjLgO70IYp9v5c+x_ zJ%@tn@YJOt$X2X9B5}C2;n70AK~u|+N}pq2B?p&1Q^KxWJhu=2M$kt%+*)}~)IFZw zQjBUR26J~8I9~l*C9+n~@cv`Rsrd!g8r$NpD^v%pP1}~9-bSAWApRNy>Bo557@tC=w2mDqsJt>84!C;R}q7 zFK}YLoL|~Wzr4l62Q_E;KQuDo6Rml*jJzvEYQ<@56(r%lrJ z0jRkx9zYY)jO5QJxQn&yx5&dgLFx1&;u~iDph02<2x=V}bWFtkLuWU|z1(Tzt#*S; zS_(8nbGmHioz|YjJf-^awtU6ra5Kqp-w1L03D1MSe<0#?ieNZD?3-!(y<9ImQ@1mD z>C?c!?9aUJ&1eV%tn7`f>~)k}tc~onUVAmAu|u*Tj3|LOWUXDf8qA8;dSQCH>qcKl zHbAGZ+gUE-(|u2`(92jRr+M}9if??Dd(U#7* z9pKi&P1ho|rjVo#&xXU(p+qB1m9Bc}_MOC6P=&_|t+pgN7%?oKC`z%_e&1Wc3K~^; zn{|HIo88dwEXUt*+o`?wI6OO8U62utu?0qot^V8=$3s9iu&7NrV*YaKOS}LUtQ3;c zcx{P5oDT^h89aabv!N9Jy6r7pPVK$^21ra@0`nWJc(rZm+d=D>TH-35C{6rOx(`v1 z!U8Cobte7#xDY3_tD5p^5awuf zZHHE9(W7W@^{O?hwvDFwqT|AV?GZvw3K#_CXWR1^%jnO@yaWdb7>MBIctP}E0X^BR~B)(LWQ}tDj#ejr~*YKhoNtcK+ Users { get; set; } + + public List Signin { get; set; } } public class UserBehavior @@ -27,4 +30,15 @@ namespace WGShare.Domain.DTOs.Room public int JoinCount { get; set; } public int SumTime { get; set; } } + + public class SignInListRecordExcelDto + { + + public string Account { get; set; } + + public string UserName { get; set; } + + public string SignInTime { get; set; } + public string SignInName { get; set; } + } } diff --git a/WGShare.Domain/DTOs/User/SignInListExcelDto.cs b/WGShare.Domain/DTOs/User/SignInListExcelDto.cs new file mode 100644 index 0000000..6143632 --- /dev/null +++ b/WGShare.Domain/DTOs/User/SignInListExcelDto.cs @@ -0,0 +1,33 @@ +using MiniExcelLibs.Attributes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WGShare.Domain.DTOs.User +{ + /// + /// 导出账号签到用户列表 + /// + public class SignInListExcelDto + { + + [ExcelColumnName("UId")] + public string UId { get; set; } + + + [ExcelColumnName("账号")] + public string Account { get; set; } + + [ExcelColumnName("账号名称")] + public string UserName{ get; set; } + + public string RoleId { get; set; } + [ExcelColumnName("角色")] + public string RoleName { get; set; } + [ExcelColumnName("绑定签到人姓名")] + + public string SignInName { get; set; } + } +} diff --git a/WGShare.Domain/DTOs/User/UserSignInListDto.cs b/WGShare.Domain/DTOs/User/UserSignInListDto.cs new file mode 100644 index 0000000..e8c8712 --- /dev/null +++ b/WGShare.Domain/DTOs/User/UserSignInListDto.cs @@ -0,0 +1,18 @@ +using MiniExcelLibs.Attributes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WGShare.Domain.DTOs.User +{ + public class UserSignInListDto + { + + public string Id { get; set; } + public string UId { get; set; } + + public string SignInName { get; set; } + } +} diff --git a/WGShare.Domain/DTOs/User/UserSignInRecordDto.cs b/WGShare.Domain/DTOs/User/UserSignInRecordDto.cs new file mode 100644 index 0000000..31c524b --- /dev/null +++ b/WGShare.Domain/DTOs/User/UserSignInRecordDto.cs @@ -0,0 +1,18 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WGShare.Domain.DTOs.User +{ + public class UserSignInRecordDto + { + + + public string SignInName { get; set; } + + public string RoomNum { get; set; } + } +} diff --git a/WGShare.Domain/Entities/UserSignInList.cs b/WGShare.Domain/Entities/UserSignInList.cs new file mode 100644 index 0000000..8d5d923 --- /dev/null +++ b/WGShare.Domain/Entities/UserSignInList.cs @@ -0,0 +1,48 @@ +using AngleSharp.Text; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WGShare.Domain.Entities +{ + /// + /// 签到名单 + /// + [SugarTable("user_signin_list")] + public class UserSignInList + { + + /// + /// + /// + [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)] + public string Id { get; set; } + + + /// + /// + /// + [SugarColumn(ColumnName = "uid")] + public string UId { get; set; } + + + [SugarColumn(ColumnName = "signin_name")] + public string SignInName { get; set; } + + /// + /// 创建时间 + /// 默认值: CURRENT_TIMESTAMP + /// + [SugarColumn(ColumnName = "create_time", IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)] + public DateTime CreateTime { get; set; } + + /// + /// 修改时间 + /// + [SugarColumn(ColumnName = "modify_time", IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)] + public DateTime ModifyTime { get; set; } + } +} diff --git a/WGShare.Domain/Entities/UserSignInRecord.cs b/WGShare.Domain/Entities/UserSignInRecord.cs new file mode 100644 index 0000000..a8adb13 --- /dev/null +++ b/WGShare.Domain/Entities/UserSignInRecord.cs @@ -0,0 +1,44 @@ +using AngleSharp.Text; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WGShare.Domain.Entities +{ + /// + /// 签到名单记录 + /// + [SugarTable("user_signin_record")] + public class UserSignInRecord + { + + /// + /// + /// + [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)] + public string Id { get; set; } + + + /// + /// + /// + [SugarColumn(ColumnName = "uid")] + public string UId { get; set; } + + + [SugarColumn(ColumnName = "signin_name")] + public string SignInName { get; set; } + + [SugarColumn(ColumnName = "room_num")] + public string RoomNum { get; set; } + /// + /// 创建时间 + /// 默认值: CURRENT_TIMESTAMP + /// + [SugarColumn(ColumnName = "create_time", IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)] + public DateTime CreateTime { get; set; } + } +}