/// desc:常用系统相关方法
Class DHCDoc.Util.System Extends %RegisteredObject
{
/// Desc: 获取时间戳
/// Input: time: 本地日期时间(机器码)、integer:(0/1)是否精确毫秒
/// w ##class(DHCDoc.Util.System).GetTimeStamp()
ClassMethod GetTimeStamp(time = "", integer = "0") As %Integer
{
if time=""{
;默认采用UTC时间
s time=$ZTS
}else{
;本地时间转为UTC时间
s time=$SYSTEM.Util.LocalWithZTIMEZONEtoUTC(time)
}
i integer'=0{
s time=$p(time,".",1)
}
q ((($piece(time,",")-47117)*86400+$piece(time,",",2))*1000)\1
}
/// Desc: 解析时间戳
/// w ##class(DHCDoc.Util.System).ParseTimeStamp()
ClassMethod ParseTimeStamp(Timestamp As %Float)
{
q:+Timestamp=0 ""
s Timestamp=Timestamp/1000
s UTCDate=Timestamp\86400+47117
s UTCTime=Timestamp#86400
;UTC时间转为本地
s LocalStamp=$SYSTEM.Util.UTCtoLocalWithZTIMEZONE(UTCDate_","_UTCTime)
q LocalStamp
}
/// Desc: 获取客户端IP
ClassMethod GetOutLocalIP() As %String
{
q ##class(%SYSTEM.Process).ClientIPAddress()
}
/// Desc: 获取服务器IP
ClassMethod GetInLocalIP() As %String
{
q $p($zu(54,13,$zu(54,0)),",",1 )
}
/// Desc: 获取License信息
ClassMethod ShowLicenseInfo() As %Boolean
{
d ##class(%SYSTEM.License).ShowCounts()
}
/// Desc: 获取服务器的MAC地址
ClassMethod GetMACAddress() As %String
{
Q ##class(%SYSTEM.INetInfo).EthernetAddress(0)
Q $zu(114,$zu(54,0))
}
/// 生成PDF
/// d ##class(DHCDoc.Util.System).CreatePDF()
ClassMethod CreatePDF()
{
zn "SAMPLES"
do ##class(ZENDemo.Home).CreateDemoData()
s rpt1=##class(ZENApp.MyReport).%New()
s rpt1.RepeatingElement="SalesRep"
s rpt1.CountRepeatingElement=5
s rpt1.SplitAndMerge=1
s rpt1.Month=1
s Status=rpt1.GenerateReport("c:\temp\MyReport1.pdf",0)
d $System.Status.DisplayError(Status)
w $System.Status.DisplayError(Status)
zn "DHC-APP"
}
/***
**Description :间接加锁业务表,用以替换$$LOCK^SSLOCK
**Author :tanjishan
**Time :2022/11/29
**debugger :##Class(DHCDoc.Util.System).LOCK("OE_Order",1,1,"41:35:23")
**Parameter :BASETAB,自定义表名
ROWID,
User,用户
Comp,客户端特征编码
**Returns :-1:成功,其他:失败
***/
ClassMethod LOCK(BASETAB, ROWID, User As %String = "", Comp As %String = "") As %String
{
q:$g(ROWID)="" -1
s User=$g(User),Comp=$g(Comp)
s (user,name,doc,ext,s)=""
L +^DBLock(BASETAB,ROWID):0
if '$TEST {
s ss=$g(^DBLock(BASETAB,ROWID)),user=$p(ss,"^"),comp=$p(ss,"^",2)
s s=$g(^SSU("SSUSR",+user)),name=$p(s,"^",2),doc=$p(s,"^",14),ext=$p($g(^CTPCP(+doc,2)),"^",2)
Q name_"^"_ext_"^"_comp
}
s ^DBLock(BASETAB,ROWID)=User_"^"_Comp
Q -1
}
/***
**Description :默认立即解锁,不需要等待事务结束,用以替换$$LOCKCLR^SSLOCK
**Author :tanjishan
**Time :2022/11/29
**debugger :w ##Class(DHCDoc.Util.System).LOCKCLR("OE_Order",1)
**Parameter :BASETAB,自定义表名
ROWID,
LockType,是否立即解锁,具体是否需要重写该变量,请结合实际业务考虑!!
**Returns :%String
***/
ClassMethod LOCKCLR(BASETAB, ROWID, LockType As %String = "I") As %String
{
q:$g(ROWID)="" -1
if (LockType="I"){
L -^DBLock(BASETAB,ROWID)#LockType
}else{
L -^DBLock(BASETAB,ROWID)
}
k ^DBLock(BASETAB,ROWID)
Q -1
}
}
AES加密2次调用
/// AES 加密
/// w ##class(iH.test).AESEncrypt("DHC005864210624172656")
/// w ##class(iH.Api.PublicApi).GetAES256CTR("DHC005864210624172656")
ClassMethod AESEncrypt(plaintext As %String, key As %String, IV As %String = "") As %String
{
Set key="dhcc1024@hospital!leveld"
Set IV="01wshdkcnzmawoid"
Set text=$ZCONVERT(plaintext,"O","UTF8")
Set text=$SYSTEM.Encryption.AESCBCEncrypt(text,key,IV)
b ; text
Set ciphertext=$SYSTEM.Encryption.Base64Encode(text)
q ciphertext
}
/// AES 解密
/// w ##class(iH.test).AESCBCDecrypt()
ClassMethod AESCBCDecrypt(ciphertext As %String, key As %String, IV As %String = "") As %String
{
Set key="2067a854ff54447db3867b5893eb3f69"
Set text=$SYSTEM.Encryption.Base64Decode(ciphertext)
Set text=$SYSTEM.Encryption.AESCBCDecrypt(text,key)
Set plaintext=$ZCONVERT(text,"I","UTF8")
q plaintext
}
评论