You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
894 lines
40 KiB
894 lines
40 KiB
|
|
using CounsellorBL.Common;
|
|
using CounsellorBL.Helper;
|
|
using MonumentDefine;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using OT.COM.ArsenalDB;
|
|
using OT.COM.LogisticsUtil;
|
|
using OT.COM.SignalerMessage;
|
|
using SoldierData;
|
|
using SoldierData.EnterprizeV4;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
|
|
namespace CounsellorBL.BLStructure.SYS
|
|
{
|
|
class MemberService : SingleDataTableTemplate<tb_sys_user>
|
|
{
|
|
const string calcolor = "calcolor";
|
|
const string role_uid = "role_uid";
|
|
public MemberService()
|
|
{
|
|
dgReadCommandGenerator = readCommandGenerator;
|
|
dgReadCommandPostDataHandler = readCommandPostDataHandler;
|
|
|
|
dgCreateCommandGenerator = createCommandGenerator;
|
|
|
|
dgDeleteCommandGenerator = deleteCommandGenerator;
|
|
|
|
dgUpdateCommandGenerator = updateCommandGenerator;
|
|
}
|
|
|
|
[Auth(false)]
|
|
public new CResponseMessage Read(CRequestMessage i_crmInput) => base.Read(i_crmInput);
|
|
|
|
protected string readCommandGenerator(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out Command o_c,
|
|
[System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
|
|
[System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
|
|
[System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
|
|
{
|
|
string sMsg;
|
|
Command cRes = null;
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
List<string> lsEmpColumns = EntityBase.GetAllColumnName(typeof(tb_hr_employee));
|
|
Dictionary<string, object> dicWhereData = i_jaData[0][BLWording.WHEREDATA].ToObject<Dictionary<string, object>>();
|
|
|
|
// 取得condition
|
|
Dictionary<string, string> dicCondition = GetQueryMasterFirstQJEDicwherecols(i_crmInput);
|
|
var lsGroup = ProjectHelper.GetUserGroup(i_crmInput);
|
|
/**開始組指令**/
|
|
QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
|
|
|
|
QueryJsonElement qjeUser = lBlocks.GetInst();
|
|
qjeUser.table = tb_sys_user.TABLENAME;
|
|
qjeUser.displaycols = new List<string>() { tb_sys_user.CN_ACCOUNT, tb_sys_user.CN_UID };
|
|
|
|
List<WhereNode> wnQuery = new List<WhereNode>();
|
|
|
|
if (dicCondition.ContainsKey(tb_sys_user.CN_STATUS_FLAG))
|
|
{
|
|
wnQuery.Add(new WhereNode(tb_sys_user.CN_STATUS_FLAG, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_sys_user), dicCondition[tb_sys_user.CN_STATUS_FLAG]));
|
|
}
|
|
|
|
if (dicCondition.ContainsKey(tb_sys_user.CN_ACCOUNT))
|
|
{
|
|
wnQuery.Add(new WhereNode(tb_sys_user.CN_ACCOUNT, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_sys_user), dicCondition[tb_sys_user.CN_ACCOUNT]));
|
|
}
|
|
|
|
|
|
if (wnQuery.Any())
|
|
{
|
|
qjeUser.wherecols = new WhereNode(WhereNode.ENodeOperation.ENO_AND, wnQuery.ToArray());
|
|
}
|
|
|
|
|
|
QueryJsonElement qjeEmp = lBlocks.GetInst();
|
|
qjeEmp.table = tb_hr_employee.TABLENAME;
|
|
qjeEmp.jointype = QueryJsonElement.LEFT_JOIN;
|
|
qjeEmp.jointable = qjeUser;
|
|
qjeEmp.joincols = new Dictionary<string, string>() {
|
|
{ tb_hr_employee.CN_UID,tb_sys_user.CN_UID }};
|
|
qjeEmp.displaycols = lsEmpColumns;
|
|
qjeEmp.dicwherecols = dicCondition;
|
|
|
|
QueryJsonElement qjeEnterCode = lBlocks.GetInst();
|
|
qjeEnterCode.table = tb_sys_user2entercode.TABLENAME;
|
|
qjeEnterCode.jointype = QueryJsonElement.LEFT_JOIN;
|
|
qjeEnterCode.jointable = qjeUser;
|
|
qjeEnterCode.joincols = new Dictionary<string, string>() {
|
|
{ tb_sys_user2entercode.CN_USER_UID, tb_sys_user.CN_UID }};
|
|
qjeEnterCode.displaycols = new List<string>() { tb_sys_user2entercode.CN_USER_ENTERCODE };
|
|
qjeEnterCode.aliascols = new Dictionary<string, List<string>>() {
|
|
{ tb_sys_user2entercode.CN_USER_ENTERCODE, new List<string>(){ "confirm_entercode" }
|
|
} };
|
|
|
|
lBlocks.Add(qjeUser);
|
|
lBlocks.Add(qjeEmp);
|
|
lBlocks.Add(qjeEnterCode);
|
|
|
|
QueryJsonElement qje2Role = lBlocks.GetInst();
|
|
qje2Role.table = tb_sys_user2role.TABLENAME;
|
|
qje2Role.jointable = qjeUser;
|
|
qje2Role.jointype = QueryJsonElement.LEFT_JOIN;
|
|
qje2Role.joincols = new Dictionary<string, string>() {
|
|
{ tb_sys_user2role.CN_USER_UID, tb_sys_user.CN_UID }};
|
|
qje2Role.displaycols = new List<string>() { tb_sys_user2role.CN_ROLE_UID };
|
|
if (dicWhereData != null && dicWhereData.ContainsKey(role_uid))
|
|
{
|
|
qje2Role.wherecols = new WhereNode(tb_sys_user2role.CN_ROLE_UID,
|
|
WhereNode.EColumnOperation.EOT_EQ,
|
|
typeof(tb_sys_user2role),
|
|
dicWhereData[role_uid].ToString()
|
|
);
|
|
}
|
|
lBlocks.Add(qje2Role);
|
|
|
|
QueryJsonElement qjeEmp2Branch = lBlocks.GetInst();
|
|
qjeEmp2Branch.table = tb_hr_employee2branch.TABLENAME;
|
|
qjeEmp2Branch.jointable = qjeEmp;
|
|
qjeEmp2Branch.jointype = QueryJsonElement.LEFT_JOIN;
|
|
qjeEmp2Branch.joincols = new Dictionary<string, string>() {
|
|
{ tb_hr_employee2branch.CN_UID, tb_hr_employee.CN_UID }};
|
|
qjeEmp2Branch.displaycols = new List<string>() { tb_hr_employee2branch.CN_BRANCH_UID };
|
|
lBlocks.Add(qjeEmp2Branch);
|
|
|
|
QueryJsonElement qjeBranch = lBlocks.GetInst();
|
|
qjeBranch.table = tb_grp_branch.TABLENAME;
|
|
qjeBranch.jointable = qjeEmp2Branch;
|
|
qjeBranch.jointype = QueryJsonElement.LEFT_JOIN;
|
|
qjeBranch.joincols = new Dictionary<string, string>() {
|
|
{ tb_grp_branch.CN_UID, tb_hr_employee2branch.CN_BRANCH_UID }};
|
|
qjeBranch.displaycols = new List<string>() { tb_grp_branch.CN_GROUP_UID };
|
|
lBlocks.Add(qjeBranch);
|
|
|
|
QueryJsonElement qjeGroup = lBlocks.GetInst();
|
|
qjeGroup.table = tb_grp_group.TABLENAME;
|
|
qjeGroup.jointable = qjeBranch;
|
|
qjeGroup.jointype = QueryJsonElement.LEFT_JOIN;
|
|
qjeGroup.joincols = new Dictionary<string, string>() {
|
|
{ tb_grp_group.CN_UID, tb_grp_branch.CN_GROUP_UID }};
|
|
if (i_crmInput.token != "guest")
|
|
{
|
|
qjeGroup.wherecols = new WhereNode(tb_grp_group.CN_UID, WhereNode.EColumnOperation.EOT_IN, typeof(tb_grp_group), lsGroup.ToArray());
|
|
}
|
|
lBlocks.Add(qjeGroup);
|
|
|
|
sMsg = MakeSelectJoinByBlocks(lBlocks, out Command cRead);
|
|
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
cRes = cRead;
|
|
}
|
|
while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_nCodeLine, i_sMemberName, i_sSourcePath);
|
|
sMsg = $"{nameof(readCommandGenerator)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. Call from {i_sMemberName} {i_sSourcePath}({i_nCodeLine}).";
|
|
#if DEBUG
|
|
System.Diagnostics.Debug.WriteLine(sMsg);
|
|
#endif
|
|
}
|
|
|
|
o_c = cRes;
|
|
return sMsg;
|
|
}
|
|
|
|
class MemberModel : tb_hr_employee
|
|
{
|
|
public string account { get; set; }
|
|
public string user_entercode { get; set; }
|
|
public string role_uid { get; set; }
|
|
public string group_uid { get; set; }
|
|
public string branch_uid { get; set; }
|
|
public string confirm_entercode { get; set; }
|
|
}
|
|
protected string readCommandPostDataHandler(CRequestMessage i_crmInput, ArsenalInterface i_aiArsenal, Command i_cCmd, JArray i_jaData, tb_sys_session i_sSessionUser, out object o_oReault,
|
|
[System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
|
|
[System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
|
|
[System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
|
|
{
|
|
string sMsg = null;
|
|
object oResultData = null;
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
List<MemberModel> qds = i_aiArsenal.RunQueryList<MemberModel>(i_cCmd);
|
|
if (!i_cCmd.IsSuccess)
|
|
{
|
|
sMsg = i_cCmd.LastErrorCode;
|
|
break;
|
|
}
|
|
oResultData = qds
|
|
.GroupBy(x => new
|
|
{
|
|
x.account,
|
|
x.uid,
|
|
x.user_entercode,
|
|
x.email,
|
|
x.status_flag,
|
|
x.name,
|
|
x.confirm_entercode,
|
|
x.personal_setting,
|
|
x.receive_branch_uid
|
|
})
|
|
.Select(x => new
|
|
{
|
|
x.Key.account,
|
|
x.Key.name,
|
|
x.Key.uid,
|
|
x.Key.user_entercode,
|
|
x.Key.confirm_entercode,
|
|
x.Key.email,
|
|
x.Key.status_flag,
|
|
x.Key.personal_setting,
|
|
x.Key.receive_branch_uid,
|
|
role_uid = x.Where(x => !string.IsNullOrEmpty(x.role_uid)).Select(x => x.role_uid).Distinct().ToList(),
|
|
group_uid = x.Where(x => !string.IsNullOrEmpty(x.group_uid)).Select(x => x.group_uid).ToList(),
|
|
branch_uid = x.Where(x => !string.IsNullOrEmpty(x.branch_uid)).Select(x => x.branch_uid).ToList()
|
|
}).ToList();
|
|
|
|
}
|
|
while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_nCodeLine, i_sMemberName, i_sSourcePath);
|
|
sMsg = $"{nameof(readCommandPostDataHandler)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. Call from {i_sMemberName} {i_sSourcePath}({i_nCodeLine}).";
|
|
#if DEBUG
|
|
System.Diagnostics.Debug.WriteLine(sMsg);
|
|
#endif
|
|
}
|
|
|
|
o_oReault = oResultData;
|
|
return sMsg;
|
|
}
|
|
protected string createCommandGenerator(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lResult, List<string> i_saQryContainKeys,
|
|
[System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
|
|
[System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
|
|
[System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
|
|
{
|
|
string sMsg;
|
|
List<Command> lCmds = new List<Command>();
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
Dictionary<string, object> dicData = i_jaData[0][BLWording.DATA].ToObject<Dictionary<string, object>>();
|
|
|
|
dicData.Remove(tb_hr_employee.CN_UID);
|
|
string sUserUID = Guid.NewGuid().ToString();
|
|
// 新增帳號
|
|
tb_sys_user cNewUser = new tb_sys_user
|
|
{
|
|
uid = sUserUID,
|
|
account = dicData[tb_sys_user.CN_ACCOUNT].ToString()
|
|
};
|
|
lCmds.Add(Command.SetupInsertCmd(cNewUser));
|
|
|
|
// 新增個人資訊
|
|
tb_hr_employee cNewEmp = new tb_hr_employee();
|
|
cNewEmp.FillData(dicData);
|
|
cNewEmp.uid = sUserUID;
|
|
|
|
PersonalSetting personalSetting = new PersonalSetting();
|
|
|
|
if (dicData.ContainsKey(calcolor))
|
|
{
|
|
personalSetting.CalColor = dicData[calcolor].ToString();
|
|
}
|
|
personalSetting.Favorite = new List<string>() { "0d5bcacf-0958-443d-aab4-0f207327cce7", "70c34b69-56fe-499c-ada6-967457dd4026", "2255ae6a-e1cb-4e01-a225-e97a7c73c1d5", "bbd2d114-556b-4663-99bb-c4f7a2698077", "6e03e650-8a35-47e7-8144-2bb4334ab7a9" };
|
|
cNewEmp.personal_setting = JsonConvert.SerializeObject(personalSetting); // 將物件序列化
|
|
|
|
lCmds.Add(Command.SetupInsertCmd(cNewEmp));
|
|
|
|
sMsg = EncryptHelper.Encrypt(dicData[tb_sys_user2entercode.CN_USER_ENTERCODE].ToString(), out string sEnc);
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
|
|
// 新增密碼
|
|
tb_sys_user2entercode cNewEnterCode = new tb_sys_user2entercode
|
|
{
|
|
user_uid = sUserUID,
|
|
user_entercode = sEnc
|
|
};
|
|
lCmds.Add(Command.SetupInsertCmd(cNewEnterCode));
|
|
|
|
// 新增角色資訊
|
|
if (dicData.ContainsKey(role_uid))
|
|
{
|
|
var jaRole = dicData[role_uid] as JArray;
|
|
if (jaRole != null)
|
|
{
|
|
foreach (var role in jaRole)
|
|
{
|
|
tb_sys_user2role cNew = new tb_sys_user2role()
|
|
{
|
|
user_uid = sUserUID,
|
|
role_uid = role.ToString()
|
|
};
|
|
lCmds.Add(Command.SetupInsertCmd(cNew));
|
|
}
|
|
}
|
|
}
|
|
|
|
// 新增所屬分店
|
|
if (dicData.ContainsKey(tb_hr_employee2branch.CN_BRANCH_UID))
|
|
{
|
|
var jaBranch = dicData[tb_hr_employee2branch.CN_BRANCH_UID] as JArray;
|
|
foreach (var branch in jaBranch)
|
|
{
|
|
tb_hr_employee2branch cNew = new tb_hr_employee2branch()
|
|
{
|
|
uid = sUserUID,
|
|
branch_uid = branch.ToString()
|
|
};
|
|
lCmds.Add(Command.SetupInsertCmd(cNew));
|
|
}
|
|
}
|
|
}
|
|
while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_nCodeLine, i_sMemberName, i_sSourcePath);
|
|
sMsg = $"{nameof(createCommandGenerator)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. Call from {i_sMemberName} {i_sSourcePath}({i_nCodeLine}).";
|
|
#if DEBUG
|
|
System.Diagnostics.Debug.WriteLine(sMsg);
|
|
#endif
|
|
}
|
|
|
|
o_lResult = lCmds;
|
|
return sMsg;
|
|
}
|
|
|
|
protected string updateCommandGenerator(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lResult, List<string> i_saQryContainKeys,
|
|
[System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
|
|
[System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
|
|
[System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
|
|
{
|
|
string sMsg = null;
|
|
List<Command> lCmds = new List<Command>();
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
Dictionary<string, object> dicData = i_jaData[0][BLWording.DATA].ToObject<Dictionary<string, object>>();
|
|
Dictionary<string, object> dicWhereData = i_jaData[0][BLWording.WHEREDATA].ToObject<Dictionary<string, object>>();
|
|
|
|
string sUserUID = dicWhereData[tb_sys_user.CN_UID].ToString();
|
|
var data = i_jaData[0][BLWording.DATA] as JObject;
|
|
data.Remove(role_uid);
|
|
|
|
// 更新個人資訊 tb_hr_employee
|
|
tb_hr_employee cEmpData = new tb_hr_employee();
|
|
sMsg = valueAssignment(i_crmInput, cEmpData, data, out List<Command> lcUpdEmp);
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
Command cEmp = Command.SetupUpdateCmd(cEmpData, new WhereNode(tb_hr_employee.CN_UID, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_hr_employee), sUserUID));
|
|
lCmds.Add(cEmp);
|
|
|
|
|
|
// 更新帳號資訊 tb_sys_user
|
|
tb_sys_user cUserData = new tb_sys_user();
|
|
sMsg = valueAssignment(i_crmInput, cUserData, data, out List<Command> lcUpdUser);
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
Command cUser = Command.SetupUpdateCmd(cUserData, new WhereNode(tb_sys_user.CN_UID, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_sys_user), sUserUID));
|
|
lCmds.Add(cUser);
|
|
|
|
|
|
// 更新密碼
|
|
if (dicData.ContainsKey(tb_sys_user2entercode.CN_USER_ENTERCODE) && dicData[tb_sys_user2entercode.CN_USER_ENTERCODE] != null)
|
|
{
|
|
sMsg = EncryptHelper.Encrypt(dicData[tb_sys_user2entercode.CN_USER_ENTERCODE].ToString(), out string sEnc);
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
tb_sys_user2entercode cEnterCode = new tb_sys_user2entercode
|
|
{
|
|
user_entercode = sEnc
|
|
};
|
|
tb_sys_user2entercode cEnterCodeCond = new tb_sys_user2entercode() { user_uid = sUserUID };
|
|
lCmds.Add(Command.SetupUpdateCmd(cEnterCode, cEnterCodeCond));
|
|
}
|
|
|
|
// 更新角色
|
|
// 查詢原始角色資料
|
|
tb_sys_user2role cRole = new tb_sys_user2role();
|
|
cRole.SetDirty(tb_sys_user2role.CN_ROLE_UID);
|
|
tb_sys_user2role cRoleCon = new tb_sys_user2role() { user_uid = sUserUID };
|
|
Command cRoleSelect = Command.SetupSelectCmd(cRole, cRoleCon);
|
|
ArsenalInterface ai = ArsenalDBMgr.GetInst(cRoleSelect);
|
|
List<tb_sys_user2role> qdsRole = ai.RunQueryList<tb_sys_user2role>(cRoleSelect);
|
|
|
|
var origRole = qdsRole.Select(x => x.role_uid).ToList();
|
|
var lsRole = new List<string>() { };
|
|
if (dicData.ContainsKey(role_uid))
|
|
{
|
|
var jaRole = dicData[role_uid] as JArray;
|
|
foreach (var role in jaRole)
|
|
{
|
|
lsRole.Add(role.ToString());
|
|
}
|
|
}
|
|
var addRole = lsRole.Except(origRole);
|
|
var delRole = origRole.Except(lsRole);
|
|
|
|
if (addRole.Any())
|
|
{
|
|
foreach (var id in addRole)
|
|
{
|
|
tb_sys_user2role cNew = new tb_sys_user2role()
|
|
{
|
|
user_uid = sUserUID,
|
|
role_uid = id
|
|
};
|
|
lCmds.Add(Command.SetupInsertCmd(cNew));
|
|
}
|
|
}
|
|
|
|
if (delRole.Any())
|
|
{
|
|
foreach (var id in delRole)
|
|
{
|
|
tb_sys_user2role cCond = new tb_sys_user2role() { user_uid = sUserUID, role_uid = id };
|
|
lCmds.Add(Command.SetupDeleteCmd(cCond));
|
|
}
|
|
}
|
|
|
|
// 更新所屬分店
|
|
// 查詢分店原始資料
|
|
tb_hr_employee2branch cEmp2Branch = new tb_hr_employee2branch();
|
|
cEmp2Branch.SetDirty(tb_hr_employee2branch.CN_BRANCH_UID);
|
|
tb_hr_employee2branch cCon = new tb_hr_employee2branch() { uid = sUserUID };
|
|
Command cSelect = Command.SetupSelectCmd(cEmp2Branch, cCon);
|
|
ai = ArsenalDBMgr.GetInst(cSelect);
|
|
List<tb_hr_employee2branch> qdsBranch = ai.RunQueryList<tb_hr_employee2branch>(cSelect);
|
|
|
|
var origin = qdsBranch.Select(x => x.branch_uid).ToList();
|
|
var lsBranch = new List<string>() { };
|
|
if (dicData.ContainsKey(tb_hr_employee2branch.CN_BRANCH_UID))
|
|
{
|
|
var jaBranch = dicData[tb_hr_employee2branch.CN_BRANCH_UID] as JArray;
|
|
foreach (var branch in jaBranch)
|
|
{
|
|
lsBranch.Add(branch.ToString());
|
|
}
|
|
var addBranch = lsBranch.Except(origin);
|
|
var delBranch = origin.Except(lsBranch);
|
|
if (addBranch.Any())
|
|
{
|
|
foreach (var id in addBranch)
|
|
{
|
|
tb_hr_employee2branch cNew = new tb_hr_employee2branch()
|
|
{
|
|
uid = sUserUID,
|
|
branch_uid = id
|
|
};
|
|
lCmds.Add(Command.SetupInsertCmd(cNew));
|
|
}
|
|
}
|
|
|
|
if (delBranch.Any())
|
|
{
|
|
foreach (var id in delBranch)
|
|
{
|
|
tb_hr_employee2branch cCond = new tb_hr_employee2branch() { uid = sUserUID, branch_uid = id };
|
|
lCmds.Add(Command.SetupDeleteCmd(cCond));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_nCodeLine, i_sMemberName, i_sSourcePath);
|
|
sMsg = $"{nameof(updateCommandGenerator)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. Call from {i_sMemberName} {i_sSourcePath}({i_nCodeLine}).";
|
|
#if DEBUG
|
|
System.Diagnostics.Debug.WriteLine(sMsg);
|
|
#endif
|
|
}
|
|
|
|
o_lResult = lCmds;
|
|
return sMsg;
|
|
}
|
|
|
|
protected string deleteCommandGenerator(CRequestMessage i_crmInput, JArray i_jaData, tb_sys_session i_sSessionUser, out List<Command> o_lcResult, List<string> i_saQryContainKeys,
|
|
[System.Runtime.CompilerServices.CallerLineNumber] int i_nCodeLine = 0,
|
|
[System.Runtime.CompilerServices.CallerMemberName] string i_sMemberName = "",
|
|
[System.Runtime.CompilerServices.CallerFilePath] string i_sSourcePath = "")
|
|
{
|
|
string sMsg = null;
|
|
List<Command> lCmds = new List<Command>();
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
foreach (JToken jtkProg in i_jaData)
|
|
{
|
|
Dictionary<string, object> dicData = jtkProg.ToObject<Dictionary<string, object>>();
|
|
|
|
Dictionary<string, object> wheredataDic = null;
|
|
string user_uid = null;
|
|
if (dicData.ContainsKey(BLWording.WHEREDATA))
|
|
{
|
|
JObject wheredata = dicData[BLWording.WHEREDATA] as JObject;
|
|
wheredataDic = wheredata.ToObject<Dictionary<string, object>>();
|
|
if (wheredataDic.ContainsKey(BLWording.UID))
|
|
{
|
|
user_uid = wheredataDic[BLWording.UID].ToString();
|
|
}
|
|
}
|
|
|
|
// 刪除角色
|
|
tb_sys_user2role r = new tb_sys_user2role()
|
|
{
|
|
user_uid = user_uid
|
|
};
|
|
lCmds.Add(Command.SetupDeleteCmd(r));
|
|
// 刪除密碼
|
|
tb_sys_user2entercode p = new tb_sys_user2entercode()
|
|
{
|
|
user_uid = user_uid
|
|
};
|
|
lCmds.Add(Command.SetupDeleteCmd(p));
|
|
// 刪除個人資訊
|
|
tb_hr_employee u = new tb_hr_employee()
|
|
{
|
|
uid = user_uid
|
|
};
|
|
lCmds.Add(Command.SetupDeleteCmd(u));
|
|
// 刪除帳號
|
|
tb_sys_user cUser = new tb_sys_user()
|
|
{
|
|
uid = user_uid
|
|
};
|
|
lCmds.Add(Command.SetupDeleteCmd(cUser));
|
|
|
|
}
|
|
}
|
|
while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_nCodeLine, i_sMemberName, i_sSourcePath);
|
|
sMsg = $"{nameof(deleteCommandGenerator)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. Call from {i_sMemberName} {i_sSourcePath}({i_nCodeLine}).";
|
|
#if DEBUG
|
|
System.Diagnostics.Debug.WriteLine(sMsg);
|
|
#endif
|
|
}
|
|
|
|
o_lcResult = lCmds;
|
|
return sMsg;
|
|
}
|
|
|
|
//儲存密碼資訊
|
|
public CResponseMessage CreatePassword(CRequestMessage i_crmInput)
|
|
{
|
|
CResponseMessage crm = null;
|
|
string sMsg = null;
|
|
Command cRes = null;
|
|
do
|
|
{
|
|
try
|
|
{
|
|
List<Command> lCmdMaster = new List<Command>();
|
|
string sAccount = "";
|
|
string sEnterCode = "";
|
|
|
|
object i_dicData = i_crmInput.param[BLWording.ADD_MASTER];
|
|
if (i_dicData is JArray)
|
|
{
|
|
JArray jaData = i_dicData as JArray;
|
|
foreach (JToken joData in jaData)
|
|
{
|
|
Dictionary<string, object> dicData = joData.ToObject<Dictionary<string, object>>();
|
|
JObject jdata = dicData[BLWording.DATA] as JObject;
|
|
Dictionary<string, object> dicInput = jdata.ToObject<Dictionary<string, object>>();
|
|
|
|
if (dicInput.ContainsKey(tb_sys_user.CN_ACCOUNT))
|
|
{
|
|
sAccount = dicInput[tb_sys_user.CN_ACCOUNT].ToString();
|
|
}
|
|
if (dicInput.ContainsKey(tb_sys_user2entercode.CN_USER_ENTERCODE))
|
|
{
|
|
sEnterCode = dicInput[tb_sys_user2entercode.CN_USER_ENTERCODE].ToString();
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
// 查詢原始資料
|
|
QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
|
|
QueryJsonElement qjeOrigin = lBlocks.GetInst();
|
|
qjeOrigin.table = tb_sys_user.TABLENAME;
|
|
qjeOrigin.displaycols = new List<string>() { tb_sys_user.CN_UID };
|
|
qjeOrigin.wherecols = new WhereNode(tb_sys_user.CN_ACCOUNT, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_sys_user), sAccount);
|
|
lBlocks.Add(qjeOrigin);
|
|
sMsg = MakeSelectJoinByBlocks(lBlocks, out cRes);
|
|
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
|
|
ArsenalInterface ai = ArsenalDBMgr.GetInst(cRes);
|
|
|
|
List<tb_sys_user> qds = ai.RunQueryList<tb_sys_user>(cRes);
|
|
|
|
if (!cRes.IsSuccess)
|
|
{
|
|
sMsg = cRes.LastErrorCode;
|
|
break;
|
|
}
|
|
|
|
if (qds.Any())
|
|
{
|
|
var origin = qds.Select(x => x.uid).ToList();
|
|
if (origin.Any())
|
|
{
|
|
foreach (var id in origin)
|
|
{
|
|
tb_sys_user2entercode cNew = new tb_sys_user2entercode()
|
|
{
|
|
user_uid = id,
|
|
user_entercode = sEnterCode,
|
|
};
|
|
|
|
lCmdMaster.Add(Command.SetupInsertCmd(cNew));
|
|
}
|
|
}
|
|
|
|
ai = ArsenalDBMgr.GetInst(lCmdMaster[0], GetDefaultSystemColumnInfo());
|
|
ai.RunEditCmds(lCmdMaster);
|
|
sMsg = GetLastErrorCode(lCmdMaster);
|
|
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
|
|
crm = new CSuccessResponseMessage(null, i_crmInput);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.DBLog(Util.GetLastExceptionMsg(ex), i_crmInput);
|
|
sMsg = $"{nameof(CreatePassword)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}.";
|
|
#if DEBUG
|
|
System.Diagnostics.Debug.WriteLine(sMsg);
|
|
#endif
|
|
}
|
|
}
|
|
while (false);
|
|
|
|
|
|
if (sMsg != null)
|
|
{
|
|
crm = new CErrorResponseMessage(sMsg, i_crmInput);
|
|
}
|
|
|
|
return crm;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 取得帳號與角色的關係
|
|
/// </summary>
|
|
/// <param name="i_crmInput"></param>
|
|
/// <returns></returns>
|
|
[Auth(false)]
|
|
public CResponseMessage GetUser2Role(CRequestMessage i_crmInput)
|
|
{
|
|
CResponseMessage crmRes = null;
|
|
string sMsg;
|
|
try
|
|
{
|
|
do
|
|
{
|
|
string user_uid = null;
|
|
object i_dicData = i_crmInput.param[BLWording.QRY_MASTER];
|
|
if (i_dicData is JArray)
|
|
{
|
|
JArray jaData = i_dicData as JArray;
|
|
foreach (JToken joData in jaData)
|
|
{
|
|
Dictionary<string, object> dicData = joData.ToObject<Dictionary<string, object>>();
|
|
user_uid = dicData[BLWording.USER_ID].ToString();
|
|
}
|
|
}
|
|
// 查詢原始資料
|
|
QueryJsonElementCollection lBlocks = new QueryJsonElementCollection();
|
|
QueryJsonElement qjeOrigin = lBlocks.GetInst();
|
|
qjeOrigin.table = tb_sys_user2role.TABLENAME;
|
|
qjeOrigin.displaycols = new List<string>() { tb_sys_user2role.CN_ROLE_UID };
|
|
qjeOrigin.aliascols = new Dictionary<string, List<string>>()
|
|
{ {tb_sys_user2role.CN_ROLE_UID, new List<string>(){ tb_sys_role.CN_UID } } };
|
|
qjeOrigin.wherecols = new WhereNode(tb_sys_user2role.CN_USER_UID, WhereNode.EColumnOperation.EOT_EQ, typeof(tb_sys_user2role), user_uid);
|
|
lBlocks.Add(qjeOrigin);
|
|
|
|
QueryJsonElement qjeRole = lBlocks.GetInst();
|
|
qjeRole.table = tb_sys_role.TABLENAME;
|
|
qjeRole.displaycols = new List<string>() { tb_sys_role.CN_NAME };
|
|
qjeRole.jointype = QueryJsonElement.LEFT_JOIN;
|
|
qjeRole.jointable = qjeOrigin;
|
|
qjeRole.joincols = new Dictionary<string, string>() {
|
|
{ tb_sys_role.CN_UID, tb_sys_user2role.CN_ROLE_UID}
|
|
};
|
|
lBlocks.Add(qjeRole);
|
|
sMsg = MakeSelectJoinByBlocks(lBlocks, out Command cRes);
|
|
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
|
|
ArsenalInterface ai = ArsenalDBMgr.GetInst(cRes);
|
|
List<tb_sys_role> qdRole = ai.RunQueryList<tb_sys_role>(cRes);
|
|
|
|
var resp = new Dictionary<object, string>();
|
|
if (qdRole.Count > 0)
|
|
{
|
|
foreach (var role in qdRole)
|
|
{
|
|
resp.Add(role.name, role.uid);
|
|
}
|
|
}
|
|
|
|
crmRes = new CSuccessResponseMessage(null, i_crmInput);
|
|
// 填寫回傳
|
|
crmRes.param.Add(BLWording.DATA, resp);
|
|
}
|
|
while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.DBLog(Util.GetLastExceptionMsg(ex));
|
|
sMsg = $"{nameof(GetUser2Role)} unknwon exception. i_crmInput={JsonConvert.SerializeObject(i_crmInput)}. ";
|
|
#if DEBUG
|
|
System.Diagnostics.Debug.WriteLine(sMsg);
|
|
#endif
|
|
}
|
|
|
|
if (null != sMsg)
|
|
{
|
|
crmRes = new CErrorResponseMessage(sMsg, i_crmInput);
|
|
}
|
|
return crmRes;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 更新tb_sys_user personalsetting欄位
|
|
/// </summary>
|
|
/// <param name="i_sUserUID"></param>
|
|
/// <param name="i_sKey"></param>
|
|
/// <param name="i_sVal"></param>
|
|
/// <returns></returns>
|
|
public string UpdateUserProfile(string i_sUserUID, string i_sKey, string i_sVal, out Command o_cUpdateCommand)
|
|
{
|
|
string sMsg = null;
|
|
Command cUpdateCommand = null;
|
|
// 查詢personal_setting資料
|
|
tb_hr_employee cSelect = new tb_hr_employee();
|
|
tb_hr_employee cCon = new tb_hr_employee() { uid = i_sUserUID };
|
|
cSelect.SetFullDirty();
|
|
Command cSe = Command.SetupSelectCmd(cSelect, cCon);
|
|
ArsenalInterface ai = ArsenalDBMgr.GetInst(cSe);
|
|
QueryDataSet qds = ai.RunQueryDataSet(cSe, null);
|
|
var data = qds.DATA.Tables[0].AsEnumerable();
|
|
|
|
if (data.Any())
|
|
{
|
|
var jsonSetting = "";
|
|
var personalSetting = data.Select(x => x.Field<string>(tb_hr_employee.CN_PERSONAL_SETTING)).SingleOrDefault();
|
|
if (personalSetting != null)
|
|
{
|
|
var setting = JsonConvert.DeserializeObject<SoldierData.PersonalSetting>(personalSetting); // 將json字串反序列化
|
|
switch (i_sKey)
|
|
{
|
|
case PersonalSetting.CN_FAVORITE:
|
|
List<string> lsFavorite = i_sVal.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
|
List<string> data_ls = new List<string>();
|
|
foreach (string s in lsFavorite)
|
|
{
|
|
if (!data_ls.Contains(s))
|
|
{
|
|
data_ls.Add(s);
|
|
}
|
|
}
|
|
setting.Favorite = data_ls;
|
|
break;
|
|
case PersonalSetting.CN_CALCOLOR:
|
|
setting.CalColor = i_sVal;
|
|
break;
|
|
}
|
|
jsonSetting = JsonConvert.SerializeObject(setting); // 將物件序列化
|
|
}
|
|
else
|
|
{
|
|
SoldierData.PersonalSetting psModel = new SoldierData.PersonalSetting();
|
|
switch (i_sKey)
|
|
{
|
|
case PersonalSetting.CN_FAVORITE:
|
|
psModel.Favorite = i_sVal.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
|
break;
|
|
case PersonalSetting.CN_CALCOLOR:
|
|
psModel.CalColor = i_sVal;
|
|
break;
|
|
}
|
|
jsonSetting = JsonConvert.SerializeObject(psModel); // 將物件序列化
|
|
}
|
|
|
|
// 更新帳號資料表的personal_setting欄位
|
|
tb_hr_employee cUpdateData = new tb_hr_employee
|
|
{
|
|
personal_setting = jsonSetting
|
|
};
|
|
tb_hr_employee cUpdateCond = new tb_hr_employee() { uid = i_sUserUID };
|
|
cUpdateCommand = Command.SetupUpdateCmd(cUpdateData, cUpdateCond);
|
|
}
|
|
|
|
|
|
o_cUpdateCommand = cUpdateCommand;
|
|
return sMsg;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 新增到我的最愛
|
|
/// </summary>
|
|
/// <param name="i_crmInput"></param>
|
|
/// <returns></returns>
|
|
public CResponseMessage Favorite(CRequestMessage i_crmInput)
|
|
{
|
|
string sMsg = null;
|
|
CResponseMessage crmRes = null;
|
|
do
|
|
{
|
|
List<Dictionary<string, object>> lDic = getQryParameterList(i_crmInput);
|
|
if (lDic != null && lDic.Any())
|
|
{
|
|
tb_sys_session user = i_crmInput.customparam[BLWording.SESSION_USER] as tb_sys_session;
|
|
var userUID = user.update_user_uid;
|
|
sMsg = new MemberService().UpdateUserProfile(userUID, SoldierData.PersonalSetting.CN_FAVORITE, lDic[0]["content"].ToString(), out Command cUpdate);
|
|
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if (cUpdate != null)
|
|
{
|
|
ArsenalInterface ai = ArsenalDBMgr.GetInst(cUpdate, GetDefaultSystemColumnInfo());
|
|
ai.RunEditCmds(new List<Command>() { cUpdate });
|
|
sMsg = GetLastErrorCode(cUpdate);
|
|
if (sMsg != null)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
crmRes = new CSuccessResponseMessage(null, i_crmInput);
|
|
}
|
|
while (false);
|
|
|
|
if (sMsg != null)
|
|
{
|
|
crmRes = new CErrorResponseMessage(sMsg, i_crmInput);
|
|
}
|
|
return crmRes;
|
|
}
|
|
}
|
|
}
|