833 lines
35 KiB

using CounsellorBL.Common;
using CounsellorBL.ConstDefinition;
using CounsellorBL.Helper;
using MonumentDefine;
using OT.COM.ArsenalDB;
using OT.COM.ArsenalDB.SQL;
using OT.COM.LogisticsUtil;
using OT.COM.SignalerMessage;
using SoldierData.EnterprizeV4;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace CounsellorBL
{
public partial class TestService : DBService
{
public override string MainTable => GetMainTableName(typeof(tb_sys_translation));
public TestService()
{
}
public void TestInsert()
{
tb_sys_org o = new tb_sys_org()
{
uid = "2",
name = "ssss",
};
Command cInsert = Command.SetupInsertCmd(o);
ArsenalInterface ai = ArsenalDBMgr.GetInst(cInsert, GetDefaultSystemColumnInfo());
ai.RunEditSingleCmd(cInsert);
}
public static ConcurrentDictionary<string, string> GetSetting()
{
return CustomizeDBMgr.SettingData;
}
#region Test Aync
public static async Task<string> GetURL(Uri i_url)
{
using System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
// GetStringAsync returns a Task<string>. That means that when you await the
// task you'll get a string (urlContents).
Task<string> getStringTask = client.GetStringAsync(i_url);
string urlContents = await getStringTask.ConfigureAwait(false);
// The return statement specifies an integer result.
// Any methods that are awaiting AccessTheWebAsync retrieve the length value.
return urlContents;
}
public static List<string> GetURLAync(string[] i_url)
{
List<string> lRes = new List<string>();
if (i_url != null)
{
List<Task<string>> lts = new List<Task<string>>();
foreach (string sUrl in i_url)
{
using HttpClient hc = new HttpClient();
// GetStringAsync returns a Task<string>. That means that when you await the
// task you'll get a string (urlContents).
lts.Add(hc.GetStringAsync(new Uri(sUrl)));
}
Task.WaitAll(lts.ToArray());
foreach (Task<string> ts in lts)
{
string s = ts.Result;
lRes.Add(s);
}
// The return statement specifies an integer result.
// Any methods that are awaiting AccessTheWebAsync retrieve the length value.
}
return lRes;
}
public static List<string> GetURLOrigin(string[] i_url)
{
List<string> lRes = new List<string>();
if (i_url != null)
{
foreach (string sUrl in i_url)
{
using WebClient wc = new WebClient();
lRes.Add(wc.DownloadString(sUrl));
}
}
return lRes;
}
#endregion
public void FillTrans()
{
List<Command> lCmdMaster = new List<Command>();
for (int i = 100; i < 200; i++)
{
lCmdMaster.Add(Command.SetupInsertCmd(
new tb_sys_translation()
{
create_org_uid = "001",
update_org_uid = "001",
create_user_uid = "3CE873C2-33AB-41E6-B6FE-4C528DEF5AF8",
update_user_uid = "3CE873C2-33AB-41E6-B6FE-4C528DEF5AF8",
name = $"Test{i}",
language = "zh-Hant",
trans = $"測試{i}"
}));
}
ArsenalInterface ai = ArsenalDBMgr.GetInst(lCmdMaster[0], GetDefaultSystemColumnInfo());
ai.RunEditCmds(lCmdMaster);
}
public static void FindSelfFK()
{
string codeBase = Assembly.GetExecutingAssembly().GetName().CodeBase;
codeBase = codeBase.Substring(0, codeBase.LastIndexOf("/", StringComparison.OrdinalIgnoreCase));
Assembly[] assemblyArray = (from f in AppDomain.CurrentDomain.GetAssemblies()
where !f.IsDynamic
&& f.FullName.IndexOf("SoldierData", StringComparison.OrdinalIgnoreCase) != -1
&& f.CodeBase != null
&& f.CodeBase.StartsWith(codeBase, StringComparison.OrdinalIgnoreCase)
select f).ToArray<Assembly>();
List<Type> ltAll = new List<Type>();
foreach (Assembly aCur in assemblyArray)
{
ltAll.AddRange(aCur.GetTypes().Where(f => f.BaseType == typeof(EntityBase)));
}
foreach (Type tCur in ltAll)
{
TableMiscAttribute tm = EntityUtil.GetClassAttribute<TableMiscAttribute>(tCur);
List<KeyValuePair<string, ForeignRelation>> lkv = tm.Data.ForeignRelations.Where(f => f.Value.ForeignTable == tCur.Name).ToList();
if (lkv.Count != 0)
{
foreach (KeyValuePair<string, ForeignRelation> kv in lkv)
{
int nMatchCount = 0;
foreach (string sKey in kv.Value.Pars.Keys)
{
if (sKey == kv.Value.Pars[sKey])
{
nMatchCount++;
}
}
if (kv.Value.Pars.Keys.Count == nMatchCount)
{
System.Diagnostics.Debug.WriteLine(kv.Key);
}
}
}
}
}
public void DeleteCascadeData(string i_sTable, Dictionary<string, object> i_dicCond)
{
string codeBase = Assembly.GetExecutingAssembly().GetName().CodeBase;
codeBase = codeBase.Substring(0, codeBase.LastIndexOf("/", StringComparison.OrdinalIgnoreCase));
Assembly[] assemblyArray = (from f in AppDomain.CurrentDomain.GetAssemblies()
where !f.IsDynamic
&& f.FullName.IndexOf("SoldierData", StringComparison.OrdinalIgnoreCase) != -1
&& f.CodeBase != null
&& f.CodeBase.StartsWith(codeBase, StringComparison.OrdinalIgnoreCase)
select f).ToArray<Assembly>();
List<Type> ltAll = new List<Type>();
foreach (Assembly aCur in assemblyArray)
{
ltAll.AddRange(aCur.GetTypes().Where(f => f.BaseType == typeof(EntityBase)));
}
List<Tuple<Type, Dictionary<string, object>>> lt = GetTypeFKFromRecursive(ltAll, i_sTable, i_dicCond);
lt.Reverse();
List<Command> lCmds = new List<Command>();
foreach (Tuple<Type, Dictionary<string, object>> ttd in lt)
{
EntityBase ebCond = ClassHelper.GetInstByType(ttd.Item1) as EntityBase;
ebCond.FillData(ttd.Item2);
lCmds.Add(Command.SetupDeleteCmd(ebCond));
}
if (lCmds.Count > 0)
{
ArsenalInterface ai = ArsenalDBMgr.GetInst(lCmds[0], GetDefaultSystemColumnInfo());
ai.RunEditCmds(lCmds);
}
}
public List<Tuple<Type, Dictionary<string, object>>> GetTypeFKFromRecursive(List<Type> ltAll, string i_sTable, Dictionary<string, object> i_dicCond, int i_nLevel = 0)
{
List<Tuple<Type, Dictionary<string, object>>> lRes = new List<Tuple<Type, Dictionary<string, object>>>();
List<Tuple<Type, Dictionary<string, object>>> lTemp = GetTypeFKFromRecursiveItem(ltAll, i_sTable, i_dicCond);
if (lTemp.Count != 0)
{
lRes.AddRange(lTemp);
foreach (Tuple<Type, Dictionary<string, object>> ttd in lTemp)
{
lRes.AddRange(GetTypeFKFromRecursive(ltAll, ttd.Item1.Name, ttd.Item2, i_nLevel + 1));
}
}
return lRes;
}
public static List<Tuple<Type, Dictionary<string, object>>> GetTypeFKFromRecursiveItem(List<Type> ltAll, string i_sTable, Dictionary<string, object> i_dicCond)
{
List<Tuple<Type, Dictionary<string, object>>> ltRes = new List<Tuple<Type, Dictionary<string, object>>>();
if (ltAll != null && i_dicCond != null)
{
foreach (Type tCur in ltAll)
{
TableMiscAttribute tm = EntityUtil.GetClassAttribute<TableMiscAttribute>(tCur);
List<KeyValuePair<string, ForeignRelation>> lkv = tm.Data.ForeignRelations.Where(f => f.Value.ForeignTable == i_sTable).ToList();
if (lkv.Count != 0)
{
EntityBase oDisply = ClassHelper.GetInstByType(tCur) as EntityBase;
oDisply.SetFullDirty();
foreach (KeyValuePair<string, ForeignRelation> kvp in lkv)
{
if (kvp.Value.Pars.Keys.Count != i_dicCond.Count)
{
continue;
}
bool bNotMatch = false;
List<WhereNode> wnCond = new List<WhereNode>();
foreach (string sKey in kvp.Value.Pars.Keys)
{
string sTargetColumn = kvp.Value.Pars[sKey];
if (!i_dicCond.ContainsKey(sTargetColumn))
{
bNotMatch = true;
}
else
{
wnCond.Add(new WhereNode(sKey, WhereNode.EColumnOperation.EOT_EQ, tCur, i_dicCond[sTargetColumn].ToString()));
}
}
if (bNotMatch)
{
continue;
}
Command cSelect = Command.SetupSelectCmd(oDisply, new WhereNode(WhereNode.ENodeOperation.ENO_AND, wnCond.ToArray()));
ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelect);
QueryDataSet qds = ai.RunQueryDataSet(cSelect);
if (qds.Total > 0)
{
foreach (DataRow dr in qds.DATA.Tables[0].Rows)
{
Dictionary<string, object> dicRow = new Dictionary<string, object>
{
{ BLWording.UID, dr[BLWording.UID] }
};
ltRes.Add(Tuple.Create<Type, Dictionary<string, object>>(tCur, dicRow));
}
}
}
}
}
}
return ltRes;
}
[Auth(false)]
public static CResponseMessage Action(CRequestMessage i_crm)
{
CResponseMessage crm = new CSuccessResponseMessage("Reach." + DateTime.Now, i_crm);
return crm;
}
public string Fix()
{
string sMsg = null;
//
do
{
QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
QueryJsonElement qjeA = lBlocks.GetInst();
qjeA.table = tb_rpt_apicolumn.TABLENAME;
qjeA.displaycols = new List<string>() { tb_rpt_apicolumn.CN_API_UID, tb_rpt_apicolumn.CN_NAME };
lBlocks.Add(qjeA);
sMsg = MakeSelectJoinByBlocks(lBlocks, out Command cSelect);
ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelect, GetDefaultSystemColumnInfo());
List<tb_rpt_apicolumn> la = ai.RunQueryList<tb_rpt_apicolumn>(cSelect);
if (!cSelect.IsSuccess)
{
sMsg = cSelect.LastErrorCode;
break;
}
Dictionary<string, bool> dicColumnReserveColumn = new Dictionary<string, bool>();
string sSpecialColumnName = "reserve_space";
la.ForEach(f =>
{
if (!dicColumnReserveColumn.ContainsKey(f.api_uid))
{
dicColumnReserveColumn.Add(f.api_uid, false);
}
if (f.name == sSpecialColumnName)
{
dicColumnReserveColumn[f.api_uid] = true;
}
});
List<Command> lcCmds = new List<Command>();
foreach (KeyValuePair<string, bool> kvp in dicColumnReserveColumn)
{
if (!kvp.Value)
{
lcCmds.Add(Command.SetupInsertCmd(new tb_rpt_apicolumn()
{
api_uid = kvp.Key,
name = sSpecialColumnName,
column_type = "nvarchar(100)",
remark = "Space",
trans_default = "備註"
}));
}
}
DateTime dtNow = DateTime.Now.Date;
// NAME VALUE STATUS_FLAG SYSTEM_FLAG
List<Tuple<string, string, int, int>> ltNewSetting = new List<Tuple<string, string, int, int>>()
{
new Tuple<string, string, int, int>(BLWording.SYSTEMSETTING_SYSTEMERRORMAIL, "", BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_OFF),
new Tuple<string, string, int, int>(BLWording.REPORTLOG_MAILLIST, "", BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_OFF),
new Tuple<string, string, int, int>(BLWording.REPORTLOG_ACTIVETIME, "8:10", BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_OFF),
new Tuple<string, string, int, int>(BLWording.ADINTELOG_MAILLIST, "", BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_OFF),
new Tuple<string, string, int, int>(BLWording.ADINTELOG_ACTIVETIME, "8:20", BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_OFF),
new Tuple<string, string, int, int>(BLWording.RPTLOGMAIL_LASTTIME, dtNow.AddDays(-1).ToString(CultureInfo.CurrentCulture), BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_RUNTIME),
new Tuple<string, string, int, int>(BLWording.ADINTEMAIL_LASTTIME, dtNow.AddDays(-1).ToString(CultureInfo.CurrentCulture), BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_RUNTIME),
new Tuple<string, string, int, int>(BLWording.SYSTEM_LAUNCH, DateTime.Now.ToString(CultureInfo.CurrentCulture), BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_RUNTIME),
new Tuple<string, string, int, int>(BLWording.LOG_RANGE, "14", BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_ON),
new Tuple<string, string, int, int>(BLWording.REPORT_FLAG_GROUP, BLWording.STATUS_FLAG_OFF.ToString(CultureInfo.CurrentCulture), BLWording.STATUS_FLAG_ON , BLWording.SYSTEM_FLAG_ON)
};
if (CheckAndInserSetting(ltNewSetting, out List<Command> o_lcCmdsSetting) == null && o_lcCmdsSetting.Any())
{
lcCmds.AddRange(o_lcCmdsSetting);
}
lcCmds.Add(Command.SetupUpdateCmd(
new tb_sys_system_setting() { key_value = DateTime.Now.ToString(CultureInfo.CurrentCulture) },
new tb_sys_system_setting() { name = BLWording.SYSTEM_LAUNCH }));
List<Tuple<string, string, string>> ltNewTrans = new List<Tuple<string, string, string>>() {
new Tuple<string, string, string>("zh-Hant","common.emptyname","空白名稱"),
new Tuple<string, string, string>("zh-Hant","common.duplicate","重複"),
new Tuple<string, string, string>("zh-Hant","common.sendmail.success","郵件發送成功"),
new Tuple<string, string, string>("zh-Hant","common.timerange_day","一天"),
new Tuple<string, string, string>("zh-Hant","common.timerange_week","一週"),
new Tuple<string, string, string>("zh-Hant","common.timerange_month","一月"),
new Tuple<string, string, string>("zh-Hant","common.timerange_customize","自選"),
new Tuple<string, string, string>("zh-Hant","common.timerange","時間區間"),
new Tuple<string, string, string>("zh-Hant","system_flag.nonsystem","客製值"),
new Tuple<string, string, string>("zh-Hant","system_flag.system","系統值"),
new Tuple<string, string, string>("zh-Hant","system_flag.runtime","執行變數"),
new Tuple<string, string, string>("zh-Hant","common.download","下載"),
new Tuple<string, string, string>("zh-Hant","common.entercode","密碼"),
new Tuple<string, string, string>("zh-Hant","common.date_start","開始時間"),
new Tuple<string, string, string>("zh-Hant","common.date_end","結束時間"),
new Tuple<string, string, string>("zh-Hant","menu.articlemanage2.maintain","發文列表2"),
new Tuple<string, string, string>("zh-Hant","grp.article_id","文章ID"),
new Tuple<string, string, string>("zh-Hant","grp.article.message","貼文訊息"),
new Tuple<string, string, string>("zh-Hant","grp.article_media","貼文媒體檔"),
new Tuple<string, string, string>("zh-Hant","prd.product.maintain","品項維護"),
new Tuple<string, string, string>("zh-Hant","prd.wholesale_price","批價"),
new Tuple<string, string, string>("zh-Hant","prd.price","單價"),
new Tuple<string, string, string>("zh-Hant","common.invalid_file","失效檔案"),
new Tuple<string, string, string>("zh-Hant","common.no_file","無檔案"),
new Tuple<string, string, string>("zh-Hant","common.upload_file","檔案上傳"),
new Tuple<string, string, string>("zh-Hant","common.no_media_fle","無媒體檔案"),
new Tuple<string, string, string>("zh-Hant","grp.no_product","無產品"),
new Tuple<string, string, string>("zh-Hant","grp.post_now","立即貼文"),
new Tuple<string, string, string>("zh-Hant","grp.post_success","貼文成功"),
new Tuple<string, string, string>("zh-Hant","grp.addproduct","新增品項"),
new Tuple<string, string, string>("zh-Hant","prd.copyallspec","複製所有規格"),
new Tuple<string, string, string>("zh-Hant","prd.removeallspec","清除規格"),
new Tuple<string, string, string>("zh-Hant","grp.manully_import","手動匯入留言"),
new Tuple<string, string, string>("zh-Hant","article.remark","備註"),
};
if (CheckAndInserTrans(ltNewTrans, out List<Command> o_lcCmdsTrans) == null && o_lcCmdsTrans.Any())
{
lcCmds.AddRange(o_lcCmdsTrans);
}
if (TruncParam(new List<string>() { "system_flag" }, out List<Command> o_lcTrunPara) == null)
{
lcCmds.AddRange(o_lcTrunPara);
}
List<Tuple<string, string, string, int>> ltNewParam = new List<Tuple<string, string, string, int>>() {
new Tuple<string, string, string, int>("success_flag","success_flag.fail","0", 0),
new Tuple<string, string, string, int>("common.timerange","common.timerange_day","day", 0),
new Tuple<string, string, string, int>("common.timerange","common.timerange_week","week", 1),
new Tuple<string, string, string, int>("common.timerange","common.timerange_month","month", 2),
new Tuple<string, string, string, int>("common.timerange","common.timerange_customize","customize", 3),
new Tuple<string, string, string, int>("system_flag","system_flag.nonsystem","0", 0),
new Tuple<string, string, string, int>("system_flag","system_flag.system","1", 0),
new Tuple<string, string, string, int>("system_flag","system_flag.runtime","2", 0),
};
if (CheckAndInserParam(ltNewParam, out List<Command> o_lcCmdsPara) == null && o_lcCmdsPara.Any())
{
lcCmds.AddRange(o_lcCmdsPara);
}
if (lcCmds.Any())
{
ai.RunEditCmds(lcCmds);
}
// 搜尋系統參數中REPORT_STATUS
tb_sys_system_setting tReport = new tb_sys_system_setting();
tb_sys_system_setting tReportWhere = new tb_sys_system_setting() { name = BLWording.REPORT_FLAG_GROUP };
tReport.SetDirty(tb_sys_system_setting.CN_KEY_VALUE);
Command csSelect = Command.SetupSelectCmd(tReport, tReportWhere);
ai = ArsenalDBMgr.GetInst(csSelect, GetDefaultSystemColumnInfo());
tb_sys_system_setting cSetting = ai.RunQuerySingleORM<tb_sys_system_setting>(csSelect);
// 判斷REPORT_STATUS是否為true 及得到需更改的資料
string sFlag = BLWording.STATUS_FLAG_ON.ToString(CultureInfo.CurrentCulture);
if (cSetting.key_value != sFlag && CheckAndUpdateReport(out List<Command> o_lcAuth) == null)
{
tb_sys_system_setting tSettingWhere = new tb_sys_system_setting() { name = BLWording.REPORT_FLAG_GROUP };
tb_sys_system_setting tSettingUpdate = new tb_sys_system_setting() { key_value = sFlag };
Command cUpdae = Command.SetupUpdateCmd(tSettingUpdate, tSettingWhere);
o_lcAuth.Add(cUpdae);
ai.RunEditCmds(o_lcAuth);
}
}
while (false);
return sMsg;
}
public string CheckAndInserSetting(List<Tuple<string, string, int, int>> ltChecks, out List<Command> o_lcCmds)
{
string sMsg = null;
List<Command> lcCmds = null;
do
{
tb_sys_system_setting tDisplay = new tb_sys_system_setting();
tDisplay.SetDirty(tb_sys_system_setting.CN_NAME);
Command cSelect = Command.SetupSelectCmd(tDisplay);
ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelect, GetDefaultSystemColumnInfo());
List<tb_sys_system_setting> ltAll = ai.RunQueryList<tb_sys_system_setting>(cSelect);
List<Command> lcCmdsTemp = new List<Command>();
if (ltChecks != null)
{
foreach (Tuple<string, string, int, int> t in ltChecks)
{
if (ltAll.FirstOrDefault(f => f.name == t.Item1) == null)
{
tb_sys_system_setting tsInsert = new tb_sys_system_setting()
{
name = t.Item1,
key_value = t.Item2,
status_flag = t.Item3,
system_flag = t.Item4
};
lcCmdsTemp.Add(Command.SetupInsertCmd(tsInsert));
}
}
}
lcCmds = lcCmdsTemp;
}
while (false);
o_lcCmds = lcCmds;
return sMsg;
}
public string TruncParam(List<string> ltChecks, out List<Command> o_lcCmds)
{
string sMsg = null;
List<Command> lcCmds = null;
do
{
tb_sys_paramcatalog tDisplay = new tb_sys_paramcatalog();
tDisplay.SetDirty(tb_sys_paramcatalog.CN_NAME, tb_sys_paramcatalog.CN_UID);
Command cSelect = Command.SetupSelectCmd(tDisplay);
ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelect, GetDefaultSystemColumnInfo());
List<tb_sys_paramcatalog> lpcAll = ai.RunQueryList<tb_sys_paramcatalog>(cSelect);
List<Command> lcCmdsTemp = new List<Command>();
if (ltChecks != null)
{
foreach (string t in ltChecks)
{
tb_sys_paramcatalog pc = lpcAll.FirstOrDefault(f => f.name == t);
if (pc != null)
{
lcCmdsTemp.Add(Command.SetupDeleteCmd(new tb_sys_param() { paramcatalog = pc.uid }));
}
}
}
lcCmds = lcCmdsTemp;
}
while (false);
o_lcCmds = lcCmds;
return sMsg;
}
public string CheckAndInserParam(List<Tuple<string, string, string, int>> ltChecks, out List<Command> o_lcCmds)
{
string sMsg = null;
List<Command> lcCmds = null;
do
{
tb_sys_param tpDisplay = new tb_sys_param();
tpDisplay.SetDirty(tb_sys_param.CN_NAME, tb_sys_param.CN_UID);
Command cSelectParam = Command.SetupSelectCmd(tpDisplay);
ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelectParam, GetDefaultSystemColumnInfo());
List<tb_sys_param> lpAll = ai.RunQueryList<tb_sys_param>(cSelectParam);
tb_sys_paramcatalog tDisplay = new tb_sys_paramcatalog();
tDisplay.SetDirty(tb_sys_paramcatalog.CN_NAME, tb_sys_paramcatalog.CN_UID);
Command cSelect = Command.SetupSelectCmd(tDisplay);
List<tb_sys_paramcatalog> lpcAll = ai.RunQueryList<tb_sys_paramcatalog>(cSelect);
List<Command> lcCmdsTemp = new List<Command>();
Dictionary<string, string> dicCateGoryName2Uid = new Dictionary<string, string>();
if (ltChecks != null)
{
foreach (Tuple<string, string, string, int> t in ltChecks)
{
if (!dicCateGoryName2Uid.ContainsKey(t.Item1))
{
tb_sys_paramcatalog pc = lpcAll.FirstOrDefault(f => f.name == t.Item1);
if (pc == null)
{
string sUID = Guid.NewGuid().ToString();
tb_sys_paramcatalog pcInsert = new tb_sys_paramcatalog()
{
uid = sUID,
name = t.Item1,
status_flag = BLWording.STATUS_FLAG_ON,
system_flag = BLWording.STATUS_FLAG_OFF,
};
dicCateGoryName2Uid.Add(t.Item1, sUID);
lcCmdsTemp.Add(Command.SetupInsertCmd(pcInsert));
}
else
{
dicCateGoryName2Uid.Add(pc.name, pc.uid);
}
}
tb_sys_param p = lpAll.FirstOrDefault(f => f.name == t.Item2 && f.paramcatalog == dicCateGoryName2Uid[t.Item1]);
if (p == null)
{
lcCmdsTemp.Add(Command.SetupDeleteCmd(new tb_sys_param()
{
name = t.Item2,
paramcatalog = dicCateGoryName2Uid[t.Item1],
}));
tb_sys_param pInsert = new tb_sys_param()
{
name = t.Item2,
paramcatalog = dicCateGoryName2Uid[t.Item1],
param_value = t.Item3,
status_flag = BLWording.STATUS_FLAG_ON,
system_flag = BLWording.STATUS_FLAG_OFF,
seq = t.Item4
};
lcCmdsTemp.Add(Command.SetupInsertCmd(pInsert));
}
}
}
lcCmds = lcCmdsTemp;
}
while (false);
o_lcCmds = lcCmds;
return sMsg;
}
public string CheckAndInserTrans(List<Tuple<string, string, string>> ltChecks, out List<Command> o_lcCmds)
{
string sMsg = null;
List<Command> lcCmds = null;
do
{
if (ltChecks == null)
{
sMsg = MessageWording.PARAM_NOT_EXPECTED;
break;
}
tb_sys_translation tDisplay = new tb_sys_translation();
tDisplay.SetDirty(tb_sys_translation.CN_NAME, tb_sys_translation.CN_LANGUAGE);
Command cSelect = Command.SetupSelectCmd(tDisplay);
ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelect, GetDefaultSystemColumnInfo());
List<tb_sys_translation> ltAll = ai.RunQueryList<tb_sys_translation>(cSelect);
List<Command> lcCmdsTemp = new List<Command>();
foreach (Tuple<string, string, string> t in ltChecks)
{
if (ltAll.FirstOrDefault(f => f.language == t.Item1 && f.name == t.Item2) == null)
{
tb_sys_translation tsInsert = new tb_sys_translation()
{
language = t.Item1,
name = t.Item2,
trans = t.Item3
};
lcCmdsTemp.Add(Command.SetupInsertCmd(tsInsert));
}
}
lcCmds = lcCmdsTemp;
}
while (false);
o_lcCmds = lcCmds;
return sMsg;
}
/// <summary>
/// 將原本SWFIT在handle_item的資料搬到group_item
/// </summary>
/// <param name="o_lcCmds"></param>
/// <returns></returns>
public string CheckAndUpdateReport(out List<Command> o_lcCmds)
{
string sMsg = null;
List<Command> lcCmds;
do
{
// 先搜尋authreport的資料
tb_rpt_authreport rDisplay = new tb_rpt_authreport();
rDisplay.SetDirty(tb_rpt_authreport.CN_UID, tb_rpt_authreport.CN_REPORT_TYPE, tb_rpt_authreport.CN_DEPARTMENT_ITEM);
tb_rpt_authreport rWhere = new tb_rpt_authreport() { report_type = BseMessageWording.GROUP };
Command cSelect = Command.SetupSelectCmd(rDisplay, rWhere);
ArsenalInterface ai = ArsenalDBMgr.GetInst(cSelect, GetDefaultSystemColumnInfo());
List<tb_rpt_authreport> ltAll = ai.RunQueryList<tb_rpt_authreport>(cSelect);
List<Command> lcCmdsTemp = new List<Command>();
if (ltAll.Any())
{
foreach (var t in ltAll)
{
if (t.department_item != null)
{
// 更新tb_rpt_authreport資料
tb_rpt_authreport uAuth = new tb_rpt_authreport() { uid = t.uid };
tb_rpt_authreport uData = new tb_rpt_authreport()
{
department_item = null,
group_items = t.department_item
};
lcCmdsTemp.Add(Command.SetupUpdateCmd(uData, uAuth));
// 更新tb_rpt_authreport_schedule資料
tb_rpt_authreport_schedule uScheduleAuth = new tb_rpt_authreport_schedule() { authreport_uid = t.uid };
tb_rpt_authreport_schedule uScheduleData = new tb_rpt_authreport_schedule()
{
department_item = null,
group_items = t.department_item
};
lcCmdsTemp.Add(Command.SetupUpdateCmd(uScheduleData, uScheduleAuth));
}
}
}
lcCmds = lcCmdsTemp;
}
while (false);
o_lcCmds = lcCmds;
return sMsg;
}
public int LogTest()
{
return LogHelper.DBLog("NNNNNNNNNN");
}
public Command TestSQLLib()
{
SQLLib mb = new SQLLib(new MSSQLDirectSQLHelper());
mb.GetArticleProduct("aaa", out Command cRes);
return cRes;
}
}
class SQLLib : DirectSQLLibBase
{
public SQLLib(ADirectSQLHelper i_sqlLibBase) : base(i_sqlLibBase) { }
public virtual string GetArticleProduct(string i_sArticleUid, out Command o_cResult)
{
ADirectCmdParameter cp = GetParamter();
string sSQL = $@"SELECT a.{tb_prd_product.CN_UID}
, a.{tb_prd_product.CN_NAME}
, a.{tb_prd_product.CN_MEMO}
FROM {GetFormalTableName<tb_prd_product>()} a
LEFT JOIN {GetFormalTableName<tb_prd_article2product>()} b
on a.{tb_prd_product.CN_UID} = b.{tb_prd_article2product.CN_PRD_UID}
where b.{tb_prd_article2product.CN_ARTICLE_UID} = {cp.Add(i_sArticleUid)}";
return GenerateCommand<tb_prd_product>(sSQL, cp, out o_cResult);
}
}
}