From aef550b34172e5c0ac72071da370483124467d4b Mon Sep 17 00:00:00 2001 From: xiaochanghai Date: Tue, 10 Jun 2025 11:19:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=BF=85=E9=80=89=E4=BF=AE?= =?UTF-8?q?=E8=A7=84=E5=88=99=E7=BB=93=E6=9E=9C=E6=8E=A5=E5=8F=A3=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=BF=94=E5=9B=9E=E6=95=B0=E6=8D=AE=E5=BA=8F=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Tiobon.Core.Base.dll | Bin 176128 -> 176128 bytes Lib/Tiobon.Core.Base.xml | 2 +- Lib/Tiobon.Core.dll | Bin 88064 -> 108032 bytes Lib/Tiobon.Core.xml | 135 +++++++ .../Ghre/Ghre_StudyRuleResultController.cs | 23 +- .../Systems/CacheManageController.cs | 2 +- Tiobon.Core.Common/Caches/Caching.cs | 342 ------------------ Tiobon.Core.Common/Caches/ICaching.cs | 53 --- .../Caches/SqlSugarCacheService.cs | 60 --- Tiobon.Core.Common/Enums/ModifyType.cs | 20 - .../Extensions/ExpressionExtensions.cs | 2 +- Tiobon.Core.Extensions/AOP/BlogCacheAOP.cs | 2 +- .../ServiceExtensions/CacheSetup.cs | 2 +- .../ServiceExtensions/SqlsugarSetup.cs | 6 +- .../Helper/CustomJwtTokenAuthMiddleware.cs | 2 +- Tiobon.Core.Gateway/Startup.cs | 104 +++--- .../Ghre/Ghre_StudyRuleResult.Dto.View.cs | 1 + .../Ghra/Ghra_StaffGroupServices.cs | 304 ++++++++-------- Tiobon.Core.Services/GlobalUsings.cs | 2 +- 19 files changed, 361 insertions(+), 701 deletions(-) delete mode 100644 Tiobon.Core.Common/Caches/Caching.cs delete mode 100644 Tiobon.Core.Common/Caches/ICaching.cs delete mode 100644 Tiobon.Core.Common/Caches/SqlSugarCacheService.cs delete mode 100644 Tiobon.Core.Common/Enums/ModifyType.cs diff --git a/Lib/Tiobon.Core.Base.dll b/Lib/Tiobon.Core.Base.dll index f7365b8dbdfb4c4809cc7ef05742d5c0ebcff911..dd3d16bd3ad6d428b320a44631d18500939574bb 100644 GIT binary patch delta 16324 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 diff --git a/Lib/Tiobon.Core.Base.xml b/Lib/Tiobon.Core.Base.xml index 1ae623d0..dfdfdb70 100644 --- a/Lib/Tiobon.Core.Base.xml +++ b/Lib/Tiobon.Core.Base.xml @@ -41,7 +41,7 @@ 缓存 - + diff --git a/Lib/Tiobon.Core.dll b/Lib/Tiobon.Core.dll index f5d6e3ff08dad204ce6c2e9040cacc2d97248407..691ac89c1a31446d35f680ef3e59580c6356bda3 100644 GIT binary patch literal 108032 zcmcG%2Y8f4_dY!H?B>a4Q^=-lLJ5SD@Q_VHlM;GB2u)h(pkhT3T+D(6vJn)qVM9U1 zhA8%e%4_e~EA|R@?7g@6zt5R7n+-+%UDx;JeVIA;eWsi_Q=hi(H}f3jQ%d>q@9)2r zx(hM=4dL*ggXK_XwYw)vZAp8s{at$ObL}S|F)voUs4hCU?x2Omha7a&QPIW42Om~k zx8$hec}ErRJHEDfVf4_$Dl;>Kouudq!<8DVeQNT$(7Cp@_f&`Cblpv<%d}FiVZ--9 zE{6ONVx_WKc8uLbkp1QlB>qo-J~iiLN=pB4iUksdzpeLbHJ${NyOJES>)(4?Wq^C{ z9<3(ts{1EgtW+RL9{?Vigew;xcHCm%HkU}dsI6kRO@=IUD(hl(hk#()sO{9y4TzKe zhM>DD>keBGMMAPw!DcS&s@>8JP0GgNFK9pgk!_AjQD2^+)Q^=~HP6XO{!>urc&(KR zIzA81bREB!N>PfJf~c&mvkc|>%Q`r|I13=qW<#(50{INV0tl2~2o~l$%Q8V!q&u-T zs3=arP-Wv#EW=n4X+o3_`Oys~KMNqzEWrYZpe0xUk!}eVK)|i03>H9S5plSQeLZy< zswT?Gi?<-niOw>LD?*M*;#HyjtTGCA0jGplbG!K!jRm+QUBpngmif3!WaRaAw8kDTB(;qDba?0v_73p;-Z&9o>@KV!IU({nI`)4Wa z!+;3Ix_}G1l+KNpL3Tali!?+amQ)m!Hk3nXbSn_XDv4W88V^m2(1?u0y92t*IBax# zP_mu~qHrpFipdpm8{J++_a?dz0(TkJQ}%SMFQO91gKyj@`ZHJxfc7^5G*dvdA7xo@ z68pSkpfG9MweXH-KxvJF{r@)FhuTBN&yH6}MOAZ3bcpMrZt8UEgx!^}(oMHYjB+HQ zOpCZ zwL+Q|5)3;c3KN25=trMA3GGD9du=B*1?{AP?lig>0B&p$GJDttOb4d3aT(#vNLjLd z>1pMGfVD6+Ejk35j4^2i(=*dj$(O+%&jp&>lcMTj56TYtD%?6up+zW^>NaDKs}gIX zLs39M_l|Ji-aEn6h$L78UEiL)D`}Dp$?cY+;;;kjTgX<){m-7?dyO$1}-j$sOBA}MK65+&M%kx83O85W9va5Sy`Sg6dp%>syAORxX} zjx#A(0FiGA7C?k8!9rW98~sJ&84C&R^P$*Q9|o@Li`Q%Acbz!)H@~}#!$$W}=wg## zv4@sLX!=FUIDd*-f*52d_Jrg=fikAVS5V}SpGZ-|WOBiBhz=H~C#kS0V4_nIxb8Ai z@Yr>iQLc8y-ZWAyqrBd9o7JRqmr?oYsoo6m#sN;Zlrg#T{t;2#ZV)Q^xW!4jnBZW;m6njeiw-W7x<4&fC?TDWQksS9lIc^T}Mh`*& z$C1KaMj5yYPH5PsvauM1V$Vp~r%(oe{8Wle*{dK@+0X7;HYwa?l);p3FomYD(crA)yy>)|;(M*Lo6snJ;>eZC06WbL|&KTOQ zEVpc?Q->XFQ5~lGBJW`G32n<|Bb+)+)J0qd(`8NPIV{6;o*P0@iig#Z&vR|;yqpF8o@$nK3s=JH`&M)}Z&nV`_;FHxV*CA*O!(r`Lh zUMo+7(CEHkwI$0*L+7(dxywbAd00bXjK4H5k`kSV63Ww=V!6yzlg*JgAKK`VWTme> z+h3kuhl#r=wgALZG?*;$7LvBEY3a^$Jgk}S611uHCJM^XCTbhSFeBuYROFO4rT2wt zVTL{Fr8%lGpK`cmbbyGI&G(g5q?I~;n}XcuM315hQC4e|iKU4yuR&=Ao}Rc8;mVQP~t|HQ525WQ&bR*BZ@Xq zZ~_7kW6Q-n=MsDd@i?nUlwAO~mlx8gck8~RLFTQX+$SOk?nvL^E8U^k>N1zcs2M{_ zb?Bgc@Svu7fQ3k5fQ4cwQJ!5(a=n$HDRXO#r28kpPDZ)jDg-|76oigA&<8h6(m9OW*L8rnAmpKimLtUBe@R=(|d1nBYy2eK|Z;G4Jm$#JEp=PPe z9kO|>OHinPFoC;As{tG&LsN+oJp*j+&xGs#^|3h9M z#(Q~&G22{pn4z$P2Z`CUy|bvIj>7yzYZEgVwirlmU78lAER6lId1*de@|Wj{d!!yd zG?f)#yii*aDJ%>jT1hcM^`2UKwzRb290-yRWAi`f^I=zBU5N2XBh@X(&euYD=b|hc zP#Cy07cpKGW=aT}HP8gzx?Hp?dLHC(S9saw4IjrhD`Z64xPgM``AAS#U|mq|52Qx| zfr1$sfpFLN+;D2abWUN5TZ`1?*>2btB1*K0_698e3TDEw7~^h`kFn{lw+@*qCc54Q zh%01#bV$i*QtS2u&E3lf!t~V49Vw-G znLAV(^?{xD^XID+n)hT6<{!=H5M~i(+W-FsdFx?w>|z9&JF-f1{Ehk4X(9ivHZEDB zvh3P~Gq-958yhY`Hq4V^8El1#xrmK5Sf1v1mr;U9SI5KR>4xWbFDbq)6@6Y1yBrE{ z0|i$gNYBxZw~^452zXty`y^J3L_NFDd9Eih=W*gvIO2t{o|G5vwwhdpqRncO+by8V zk+z8ZEEa|F7u!T8Tumlm^|^+?wFqFHcO7EP^%V6!@?mWbITbB@(d)sMr~14bNQ*Tr zugvE}Zv^meB8}se`Jy+IROBp~fetRu^clgsg>vBH8>a)r(OVH!Am#!)_@cJ~ht~%k z*TXz?(|rYJW+8h?ICZ0UJLQn#I{LO@YtrUon5zsKO>7HNttOpK+Sa!XeUO|qLz4c_ z6o{QoSHNNnygP_NJ9E3GDO{r{_!aF%>$Zh#5d~+$(J;ujF?uIbm#_qQUg9zUPT;3@V;AvktqcD0eh_H$3C`CAW zADGNYhd{W1l{TqCJliBqTCP8wo6`4wG$Z5>rL50&LvC(r$gP`aEh+ab;uWG*$dy7v zW~C^cVM@(SZ8#gpy^4{=bn~-rA@b*K!?x+L+gqNwf*nzi=b^6P#*%`tl?pBAJphgO zAcEyo5*N4ZAwZT=UE8}M3?=ICjnRjp45buI&rJ!Xg#2gC8{GHrzyGFd8NNqR_L|u* z=>}Y+ywquU1j+eWzZC*51x88r-m$oi*+ zle;B($aY84RYBOBg9EX-LI~F3ruic88RV#2OVYDc$m!0%CRrl|I;CZj77`a`%6X2; zIm(u^2i*b5x=pCs=W(6{PnQFAq+shXhka@w4GJ35(dSXT_X2{Tue`vCZi7^JKhnB< zK^%RNY8U#4U1*#~`_Ms#&Z8`V=xYfUKvY?R1vr-uKy;?=XB8}f=x+%YK%g5;;Vjs! ze2vse?BC@o1BbOS7(H^efdx8J>Y%-;YA4bcqrE=97zrk&O5cVvmRS@sw&6fz#LR7H zS~1tZ4F?ZH=cWX9nf4iJyAYWn|1L}}Cf}}9isQWuKa@IwkiSq?wuV>0VD`ugS5lE$ z8haJgQtvfRnifj=Z%MIm(b-}K+T0#(E<6(w7OJ}bj#`BB>qb%RL|;d#!E`)~=$aZ> zpXsLYVpQJN&Go18@`IV@4~P6Lhf-$np`nZ)Qly?Wug5cdUjgIDbP)^aqQ~KW>fJ$B z!2*cEmS6$I5KFKCqS_KHfEa2C7C;QM1PdVcwFC0*Es#!2*cYmS6$InU-Jy#95YL0mRvs zU;)HAmS6$Ixt3r7#2QPm0OCALumIwGORzB7;Y-dq71%VU*V;5JAk#WaumIu$OR$hM z>Myhk7Lf8HORxZ9y(L%xaj_*>0C9;WSO9UUC0GD)nI%{Nak(W}0I|UmEP%Me5-fn& zXbBcTTxkgwKwM=B7C>yW1PdUpwgd|xuCW9QAg;9p3m~qu1PdUpw*(6yZmzf&~!wSb_x*_gaDl5cgSv1rYaJf`z2f_<&WgfRqnff`z1%4_O5Z zNcpfOSOD>eC0GEl)eoC0GFQvL#r+Dc~`giaP*G0ocVej!Czk6#r0h*g(knoG3Sc40!dI<=h0#vzEh>^gQ|8xf8Wv#E z>y}^v#2c1i0R#*)^|1f~#TtSI5N}(81rYC8f&~!UEx`ha9hP7rsS)p51q(@v_pE{i z6!E?#SOD>XC0GFQp(R)V@sTB10P(RUSOBrp5-foD#1brk_|y_CfcVT3EP(jj5-foD z!V)Zi_|g(AfcVN1EP(jh5-foD#u6-m_|_6EfcVZ5EP(jl5-cRS@&~J60V#j91PdU3 zvIGktezpV)Abzm~3m|^A1PdU3vjhtuezyb*N%s6<6)Yg-pO#< x+R0YsxESOD?2 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 diff --git a/Lib/Tiobon.Core.xml b/Lib/Tiobon.Core.xml index 71f1c350..29a3771a 100644 --- a/Lib/Tiobon.Core.xml +++ b/Lib/Tiobon.Core.xml @@ -157,6 +157,121 @@ 事务传播方式 + + + 增加缓存Key + + + + + + + 删除某特征关键字缓存 + + + + + + + 删除缓存 + + + + + + + 检查给定 key 是否存在 + + 键 + + + + + 获取所有缓存列表 + + + + + + 获取缓存 + + + + + + + + 获取缓存 + + + + + + + 删除缓存 + + + + + + + 增加对象缓存 + + + + + + + + 增加对象缓存,并设置过期时间 + + + + + + + + + 增加字符串缓存 + + + + + + + + 增加字符串缓存,并设置过期时间 + + + + + + + + + 缓存最大角色数据范围 + + + + + + + + 根据父键清空 + + + + + + + 缓存抽象接口,基于IDistributedCache封装 + + + + + 实现SqlSugar的ICacheService接口 + + 缓存相关常量 @@ -289,6 +404,26 @@ 以嵌套事务方式执行 + + + 资料修改模式 + + + + + 新增模式。 + + + + + 修改模式。 + + + + + 删除模式 + + 获取项目程序集,排除所有的系统程序集(Microsoft.***、System.***等)、Nuget下载包 diff --git a/Tiobon.Core.Api/Controllers/Ghre/Ghre_StudyRuleResultController.cs b/Tiobon.Core.Api/Controllers/Ghre/Ghre_StudyRuleResultController.cs index 349b259f..34646206 100644 --- a/Tiobon.Core.Api/Controllers/Ghre/Ghre_StudyRuleResultController.cs +++ b/Tiobon.Core.Api/Controllers/Ghre/Ghre_StudyRuleResultController.cs @@ -23,7 +23,28 @@ public class Ghre_StudyRuleResultController : BaseController> Query(long RuleId, [FromBody] QueryBody body) { - return await _service.QueryFilterPage(body, $"StudyRuleId='{RuleId}'"); + + var result = await _service.QueryFilterPage(body, $"StudyRuleId='{RuleId}'"); + var DT_TableDataT1 = result.result.DT_TableDataT1; + int index1 = 0; + int index2 = 0; + for (int i = 0; i < DT_TableDataT1.Count; i++) + { + if (DT_TableDataT1[i].Status == "SUCCESS") + { + index1++; + DT_TableDataT1[i].Index = index1; + } + else + { + index2++; + DT_TableDataT1[i].Index = index2; + } + } + + + result.result.DT_TableDataT1 = DT_TableDataT1; + return result; } #endregion diff --git a/Tiobon.Core.Api/Controllers/Systems/CacheManageController.cs b/Tiobon.Core.Api/Controllers/Systems/CacheManageController.cs index c5c0dd1d..5093f7df 100644 --- a/Tiobon.Core.Api/Controllers/Systems/CacheManageController.cs +++ b/Tiobon.Core.Api/Controllers/Systems/CacheManageController.cs @@ -1,4 +1,4 @@ -using Tiobon.Core.Common.Caches; +using Tiobon.Core.Caches; namespace Tiobon.Core.Api.Controllers.Systems; /// diff --git a/Tiobon.Core.Common/Caches/Caching.cs b/Tiobon.Core.Common/Caches/Caching.cs deleted file mode 100644 index 5cca5033..00000000 --- a/Tiobon.Core.Common/Caches/Caching.cs +++ /dev/null @@ -1,342 +0,0 @@ -using Microsoft.Extensions.Caching.Distributed; -using Newtonsoft.Json; -using System.Text; -using Tiobon.Core.Const; - -namespace Tiobon.Core.Common.Caches; - -public class Caching : ICaching -{ - private readonly IDistributedCache _cache; - - public Caching(IDistributedCache cache) - { - _cache = cache; - } - - private byte[] GetBytes(T source) - { - return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(source)); - } - - public IDistributedCache Cache => _cache; - - public void AddCacheKey(string cacheKey) - { - var res = _cache.GetString(CacheConst.KeyAll); - var allkeys = string.IsNullOrWhiteSpace(res) ? new List() : JsonConvert.DeserializeObject>(res); - if (!allkeys.Any(m => m == cacheKey)) - { - allkeys.Add(cacheKey); - _cache.SetString(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys)); - } - } - - /// - /// 增加缓存Key - /// - /// - /// - public async Task AddCacheKeyAsync(string cacheKey) - { - var res = await _cache.GetStringAsync(CacheConst.KeyAll); - var allkeys = string.IsNullOrWhiteSpace(res) ? new List() : JsonConvert.DeserializeObject>(res); - if (!allkeys.Any(m => m == cacheKey)) - { - allkeys.Add(cacheKey); - await _cache.SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys)); - } - } - - public void DelByPattern(string key) - { - var allkeys = GetAllCacheKeys(); - if (allkeys == null) return; - - var delAllkeys = allkeys.Where(u => u.Contains(key)).ToList(); - delAllkeys.ForEach(u => { _cache.Remove(u); }); - - // 更新所有缓存键 - allkeys = allkeys.Where(u => !u.Contains(key)).ToList(); - _cache.SetString(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys)); - } - - /// - /// 删除某特征关键字缓存 - /// - /// - /// - public async Task DelByPatternAsync(string key) - { - var allkeys = await GetAllCacheKeysAsync(); - if (allkeys == null) return; - - var delAllkeys = allkeys.Where(u => u.Contains(key)).ToList(); - delAllkeys.ForEach(u => { _cache.Remove(u); }); - - // 更新所有缓存键 - allkeys = allkeys.Where(u => !u.Contains(key)).ToList(); - await _cache.SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys)); - } - - public void DelCacheKey(string cacheKey) - { - var res = _cache.GetString(CacheConst.KeyAll); - var allkeys = string.IsNullOrWhiteSpace(res) ? new List() : JsonConvert.DeserializeObject>(res); - if (allkeys.Any(m => m == cacheKey)) - { - allkeys.Remove(cacheKey); - _cache.SetString(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys)); - } - } - - /// - /// 删除缓存 - /// - /// - /// - public async Task DelCacheKeyAsync(string cacheKey) - { - var res = await _cache.GetStringAsync(CacheConst.KeyAll); - var allkeys = string.IsNullOrWhiteSpace(res) ? new List() : JsonConvert.DeserializeObject>(res); - if (allkeys.Any(m => m == cacheKey)) - { - allkeys.Remove(cacheKey); - await _cache.SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys)); - } - } - - public bool Exists(string cacheKey) - { - var res = _cache.Get(cacheKey); - return res != null; - } - - /// - /// 检查给定 key 是否存在 - /// - /// 键 - /// - public async Task ExistsAsync(string cacheKey) - { - var res = await _cache.GetAsync(cacheKey); - return res != null; - } - - public List GetAllCacheKeys() - { - var res = _cache.GetString(CacheConst.KeyAll); - return string.IsNullOrWhiteSpace(res) ? null : JsonConvert.DeserializeObject>(res); - } - - /// - /// 获取所有缓存列表 - /// - /// - public async Task> GetAllCacheKeysAsync() - { - var res = await _cache.GetStringAsync(CacheConst.KeyAll); - return string.IsNullOrWhiteSpace(res) ? null : JsonConvert.DeserializeObject>(res); - } - - public T Get(string cacheKey) - { - var res = _cache.Get(cacheKey); - return res == null ? default : JsonConvert.DeserializeObject(Encoding.UTF8.GetString(res)); - } - - /// - /// 获取缓存 - /// - /// - /// - /// - public async Task GetAsync(string cacheKey) - { - var res = await _cache.GetAsync(cacheKey); - return res == null ? default : JsonConvert.DeserializeObject(Encoding.UTF8.GetString(res)); - } - - public object Get(Type type, string cacheKey) - { - var res = _cache.Get(cacheKey); - return res == null ? default : JsonConvert.DeserializeObject(Encoding.UTF8.GetString(res), type); - } - - public async Task GetAsync(Type type, string cacheKey) - { - var res = await _cache.GetAsync(cacheKey); - return res == null ? default : JsonConvert.DeserializeObject(Encoding.UTF8.GetString(res), type); - } - - public string GetString(string cacheKey) - { - return _cache.GetString(cacheKey); - } - - /// - /// 获取缓存 - /// - /// - /// - public async Task GetStringAsync(string cacheKey) - { - return await _cache.GetStringAsync(cacheKey); - } - - public void Remove(string key) - { - _cache.Remove(key); - DelCacheKey(key); - } - - /// - /// 删除缓存 - /// - /// - /// - public async Task RemoveAsync(string key) - { - await _cache.RemoveAsync(key); - await DelCacheKeyAsync(key); - } - - public void RemoveAll() - { - var catches = GetAllCacheKeys(); - foreach (var @catch in catches) Remove(@catch); - - catches.Clear(); - _cache.SetString(CacheConst.KeyAll, JsonConvert.SerializeObject(catches)); - } - - public async Task RemoveAllAsync() - { - var catches = await GetAllCacheKeysAsync(); - foreach (var @catch in catches) await RemoveAsync(@catch); - - catches.Clear(); - await _cache.SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(catches)); - } - - - public void Set(string cacheKey, T value, TimeSpan? expire = null) - { - _cache.Set(cacheKey, GetBytes(value), - expire == null - ? new DistributedCacheEntryOptions() {AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(6)} - : new DistributedCacheEntryOptions() {AbsoluteExpirationRelativeToNow = expire}); - - AddCacheKey(cacheKey); - } - - /// - /// 增加对象缓存 - /// - /// - /// - /// - public async Task SetAsync(string cacheKey, T value) - { - await _cache.SetAsync(cacheKey, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)), - new DistributedCacheEntryOptions() {AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(6)}); - - await AddCacheKeyAsync(cacheKey); - } - - /// - /// 增加对象缓存,并设置过期时间 - /// - /// - /// - /// - /// - public async Task SetAsync(string cacheKey, T value, TimeSpan expire) - { - await _cache.SetAsync(cacheKey, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)), - new DistributedCacheEntryOptions() {AbsoluteExpirationRelativeToNow = expire}); - - await AddCacheKeyAsync(cacheKey); - } - - public void SetPermanent(string cacheKey, T value) - { - _cache.Set(cacheKey, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value))); - AddCacheKey(cacheKey); - } - - public async Task SetPermanentAsync(string cacheKey, T value) - { - await _cache.SetAsync(cacheKey, Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value))); - await AddCacheKeyAsync(cacheKey); - } - - public void SetString(string cacheKey, string value, TimeSpan? expire = null) - { - if (expire == null) - _cache.SetString(cacheKey, value, new DistributedCacheEntryOptions() {AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(6)}); - else - _cache.SetString(cacheKey, value, new DistributedCacheEntryOptions() {AbsoluteExpirationRelativeToNow = expire}); - - AddCacheKey(cacheKey); - } - - /// - /// 增加字符串缓存 - /// - /// - /// - /// - public async Task SetStringAsync(string cacheKey, string value) - { - await _cache.SetStringAsync(cacheKey, value, new DistributedCacheEntryOptions() {AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(6)}); - - await AddCacheKeyAsync(cacheKey); - } - - /// - /// 增加字符串缓存,并设置过期时间 - /// - /// - /// - /// - /// - public async Task SetStringAsync(string cacheKey, string value, TimeSpan expire) - { - await _cache.SetStringAsync(cacheKey, value, new DistributedCacheEntryOptions() {AbsoluteExpirationRelativeToNow = expire}); - - await AddCacheKeyAsync(cacheKey); - } - - - /// - /// 缓存最大角色数据范围 - /// - /// - /// - /// - public async Task SetMaxDataScopeType(long userId, int dataScopeType) - { - var cacheKey = CacheConst.KeyMaxDataScopeType + userId; - await SetStringAsync(cacheKey, dataScopeType.ToString()); - - await AddCacheKeyAsync(cacheKey); - } - - /// - /// 根据父键清空 - /// - /// - /// - public async Task DelByParentKeyAsync(string key) - { - var allkeys = await GetAllCacheKeysAsync(); - if (allkeys == null) return; - - var delAllkeys = allkeys.Where(u => u.StartsWith(key)).ToList(); - delAllkeys.ForEach(Remove); - // 更新所有缓存键 - allkeys = allkeys.Where(u => !u.StartsWith(key)).ToList(); - await SetStringAsync(CacheConst.KeyAll, JsonConvert.SerializeObject(allkeys)); - } -} \ No newline at end of file diff --git a/Tiobon.Core.Common/Caches/ICaching.cs b/Tiobon.Core.Common/Caches/ICaching.cs deleted file mode 100644 index e2710358..00000000 --- a/Tiobon.Core.Common/Caches/ICaching.cs +++ /dev/null @@ -1,53 +0,0 @@ -using Microsoft.Extensions.Caching.Distributed; - -namespace Tiobon.Core.Common.Caches; - -/// -/// 缓存抽象接口,基于IDistributedCache封装 -/// -public interface ICaching -{ - public IDistributedCache Cache { get; } - void AddCacheKey(string cacheKey); - Task AddCacheKeyAsync(string cacheKey); - - void DelByPattern(string key); - Task DelByPatternAsync(string key); - - void DelCacheKey(string cacheKey); - Task DelCacheKeyAsync(string cacheKey); - - bool Exists(string cacheKey); - Task ExistsAsync(string cacheKey); - - List GetAllCacheKeys(); - Task> GetAllCacheKeysAsync(); - - T Get(string cacheKey); - Task GetAsync(string cacheKey); - - object Get(Type type, string cacheKey); - Task GetAsync(Type type, string cacheKey); - - string GetString(string cacheKey); - Task GetStringAsync(string cacheKey); - - void Remove(string key); - Task RemoveAsync(string key); - - void RemoveAll(); - Task RemoveAllAsync(); - - void Set(string cacheKey, T value, TimeSpan? expire = null); - Task SetAsync(string cacheKey, T value); - Task SetAsync(string cacheKey, T value, TimeSpan expire); - - void SetPermanent(string cacheKey, T value); - Task SetPermanentAsync(string cacheKey, T value); - - void SetString(string cacheKey, string value, TimeSpan? expire = null); - Task SetStringAsync(string cacheKey, string value); - Task SetStringAsync(string cacheKey, string value, TimeSpan expire); - - Task DelByParentKeyAsync(string key); -} \ No newline at end of file diff --git a/Tiobon.Core.Common/Caches/SqlSugarCacheService.cs b/Tiobon.Core.Common/Caches/SqlSugarCacheService.cs deleted file mode 100644 index c10ed8e0..00000000 --- a/Tiobon.Core.Common/Caches/SqlSugarCacheService.cs +++ /dev/null @@ -1,60 +0,0 @@ -using SqlSugar; - -namespace Tiobon.Core.Common.Caches; - -/// -/// 实现SqlSugar的ICacheService接口 -/// -public class SqlSugarCacheService : ICacheService -{ - private readonly Lazy _caching = new(() => App.GetService(false)); - private ICaching Caching => _caching.Value; - - public void Add(string key, V value) - { - Caching.Set(key, value); - } - - public void Add(string key, V value, int cacheDurationInSeconds) - { - Caching.Set(key, value, TimeSpan.FromSeconds(cacheDurationInSeconds)); - } - - public bool ContainsKey(string key) - { - return Caching.Exists(key); - } - - public V Get(string key) - { - return Caching.Get(key); - } - - public IEnumerable GetAllKey() - { - return Caching.GetAllCacheKeys(); - } - - public V GetOrCreate(string cacheKey, Func create, int cacheDurationInSeconds = int.MaxValue) - { - if (!ContainsKey(cacheKey)) - { - var value = create(); - Caching.Set(cacheKey, value, TimeSpan.FromSeconds(cacheDurationInSeconds)); - return value; - } - - return Caching.Get(cacheKey); - } - - public void Remove(string key) - { - Caching.Remove(key); - } - - public bool RemoveAll() - { - Caching.RemoveAll(); - return true; - } -} \ No newline at end of file diff --git a/Tiobon.Core.Common/Enums/ModifyType.cs b/Tiobon.Core.Common/Enums/ModifyType.cs deleted file mode 100644 index 246b0568..00000000 --- a/Tiobon.Core.Common/Enums/ModifyType.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace Tiobon.Core.Common.Enums; - -/// -/// 资料修改模式 -/// -public enum ModifyType -{ - /// - /// 新增模式。 - /// - Add, - /// - /// 修改模式。 - /// - Edit, - /// - /// 删除模式 - /// - Delete -} diff --git a/Tiobon.Core.Common/Extensions/ExpressionExtensions.cs b/Tiobon.Core.Common/Extensions/ExpressionExtensions.cs index 74cd3542..fe00f4e4 100644 --- a/Tiobon.Core.Common/Extensions/ExpressionExtensions.cs +++ b/Tiobon.Core.Common/Extensions/ExpressionExtensions.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Http; using System.Linq.Expressions; -using Tiobon.Core.Common.Caches; +using Tiobon.Core.Caches; namespace Tiobon.Core.Common.Helper; diff --git a/Tiobon.Core.Extensions/AOP/BlogCacheAOP.cs b/Tiobon.Core.Extensions/AOP/BlogCacheAOP.cs index 72f7c3df..1d3f3c31 100644 --- a/Tiobon.Core.Extensions/AOP/BlogCacheAOP.cs +++ b/Tiobon.Core.Extensions/AOP/BlogCacheAOP.cs @@ -1,6 +1,6 @@ using Castle.DynamicProxy; using Tiobon.Core.Common; -using Tiobon.Core.Common.Caches; +using Tiobon.Core.Caches; namespace Tiobon.Core.AOP; diff --git a/Tiobon.Core.Extensions/ServiceExtensions/CacheSetup.cs b/Tiobon.Core.Extensions/ServiceExtensions/CacheSetup.cs index 91717d1f..dba32c9b 100644 --- a/Tiobon.Core.Extensions/ServiceExtensions/CacheSetup.cs +++ b/Tiobon.Core.Extensions/ServiceExtensions/CacheSetup.cs @@ -1,6 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using StackExchange.Redis; -using Tiobon.Core.Common.Caches; +using Tiobon.Core.Caches; using Tiobon.Core.Option; namespace Tiobon.Core.Extensions.ServiceExtensions; diff --git a/Tiobon.Core.Extensions/ServiceExtensions/SqlsugarSetup.cs b/Tiobon.Core.Extensions/ServiceExtensions/SqlsugarSetup.cs index 2f99bc4b..71630679 100644 --- a/Tiobon.Core.Extensions/ServiceExtensions/SqlsugarSetup.cs +++ b/Tiobon.Core.Extensions/ServiceExtensions/SqlsugarSetup.cs @@ -2,7 +2,7 @@ using Microsoft.Extensions.DependencyInjection; using SqlSugar; using System.Text.RegularExpressions; -using Tiobon.Core.Common.Caches; +using Tiobon.Core.Caches; using Tiobon.Core.Common.DB; using Tiobon.Core.Common.DB.Aop; using Tiobon.Core.Const; @@ -32,7 +32,7 @@ public static class SqlsugarSetup { ConfigId = m.ConnId.ObjToString().ToLower(), ConnectionString = m.Connection, - DbType = (DbType) m.DbType, + DbType = (DbType)m.DbType, IsAutoCloseConnection = true, // Check out more information: https://github.com/anjoy8/Tiobon.Core/issues/122 //IsShardSameThread = false, @@ -99,7 +99,7 @@ public static class SqlsugarSetup { BaseDBConfig.ValidConfig.ForEach(config => { - var dbProvider = db.GetConnectionScope((string) config.ConfigId); + var dbProvider = db.GetConnectionScope((string)config.ConfigId); // 打印SQL语句 dbProvider.Aop.OnLogExecuting = (s, parameters) => diff --git a/Tiobon.Core.Gateway/Helper/CustomJwtTokenAuthMiddleware.cs b/Tiobon.Core.Gateway/Helper/CustomJwtTokenAuthMiddleware.cs index 9b238138..4608939d 100644 --- a/Tiobon.Core.Gateway/Helper/CustomJwtTokenAuthMiddleware.cs +++ b/Tiobon.Core.Gateway/Helper/CustomJwtTokenAuthMiddleware.cs @@ -2,7 +2,7 @@ using System.Text.RegularExpressions; using Microsoft.AspNetCore.Authentication; using Tiobon.Core.Common; -using Tiobon.Core.Common.Caches; +using Tiobon.Core.Caches; using Tiobon.Core.Common.Helper; namespace Tiobon.Core.AuthHelper diff --git a/Tiobon.Core.Gateway/Startup.cs b/Tiobon.Core.Gateway/Startup.cs index 458a56a8..05dc484a 100644 --- a/Tiobon.Core.Gateway/Startup.cs +++ b/Tiobon.Core.Gateway/Startup.cs @@ -1,79 +1,77 @@ -using Tiobon.Core.AuthHelper; -using Tiobon.Core.Common; -using Tiobon.Core.Common.Caches; +using Microsoft.AspNetCore.Authentication; +using System.Reflection; +using Tiobon.Core.AuthHelper; +using Tiobon.Core.Caches; using Tiobon.Core.Extensions; using Tiobon.Core.Gateway.Extensions; -using Microsoft.AspNetCore.Authentication; -using System.Reflection; -namespace Tiobon.Core.AdminMvc +namespace Tiobon.Core.AdminMvc; + +public class Startup { - public class Startup + /** + *┌──────────────────────────────────────────────────────────────┐ + *│ 描 述:模拟一个网关项目 + *│ 测 试:在网关swagger中查看具体的服务 + *│ 作 者:anson zhang + *└──────────────────────────────────────────────────────────────┘ + */ + public Startup(IConfiguration configuration, IWebHostEnvironment env) { - /** - *┌──────────────────────────────────────────────────────────────┐ - *│ 描 述:模拟一个网关项目 - *│ 测 试:在网关swagger中查看具体的服务 - *│ 作 者:anson zhang - *└──────────────────────────────────────────────────────────────┘ - */ - public Startup(IConfiguration configuration, IWebHostEnvironment env) - { - Configuration = configuration; - } + Configuration = configuration; + } - public IConfiguration Configuration { get; } + public IConfiguration Configuration { get; } - // This method gets called by the runtime. Use this method to add services to the container. - // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 - public void ConfigureServices(IServiceCollection services) - { - services.AddSingleton(new AppSettings(Configuration)); + // This method gets called by the runtime. Use this method to add services to the container. + // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 + public void ConfigureServices(IServiceCollection services) + { + services.AddSingleton(new AppSettings(Configuration)); - services.AddAuthentication() - .AddScheme(Permissions.GWName, _ => { }); + services.AddAuthentication() + .AddScheme(Permissions.GWName, _ => { }); - services.AddCustomSwaggerSetup(); + services.AddCustomSwaggerSetup(); - services.AddControllers(); + services.AddControllers(); - services.AddHttpContextSetup(); + services.AddHttpContextSetup(); - services.AddCorsSetup(); + services.AddCorsSetup(); - services.AddMemoryCache(); - services.AddDistributedMemoryCache(); - services.AddSingleton(); + services.AddMemoryCache(); + services.AddDistributedMemoryCache(); + services.AddSingleton(); - services.AddCustomOcelotSetup(); - } + services.AddCustomOcelotSetup(); + } - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } + app.UseDeveloperExceptionPage(); + } - app.UseRouting(); + app.UseRouting(); - app.UseAuthentication(); - app.UseAuthorization(); + app.UseAuthentication(); + app.UseAuthorization(); - app.UseCustomSwaggerMildd(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("Tiobon.Core.Gateway.index.html")); + app.UseCustomSwaggerMildd(() => Assembly.GetExecutingAssembly().GetManifestResourceStream("Tiobon.Core.Gateway.index.html")); - app.UseCors(AppSettings.app(new string[] { "Startup", "Cors", "PolicyName" })); + app.UseCors(AppSettings.app(new string[] { "Startup", "Cors", "PolicyName" })); - app.UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); - app.UseMiddleware(); + app.UseMiddleware(); - app.UseCustomOcelotMildd().Wait(); - } + app.UseCustomOcelotMildd().Wait(); } } diff --git a/Tiobon.Core.Model/View/Ghre/Ghre_StudyRuleResult.Dto.View.cs b/Tiobon.Core.Model/View/Ghre/Ghre_StudyRuleResult.Dto.View.cs index bd0a5442..6de299bd 100644 --- a/Tiobon.Core.Model/View/Ghre/Ghre_StudyRuleResult.Dto.View.cs +++ b/Tiobon.Core.Model/View/Ghre/Ghre_StudyRuleResult.Dto.View.cs @@ -31,4 +31,5 @@ public class Ghre_StudyRuleResultDto : Ghre_StudyRuleResult /// 修改信息 /// public string UpdateDataInfo { get; set; } + public int Index { get; set; } } diff --git a/Tiobon.Core.Services/Ghra/Ghra_StaffGroupServices.cs b/Tiobon.Core.Services/Ghra/Ghra_StaffGroupServices.cs index 08dc3b38..7ac2c7ab 100644 --- a/Tiobon.Core.Services/Ghra/Ghra_StaffGroupServices.cs +++ b/Tiobon.Core.Services/Ghra/Ghra_StaffGroupServices.cs @@ -1,74 +1,57 @@ - -using Tiobon.Core.IServices; -using Tiobon.Core.Model.Models; -using Tiobon.Core.Services.BASE; -using Tiobon.Core.IRepository.Base; -using Tiobon.Core.Common.Caches; -using System.Collections.Generic; -using MySqlX.XDevAPI.Relational; -using Microsoft.EntityFrameworkCore.Metadata.Internal; -using NPOI.POIFS.NIO; -using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource; -using MySqlX.XDevAPI.Common; -using System.Text; -using Microsoft.AspNetCore.Identity; -using System.Linq; -using Amazon.Runtime.Internal.Transform; +namespace Tiobon.Core.Services; -namespace Tiobon.Core.Services +/// +/// 人员群组 (服务) +/// +public class Ghra_StaffGroupServices : BaseServices, IGhra_StaffGroupServices { - /// - /// 人员群组 (服务) - /// - public class Ghra_StaffGroupServices : BaseServices, IGhra_StaffGroupServices + private readonly IBaseRepository _dal; + private IGhra_StaffGroupDetailServices _StaffGroupDetailServices; + public Ghra_StaffGroupServices(ICaching caching, IBaseRepository dal, + IGhra_StaffGroupDetailServices StaffGroupDetailServices + ) { - private readonly IBaseRepository _dal; - private IGhra_StaffGroupDetailServices _StaffGroupDetailServices; - public Ghra_StaffGroupServices(ICaching caching, IBaseRepository dal, - IGhra_StaffGroupDetailServices StaffGroupDetailServices - ) - { - this._dal = dal; - base.BaseDal = dal; - base._caching = caching; - _StaffGroupDetailServices = StaffGroupDetailServices; - } + this._dal = dal; + base.BaseDal = dal; + base._caching = caching; + _StaffGroupDetailServices = StaffGroupDetailServices; + } - public override async Task Add(InsertGhra_StaffGroupInput entity) + public override async Task Add(InsertGhra_StaffGroupInput entity) + { + + var result = await base.Add(entity); + entity.StaffGroupDetail.ForEach(x => { + x.StaffGroupID = result; + }); - var result = await base.Add(entity); - entity.StaffGroupDetail.ForEach(x => - { - x.StaffGroupID = result; - }); + await _StaffGroupDetailServices.Add(entity.StaffGroupDetail); - await _StaffGroupDetailServices.Add(entity.StaffGroupDetail); + return result; + } - return result; - } + public override async Task Update(long Id, EditGhra_StaffGroupInput editModel) + { + await _StaffGroupDetailServices.Delete(x => x.StaffGroupID == Id); - public override async Task Update(long Id, EditGhra_StaffGroupInput editModel) + editModel.StaffGroupDetail.ForEach(x => { - await _StaffGroupDetailServices.Delete(x => x.StaffGroupID == Id); - - editModel.StaffGroupDetail.ForEach(x => - { - x.StaffGroupID = Id; - }); - await _StaffGroupDetailServices.Add(editModel.StaffGroupDetail); + x.StaffGroupID = Id; + }); + await _StaffGroupDetailServices.Add(editModel.StaffGroupDetail); - return await base.Update(Id, editModel); - } - public override async Task DeleteById1(object id) - { - var entity = await BaseDal.QueryById(id); - BasePoco ent = entity as BasePoco; - ent.IsEnable = 0; - HttpRequest request = UserContext.Context.Request; - var api = request.Path.ObjToString().TrimEnd('/').ToLower(); - var ip = GetUserIp(UserContext.Context); - string sql = @$"update Ghra_StaffGroupDetail + return await base.Update(Id, editModel); + } + public override async Task DeleteById1(object id) + { + var entity = await BaseDal.QueryById(id); + BasePoco ent = entity as BasePoco; + ent.IsEnable = 0; + HttpRequest request = UserContext.Context.Request; + var api = request.Path.ObjToString().TrimEnd('/').ToLower(); + var ip = GetUserIp(UserContext.Context); + string sql = @$"update Ghra_StaffGroupDetail set IsEnable=0, UpdateBy={App.User.ID.ToString()}, UpdateIP={ip}, @@ -77,58 +60,58 @@ namespace Tiobon.Core.Services where StaffGroupID={id.ToString()} and IsEnable= 1"; - return await BaseDal.Update(entity); - } + return await BaseDal.Update(entity); + } - public override async Task> QueryForm(QueryForm body) - { - var result = await base.QueryForm(body); + public override async Task> QueryForm(QueryForm body) + { + var result = await base.QueryForm(body); - var StaffGroupDetail = await _StaffGroupDetailServices.Query(x => x.StaffGroupID == body.id); - result.result.DT_TableDataT1[0].StaffGroupDetail = StaffGroupDetail.OrderBy(x => x.SortNo).ToList(); - result.result.DT_TableDataT1[0].StaffGroupDetail.ForEach((x) => + var StaffGroupDetail = await _StaffGroupDetailServices.Query(x => x.StaffGroupID == body.id); + result.result.DT_TableDataT1[0].StaffGroupDetail = StaffGroupDetail.OrderBy(x => x.SortNo).ToList(); + result.result.DT_TableDataT1[0].StaffGroupDetail.ForEach((x) => + { + if (x.FieldValue != null) { - if (x.FieldValue != null) + if (JsonHelper.IsJson(x.FieldValue.ToString())) { - if (JsonHelper.IsJson(x.FieldValue.ToString())) + try + { + x.FieldValue = JsonHelper.JsonToObj>(x.FieldValue.ToString()); + } + catch (Exception) { - try - { - x.FieldValue = JsonHelper.JsonToObj>(x.FieldValue.ToString()); - } - catch (Exception) - { - x.FieldValue = JsonHelper.JsonToObj>(x.FieldValue.ToString()); - } + x.FieldValue = JsonHelper.JsonToObj>(x.FieldValue.ToString()); } } - }); - if (body.doType == "Copy") - { - result.result.DT_TableDataT1[0].StaffGroupNo = null; - result.result.DT_TableDataT1[0].StaffGroupName = null; } - return result; - } - public override async Task> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true) + }); + if (body.doType == "Copy") { + result.result.DT_TableDataT1[0].StaffGroupNo = null; + result.result.DT_TableDataT1[0].StaffGroupName = null; + } + return result; + } + public override async Task> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true) + { - var result = await base.QueryFilterPage(filter, condition, IsEnable); + var result = await base.QueryFilterPage(filter, condition, IsEnable); - result.result.DT_TableDataT1.ForEach(async x => - { - x.DetailInfo = Db.Ado.SqlQuerySingle($@"select stuff((select distinct ',' + (select top 1 dbo.FLangKeyToValue(MKey,1,StaffInfoColumnName) from Ghra_StaffInfoColumn where IsEnable=1 and StaffInfoGroupId = 1 and IsRelease = 1 and StaffInfoColumnNo=a.StaffField) + result.result.DT_TableDataT1.ForEach(async x => + { + x.DetailInfo = Db.Ado.SqlQuerySingle($@"select stuff((select distinct ',' + (select top 1 dbo.FLangKeyToValue(MKey,1,StaffInfoColumnName) from Ghra_StaffInfoColumn where IsEnable=1 and StaffInfoGroupId = 1 and IsRelease = 1 and StaffInfoColumnNo=a.StaffField) from Ghra_StaffGroupDetail a where StaffGroupID = {x.Id} for XML path(''),type).value('.','nvarchar(max)'),1,1,'')"); - }); + }); - return result; - } + return result; + } - public async Task> GetStaffInfoColumnData() - { - string sql = @$"select StaffInfoColumnNo, + public async Task> GetStaffInfoColumnData() + { + string sql = @$"select StaffInfoColumnNo, dbo.FLangKeyToValue(MKey,1,StaffInfoColumnName) StaffInfoColumnName, ColumnType elementType, DataType dataType, @@ -160,20 +143,20 @@ namespace Tiobon.Core.Services and IsRelease = 1 and StaffInfoColumnNo != 'AttachmentIDs' "; - var result = Db.Ado.SqlQuery(sql); - result.ForEach(x => - { - x.operatorData = JsonConvert.DeserializeObject>(x.OperatorDataStr); - }); - return ServiceResult.OprateSuccess("查询成功!", result); - } - - public async Task>> GetStaffGroupInfoByID(long Id,JObject FBody) + var result = Db.Ado.SqlQuery(sql); + result.ForEach(x => { - string LangID = App.User.GetLangId().ToString(); - string BaseDate = FBody["BaseDate"]?.Value() ?? DateTime.Now.ToString("yyyy-MM-dd"); - if (LangID == "0") LangID = "1"; - string sql = @$"select case when Operator not in ('IsNull','NotNull') then iif(IsChangeColumn = 1,'b.','a.')+StaffField + x.operatorData = JsonConvert.DeserializeObject>(x.OperatorDataStr); + }); + return ServiceResult.OprateSuccess("查询成功!", result); + } + + public async Task>> GetStaffGroupInfoByID(long Id, JObject FBody) + { + string LangID = App.User.GetLangId().ToString(); + string BaseDate = FBody["BaseDate"]?.Value() ?? DateTime.Now.ToString("yyyy-MM-dd"); + if (LangID == "0") LangID = "1"; + string sql = @$"select case when Operator not in ('IsNull','NotNull') then iif(IsChangeColumn = 1,'b.','a.')+StaffField + case when Operator = 'Equal' then ' = '+' '''+ISNULL(FieldValue,'')+''' ' when Operator = 'NotEqual' @@ -231,31 +214,31 @@ namespace Tiobon.Core.Services and StaffGroupID = '{Id}' order by b.SortNo"; - DataTable dt = await Db.Ado.GetDataTableAsync(sql); - string WhereSQL = string.Empty; - string SqlStr = string.Empty; - - List staffInfoColumns = new List(); - staffInfoColumns.Add(new StaffInfoColumn() { StaffInfoColumnNo = "StaffID", StaffInfoColumnName = "ID",isHidden=true }); - staffInfoColumns.Add(new StaffInfoColumn() { StaffInfoColumnNo = "StaffNo", StaffInfoColumnName = "工号" }); - staffInfoColumns.Add(new StaffInfoColumn() { StaffInfoColumnNo = "StaffName", StaffInfoColumnName = "姓名" }); - staffInfoColumns.Add(new StaffInfoColumn() { StaffInfoColumnNo = "DeptFullPateName", StaffInfoColumnName = "全部门" }); - foreach (DataRow dr in dt.Rows) - { - WhereSQL += " and "+dr["WhereStr"].ToString(); + DataTable dt = await Db.Ado.GetDataTableAsync(sql); + string WhereSQL = string.Empty; + string SqlStr = string.Empty; - StaffInfoColumn staffInfo = new StaffInfoColumn(); - staffInfo.StaffInfoColumnNo = dr["ColumnNo"].ToString(); - staffInfo.StaffInfoColumnName = dr["ColumnName"].ToString(); - -; if ( !staffInfoColumns.Any(x => x.StaffInfoColumnNo == dr["ColumnNo"].ToString())) - { - staffInfoColumns.Add(staffInfo); - SqlStr += ","+dr["SqlStr"].ToString(); - } + List staffInfoColumns = new List(); + staffInfoColumns.Add(new StaffInfoColumn() { StaffInfoColumnNo = "StaffID", StaffInfoColumnName = "ID", isHidden = true }); + staffInfoColumns.Add(new StaffInfoColumn() { StaffInfoColumnNo = "StaffNo", StaffInfoColumnName = "工号" }); + staffInfoColumns.Add(new StaffInfoColumn() { StaffInfoColumnNo = "StaffName", StaffInfoColumnName = "姓名" }); + staffInfoColumns.Add(new StaffInfoColumn() { StaffInfoColumnNo = "DeptFullPateName", StaffInfoColumnName = "全部门" }); + foreach (DataRow dr in dt.Rows) + { + WhereSQL += " and " + dr["WhereStr"].ToString(); + + StaffInfoColumn staffInfo = new StaffInfoColumn(); + staffInfo.StaffInfoColumnNo = dr["ColumnNo"].ToString(); + staffInfo.StaffInfoColumnName = dr["ColumnName"].ToString(); + + ; if (!staffInfoColumns.Any(x => x.StaffInfoColumnNo == dr["ColumnNo"].ToString())) + { + staffInfoColumns.Add(staffInfo); + SqlStr += "," + dr["SqlStr"].ToString(); } + } - string StaffSql = @$"select a.StaffID,a.StaffNo,a.StaffName, + string StaffSql = @$"select a.StaffID,a.StaffNo,a.StaffName, dbo.FA_StaffInfoRepItemStaffInfo(a.StaffID,null,{LangID},'DeptFullPateName') DeptFullPateName {SqlStr} from Ghra_Staff a inner join (select * from Ghra_StaffChange where IsEnable=1 and ChangeDate= [dbo].[FLatestStaffChangeDate](StaffID,'{BaseDate}') )b @@ -263,39 +246,36 @@ namespace Tiobon.Core.Services where a.IsEnable=1 and a.InDate <= '{BaseDate}' and (a.OutDate is null or a.OutDate>= '{BaseDate}' ) " - + WhereSQL; + + WhereSQL; - DataTable staffTable = await Db.Ado.GetDataTableAsync(StaffSql); - Dictionary result = new Dictionary() - { - ["TableColumns"] = staffInfoColumns, - ["TableData"] = staffTable - }; - return ServiceResult>.OprateSuccess("查询成功!", result); - } - public class StaffInfoColumn() - { - public string StaffInfoColumnNo { get; set; } - public string StaffInfoColumnName { get; set; } - public bool isHidden { get; set; } = false; - public string elementType { get; set; } - public string dataType { get; set; } - public string dataSourceType { get; set; } - public string dataSource { get; set; } - public int multipleSelectInt { get; set; } - public bool multipleSelect => multipleSelectInt == 1 ? true : false; - public string OperatorDataStr { get; set; } - public List operatorData { get; set; } - } - public class OperatorData() + DataTable staffTable = await Db.Ado.GetDataTableAsync(StaffSql); + Dictionary result = new Dictionary() { - public string operatorNo { get; set; } - public string ParaDetailName { get; set; } - public string operatorIcon { get; set; } - public string SortNo { get; set; } - } - + ["TableColumns"] = staffInfoColumns, + ["TableData"] = staffTable + }; + return ServiceResult>.OprateSuccess("查询成功!", result); + } + public class StaffInfoColumn() + { + public string StaffInfoColumnNo { get; set; } + public string StaffInfoColumnName { get; set; } + public bool isHidden { get; set; } = false; + public string elementType { get; set; } + public string dataType { get; set; } + public string dataSourceType { get; set; } + public string dataSource { get; set; } + public int multipleSelectInt { get; set; } + public bool multipleSelect => multipleSelectInt == 1 ? true : false; + public string OperatorDataStr { get; set; } + public List operatorData { get; set; } + } + public class OperatorData() + { + public string operatorNo { get; set; } + public string ParaDetailName { get; set; } + public string operatorIcon { get; set; } + public string SortNo { get; set; } } - } \ No newline at end of file diff --git a/Tiobon.Core.Services/GlobalUsings.cs b/Tiobon.Core.Services/GlobalUsings.cs index 72cf6f70..f5abec83 100644 --- a/Tiobon.Core.Services/GlobalUsings.cs +++ b/Tiobon.Core.Services/GlobalUsings.cs @@ -8,7 +8,7 @@ global using System.Dynamic; global using System.Linq.Expressions; global using System.Reflection; global using Tiobon.Core.Common; -global using Tiobon.Core.Common.Caches; +global using Tiobon.Core.Caches; global using Tiobon.Core.Common.DB.Dapper; global using Tiobon.Core.Common.DB.Dapper.Extensions; global using Tiobon.Core.Common.Enums;