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.
264 lines
9.3 KiB
264 lines
9.3 KiB
using EasyBL.WebApi.Message;
|
|
using EasyNet.Common;
|
|
using Entity.Sugar;
|
|
using log4net;
|
|
using Newtonsoft.Json;
|
|
using SqlSugar.Base;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
|
|
namespace EasyBL
|
|
{
|
|
public class MessageBase
|
|
{
|
|
protected static string _getCustomData(RequestMessage i_joRequest, string i_sKey)
|
|
{
|
|
string sRes = null;
|
|
|
|
if (i_joRequest.CUSTOMDATA != null && i_joRequest.CUSTOMDATA.ContainsKey(i_sKey))
|
|
{
|
|
sRes = i_joRequest.CUSTOMDATA[i_sKey];
|
|
}
|
|
|
|
return sRes;
|
|
}
|
|
|
|
public static T _fetchEntity<T>(RequestMessage i_joRequest) where T : new()
|
|
{
|
|
//var properties = TypeDescriptor.GetProperties(typeof(T));
|
|
//var t = Activator.CreateInstance<T>();
|
|
var entity = new T();
|
|
var properties = ReflectionHelper.GetProperties(entity.GetType());
|
|
foreach (PropertyInfo prop in properties)
|
|
{
|
|
try
|
|
{
|
|
ReflectionHelper.SetPropertyValue(entity, prop, _fetchObject(i_joRequest.DATA, prop.Name));
|
|
}
|
|
catch (Exception)
|
|
{
|
|
prop.SetValue(entity, null);
|
|
}
|
|
}
|
|
return entity;
|
|
}
|
|
public static List<T> _fetchCusEntity<T>(RequestMessage i_joRequest, string i_sKey) where T : new()
|
|
{
|
|
var lstT = new List<T>();
|
|
var objval = _fetchObject(i_joRequest.DATA, i_sKey).ToString();
|
|
if (!string.IsNullOrEmpty(objval) && objval != "[]")
|
|
{
|
|
lstT = JsonConvert.DeserializeObject<List<T>>(objval.ToString());
|
|
}
|
|
return lstT;
|
|
}
|
|
protected static string _fetchString(RequestMessage i_joRequest, string i_sKey)
|
|
{
|
|
return _fetchString(i_joRequest.DATA, i_sKey);
|
|
}
|
|
|
|
protected static int _fetchInt(RequestMessage i_joRequest, string i_sKey)
|
|
{
|
|
var sRes = _fetchString(i_joRequest.DATA, i_sKey);
|
|
return (sRes != null && sRes != "") ? int.Parse(sRes) : -1;
|
|
}
|
|
|
|
protected static bool _fetchBool(RequestMessage i_joRequest, string i_sKey)
|
|
{
|
|
var sRes = _fetchString(i_joRequest.DATA, i_sKey);
|
|
return sRes != null ? Convert.ToBoolean(sRes) : false;
|
|
}
|
|
|
|
protected static object _fetchObject(Dictionary<string, object> i_dic, string i_sKey)
|
|
{
|
|
object sRes = null;
|
|
if (i_dic.ContainsKey(i_sKey))
|
|
{
|
|
sRes = i_dic[i_sKey];
|
|
}
|
|
return sRes;
|
|
}
|
|
|
|
protected static string _fetchString(Dictionary<string, object> i_dic, string i_sKey)
|
|
{
|
|
string sRes = null;
|
|
|
|
if (i_dic.ContainsKey(i_sKey))
|
|
{
|
|
var obj = i_dic[i_sKey];
|
|
if (null != obj)
|
|
{
|
|
sRes = obj.ToString();
|
|
}
|
|
}
|
|
return sRes;
|
|
}
|
|
|
|
protected static string _getKeyStr(Dictionary<string, object> i_dic, string i_sKey)
|
|
{
|
|
var sRes = "";
|
|
|
|
if (i_dic.ContainsKey(i_sKey))
|
|
{
|
|
var obj = i_dic[i_sKey];
|
|
if (null != obj)
|
|
{
|
|
sRes = obj.ToString();
|
|
}
|
|
}
|
|
return sRes;
|
|
}
|
|
|
|
protected static void _setEntityBase<T>(T i_entity, RequestMessage i_joRequest)
|
|
{
|
|
var properties = ReflectionHelper.GetProperties(i_entity.GetType());
|
|
foreach (PropertyInfo prop in properties)
|
|
{
|
|
if (prop.Name == "OrgID")
|
|
{
|
|
prop.SetValue(i_entity, i_joRequest.ORIGID);
|
|
}
|
|
else if ("ModifyUser,CreateUser".Contains(prop.Name))
|
|
{
|
|
prop.SetValue(i_entity, i_joRequest.USERID);
|
|
}
|
|
else if ("ModifyDate,CreateDate".Contains(prop.Name))
|
|
{
|
|
prop.SetValue(i_entity, DateTime.Now);
|
|
}
|
|
}
|
|
}
|
|
|
|
private ILog _inst = null;
|
|
protected ILog Logger
|
|
{
|
|
get
|
|
{
|
|
if (_inst == null)
|
|
{
|
|
_inst = LogManager.GetLogger(this.GetType());
|
|
}
|
|
return _inst;
|
|
}
|
|
}
|
|
|
|
public void LogAndSendEmail(string sErrorMessage, Exception Exception, string sOrgID, string sUserID, string sProgramId, string sProgramName, string sFunctionName, string sErrorSource, string sErrorlineNO, string sErrorcolNO)
|
|
{
|
|
|
|
Logger.Error(sProgramName + sFunctionName + " Error:" + sErrorMessage, Exception);
|
|
|
|
var db = SugarBase.GetIntance();
|
|
string sError = null;
|
|
string sUserFromName = null;
|
|
var sEmailBody = "";
|
|
if (string.IsNullOrWhiteSpace(sProgramId))
|
|
{
|
|
//拆分JS錯誤來源網址
|
|
var saErrorSource = sErrorSource.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
|
|
sProgramId = saErrorSource.LastOrDefault();
|
|
}
|
|
if (string.IsNullOrWhiteSpace(sProgramName))
|
|
{
|
|
sProgramName = "";
|
|
}
|
|
if (string.IsNullOrWhiteSpace(sProgramName))
|
|
{
|
|
sFunctionName = "";
|
|
}
|
|
if (Exception != null)
|
|
{
|
|
sErrorMessage += "<br/>" + Exception.ToString();
|
|
}
|
|
|
|
//查詢工程師郵件,拆分維護工程師郵件
|
|
var saEmails = Common.GetSystemSetting(db, sOrgID, "ErrorEngineer").Split(new string[] { ";", "," }, StringSplitOptions.RemoveEmptyEntries);
|
|
//獲取Email郵件格式
|
|
var oErrorMessage = db.Queryable<OTB_SYS_Email>().Single(it => it.OrgID == sOrgID && it.EmailID == nameof(ErrorMessage));
|
|
|
|
if (oErrorMessage != null)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(sUserID))
|
|
{
|
|
var oUserFrom = db.Queryable<OTB_SYS_Members>().Single(it => it.OrgID == sOrgID && it.MemberID == sUserID);
|
|
|
|
if (oUserFrom != null)
|
|
{
|
|
sUserFromName = oUserFrom.MemberName;
|
|
}
|
|
}
|
|
|
|
//寄信開始
|
|
foreach (string email in saEmails)
|
|
{
|
|
//利用郵件獲取工程師ID和名稱
|
|
var oUserTo = db.Queryable<OTB_SYS_Members>().Single(it => it.OrgID == sOrgID && it.Email == email);
|
|
|
|
if (oUserTo == null)
|
|
{
|
|
oUserTo = new OTB_SYS_Members();
|
|
}
|
|
sEmailBody = oErrorMessage.BodyHtml.Replace("{{:UserName}}", oUserTo.MemberName)
|
|
.Replace("{{:UseMember}}", sUserFromName ?? sUserID)
|
|
.Replace("{{:FunctionName}}", sFunctionName)
|
|
.Replace("{{:ErrorRow}}", sErrorlineNO)
|
|
.Replace("{{:ErrorColumn}}", sErrorcolNO)
|
|
.Replace("{{:ProgramId}}", sProgramId)
|
|
.Replace("{{:ProgramName}}", sProgramName)
|
|
.Replace("{{:error}}", sErrorMessage);
|
|
|
|
var oEmail = new Emails();
|
|
var saEmailTo = new List<EmailTo>(); //收件人
|
|
var oEmailTo = new EmailTo
|
|
{
|
|
ToUserID = oUserTo.MemberID,
|
|
ToUserName = oUserTo.MemberName,
|
|
ToEmail = email,
|
|
Type = "to"
|
|
};
|
|
saEmailTo.Add(oEmailTo);
|
|
|
|
oEmail.FromUserName = "系統自動發送";//取fonfig
|
|
oEmail.Title = "奕達運通管理系統錯誤信息派送";//取fonfig
|
|
oEmail.EmailBody = sEmailBody;
|
|
oEmail.IsCCSelf = false;
|
|
oEmail.Attachments = null;
|
|
oEmail.EmailTo = saEmailTo;
|
|
|
|
var bSend = new MailService(sOrgID, true).MailFactory(oEmail, out sError);
|
|
}
|
|
}
|
|
}
|
|
|
|
public ResponseMessage ErrorMessage(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
try
|
|
{
|
|
var sErrorSource = _fetchString(i_crm, "ErrorSource");
|
|
var sErrorlineNO = _fetchString(i_crm, "Errorlineno");
|
|
var sErrorcolNO = _fetchString(i_crm, "Errorcolno");
|
|
var sErrorMessage = _fetchString(i_crm, nameof(ErrorMessage));
|
|
|
|
LogAndSendEmail(sErrorMessage, null, i_crm.ORIGID, i_crm.USERID, "", "", "", sErrorSource, sErrorlineNO, sErrorcolNO);
|
|
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
}
|
|
}
|