function writelog(filename,content)

本文介绍了一个简单的Matlab函数writelog,该函数用于将指定内容追加写入到指定的日志文件中。使用dlmwrite函数完成写入操作。
function writelog(filename,content)
%write log :write content to the file with name of filename
%input filename:the filename of the log file
%input content:the content of the log for writing
dlmwrite(filename, content, '-append'); 
回到这个日志的题目,首先我知道一些js代码,一个写入和查看日志页面的。目前只能读取到这个是read.html的js async function readLog() { const filename = document.getElementById('readFilename').value.trim(); if (!filename) return alert('请输入文件名'); const res = await fetch(/logs/read?filename=${encodeURIComponent(filename)}); const text = await res.text(); if (res.status === 200 && text && text !== 'null') { document.getElementById('logContent').textContent = text; } else { document.getElementById('logContent').textContent = text || ''; } }。这个是list.html的js, async function fetchLogs() { const dir = document.getElementById('dirInput').value; const res = await fetch(/logs/list?dir=${encodeURIComponent(dir)}); const data = await res.json(); const list = document.getElementById('logList'); list.innerHTML = ''; (data.files || []).forEach(file => { const li = document.createElement('li'); li.className = 'list-group-item'; li.textContent = file; list.appendChild(li); }); } fetchLogs();。这个是write.html的js async function writeLog() { const content = document.getElementById('writeContent').value.trim(); if (!content) return alert('请填写内容'); const res = await fetch('/logs/write', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ content }) }); const data = await res.json(); document.getElementById('writeResult').textContent = data.success ? 写入成功!文件名:${data.filename} : (data.error || '写入失败'); if (data.success) { document.getElementById('writeContent').value = ''; } }。还有就是http://150.158.160.64:28542/logs/list?dir=..读取到{"files":["app","bin","boot","dev","etc","ffffllllaaaaggggggggggggggg114514","home","lib","lib64","media","mnt","opt","proc","root","run","sbin","srv","sys","tmp","usr","var"]}。还有,http://150.158.160.64:28542/logs/read?filename=可以读取一些日志,我试了../app.py好像不行 。我要怎么拿到flag。可能要结合nodedjs的各种特性,数组的上传等等。还得到绕过waf的················· utils.js ................. const fs = require('fs'); const path = require('path'); function listLogFiles(dir) { try { return fs.readdirSync(dir); } catch (err) { return []; } } const allowedFile = (file) => { const format = file.slice(file.indexOf('.') + 1); return format == 'log'; }; function readLogFile(filename) { if (!allowedFile(filename)) { return 'not allowed.'; } try { let flag = filename.includes(' ') ? 1 : filename.includes('/') ? 1 : filename.includes('..') ? 1 : 0; if (flag) { return 'no way'; } if (filename.length > 13) { filename = filename.slice(0, 13); const filePath = path.join(logsDir+filename); return fs.readFileSync(filePath, 'utf-8'); } } catch (err) { return 'error!!!!!'; } } function appendLogFile(filename, content) { const filePath = path.join(logsDir, filename); try { fs.appendFileSync(filePath, content + '\n'); return true; } catch (err) { return false; } } module.exports = { listLogFiles, readLogFile, appendLogFile, getlogname }; function getlogname() { const now = new Date(); const year = now.getFullYear(); const month = String(now.getMonth() + 1).padStart(2, '0'); const day = String(now.getDate()).padStart(2, '0'); const name = `${year}${month}${day}.log`; return name; } ~~~~~~~~~~~~~~~~ 显然这是一个签到题了捏~~~~~~~~~~~~ 。还有就是要js和php一样是弱类型语言 注意数组和字符串的处理方式,好像是filename传两三个同名参数就可以是数组解析了
08-01
这是js代码: let filePath = "doc/228/122212/12321/测试0770X.docx"; let fileName = "测试0770X.docx"; let saveFilePath = "/usr/wea/ec/web/RevisionOnly/doc/228/122212/12321/测试0770X.docx"; let url = 'http://10.0.11.110/web/RevisionOnly/Word.jsp'+ '?filePath='+encodeURIComponent(filePath)+ '&userName='+encodeURIComponent(userName) + '&fileName='+encodeURIComponent(fileName) + '&category=' +category+ '&docId=' +fileId+ '&systemLanguage='+encodeURIComponent(systemLanguage)+ '&saveFilePath='+encodeURIComponent(saveFilePath); POBrowser.openWindowModeless(url, 'width=1050px;height=900px;'); 这是jsp代码: <%@ page language="java" import="com.zhuozhengsoft.pageoffice.OpenModeType,com.zhuozhengsoft.pageoffice.PageOfficeCtrl" pageEncoding="UTF-8" %> <%@ page import="org.apache.commons.lang3.StringUtils" %> <%@ page import="java.net.URLDecoder" %> <%@ page import="java.net.URLEncoder" %> <%@ page contentType="text/html; charset=UTF-8"%> <% String userName=URLDecoder.decode(request.getParameter("userName"),"UTF-8"); String filePath=URLDecoder.decode(request.getParameter("filePath"),"UTF-8"); String fileName=URLDecoder.decode(request.getParameter("fileName"),"UTF-8"); out.println(fileName); String saveFilePath=URLDecoder.decode(request.getParameter("saveFilePath"),"UTF-8"); String systemLanguage=URLDecoder.decode(request.getParameter("systemLanguage"),"UTF-8"); PageOfficeCtrl poCtrl = new PageOfficeCtrl(request); //设置服务器页面 poCtrl.setServerPage(request.getContextPath() +"/poserver.zz"); //添加自定义按钮 if (StringUtils.isNotEmpty(systemLanguage) && "zh-CN".equals(systemLanguage)){ poCtrl.addCustomToolButton("保存", "Save", 1); poCtrl.addCustomToolButton("新建批注", "InsertComment()", 3); poCtrl.addCustomToolButton("隐藏痕迹", "hideRevision", 18); poCtrl.addCustomToolButton("显示痕迹", "showRevision", 9); }else{ poCtrl.addCustomToolButton("Save", "Save", 1); poCtrl.addCustomToolButton("InsertComment", "InsertComment()", 3); poCtrl.addCustomToolButton("HideRevision", "hideRevision", 18); poCtrl.addCustomToolButton("ShowRevision", "showRevision", 9); } //设置并发控制时间 poCtrl.setTimeSlice(20); //设置保存页面 String path = URLEncoder.encode(URLEncoder.encode(request.getParameter("saveFilePath"),"UTF-8"),"UTF-8"); poCtrl.setSaveFilePage("SaveFile.jsp?saveFilePath="+path); if (fileName.endsWith(".docx") || fileName.endsWith(".doc")) { //打开Word文档 poCtrl.webOpen(filePath, OpenModeType.docRevisionOnly, userName); } else if (fileName.endsWith(".xls") || fileName.endsWith(".xlsx")) { //打开Excel文档 poCtrl.webOpen(filePath, OpenModeType.xlsNormalEdit, userName); } %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta charset="utf-8"> <title>pageOffice</title> <style> #main { width: 1040px; height: 890px; border: #83b3d9 2px solid; background: #f2f7fb; } #shut { width: 45px; height: 30px; float: right; margin-right: -1px; } #shut:hover { } </style> </head> <body style="margin:0; padding:0;border:0px; overflow:hidden" scroll="no"> <script type="text/javascript" src="https://oad.hepalink.net/js/jquery/jquery_wev8.js"></script> <script type="text/javascript"> function InsertComment() { document.getElementById("PageOfficeCtrl1").WordInsertComment(); var sMac = "Sub myfunc() " + "\r\n" + "On Error Resume Next " + "\r\n" + "ActiveWindow.ActivePane.Close " + "\r\n" + "End Sub "; document.getElementById("PageOfficeCtrl1").RunMacro("myfunc", sMac); } function Save() { document.getElementById("PageOfficeCtrl1").WebSave(); } function showRevision() { document.getElementById("PageOfficeCtrl1").ShowRevisions = true; } function hideRevision() { document.getElementById("PageOfficeCtrl1").ShowRevisions = false; } function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return decodeURI(r[2]); return null; } function BeforeBrowserClosed() { var docId = getQueryString("docId"); var filePath = getQueryString("saveFilePath"); var fileName = getQueryString("fileName"); var lang = getQueryString("systemLanguage"); var category = getQueryString("category"); if (document.getElementById("PageOfficeCtrl1").IsDirty) { var message = "提示:文档已被修改,是否确认保存并关闭?"; // var lang = navigator.language||navigator.userLanguage;//常规浏览器语言和IE浏览器 lang = lang.substr(0, 2); if(lang!=='zh'){ message="The document has been modified.Please confirm!"; } if (confirm(message)) { document.getElementById("PageOfficeCtrl1").WebSave(); $.ajax({ type:"post", //方式 url:"/api/pageOffice/replaceDoc", //寻址,处理页面 data:{ "docId":docId, "filePath":filePath, "fileName":fileName, "category":category }, //datatype:"json", success:function (data){ } }) return true; } else { return false; } }else{ $.ajax({ type:"post", //方式 url:"/api/pageOffice/replaceDoc", //寻址,处理页面 data:{ "docId":docId, "filePath":filePath, "fileName":fileName, "category":category }, //datatype:"json", success:function (data){ } }) } } </script> <div id="main"> <%=filePath %>。 <%=saveFilePath %>。 <div id="content" style="height:850px;width:1036px;overflow:hidden;"> <%=poCtrl.getHtmlCode("PageOfficeCtrl1")%> </div> </div> </body> </html> 这是 SaveFile.jsp代码: <%@ page language="java" import="com.zhuozhengsoft.pageoffice.FileSaver" pageEncoding="utf-8" %> <%@ page import="java.net.URLDecoder" %> <% String saveFilePath= URLDecoder.decode(request.getParameter("saveFilePath"),"UTF-8"); FileSaver fs = new FileSaver(request, response); fs.saveToFile(saveFilePath); fs.close(); %> <%=saveFilePath %> 这是java代码块,我省略了一些业务代码: public static void uploadFile(Map<String, Object> map) { try { ImageFileManager imageFileManager=new ImageFileManager(); imageFileManager.getImageFileInfoById(2311); InputStream inputStream = imageFileManager.getInputStream(); String dirPath = "/usr/wea/ec/web/RevisionOnly/doc/228/122212/12321";; createDocDirs(dirPath); writeToLocal(dirPath+"/测试0770X.docx",inputStream); } catch (Exception e) { log.writeLog("uploadFile error:"+e); } } private static void createDocDirs(String dirPath){ File file = new File(dirPath); if(!file.exists()&& !file.isDirectory()) { file.mkdirs(); } } public static void writeToLocal(String destination, InputStream input) throws IOException { int index; byte[] bytes = new byte[1024]; FileOutputStream downloadFile = new FileOutputStream(new String(destination.getBytes(StandardCharsets.UTF_8))); while ((index = input.read(bytes)) != -1) { downloadFile.write(bytes, 0, index); downloadFile.flush(); } downloadFile.close(); input.close(); } 我提供的js、jsp、java有些已经固定写死的参数为了脱敏,实际核心逻辑代码没有变,我已经提供完了,你分析一下问题在哪里
最新发布
10-28
unit YMS_NBOCEAN_EDI; interface uses Windows, Messages, SysUtils, Classes, DB, ADODB, ybADOQuery, ybDbUtils, ybEDIBaseClasses, DateUtils, ybConnection, YBDBDesc, ybAppMsgUtils, StrUtils,Variants, cxSSheet, cxSSTypes, dialogs, ComObj; type TYBNBOCEANEDIBuilder = class(TYBEDIBuilder) private FGateInConts: TStrings; // 进门集装箱列表; FGateOutConts: TStrings; // 出门集装箱列表; FEDIText: TStrings; // 生成报文; FEditTypes: TStrings; FNBOCEANYardName: string; // 报文中堆场代码; FSendMark: string; FManHourPriceQuery: TADOQuery; FEdiTypes: array of string; FEdiFromService: Boolean; FType: string; FStream: TMemoryStream; //function GetNBOCEANYardName: string; protected function GetCustName: string; override; function GetEdiTypeCount: Integer; override; function GetEdiTypes(Index: Integer): string; override; procedure DoAfterSaveToMail; override; procedure RemindWhenDataHasProblem;override; function BuildGateInEdi(BeginDate, EndDate: TDateTime; aContNo: string):string; function BuildGateOutEdi(BeginDate, EndDate: TDateTime; aContNo: string):string; public constructor Create; override; destructor Destroy; override; function BuildEDIText(AType, ATdh: string; BeginDate, EndDate:TDateTime): string;override; property SendMark: string read FSendMark write FSendMark; procedure SaveEdiToFtp(AType, ATdh: string; aBeginDate, aEndDate: TDateTime); end; implementation const FOOTER_LINE = '99:%d'''; //总行数,包括本行 procedure WriteLog(msg: string); var dtime: string; date:string; logFile: TextFile; Filename: string; begin //将操作写到日志表中,便于出问题时查找 try if True then begin dtime := FormatDateTime('yyyy-mm-dd hh:mm:ss zzz', Now); date:= FormatDateTime('yyyy-mm-dd',Now); Filename := ExtractFilePath(ParamStr(0))+'yblog_EDI\' + date+'Log.txt'; if not DirectoryExists(ExtractFilePath(ParamStr(0))+'yblog_EDI\') then ForceDirectories(ExtractFilePath(ParamStr(0))+'yblog_EDI\'); AssignFile(logFile, Filename); if not FileExists(Filename) then begin Rewrite(logFile); writeln(logFile, dtime + ':' + msg); CloseFile(logFile); end else begin Append(logFile); if (msg = '') then writeln(logFile, ' ') else writeln(logFile, dtime + ':' + msg); CloseFile(logFile); end; end; except end; end; function TYBNBOCEANEDIBuilder.BuildGateInEdi(BeginDate, EndDate: TDateTime; aContNo: string): string; var lQuery: TADOQuery; s, lYardCode, lFormat, lJCCCH: string; begin FEDIText.Clear; lQuery := TADOQuery.Create(nil); try lYardCode := ybGetSysValue(Connection, 'CY.NBOCEAN EDI堆场代码 '); if lYardCode = '' then begin lYardCode := ''; ybSetSysValue('CY.NBOCEAN EDI堆场代码', lYardCode, Connection); end; lJCCCH := ybGetSysValue(Connection, 'CY.NBOCEAN EDI是否添加车号行数信息'); if lJCCCH = '' then begin lJCCCH := '0'; ybSetSysValue('CY.NBOCEAN EDI是否添加车号行数信息', lJCCCH, Connection); end; lFormat := ybGetSysValue(Connection, 'CY NBOCEAN进出EDI第一行格式'); if lFormat = '' then begin lFormat := '0'; ybSetSysValue('CY NBOCEAN进出EDI第一行格式', lFormat, Connection); end; lQuery.Connection := Connection; lQuery.SQL.Text := 'SELECT JCJZX_CM,JCJZX_HC,JCJZX_JZXBH,JCJZX_CC,JCJZX_XX,JCJZX_SBJJD,JCJZX_TDH,JCJZX_JCRQ,JCJZX_CH FROM JCJZX with (nolock)'; lQuery.SQL.Add(' WHERE JCJZX_JCRQ >= :P1 AND JCJZX_JCRQ < :P2 '); lQuery.SQL.Add(' AND JCJZX_CGS = ''NBOS'' '); lQuery.SQL.Add('ORDER BY JCJZX_CM, JCJZX_HC DESC'); lQuery.Parameters[0].Value := BeginDate; lQuery.Parameters[1].Value := EndDate; lQuery.Open; if not lQuery.IsEmpty then begin if lFormat = '3' then FEDIText.Add(Format('00:CODECO:GATE-IN REPORT:9:%s:CNTJN:%s''', [lYardCode, FormatDateTime('yyyymmddhhnn',Now)])) else FEDIText.Add(Format('00:CODECO:GATE-IN REPORT:9:%s:NBOCEANNB:%s:CNBLG:CNBLG''', [lYardCode, FormatDateTime('yyyymmddhhnn',Now)])); while not lQuery.Eof do begin FEDIText.Add(Format('10::%s:%s:NBOCEAN''', [lQuery.FieldByName('JCJZX_CM').AsString, lQuery.FieldByName('JCJZX_HC').AsString])); FEDIText.Add(Format('50:%s:%s:E:%s:%s:%s:::%s::''', [lQuery.FieldByName('JCJZX_JZXBH').AsString, lQuery.FieldByName('JCJZX_CC').AsString + StringReplace(lQuery.FieldByName('JCJZX_XX').AsString, 'GP', 'DC', [rfReplaceAll]), 'I', lQuery.FieldByName('JCJZX_SBJJD').AsString, lQuery.FieldByName('JCJZX_TDH').AsString, FormatDateTime('yyyymmddhhnn',lQuery.FieldByName('JCJZX_JCRQ').AsDateTime)])); if lJCCCH = '1' then FEDIText.Add(Format('52:3:%s::NONE''', [lQuery.FieldByName('JCJZX_CH').AsString])); lQuery.Next; end; FEDIText.Add(Format('99:%d''',[FEDIText.Count + 1])); //Result := True; end; if FEdiFromService then begin if FEDIText.Count = 2 then FEDIText.Text := ''; WriteLog('FEdiFromService'); FStream.Clear; FEDIText.SaveToStream(FStream); EdiFileName := Format('EDI-%s-IN-%s', [lYardCode, FormatDateTime('yyyymmddhhss', Now)]) + '.txt'; end else EdiFileName := EdiFilePath + '\' + Format('EDI-%s-IN-%s', [lYardCode, FormatDateTime('yyyymmddhhss', Now)]) + '.txt'; WriteLog('EdiFileName='); WriteLog(EdiFileName); FEDIText.SaveToFile(EdiFileName); finally lQuery.Free; end; end; function TYBNBOCEANEDIBuilder.BuildGateOutEdi(BeginDate, EndDate: TDateTime;aContNo: string): string; var lQuery, lQueryJG, lQueryCy: TADOQuery; lMNO, s, cc1, cc2, lYardCode, lFormat, lJCCCH, lSpecialFormat, lCCYY, lSFQFCCYY: string; begin FEDIText.Clear; lQuery := TADOQuery.Create(nil); lQueryJG := TADOQuery.Create(nil); lQueryCy := TADOQuery.Create(nil); lMNO := FormatDateTime('yyyymmddhhnn', Now); try lQuery.Connection := Connection; lQueryCy.Connection := Connection; lSpecialFormat := ybGetSysValue(Connection, 'CY NBOCEAN进出场特殊格式'); if lSpecialFormat = '' then begin lSpecialFormat := '0'; ybSetSysValue('CY NBOCEAN进出场特殊格式', lSpecialFormat, Connection, '[0]其他地区格式[1]宁波珉钧使用格式'); end; lFormat := ybGetSysValue(Connection, 'CY NBOCEAN进出EDI第一行格式'); if lFormat = '' then begin lFormat := '0'; ybSetSysValue('CY NBOCEAN进出EDI第一行格式', lFormat, Connection); end; lJCCCH := ybGetSysValue(Connection, 'CY.NBOCEAN EDI是否添加车号行数信息'); if lJCCCH = '' then begin lJCCCH := '0'; ybSetSysValue('CY.NBOCEAN EDI是否添加车号行数信息', lJCCCH, Connection); end; lQuery.SQL.Text := 'SELECT CCJZX_TXYY,CCJZX_CCCD,CCJZX_TDH,CCJZX_CM,CCJZX_HC,JCJZX_ZZ,'; lQuery.SQL.Add('CCJZX_JZXBH,CCJZX_CC,CCJZX_XX,CCJZX_SBJJDH,CCJZX_TDH,CCJZX_CCRQ,CCJZX_CH FROM CCJZX with (nolock)'); lQuery.SQL.Add('JOIN JCJZX ON JCJZX_FLOWID=CCJZX_FLOWID'); lQuery.SQL.Add('WHERE CCJZX_CCRQ >= :P1 AND CCJZX_CCRQ < :P2 '); lQuery.SQL.Add(' AND CCJZX_CGS = ''NBOS'''); if aContNo <> '' then lQuery.SQL.Add(' AND CharIndex(CCJZX_JZXBH, ' + QuotedStr(aContNo) + ') > 0'); lQuery.SQL.Add('ORDER BY CCJZX_CM, CCJZX_HC DESC'); lQuery.Parameters[0].Value := BeginDate; lQuery.Parameters[1].Value := EndDate; lQuery.Open; lYardCode := ybGetSysValue(Connection, 'CY.NBOCEAN EDI堆场代码 '); if lYardCode = '' then begin lYardCode := 'ZHD'; ybSetSysValue('CY.NBOCEAN EDI堆场代码', lYardCode, Connection); end; lSFQFCCYY := ybGetSysValue(Connection, 'CY.NBOCEAN 是否区分出场原因'); if lSFQFCCYY = '' then begin lSFQFCCYY := '0'; ybSetSysValue('CY.NBOCEAN 是否区分出场原因', lSFQFCCYY, Connection); //中储要求 end; if not lQuery.IsEmpty then begin if lFormat = '0' then FEDIText.Add(Format('00:CODECO:GATE-OUT REPORT:9:%s:CNTJN:%s''', [lYardCode, lMNO])) else FEDIText.Add(Format('00:CODECO:GATE-OUT REPORT:9:%s:NBOCEANNB:%s:CNBLG:CNBLG''', [lYardCode, lMNO])); while not lQuery.Eof do begin FEDIText.Add(Format('10::%s:%s:NBOCEAN''', [lQuery.FieldByName('CCJZX_CM').AsString, lQuery.FieldByName('CCJZX_HC').AsString])); begin FEDIText.Add(Format('50:%s:%s:%s:%s:%s:%s::::%s:''', [lQuery.FieldByName('CCJZX_JZXBH').AsString, lQuery.FieldByName('CCJZX_CC').AsString + StringReplace(lQuery.FieldByName('CCJZX_XX').AsString, 'GP', 'DC', [rfReplaceAll]), cc1, cc2, lQuery.FieldByName('CCJZX_SBJJDH').AsString, lQuery.FieldByName('CCJZX_TDH').AsString, FormatDateTime('yyyymmddhhnn',lQuery.FieldByName('CCJZX_CCRQ').AsDateTime)])); end; lQuery.Next; end; if lJCCCH = '1' then FEDIText.Add(Format('52:3:%s::NONE''',[lQuery.FieldByName('CCJZX_CH').AsString])); lQuery.Next; end; if (not lQueryJG.IsEmpty) OR (not lQuery.IsEmpty) then begin FEDIText.Add(Format('99:%d''',[FEDIText.Count + 1])); end; if FEdiFromService then begin if FEDIText.Count = 2 then FEDIText.Text := ''; FStream.Clear; FEDIText.SaveToStream(FStream); EdiFileName := Format('EDI-%s-OUT-%s', [lYardCode, FormatDateTime('yyyymmddhhss', Now)]) + '.txt'; end else EdiFileName := EdiFilePath + '\' + Format('EDI-%s-OUT-%s', [lYardCode, FormatDateTime('yyyymmddhhss', Now)]) + '.txt'; FEDIText.SaveToFile(EdiFileName); finally lQuery.Free; lQueryJG.Free; end; end; function TYBNBOCEANEDIBuilder.BuildEDIText(AType, ATdh: string; BeginDate, EndDate:TDateTime): string; begin FEDIText.Clear; FStream := TMemoryStream.Create; if AType = '进场(新)' then Result := BuildGateInEDI(BeginDate, EndDate,ATdh) else if AType = '出场(新)' then Result := BuildGateOutEDI(BeginDate, EndDate,ATdh) end; constructor TYBNBOCEANEDIBuilder.Create; begin inherited; FSendMark := '0'; FEditTypes := TStringList.Create; FEditTypes.Add('进场(新)'); FEditTypes.Add('出场(新)'); FEDIText := TStringList.Create; FGateInConts := TStringList.Create; FGateOutConts := TStringList.Create; end; destructor TYBNBOCEANEDIBuilder.Destroy; begin FEditTypes.Free; FreeAndNil(FManHourPriceQuery); FEDIText.Free; FGateInConts.Free; FGateOutConts.Free; inherited; end; function TYBNBOCEANEDIBuilder.GetCustName: string; begin Result := 'NBOCEAN'; end; function TYBNBOCEANEDIBuilder.GetEdiTypeCount: Integer; begin Result := FEditTypes.Count; end; function TYBNBOCEANEDIBuilder.GetEdiTypes(Index: Integer): string; begin Result := FEditTypes.Strings[Index]; end; procedure TYBNBOCEANEDIBuilder.DoAfterSaveToMail; var lQry: TYBADOQuery; i: Integer; begin lQry := TYBADOQuery.Create(nil); try lQry.Connection := Connection; for i := 0 to FGateInConts.Count - 1 do begin lQry.SQL.Text :='update JCJZX set JCJZX_EDISendMark = 1 where JCJZX_GUID = ' + QuotedStr(FGateInConts[i]); lQry.ExecSQL; end; FGateInConts.Clear; for i := 0 to FGateOutConts.Count - 1 do begin lQry.SQL.Text :='update CCJZX set CCJZX_EDISendMark = 1 WHERE CCJZX_GUID = ' + QuotedStr(FGateOutConts[i]); lQry.ExecSQL; end; FGateOutConts.Clear; finally lQry.Free; end; end; procedure TYBNBOCEANEDIBuilder.SaveEdiToFtp(AType, ATdh: string; aBeginDate, aEndDate: TDateTime); var lStream: TMemoryStream; lStrLst: TStringList; lMainconn: TAdoconnection; lFtpQuery: TYBADOQuery; FHost, FUsername, FPassword, FDirName, FPort, lSenderCode,FDire: string; begin lMainconn := ybgetmainconn(connection); lStrLst := TStringList.Create; lStream := TMemoryStream.Create; lFtpQuery := TYBADOQuery.Create(nil); try lFtpQuery.Connection := lMainconn; lFtpQuery.SQL.Text := 'SELECT * FROM EDIFTPLOG WHERE 1 = 2'; lFtpQuery.Open; FSendMark:='1'; lStrLst.Text := BuildEDIText(AType, ATdh, aBeginDate, aEndDate); if lStrLst.Count > 3 then begin lSenderCode := ybGetSysValue(Connection, 'CY.NBOCEAN EDI发送方'); if lSenderCode = '' then begin lSenderCode := 'XXXX'; ybSetSysValue('CY.NBOCEAN EDI发送方', lSenderCode, Connection); end; FHost := ybGetSysValue(Connection, 'CY.NBOCEAN EDI.FTP地址'); if FHost = '' then begin FHost := 'www.onto.cn'; ybSetSysValue('CY.NBOCEAN EDI.FTP地址', FHost, Connection); end; FUsername := ybGetSysValue(Connection, 'CY.NBOCEAN EDI.FTP用户'); if FUsername = '' then begin FUsername := 'ftp_tj_zgwl'; ybSetSysValue('CY.NBOCEAN EDI.FTP用户', FUsername, Connection); end; FPassword := ybGetSysValue(Connection, 'CY.NBOCEAN EDI.FTP密码'); if FPassword = '' then begin FPassword := 'l0Y3b1dB'; ybSetSysValue('CY.NBOCEAN EDI.FTP密码', FPassword, Connection); end; FPort := ybGetSysValue(Connection, 'CY.NBOCEAN EDI.FTP端口'); if FPort = '' then begin FPort := '21'; ybSetSysValue('CY.NBOCEAN EDI.FTP端口', FPort, Connection); end; FDire := ybGetSysValue(Connection, 'CY.NBOCEAN EDI.FTP目录'); if FDire = '' then begin FDire := 'in'; ybSetSysValue('CY.NBOCEAN EDI.FTP目录', FDire, Connection); end; lStream.Clear; lStream.Seek(0, 0); lStrLst.SaveToStream(lStream); lFtpQuery.Append; lFtpQuery.FieldValues['FL_GUID'] := CreateClassID; lFtpQuery.FieldByName('FL_DZ').AsString := FHost; lFtpQuery.FieldByName('FL_USERNAME').AsString := FUsername; lFtpQuery.FieldByName('FL_PASSWORD').AsString := FPassword; lFtpQuery.FieldByName('FL_DIR').AsString := FDirName; lFtpQuery.FieldByName('FL_PORT').AsString := FPort; lFtpQuery.FieldByName('FL_Dir').AsString := FDire; lFtpQuery.FieldValues['FL_CTIME'] := Now; lFtpQuery.FieldValues['FL_SCSJ'] := Now; if AType = '进场(新)' then lFtpQuery.FieldValues['FL_MSXX'] := 'NBOCEANGateIn' else if AType = '出场(新)' then lFtpQuery.FieldValues['FL_MSXX'] := 'NBOCEANGateOut'; if AType = '进场(新)' then lFtpQuery.FieldValues['FL_WJM'] := 'NBOCEANGateIn' + FormatDateTime('yyyymmddhhnn', Now) + '.txt' else if AType = '出场(新)' then lFtpQuery.FieldValues['FL_WJM'] := 'NBOCEANGateOut' + FormatDateTime('yyyymmddhhnn', Now) + '.txt' else lFtpQuery.FieldValues['FL_WJM'] := 'NBOCEAN' + FormatDateTime('yyyymmddhhnn', Now) + '.txt'; lFtpQuery.FieldValues['FL_EDIQSSJ'] := aBeginDate; lFtpQuery.FieldValues['FL_EDIJZSJ'] := aEndDate; TMemoField(lFtpQuery.FieldByName('FL_WJNR')).LoadFromStream(lStream); lFtpQuery.Post; DoAfterSaveToMail; end; finally lStream.Free; lStrLst.free; lFtpQuery.Free; end; end; procedure TYBNBOCEANEDIBuilder.RemindWhenDataHasProblem; var lQry: TYBADOQuery; lMailBuilder: TYBCustomDBMailBuilder; lStrLst: TStringList; begin try lQry := TYBADOQuery.Create(nil); lMailBuilder := TYBCustomDBMailBuilder.Create; lStrLst := TStringList.Create; try lQry.Connection := Connection; lQry.SQL.Text := 'select * from JCJZX where JCJZX_JCCZT=''预进场'' and JCJZX_CGS=''NBOCEAN'''; lQry.Open; while not lQry.Eof do begin lStrLst.Add(lQry.fieldByName('JCJZX_JZXBH').AsString); lQry.Next; end; if lStrLst.Count > 0 then begin lMailBuilder.Conn := ybgetmainconn(connection); lMailBuilder.SenderUserName := 'admin'; lMailBuilder.Content := lStrLst.CommaText; //增加接收者 lMailBuilder.AddReceiver('reminder',Self.GetRemindReceiverEmail); //题目 lMailBuilder.Subject := 'EDI可疑提醒'; //处理标识 lMailBuilder.ProcID := 'EDI可疑提醒'; lMailBuilder.ProcNote1 := DateTimeToStr(Now); lMailBuilder.ProcNote2 := DateTimeToStr(Now); lMailBuilder.ProcNote3 := ''; lMailBuilder.ProcNote4 := 'YB'; //生成数据库待发送邮件 lMailBuilder.SendToDBServer; end; finally lQry.Free; lMailBuilder.Free; lStrLst.free; end; except end; end; 其中BuildGateOutEdi函数导出生成文件时,会生成两个文件,文件名分别为NBOCEAN出场(新)20251013134938261和EDI-ZHD-OUT-202510131338,帮我检查下是哪部分代码生成的NBOCEAN出场(新)20251013134938261的文件
10-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值