|
|
using CounsellorBL.BLStructure; using log4net; using log4net.Config; using Microsoft.Extensions.Configuration; using MonumentDefine; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OT.COM.SignalerMessage; using SeleniumBrowser; using SoldierData.EnterprizeV4; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Windows.Forms; using static MonumentDefine.Enums;
namespace TruckAP { public partial class Form1 : Form { const string ScriptFolder = "RunScripts2"; public string g_apiServer { get; set; } string UseOrigtekrpa = "false";
public List<string> g_lsGroupUidsPost { get; set; } = null; public List<string> g_lsGroupUidsRPA { get; set; } = null;
private readonly static ILog _log = LogManager.GetLogger(typeof(Form1));
private readonly Dictionary<string, string> _dicSetting = new Dictionary<string, string>();
private int _nAdditional_Record = 0;
[DllImport("User32.dll")] private static extern int SetForegroundWindow(IntPtr point);
public const string FFMPEG_FILE = "ffmpeg.exe";
public const string RECORD_FILE = "Record.mp4";
public const string group_uids_post = "group_uids_post"; public const string group_uids_rpa = "group_uids_rpa"; private List<tb_grp_group2user> _lgroup2user2 { get; set; } = new List<tb_grp_group2user>();
public Form1() { LoadLog4netConfig(); _log.Info("Form1 Constructor start");
InitializeComponent(); GetConfig(); _log.Info("Form1 Constructor End"); }
private void GetConfig() { _log.Info($"Form1 GetConfig start. Current Dir={Directory.GetCurrentDirectory()}");
IConfigurationRoot configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).Build();
IEnumerable<IConfigurationSection> ics = configuration.GetSection("appSettings").GetChildren();
foreach (IConfigurationSection ic in ics) { _dicSetting.Add(ic.Key, ic.Value); }
if (_dicSetting.ContainsKey("additional_record_time")) { int.TryParse(_dicSetting["additional_record_time"], out _nAdditional_Record); }
UseOrigtekrpa = _dicSetting.ContainsKey("use_origtekrpa") ? (_dicSetting["use_origtekrpa"].ToLower() == "true" ? "true" : "false") : "false"; _log.Info("Form1 GetConfig end"); }
internal string getArticleInRange(string i_sMethod, out QueryResponse o_qrRes) { string sMsg = null; QueryResponse qrRes = null;
_log.Info($"Start getArticleInRange method={i_sMethod}"); try { do { string sServerURL = g_apiServer; string sCmdURL = $"{sServerURL}/Cmd";
sMsg = Query(sCmdURL, "GROUP.ArticleManage2Service", i_sMethod, out CResponseMessage crpArticleWait);
if (sMsg != null) { break; }
qrRes = (crpArticleWait.param["data"] as JToken).ToObject<QueryResponse>();
if (qrRes == null) { sMsg = "CONVERT FAIL"; break; }
int nLim = qrRes.Records.Count();
for (int nIdx = nLim - 1; nIdx >= 0; nIdx--) { Dictionary<string, object> f = qrRes.Records[nIdx];
if (f.ContainsKey(tb_grp_article.CN_POST_STATUS) && int.TryParse(f[tb_grp_article.CN_POST_STATUS].ToString(), out int nStatus)) { f[tb_grp_article.CN_POST_STATUS] = (Enums.EPostStatus)nStatus; } }
} while (false); } catch (Exception ex) { sMsg = $"Process fail. ErrorMsg={ex.Message}"; }
if (sMsg != null) { _log.Error(sMsg); }
_log.Info($"End getArticleInRange method={i_sMethod}");
o_qrRes = qrRes;
return sMsg; }
private string prepareGroup2User() { string sMsg = null;
try { do { _lgroup2user2.Clear(); string sServerURL = g_apiServer;
string sCmdURL = $"{sServerURL}/Cmd";
Dictionary<string, object> dicPara = new Dictionary<string, object> { { BLWording.QRY_MASTER, new List<Dictionary<string, object>>() { new Dictionary<string, object>() { { BLWording.WHEREDATA, null } } } } };
sMsg = _Action(sCmdURL, "GROUP.GroupUserService", "Read", out CResponseMessage o_crpResult, dicPara);
if (sMsg != null) { break; }
QueryResponse qrRes = (o_crpResult.param["data"] as JToken).ToObject<QueryResponse>();
qrRes.Records.ForEach(f => { tb_grp_group2user u = new tb_grp_group2user(); u.FillData(f); _lgroup2user2.Add(u); }); } while (false); } catch (Exception ex) { sMsg = ex.Message; } return sMsg; }
internal string Run(string sCmd) { string sMsg = null;
_log.Info("Start Run With Cmd = " + sCmd);
try { do {
sMsg = prepareGroup2User(); if (sMsg != null) { break; }
switch (sCmd) { case "-a": sMsg = DoPost(); break;
case "-v": sMsg = DoMedia(); break;
case "": sMsg = DoPost(); sMsg = DoMedia(); break; } } while (false); } catch (Exception ex) { sMsg = ex.Message; } _log.Info("End Run");
return sMsg; }
private string DoPost() { string sMsg = null; try { do { _log.Info("Run DoPost");
sMsg = getArticleInRange("GetScheduleWaitingArticleInRange", out QueryResponse qrRes);
if (sMsg != null) { break; }
if (qrRes.Records.Any()) { _HandlePost(qrRes.Records); }
sMsg = getArticleInRange("GetFailWaitingArticleInRange", out qrRes);
if (sMsg != null) { break; }
_log.Info("Run DoPost Fail Case"); if (qrRes.Records.Any()) { _HandleFailPost(qrRes.Records); } } while (false);
} catch (Exception ex) { sMsg = ex.Message; } _log.Info("Run DoPost End"); return sMsg; }
private string DoMedia() { string sMsg = null; try { do { _log.Info("Run DoMedia"); sMsg = getArticleInRange("GetMediadWaitingArticleInRange", out QueryResponse qrRes);
if (sMsg != null) { break; }
if (qrRes.Records.Any()) { _HandleMedia(qrRes.Records); }
sMsg = getArticleInRange("GetFailWaitingArticleInRange", out qrRes);
if (sMsg != null && qrRes.Records.Any()) { break; }
_log.Info("Run DoMedia Fail"); if (qrRes.Records.Any()) { _HandleFailMedia(qrRes.Records); } } while (false); } catch (Exception ex) { sMsg = ex.Message; }
_log.Info("Run DoMedia End"); return sMsg; }
private void _HandleFail(IEnumerable<Dictionary<string, object>> i_idic) { IEnumerable<Dictionary<string, object>> ldMedia = i_idic.Where(f => f.ContainsKey(tb_grp_article.CN_FB_ARTICLE_ID) && f[tb_grp_article.CN_FB_ARTICLE_ID] != null); _HandlePost(i_idic.Except(ldMedia)); _HandleMedia(ldMedia); }
private void _HandleFailPost(IEnumerable<Dictionary<string, object>> i_idic) { IEnumerable<Dictionary<string, object>> ldMedia = i_idic.Where(f => f.ContainsKey(tb_grp_article.CN_FB_ARTICLE_ID) && f[tb_grp_article.CN_FB_ARTICLE_ID] != null); _HandlePost(i_idic.Except(ldMedia)); }
private void _HandleFailMedia(IEnumerable<Dictionary<string, object>> i_idic) { IEnumerable<Dictionary<string, object>> ldMedia = i_idic.Where(f => f.ContainsKey(tb_grp_article.CN_FB_ARTICLE_ID) && f[tb_grp_article.CN_FB_ARTICLE_ID] != null); _HandleMedia(ldMedia); }
private void _HandlePost(IEnumerable<Dictionary<string, object>> i_idic) { string sMsg = null;
_log.Info("Start _HandlePost"); try { do { string sServerURL = g_apiServer; string sURL = $"{sServerURL}/Cmd"; string sDownloadURL = $"{sServerURL}/Task/Download/?fileid=";
_log.Debug("_HandlePost f1");
foreach (Dictionary<string, object> article in i_idic) { if (!article.ContainsKey(tb_grp_article.CN_GROUP_UID)) { _log.Error($"{nameof(_HandlePost)} No CN_GROUP_UID"); continue; }
string sArticleUid = article[tb_grp_article.CN_UID].ToString(); string sGroupUid = article[tb_grp_article.CN_GROUP_UID].ToString(); if (!g_lsGroupUidsPost.Contains(sGroupUid)) { _log.Debug($"Skip - {sArticleUid} since not matched group={sGroupUid}"); continue; }
_log.Debug($"_HandlePost f1.1 - {sArticleUid} "); PushPost(sURL, sDownloadURL, "GROUP.ArticleManage2Service", out CResponseMessage crpArticleWait, null, new Dictionary<string, object>() { { tb_grp_article.CN_UID, sArticleUid } }); }
_log.Debug("_HandlePost f2"); } while (false); } catch (Exception ex) { sMsg = $"Process fail. ErrorMsg={ex.Message}"; }
if (sMsg != null) { _log.Error(sMsg); } }
private List<string> _MediaOrder(List<string> i_lsNames, string i_sHighPriortyExt) { return i_lsNames.OrderByDescending(name => { int nFind = name.LastIndexOf('.');
if (nFind != -1) { string sExt = name.Substring(nFind + 1);
nFind = i_sHighPriortyExt.IndexOf(sExt); }
return nFind; }).ToList(); }
private string _HandleMediaAnArticle(Dictionary<string, object> dicArticle, int i_nRetry, tb_grp_group2user i_gUser) { string sMsg = null; string sServerURL = g_apiServer; string sCmdURL = $"{sServerURL}/Cmd"; string sDownloadURL = $"{sServerURL}/Task/Download/?fileid=";
try { do { _log.Info($"Handle article start {dicArticle[tb_grp_article.CN_NAME]}(uid={dicArticle[tb_grp_article.CN_UID]})"); DateTime dtNow = DateTime.Now; string sWorkingName = $"FBUpload1920_1080_{dicArticle[tb_grp_article.CN_UID]}_{dtNow:yyyyMMddHHmmssfff}_{i_nRetry}"; string sWorkingSpace = Path.Combine(Directory.GetCurrentDirectory(), $"{ScriptFolder}\\{sWorkingName}.myrpa"); if (!Directory.Exists(sWorkingSpace)) { Directory.CreateDirectory(sWorkingSpace); }
#region
sMsg = Read(sCmdURL, "GROUP.ArticleMediaService", out CResponseMessage crpArticleMedia, new Dictionary<string, object>() { { tb_grp_article_media.CN_STATUS_FLAG, 1 }, { tb_grp_article_media.CN_ARTICLE_UID, dicArticle[tb_grp_article.CN_UID] } });
if (sMsg != null) { break; }
List<tb_grp_article_media> qrsArticleMedia = (crpArticleMedia.param["data"] as JToken).ToObject<List<tb_grp_article_media>>();
List<string> lsName = new List<string>(); int nMediaCount = 0; // Dowload media
for (int nMediaIdx = 0; nMediaIdx < qrsArticleMedia.Count; nMediaIdx++) { tb_grp_article_media dicMedia = qrsArticleMedia[nMediaIdx]; string sMediaUid = dicMedia.media_id.ToString(); string sMediaURL = $"{sDownloadURL}{sMediaUid}";
_log.Info($"Downlaod media({sMediaURL}) for name={dicArticle[tb_grp_article.CN_NAME]} uid={dicArticle[tb_grp_article.CN_UID]}");
using WebClient wc = new WebClient(); Byte[] byData = wc.DownloadData(sMediaURL); string header = wc.ResponseHeaders["Content-Disposition"] ?? string.Empty;
if (header != string.Empty) { nMediaCount++; int nExtensionIdx = header.LastIndexOf(".", StringComparison.OrdinalIgnoreCase); string sFileName = $"{nMediaCount}{header.Substring(nExtensionIdx)}";
string sPath = Path.Combine(sWorkingSpace, sFileName); if (File.Exists(sPath)) { File.Delete(sPath); }
File.WriteAllBytes(sPath, byData);
lsName.Add(sFileName); } else { sMsg = $"No Header[\"Content - Disposition\""; break; } }
if (sMsg != null) { break; }
if (lsName.Count == 0) { break; }
#endregion
string sFBID = dicArticle[tb_grp_article.CN_FB_ARTICLE_ID].ToString(); string[] saFBID = sFBID.Split("_".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
_log.Info($"Generate Script for name={dicArticle[tb_grp_article.CN_NAME]} uid={dicArticle[tb_grp_article.CN_UID]} ");
if (UseOrigtekrpa == "true") { sMsg = generateOrigtekRPAScrit(sWorkingName, sWorkingSpace, i_gUser.fb_account, i_gUser.fb_password, saFBID[0], saFBID[1], lsName);
if (sMsg != null) { break; }
sMsg = RunOrigtekRPAScript(sWorkingSpace);
if (sMsg != null) { break; } _log.Info($"RunScript result = '{sMsg}'"); } else { sMsg = generatePupetterScrit(sWorkingName, sWorkingSpace, i_gUser.fb_account, i_gUser.fb_password, saFBID[0], saFBID[1], lsName);
sMsg = RunPupetterScript(sWorkingSpace); _log.Info($"generatePupetterScrit result = '{sMsg}'"); }
#region Origtek RPA
#endregion
_log.Info($"Handle article end {dicArticle[tb_grp_article.CN_NAME]}(uid={dicArticle[tb_grp_article.CN_UID]})"); } while (false); } catch (Exception ex) { sMsg = ex.Message; _log.Error($"Process name:(uid={dicArticle[tb_grp_article.CN_UID]}) exception fail. ErrorMsg={ex.Message} "); }
return sMsg; }
public string RunPupetterScript(string i_sWorkingSpace) { string sMsg = null;
try { do { _log.Info($"RunPupetterScript('{i_sWorkingSpace}')");
var proc = new System.Diagnostics.Process(); proc.StartInfo.CreateNoWindow = true; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.FileName = "node.exe"; proc.StartInfo.Arguments = $"\"{Path.Combine(i_sWorkingSpace, "pupetter.js")}\""; proc.Start(); string sOut = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
if (!string.IsNullOrWhiteSpace(sOut)) { _log.Debug($"RPA Console output: {sOut}");
if (sOut.Trim() != "OK") { sMsg = sOut; } } _log.Info($"pupetter result '{sOut}'"); } while (false); } catch (Exception ex) { sMsg = ex.Message; }
return sMsg; }
public string RunOrigtekRPAScript(string i_sWorkingSpace) { string sMsg = null;
try { do { FileInfo fi = new FileInfo(_dicSetting["rpa"]); _log.Debug($"RPA={_dicSetting["rpa"]}");
using Process pRun = new Process(); pRun.StartInfo.FileName = _dicSetting["rpa"]; pRun.StartInfo.Arguments = $"-w \"{i_sWorkingSpace}\""; pRun.StartInfo.UseShellExecute = false; pRun.StartInfo.RedirectStandardOutput = true; pRun.StartInfo.WorkingDirectory = fi.Directory.FullName;
pRun.Start();
pRun.WaitForExit(150000);
string sOut = pRun.StandardOutput.ReadToEnd();
if (!string.IsNullOrWhiteSpace(sOut)) { sMsg = sOut; break; } } while (false); } catch (Exception ex) { sMsg = ex.Message; }
return sMsg; }
private void _HandleMedia(IEnumerable<Dictionary<string, object>> i_idicArticles) {
try { do { string sServerURL = g_apiServer; string sCmdURL = $"{sServerURL}/Cmd";
int nLocalRetryMax = _dicSetting.ContainsKey("localretry") ? Int32.Parse(_dicSetting["localretry"]) : 1; _log.Info($"nLocalRetryMax = {nLocalRetryMax}"); // 跑每篇文章
foreach (Dictionary<string, object> dicArticle in i_idicArticles) { if (!dicArticle.ContainsKey(tb_grp_article.CN_GROUP_UID)) { _log.Error($"{nameof(_HandleMedia)} No CN_GROUP_UID"); continue; }
string sArticleUid = dicArticle[tb_grp_article.CN_UID].ToString(); string sGroupUid = dicArticle[tb_grp_article.CN_GROUP_UID].ToString(); if (!g_lsGroupUidsRPA.Contains(sGroupUid)) { _log.Debug($"Skip - {sArticleUid} since no matched group {sGroupUid}"); continue; }
string sMsgOneArticle = null;
if (!dicArticle.ContainsKey(tb_grp_article.CN_GROUP_USER_UID)) { _log.Error($"{nameof(_HandleMedia)} No CN_GROUP_USER_UID"); continue; }
object oUserUID = dicArticle[tb_grp_article.CN_GROUP_USER_UID]; if (oUserUID == null) { _log.Error($"{nameof(_HandleMedia)} CN_GROUP_USER_UID = null"); continue; }
string sUserUID = oUserUID.ToString(); if (string.IsNullOrWhiteSpace(sUserUID)) { _log.Error($"{nameof(_HandleMedia)} IsNullOrWhiteSpace"); continue; }
tb_grp_group2user gUser = _lgroup2user2.FirstOrDefault(f => f.uid == sUserUID); if (gUser == null) { _log.Error($"{nameof(_HandleMedia)} No poster information"); continue; }
if (string.IsNullOrWhiteSpace(gUser.fb_password) || string.IsNullOrWhiteSpace(gUser.fb_account)) { _log.Error($"{nameof(_HandleMedia)} No poster information {JsonConvert.SerializeObject(gUser)}"); continue; }
for (int nLocalRetry = 0; nLocalRetry < nLocalRetryMax; nLocalRetry++) { sMsgOneArticle = _HandleMediaAnArticle(dicArticle, nLocalRetry, gUser);
if (sMsgOneArticle == null) { break; } }
if (sMsgOneArticle == null) { UpdateStatus(sCmdURL, "GROUP.ArticleManage2Service", out CResponseMessage crpArticleWait, new Dictionary<string, object>() { { tb_grp_article.CN_RPA_STATUS, 1 } }, new Dictionary<string, object>() { { tb_grp_article.CN_UID, dicArticle[tb_grp_article.CN_UID] } }); } else { _log.Error($"Process name:{dicArticle[tb_grp_article.CN_NAME]}(uid={dicArticle[tb_grp_article.CN_UID]}) fail. ErrorMsg={sMsgOneArticle} ");
UpdateStatus(sCmdURL, "GROUP.ArticleManage2Service", out CResponseMessage crpArticleWait, new Dictionary<string, object>() { { tb_grp_article.CN_RETRY, (int.Parse(dicArticle[tb_grp_article.CN_RETRY].ToString())+1) } }, new Dictionary<string, object>() { { tb_grp_article.CN_UID, dicArticle[tb_grp_article.CN_UID] } }); }
_forceCloseAllFFMPEG(); _forceCloseAllChrome();
} } while (false); } catch (Exception ex) { _log.Error($"{nameof(_HandleMedia)} exception fail. ErrorMsg={ex.Message}"); }
if (i_idicArticles.Any()) { _forceCloseAllChrome(); _forceCloseAllFFMPEG(); }
}
private void _forceCloseAllChrome() { // Force remove all chrome
foreach (var process in Process.GetProcesses().Where(pr => pr.ProcessName == "chrome")) { process.Kill(); } }
private void _forceCloseAllFFMPEG() { // Force remove all chrome
foreach (var process in Process.GetProcesses().Where(pr => pr.ProcessName == "FFMPEG_FILE")) { process.Kill(); } }
private string PushPost(string i_sURL, string i_sDownloadURL, string i_sModule, out CResponseMessage o_crpResult, Dictionary<string, object> i_dicData, Dictionary<string, object> i_dicWhere) { _log.Info("PushPost");
Dictionary<string, object> dicPara = new Dictionary<string, object>(); dicPara.Add(BLWording.QRY_MASTER, new List<Dictionary<string, object>>() { new Dictionary<string, object>() { { BLWording.DATA, i_dicData }, { BLWording.WHEREDATA, i_dicWhere }, { "downloadurl", i_sDownloadURL }, } }); dicPara.Add("downloadurl", i_sDownloadURL);
return _Action(i_sURL, i_sModule, "PushPost", out o_crpResult, dicPara); }
protected string generatePupetterScrit( string i_sWorkingName, string i_sWorkSpath, string i_sAccount, string i_sPassword, string i_sGroupID, string i_sFBArticleID, List<string> i_lsMediaPath) { string sMsg = null;
try { do { string sTemplate = File.ReadAllText("pupetterTemplate.jst", Encoding.UTF8);
if (!Directory.Exists(i_sWorkSpath)) { Directory.CreateDirectory(i_sWorkSpath); } string bNeedLogin = _dicSetting.ContainsKey("use_incognito") ? (_dicSetting["use_incognito"].ToLower() == "true" ? "true" : "false") : "false";
List<string> lsMediaPath = new List<string>();
if (i_lsMediaPath != null && i_lsMediaPath.Any()) { i_lsMediaPath.ForEach(f => { if (f.IndexOf(":") != -1) { lsMediaPath.Add(f); } else { lsMediaPath.Add(Path.Combine(i_sWorkSpath, f)); } }); }
File.WriteAllText($"{Path.Combine(i_sWorkSpath, $"pupetter.js")}", sTemplate. Replace("<%NEED_LOGIN%>", bNeedLogin.ToString()). Replace("<%POSTURL%>", $"https://www.facebook.com/groups/{i_sGroupID}/permalink/{i_sFBArticleID}/"). Replace("<%ACCOUNT%>", i_sAccount). Replace("<%ENTERCODE%>", i_sPassword). Replace("<%UPLOAD_MEDIA_JSONARRAY%>", JsonConvert.SerializeObject(lsMediaPath)), Encoding.UTF8);
} while (false); } catch (Exception ex) { System.Diagnostics.Debug.Write(ex.Message); // Ignore
sMsg = ex.Message; }
return sMsg; } protected string generateOrigtekRPAScrit( string i_sWorkingName, string i_sWorkSpath, string i_sAccount, string i_sPassword, string i_sGroupID, string i_sFBArticleID, List<string> i_lsName) { string sMsg = null;
try { do { bool bNeedLogin = _dicSetting.ContainsKey("use_incognito") ? _dicSetting["use_incognito"].ToLower() == "true" : false; string sURL = $"https://www.facebook.com/groups/{i_sGroupID}/permalink/{i_sFBArticleID}/";
List<CommandInfo> lci = new List<CommandInfo>();
if (bNeedLogin) { lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_SETURL_INCOGNITO, Value = sURL, SleepAfterEvent = 10 }); } else { lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_SETURL, Value = sURL, SleepAfterEvent = 10 }); }
// Login
if (bNeedLogin) { lci.AddRange(new List<CommandInfo>() { new CommandInfo() { Command = CommandInfo.EVENT_SENDKEY, Value = "{PGDN}", SleepAfterEvent = 2 }, new CommandInfo() { Command = CommandInfo.EVENT_POSITION_CLICK, Value = "CENTER", SleepAfterEvent = 2 }, new CommandInfo() { Command = CommandInfo.EVENT_IMAGE_CLICK, Parameters = new Dictionary<string, string>() { { "PATH", @"assets\txtEmail.bmp" } }, SetMainBrowserFocus = true }, // 按掉FB LOADING失敗
new CommandInfo() { Command = CommandInfo.EVENT_PASTE, Value = i_sAccount, SetMainBrowserFocus = true }, new CommandInfo() { Command = CommandInfo.EVENT_POSITION_CLICK, Value = "CENTER" }, new CommandInfo() { Command = CommandInfo.EVENT_IMAGE_CLICK, Parameters = new Dictionary<string, string>() { { "PATH", @"assets\txtPassword.bmp" } }, SetMainBrowserFocus = true }, new CommandInfo() { Command = CommandInfo.EVENT_PASTE, Value = i_sPassword, SetMainBrowserFocus = true }, new CommandInfo() { Command = CommandInfo.EVENT_IMAGE_CLICK, Parameters = new Dictionary<string, string>() { { "PATH", @"assets\btnLogin.bmp" } }, SetMainBrowserFocus = true, SleepAfterEvent = 15 }, // Login
}); } else { lci.AddRange(new List<CommandInfo>() { new CommandInfo() { Command = CommandInfo.EVENT_IMAGE_CLICK, Parameters = new Dictionary<string, string>() { {"PATH", @"assets\btnRestore.bmp" }, { "ACTIONIFEXIST", "TRUE"} }, SleepAfterEvent = 3}, // 按掉Chrome還原
new CommandInfo() { Command = CommandInfo.EVENT_IMAGE_CLICK, Parameters = new Dictionary<string, string>() { {"PATH", @"assets\btnDisablenotice.bmp" }, { "ACTIONIFEXIST", "TRUE"} }, SleepAfterEvent = 3}, // 關閉訊息推播
}); }
lci.AddRange(new List<CommandInfo>() { new CommandInfo() { Command = CommandInfo.EVENT_IMAGE_CLICK, Parameters = new Dictionary<string, string>() { {"PATH", @"assets\btnMistake.bmp" }, { "ACTIONIFEXIST", "TRUE"} }, SleepAfterEvent = 5}, // 按掉FB LOADING失敗
// Enter Edit dialog
new CommandInfo() { Command = CommandInfo.EVENT_IMAGE_CLICK, Parameters = new Dictionary<string, string>() { {"PATH", @"assets\btnPopMenu.bmp" } } , SleepAfterEvent = 2}, new CommandInfo() { Command = CommandInfo.EVENT_IMAGES_CLICK, Parameters = new Dictionary<string, string>() { {"PATH", @"assets\btnEditArticle.bmp" }, { "PATH1", @"assets\btnEditArticle2.bmp" } }, WaitTargetMilliSecond = 1500, SleepAfterEvent = 2}, new CommandInfo() { Command = CommandInfo.EVENT_MOUSE_MOVE, Value = "OUTBOUND" , SleepAfterEvent = 2 }, new CommandInfo() { Command = CommandInfo.EVENT_FB_REMOVE_ALLMEDIA, Parameters = new Dictionary<string, string>() { {"PATH", @"assets\btnRemoveAllMedia.bmp" }, { "PATH1", @"assets\btnRemoveAllMedia2.bmp" }, { "PATH2", @"assets\btnRemoveAllMedia3.bmp" } } , SleepAfterEvent = 2}, new CommandInfo() { Command = CommandInfo.EVENT_POSITION_CLICK, Value = "CENTER" }, });
int nIdx = 0; foreach (string sPath in i_lsName) {
if (nIdx++ == 0) { lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_MOUSE_MOVE, Value = "CENTER" }); lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_MOUSE_MOVE, Value = "OUTBOUND" }); lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_IMAGES_CLICK, Parameters = new Dictionary<string, string>() { { "PATH", @"assets\btnUploadZero.bmp" }, { "PATH4", @"assets\btnUploadNoneZero4.bmp" }, { "PATH3", @"assets\btnUploadNoneZero3.bmp" }, { "PATH2", @"assets\btnUploadNoneZero2.bmp" }, { "PATH1", @"assets\btnUploadNoneZero.bmp" } }, WaitTargetMilliSecond = 1500, SleepAfterEvent = 5 }); lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_POSITION_CLICK, Value = "CENTER", SleepAfterEvent = 2 }); lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_MOUSE_SCROLL, Value = "DOWN", Repeat = 5 }); lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_MOUSE_MOVE, Value = "OUTBOUND" });
lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_IMAGES_CLICK, Parameters = new Dictionary<string, string>() { { "PATH", @"assets\btnUploadNew1.bmp" }, { "PATH1", @"assets\btnUploadNew2.bmp" }, { "PATH4", @"assets\btnUploadZero.bmp" }, { "PATH5", @"assets\btnUploadNoneZero.bmp" }, { "PATH6", @"assets\btnUploadNoneZero2.bmp" }, { "PATH7", @"assets\btnUploadNoneZero3.bmp" }, { "PATH8", @"assets\btnUploadNoneZero4.bmp" } }, WaitTargetMilliSecond = 1500, SleepAfterEvent = 3 }); } else { lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_IMAGES_CLICK, Parameters = new Dictionary<string, string>() { { "PATH", @"assets\btnUploadNew3.bmp" }, { "PATH3", @"assets\btnUploadNew4.bmp" }, { "PATH4", @"assets\btnUploadZero.bmp" }, { "PATH5", @"assets\btnUploadNoneZero.bmp" }, { "PATH6", @"assets\btnUploadNoneZero2.bmp" }, { "PATH7", @"assets\btnUploadNoneZero3.bmp" }, { "PATH8", @"assets\btnUploadNoneZero4.bmp" } }, WaitTargetMilliSecond = 1500, SleepAfterEvent = 3 }); }
lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_SETVALUETOUPLOADDLG, Parameters = new Dictionary<string, string>() { { "CAPTION", "開啟" }, { "PATH", $"{sPath}" } }, SleepAfterEvent = 2 }); lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_CHECKWINDOWEXIST, Parameters = new Dictionary<string, string>() { { "CAPTION", "開啟" }, { "EXIST", "False" } } }); }
/* new CommandInfo() { Command = CommandInfo.EVENT_IMAGES_CLICK, Parameters = new Dictionary<string, string>() { { "PATH", @"assets\btnUploadZero.bmp" }, { "PATH1", @"assets\btnUploadNoneZero.bmp" } } , SleepAfterEvent = 2}, new CommandInfo() { Command = CommandInfo.EVENT_SETVALUETOUPLOADDLG, Parameters = new Dictionary<string, string>() { { "CAPTION", "開啟" } , {"PATH", @"D:\Data\test\2.jpg" }}}, new CommandInfo() { Command = CommandInfo.EVENT_CHECKWINDOWEXIST, Parameters = new Dictionary<string, string>() { { "CAPTION", "開啟" }, { "EXIST", "False"} }},
new CommandInfo() { Command = CommandInfo.EVENT_IMAGES_CLICK, Parameters = new Dictionary<string, string>() { { "PATH", @"assets\btnUploadZero.bmp" }, { "PATH1", @"assets\btnUploadNoneZero.bmp" } } , SleepAfterEvent = 2}, new CommandInfo() { Command = CommandInfo.EVENT_SETVALUETOUPLOADDLG, Parameters = new Dictionary<string, string>() { { "CAPTION", "開啟" } , {"PATH", @"D:\Data\test\1.jpg" }}}, new CommandInfo() { Command = CommandInfo.EVENT_CHECKWINDOWEXIST, Parameters = new Dictionary<string, string>() { { "CAPTION", "開啟" }, { "EXIST", "False"} }}, */ lci.Add(new CommandInfo() { Command = CommandInfo.EVENT_IMAGE_CLICK, Parameters = new Dictionary<string, string>() { { "PATH", @"assets\btnSave.bmp" } }, SetMainBrowserFocus = true, SleepAfterEvent = 10 });
File.WriteAllText(Path.Combine(i_sWorkSpath, $"{i_sWorkingName}.json"), JsonConvert.SerializeObject(lci), Encoding.UTF8);
string[] saOriginPaths = Directory.GetFiles("FBMedia.MyScript"); string sAssetsFolder = Path.Combine(i_sWorkSpath, "assets"); Directory.CreateDirectory(sAssetsFolder); foreach (string sOriginPath in saOriginPaths) { FileInfo fi = new FileInfo(sOriginPath); string sNewPath = Path.Combine(sAssetsFolder, fi.Name); File.Copy(sOriginPath, sNewPath); } } while (false);
} catch (Exception ex) { System.Diagnostics.Debug.Write(ex.Message); // Ignore
sMsg = ex.Message; }
return sMsg; }
private static string _Action(string i_sURL, string i_sModule, string i_sMethod, out CResponseMessage o_crpResult, Dictionary<string, object> i_ldicPara) { string sMsg;
CResponseMessage crpResult = null; try { do { SendWebApiRequest swr = new SendWebApiRequest(); CRequestMessage crm = new CRequestMessage() { module = i_sModule, method = i_sMethod, param = i_ldicPara, customparam = new Dictionary<string, object>() { { BLWording.PROGRAMID, "TruckAP" } } };
CReqestPack crqp = new CReqestPack { Reqs = new List<CReqestItem>() { new CReqestItem(){ Req = crm } } };
sMsg = swr.RunEncryptRequest(i_sURL, crqp, out string sResult); if (sMsg != null) { _log.Error($"Result = {sMsg}"); break; } else { _log.Info($"Response = {sResult}");
CResponsePack crppResult = JsonConvert.DeserializeObject<CResponsePack>(sResult);
if (crppResult == null) { sMsg = "Covert CResponsePack Fail"; break; } CResponseMessage crp = crppResult.Reps[0];
if (crp.result == EResponseResult.RR_FALSE) { sMsg = crp.msg; break; } crpResult = crp; } } while (false); } catch (Exception ex) { sMsg = ex.Message; }
o_crpResult = crpResult; return sMsg; }
private void UpdateStatus(string i_sURL, string i_sModule, out CResponseMessage o_crpResult, Dictionary<string, object> i_dicData, Dictionary<string, object> i_dicWhere) { Dictionary<string, object> dicPara = new Dictionary<string, object> { { BLWording.UPD_MASTER, new List<Dictionary<string, object>>() { new Dictionary<string, object>() { { BLWording.DATA, i_dicData }, { BLWording.WHEREDATA, i_dicWhere } } } } };
_Action(i_sURL, i_sModule, "UpdateStatus", out o_crpResult, dicPara); }
private string Read(string i_sURL, string i_sModule, out CResponseMessage o_crpResult, Dictionary<string, object> i_dicWhere) { return Query(i_sURL, i_sModule, "Read", out o_crpResult, i_dicWhere); } private string Query(string i_sURL, string i_sModule, string i_sAction, out CResponseMessage o_crpResult, Dictionary<string, object> i_dicWhere = null) { Dictionary<string, object> dicPara = new Dictionary<string, object> { { BLWording.QRY_MASTER, new List<Dictionary<string, object>>() { new Dictionary<string, object>() { { BLWording.WHEREDATA, i_dicWhere } } } } };
return _Action(i_sURL, i_sModule, i_sAction, out o_crpResult, dicPara); }
private static void LoadLog4netConfig() { var repository = LogManager.CreateRepository( Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy) ); XmlConfigurator.Configure(repository, new FileInfo("Log4Net.config"));
}
private void Form1_Load(object sender, EventArgs e) { string sMsg = null;
try { string[] saFolders = Directory.GetDirectories(ScriptFolder);
foreach (string sFoder in saFolders) { DirectoryInfo di = new DirectoryInfo(sFoder);
if (di.CreationTime.AddDays(3) < DateTime.Now) { Directory.Delete(sFoder, true); } } } catch {
}
int nIndex = 0; StringBuilder sb = new StringBuilder($"Form1_Load start! Current directory: {Directory.GetCurrentDirectory()}");
string[] saCmd = Environment.GetCommandLineArgs();
foreach (string sCmd in saCmd) { sb.AppendLine($"Para[{nIndex++}] = '{sCmd}'"); }
_log.Info(sb.ToString());
string sForceScript = null; if (saCmd.Any()) { for (int nIdx = 0; nIdx < saCmd.Count(); nIdx++) { if (saCmd[nIdx] == "-w") { sForceScript = saCmd[nIdx + 1]; nIdx++; } } }
try { if (sForceScript != null) { if (UseOrigtekrpa == "true") { RunOrigtekRPAScript(sForceScript); } else { RunPupetterScript(sForceScript); }
} else {
string sapiurlori = _dicSetting["apiserver"]; string[] saapiurl = sapiurlori.Split(";,".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); _log.Info($"apiserver:{sapiurlori}");
g_lsGroupUidsPost = _uidsInSetting(group_uids_post); g_lsGroupUidsRPA = _uidsInSetting(group_uids_rpa);
if (g_lsGroupUidsPost.Any() || g_lsGroupUidsRPA.Any()) { foreach (string sapiurl in saapiurl) { g_apiServer = sapiurl; string sSuffix = ""; foreach (string sCmd in saCmd) { if (sCmd == "-a" || sCmd == "-v") { sSuffix = sCmd; break; } } sMsg = Run(sSuffix);
Thread.Sleep(500); } } } } catch (Exception ex) { sMsg = ex.Message; } if (sMsg != null) { _log.Info($"Form1_Load end with exception. {sMsg}"); } else { _log.Info($"Form1_Load end Success."); } this.Close(); }
private List<string> _uidsInSetting(string i_sKey) { List<string> lsUids = new List<string>();
string sSettingValue = _dicSetting[i_sKey]; string[] saUids = sSettingValue.Split(";,".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string sUid in saUids) { lsUids.Add(sUid); _log.Info($"{i_sKey} - group_uid:{sUid}"); }
return lsUids; } } }
|