You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

346 lines
14 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using DSWeb.MvcShipping.Models.MsOpMailLog;
using Microsoft.Practices.EnterpriseLibrary.Data;
using DSWeb.EntityDA;
using HcUtility.Comm;
using DSWeb.Areas.CommMng.Models;
using DSWeb.MvcShipping.Models.MsOpMailSend;
using System.Text.RegularExpressions;
namespace DSWeb.Areas.MvcShipping.DAL
{
public class MsOpMailLogDAL
{
#region Inquery DataList
static public List<OpMailLog> GetDataList(string strCondition, string userid, string usercode, string companyid, string sort = null)
{
var rangstr = GetRangDAStr("index", userid, usercode, companyid);
if (!string.IsNullOrEmpty(rangstr))
{
if (!string.IsNullOrEmpty(strCondition))
{
strCondition = strCondition + " and " + rangstr;
}
else
{
strCondition = rangstr;
}
}
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append("t.GID,t.BSNO,t.BLTYPE,t.RECEIVER,t.[SUBJECT],t.[DESCRIPTION],t.[ATTACHMENT],t.[SENDTIME],t.[SENDER],t.[SENDUSER],b.MBLNO,b.CARRIER,b.ETD,b.CUSTOMERNAME");
strSql.Append(",(select top 1 showname from [user] where GID=t.SENDUSER) as SENDUSERREF ");
strSql.Append(" from op_mail_log t left join v_op_bs b on (b.BSNO=t.BSNO) ");
if (!string.IsNullOrEmpty(strCondition))
{
strSql.Append(" where " + strCondition);
}
var sortstring = DatasetSort.Getsortstring(sort);
if (!string.IsNullOrEmpty(sortstring))
{
strSql.Append(" order by " + sortstring);
}
else
{
strSql.Append(" order by t.SENDTIME DESC ");
}
return SetData(strSql);
}
static public OpMailLog GetData(string condition)
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append("t.GID,t.BSNO,t.BLTYPE,t.RECEIVER,t.[SUBJECT],t.[DESCRIPTION],t.[ATTACHMENT],t.[SENDTIME],t.[SENDER],t.[SENDUSER],b.MBLNO,b.CARRIER,b.ETD,b.CUSTOMERNAME");
strSql.Append(",(select top 1 showname from [user] where GID=t.SENDUSER) as SENDUSERREF ");
strSql.Append(" from op_mail_log t left join v_op_bs b on (b.BSNO=t.BSNO) ");
if (!string.IsNullOrEmpty(condition))
{
strSql.Append(" where " + condition);
}
var list = SetData(strSql);
if (list.Count > 0)
return list[0];
return new OpMailLog();
}
public static string ToText(string HTML)
{
string input = HTML;
return Regex.Replace(Regex.Replace(Regex.Replace(Regex.Replace(Regex.Replace(Regex.Replace(input, @"(?m)<script[^>]*>(\w|\W)*?</script[^>]*>", "", RegexOptions.Multiline | RegexOptions.IgnoreCase), @"(?m)<style[^>]*>(\w|\W)*?</style[^>]*>", "", RegexOptions.Multiline | RegexOptions.IgnoreCase), @"(?m)<select[^>]*>(\w|\W)*?</select[^>]*>", "", RegexOptions.Multiline | RegexOptions.IgnoreCase), @"(?m)<a[^>]*>(\w|\W)*?</a[^>]*>", "", RegexOptions.Multiline | RegexOptions.IgnoreCase), "(<[^>]+?>)| ", "", RegexOptions.Multiline | RegexOptions.IgnoreCase), @"(\s)+", "", RegexOptions.Multiline | RegexOptions.IgnoreCase);
}
/// <summary>
/// 将HTML内容转换成纯文本形式即去除HTML格式
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static string ConvertToText(string source)
{
string result; //remove line breaks,tabs
result = source.Replace("\r", " ");
result = result.Replace("\n", " ");
result = result.Replace("\t", " ");
//remove the header
result = Regex.Replace(result, "(<head>).*(</head>)", string.Empty, RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*script([^>])*>", "<script>", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"(<script>).*(</script>)", string.Empty, RegexOptions.IgnoreCase);
//remove all styles
result = Regex.Replace(result, @"<( )*style([^>])*>", "<style>", RegexOptions.IgnoreCase); //clearing attributes
result = Regex.Replace(result, "(<style>).*(</style>)", string.Empty, RegexOptions.IgnoreCase);
//insert tabs in spaces of <td> tags
result = Regex.Replace(result, @"<( )*td([^>])*>", " ", RegexOptions.IgnoreCase);
//insert line breaks in places of <br> and <li> tags
result = Regex.Replace(result, @"<( )*br( )*>", "\r", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*li( )*>", "\r", RegexOptions.IgnoreCase);
//insert line paragraphs in places of <tr> and <p> tags
result = Regex.Replace(result, @"<( )*tr([^>])*>", "\r\r", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*p([^>])*>", "\r\r", RegexOptions.IgnoreCase);
//remove anything thats enclosed inside < >
result = Regex.Replace(result, @"<[^>]*>", string.Empty, RegexOptions.IgnoreCase);
//replace special characters:
result = Regex.Replace(result, @"&", "&", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @" ", " ", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<", "<", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @">", ">", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"&(.{2,6});", string.Empty, RegexOptions.IgnoreCase);
//remove extra line breaks and tabs
result = Regex.Replace(result, @" ( )+", " ");
result = Regex.Replace(result, "(\r)( )+(\r)", "\r\r");
result = Regex.Replace(result, @"(\r\r)+", "\r\n");
//remove blank
result = Regex.Replace(result, @"\s", "");
return result;
}
private static List<OpMailLog> SetData(StringBuilder strSql)
{
var headList = new List<OpMailLog>();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
OpMailLog data = new OpMailLog();
#region Set DB data to Object
data.GID = Convert.ToString(reader["GID"]);
data.BSNO = Convert.ToString(reader["BSNO"]);
data.BLTYPE = Convert.ToString(reader["BLTYPE"]);
data.RECEIVER = Convert.ToString(reader["RECEIVER"]);
data.SUBJECT = Convert.ToString(reader["SUBJECT"]);
data.DESCRIPTION = ConvertToText(Convert.ToString(reader["DESCRIPTION"]));
data.ATTACHMENT = Convert.ToString(reader["ATTACHMENT"]);
if (reader["SENDTIME"] != DBNull.Value)
data.SENDTIME = Convert.ToDateTime(reader["SENDTIME"]).ToString("yyyy-MM-dd HH:mm:ss");//截港日期
data.SENDER = Convert.ToString(reader["SENDER"]);
data.MBLNO = Convert.ToString(reader["MBLNO"]);
if (reader["ETD"] != DBNull.Value)
data.ETD = Convert.ToDateTime(reader["ETD"]).ToString("yyyy-MM-dd");//到港日期
data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]);
data.CARRIER = Convert.ToString(reader["CARRIER"]);
data.SENDUSER = Convert.ToString(reader["SENDUSER"]);
data.SENDUSERREF = Convert.ToString(reader["SENDUSERREF"]);
#endregion
headList.Add(data);
}
reader.Close();
}
return headList;
}
#endregion
#region
static public OpMailSend GetSendData(string condition)
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append("[GID],[PROJECTID],[BLTYPE],[BSNO],[MBLNO],[RECEIVER],[SUBJECT],[DESCRIPTION],[SIGNATURE],[SENDER],[SENDSERVICE],[SENDERUSERNAME],[SENDERPASSWORD],[SENDERPORT],[ATTACHMENT]");
strSql.Append(" from op_mail_send ");
if (!string.IsNullOrEmpty(condition))
{
strSql.Append(" where " + condition);
}
var list = SetSendData(strSql);
if (list.Count > 0)
return list[0];
return new OpMailSend();
}
private static List<OpMailSend> SetSendData(StringBuilder strSql)
{
var headList = new List<OpMailSend>();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
OpMailSend data = new OpMailSend();
#region Set DB data to Object
data.GID = Convert.ToString(reader["GID"]);
data.PROJECTID = Convert.ToString(reader["PROJECTID"]);
data.BSNO = Convert.ToString(reader["BSNO"]);
data.BLTYPE = Convert.ToString(reader["BLTYPE"]);
data.MBLNO = Convert.ToString(reader["MBLNO"]);
data.RECEIVER = Convert.ToString(reader["RECEIVER"]);
data.SUBJECT = Convert.ToString(reader["SUBJECT"]);
data.DESCRIPTION = Convert.ToString(reader["DESCRIPTION"]);
data.SIGNATURE = Convert.ToString(reader["SIGNATURE"]);
data.SENDER = Convert.ToString(reader["SENDER"]);
data.SENDSERVICE = Convert.ToString(reader["SENDSERVICE"]);
data.SENDERUSERNAME = Convert.ToString(reader["SENDERUSERNAME"]);
data.SENDERPASSWORD = Convert.ToString(reader["SENDERPASSWORD"]);
data.SENDERPORT = Convert.ToString(reader["SENDERPORT"]);
data.ATTACHMENT = Convert.ToString(reader["ATTACHMENT"]);
#endregion
headList.Add(data);
}
reader.Close();
}
return headList;
}
#endregion
#region 保存,删除
public static DBResult DeleteMailLog(List<OpMailLog> bodyList)
{
var result = new DBResult();
Database db = DatabaseFactory.CreateDatabase();
using (var conn = db.CreateConnection())
{
conn.Open();
var tran = conn.BeginTransaction();
try
{
var cmdInsert =
db.GetSqlStringCommand(
@"delete from op_mail_log where GID=@GID ");
if (bodyList != null)
{
foreach (var enumValue in bodyList)
{
cmdInsert.Parameters.Clear();
db.AddInParameter(cmdInsert, "@GID", DbType.Int32, enumValue.GID);
db.ExecuteNonQuery(cmdInsert, tran);
}
}
tran.Commit();
}
catch (Exception)
{
tran.Rollback();
result.Success = false;
result.Message = "删除出现错误,请重试或联系系统管理员";
return result;
}
}
result.Success = true;
result.Message = "删除成功" + result.Message;
return result;
}
#endregion
#region Rang权限范围
public static string GetRangDAStr(string tb, string userid, string username, string companyid)
{
string str = "";
var strSql = new StringBuilder();
strSql.Append("SELECT");
strSql.Append(" VISIBLERANGE,OPERATERANGE");
strSql.Append(" from VW_User_Authority");
strSql.Append(" where [NAME]='modOpMailLog' and USERID='" + userid + "' and ISDELETE=0");
string visiblerange = "4";
string operaterange = "4";
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
visiblerange = Convert.ToString(reader["VISIBLERANGE"]);
operaterange = Convert.ToString(reader["OPERATERANGE"]);
break;
}
reader.Close();
}
if (visiblerange == "4")
{
str = " t.SENDER='" + username + "'";
}
else if (visiblerange == "3")
{
str = " t.SENDER='" + username + "' ";
}
else if (visiblerange == "2")
{
var rangeDa = new RangeDA();
var deptname = rangeDa.GetDEPTNAME(userid);
str = " t.SENDER in (select showname from [user] where GID in (select USERID from user_company where COMPANYID='" + companyid + "') and GID in (select userid from user_baseinfo where DEPTNAME='" + deptname + "')) ";
}
else if (visiblerange == "1")
{
str = " t.SENDER in (select showname from [user] where GID in (select USERID from user_company where COMPANYID='" + companyid + "')) ";
}
else if (visiblerange == "0")
{
str = " 1=1 ";
}
return str;
}
#endregion
#region 参照部分
#endregion
}
}