206 lines
6.1 KiB
Plaintext
206 lines
6.1 KiB
Plaintext
{*******************************************************}
|
|
{ }
|
|
{ xPrintLogService }
|
|
{ }
|
|
{ Copyright (C) 2025 kku }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit xPrintLogService;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.SysUtils, System.Classes, Tocsg.Files;
|
|
|
|
type
|
|
TxPrintLogService = class(TTgDirWatchBase)
|
|
private
|
|
sLogDir_: String;
|
|
bIsWorking_: Boolean;
|
|
procedure ProcessDirWatchEnt(Sender: TObject; pInfo: PDirWatchEnt); override;
|
|
public
|
|
Constructor Create;
|
|
Destructor Destroy; override;
|
|
|
|
procedure StartService;
|
|
procedure StopService;
|
|
|
|
property IsWorking: Boolean read bIsWorking_;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Tocsg.Exception, Tocsg.Path, superobject, ManagerService, GlobalDefine,
|
|
Tocsg.Safe, Tocsg.Strings;
|
|
|
|
Constructor TxPrintLogService.Create;
|
|
begin
|
|
Inherited Create(true, false);
|
|
bIsWorking_ := false;
|
|
sLogDir_ := 'C:\ProgramData\bsoneprint\logs\';
|
|
end;
|
|
|
|
Destructor TxPrintLogService.Destroy;
|
|
begin
|
|
StopService;
|
|
Inherited;
|
|
end;
|
|
|
|
procedure Send_xPrintLog(aO: ISuperObject);
|
|
|
|
function GetStrRange(sVal: String; nLen: Integer): String;
|
|
begin
|
|
if Length(sVal) > nLen then
|
|
SetLength(sVal, nLen);
|
|
Result := sVal;
|
|
end;
|
|
|
|
var
|
|
sMsg: String;
|
|
dt: TDateTime;
|
|
O: ISuperObject;
|
|
StrList: TStringList;
|
|
begin
|
|
try
|
|
sMsg := Format('Billcode : %s, Document : %s', [aO.S['bizworkCode'], aO.S['docname']]);
|
|
|
|
dt := Now;
|
|
O := SO;
|
|
|
|
O.S['TYP_MSG'] := '@(!)_IC_P';
|
|
O.S['KEY_AGENTID'] := gMgSvc.AgentId;
|
|
O.S['KEY_EMPNO'] := gMgSvc.EmpNo;
|
|
O.S['KEY_HOSTNAME'] := gMgSvc.UserName;
|
|
O.S['KEY_SUBMITTIME'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', dt);
|
|
O.S['key_submitTime'] := O.S['logtime'];
|
|
O.S['KEY_LOGCODE'] := LOGCODE_EVENT_PRINTER;
|
|
O.S['DETECTION_DATE'] := O.S['KEY_SUBMITTIME']; // 이벤트 발생 시각. REQUEST의 경우, 예외 신청할 이벤트의 발생 시각
|
|
O.S['detectionDate'] := O.S['key_submitTime']; // 이벤트 발생 시각. REQUEST의 경우, 예외 신청할 이벤트의 발생 시각
|
|
O.S['KEY_SUMMARY'] := sMsg;
|
|
|
|
O.S['PRINTER_JOBNAME'] := aO.S['docname'];
|
|
|
|
O.S['actionGroupId'] := aO.S['uidkey']; // 문서번호
|
|
|
|
O.I['printCopyCnt'] := aO.I['copycnt']; // 부수
|
|
O.I['printPageCnt'] := aO.I['sheetcnt']; // 장수
|
|
|
|
// 스마트웨어 연동 정보 매치
|
|
O.S['userId'] := GetStrRange(aO.S['userid'], 30);
|
|
O.S['guidKey'] := GetStrRange(aO.S['uidkey'], 40);
|
|
O.S['macCode'] := GetStrRange(aO.S['maccode'], 30);
|
|
O.S['modelCode'] := GetStrRange(aO.S['modelname'], 50);
|
|
O.S['macLocation'] := GetStrRange(aO.S['maclocation'], 100);
|
|
O.S['userComIP'] := GetStrRange(aO.S['usercomip'], 15);
|
|
O.S['docName'] := GetStrRange(aO.S['docname'], 255);
|
|
O.S['unitPaperSize'] := GetStrRange(aO.S['pagersize'], 30);
|
|
O.S['unitColorMode'] := GetStrRange(aO.S['colormode'], 1);
|
|
O.S['unitDuplexMode'] := GetStrRange(IntToStr(aO.I['duplexmode']), 1);
|
|
O.I['sT_PageCnt'] := aO.I['sheetcnt'];
|
|
O.I['sT_CopyCnt'] := aO.I['copycnt'];
|
|
O.S['jobType'] := '0'; // 출력구분 (0 : Print), Len=3
|
|
Guard(StrList, TStringList.Create);
|
|
SplitString(aO.S['pagersize'], 'X', StrList);
|
|
if StrList.Count > 1 then
|
|
begin
|
|
O.S['unitPaperSizeW'] := GetStrRange(StrList[0], 10);
|
|
O.S['unitPaperSizeH'] := GetStrRange(StrList[1], 10);
|
|
end else begin
|
|
O.S['unitPaperSizeW'] := '';
|
|
O.S['unitPaperSizeH'] := '';
|
|
end;
|
|
O.S['xerox_YN'] := GetStrRange(aO.S['xeroxyn'], 1);
|
|
O.S['macIP'] := GetStrRange(aO.S['macip'], 15); // GetStrRange(aO.S['usercommacaddr'], 15);
|
|
O.S['usercommacaddr'] := GetStrRange(aO.S['usercommacaddr'], 15);
|
|
O.S['macFloor'] := GetStrRange(aO.S['mac_floor'], 10);
|
|
O.S['macPartName'] := GetStrRange(aO.S['mac_partname'], 30);
|
|
O.S['bizWorkCode'] := GetStrRange(aO.S['bizworkCode'], 100);
|
|
O.S['billable'] := GetStrRange(IntToStr(aO.I['billable']), 1);
|
|
O.S['err_BizWorkCodeYN'] := GetStrRange(aO.S['err_bizworkcodeyn'], 1);
|
|
O.S['collectMode'] := '0'; // 집계방식 (김앤장 사양 대응 -> 0:실시간 집계, 1: 접속후 집계, 2:Upload 집계), Len=1
|
|
O.S['winID'] := GetStrRange(aO.S['usercomloginname'], 30);
|
|
O.S['jobSTDate'] := GetStrRange(StrsReplace(aO.S['jobstdate'], ['-', ':', 'T', 'Z'], ''), 14);
|
|
|
|
// 정보 추가 25_0911 20:44:36 kku
|
|
O.S['processName'] := GetStrRange(aO.S['processname'], 30);
|
|
O.S['deviceName'] := GetStrRange(aO.S['devicename'], 30);
|
|
O.S['printName'] := GetStrRange(aO.S['printname'], 30);
|
|
|
|
gMgSvc.EventLog.Push(O.AsJSon);
|
|
except
|
|
on E: Exception do
|
|
ETgException.TraceException(E, 'Fail .. SendEventLog()');
|
|
end;
|
|
end;
|
|
|
|
procedure TxPrintLogService.StartService;
|
|
var
|
|
StrList: TStringList;
|
|
i: Integer;
|
|
O: ISuperObject;
|
|
begin
|
|
if not DirectoryExists(sLogDir_) then
|
|
exit;
|
|
|
|
Guard(StrList, TStringList.Create);
|
|
ExtrFilesFromDir(sLogDir_, StrList, false, 'json');
|
|
for i := 0 to StrList.Count - 1 do
|
|
begin
|
|
if LoadJsonObjFromFile(O, sLogDir_ + StrList[i]) then
|
|
begin
|
|
Send_xPrintLog(O);
|
|
DeleteFile(sLogDir_ + StrList[i]);
|
|
end;
|
|
end;
|
|
|
|
if not bIsWorking_ then
|
|
begin
|
|
AddDirWatch(sLogDir_);
|
|
bIsWorking_ := true;
|
|
Processor_.StartThread;
|
|
end;
|
|
end;
|
|
|
|
procedure TxPrintLogService.StopService;
|
|
begin
|
|
if bIsWorking_ then
|
|
begin
|
|
bIsWorking_ := false;
|
|
Processor_.Clear;
|
|
Processor_.PauseThread;
|
|
try
|
|
ClearDirWatch;
|
|
except
|
|
on E: Exception do
|
|
ETgException.TraceException(Self, E, 'Fail .. StopService()');
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TxPrintLogService.ProcessDirWatchEnt(Sender: TObject; pInfo: PDirWatchEnt);
|
|
var
|
|
O: ISuperObject;
|
|
begin
|
|
try
|
|
|
|
if pInfo.dwAction = 3 then // Modify
|
|
begin
|
|
if GetFileExt(pInfo.sPath).ToUpper <> 'JSON' then
|
|
exit;
|
|
|
|
if LoadJsonObjFromFile(O, pInfo.sPath) then
|
|
begin
|
|
Send_xPrintLog(O);
|
|
DeleteFile(pInfo.sPath);
|
|
end;
|
|
end;
|
|
except
|
|
on E: Exception do
|
|
ETgException.TraceException(Self, E, 'Fail .. ProcessDirWatchEnt()');
|
|
end;
|
|
end;
|
|
|
|
end.
|