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.

218 lines
8.8 KiB

using ChangKeTec.Wms.Models.Wms;
using CK.SCP.Common;
using CK.SCP.Models;
using CK.SCP.Models.AppBoxEntity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace CK.SCP.UniApi.Controller
{
public static class MailController
{
public class MailVend
{
public string Email { get; set; }
public string VendId { get; set; }
}
public static void GetNewCtrlList()
{
AppBoxContext idb = EntitiesFactory.CreateAppBoxInstance();
WmsEntities wmsdb = EntitiesFactory.CreateWmsInstance();
StringBuilder _buffer = new StringBuilder();
_buffer.Append("SELECT b.Email ,a.VenderId as VendId ");
_buffer.Append(" FROM VenderUsers AS a INNER JOIN ");
_buffer.Append(" Users AS b ON a.UserId = b.ID INNER JOIN ");
_buffer.Append(" FactoryUsers AS c ON a.UserId = c.UserID INNER JOIN ");
_buffer.Append(" TA_FACTORY AS d ON c.FACTORY_ID = d.ID INNER JOIN ");
_buffer.Append(" Users AS f ON c.UserID = f.ID INNER JOIN ");
_buffer.Append(" RoleUsers AS g ON a.UserId = g.UserID INNER JOIN ");
_buffer.Append(" Roles AS h ON g.RoleID = h.ID ");
_buffer.AppendFormat(" WHERE(h.Name = '供应商' and b.Enabled=1) ");
var _userList = idb.Database.SqlQuery<MailVend>(_buffer.ToString()).ToList();
var grouplist = _userList.GroupBy(r => r.VendId);
if (_userList != null && _userList.Count > 0)
{
foreach (var itm in grouplist)
{
var maillist = itm.Select(r => r.Email);
string mails = "";
foreach (var mail in maillist)
{
mails += mail + ",";
}
if (mails != "")
{
mails = mails.Substring(0, mails.Length - 1);
}
var stocklist = wmsdb.VIEW_STOCK_VEND.Where(r => r.VendId == itm.Key).ToList();
if (stocklist.Count() == 0)
{
continue;
}
var dt_stocklist = ToDataTable(stocklist);
var html_stocklist = GetHtmlString(dt_stocklist);
MyWebSmtpMail webmail = new MyWebSmtpMail();
webmail.Send(mails, html_stocklist, "库存");
Console.WriteLine($"发送邮件:供应商编码为{ itm.Key}");
}
}
}
#region 将list转换为datatable
/// <summary>
/// 将list转换为datatable
/// </summary>
public static DataTable ToDataTable<T>(List<T> items)
{
var tb = new DataTable(typeof(T).Name);
PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in props)
{
Type t = GetCoreType(prop.PropertyType);
tb.Columns.Add(prop.Name, t);
}
foreach (T item in items)
{
var values = new object[props.Length];
for (int i = 0; i < props.Length; i++)
{
values[i] = props[i].GetValue(item, null);
}
tb.Rows.Add(values);
}
return tb;
}
/// <summary>
/// Determine of specified type is nullable
/// </summary>
public static bool IsNullable(Type t)
{
return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));
}
/// <summary>
/// Return underlying type if type is Nullable otherwise return the type
/// </summary>
public static Type GetCoreType(Type t)
{
if (t != null && IsNullable(t))
{
if (!t.IsValueType)
{
return t;
}
else
{
return Nullable.GetUnderlyingType(t);
}
}
else
{
return t;
}
}
#endregion
public static string GetHtmlString(DataTable dt)
{
StringBuilder sb = new StringBuilder();
sb.Append("<html><head>");
sb.Append("<title>Excel转换为Table</title>");
sb.Append("<meta http-equiv='content-type' content='text/html; charset=GB2312'> ");
sb.Append("<style type=text/css>");
sb.Append("td{font-size: 9pt;border:solid 1 #000000;}");
sb.Append("table{padding:3 0 3 0;border:solid 1 #000000;margin:0 0 0 0;BORDER-COLLAPSE: collapse;}");
sb.Append("</style>");
sb.Append("</head>");
sb.Append("<body>");
sb.Append("<table cellSpacing='0' cellPadding='0' width ='100%' border='1'>");
sb.Append("<tr valign='middle'>");
sb.Append("<td><b></b></td>");
foreach (DataColumn column in dt.Columns)
{
sb.Append("<td><b><span>" + column.ColumnName + "</span></b></td>");
}
sb.Append("</tr>");
int iColsCount = dt.Columns.Count;
int rowsCount = dt.Rows.Count - 1;
for (int j = 0; j <= rowsCount; j++)
{
sb.Append("<tr>");
sb.Append("<td>" + ((int)(j + 1)).ToString() + "</td>");
for (int k = 0; k <= iColsCount - 1; k++)
{
sb.Append("<td>");
object obj = dt.Rows[j][k];
if (obj == DBNull.Value)
{
obj = "&nbsp;";//如果是NULL则在HTML里面使用一个空格替换之
}
if (obj.ToString() == "")
{
obj = "&nbsp;";
}
string strCellContent = obj.ToString().Trim();
sb.Append("<span>" + strCellContent + "</span>");
sb.Append("</td>");
}
sb.Append("</tr>");
}
sb.Append("</table>");
//点击单元格 输出 行和列
//sb.Append("<script src='https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js'></script>");
//sb.Append("<script type='text/javascript'>");
//sb.Append("$('table tbody').on('click', 'td', function (e) {");
//sb.Append("var row = $(this).parent().prevAll().length-1 ;");
//sb.Append("var column = $(this).prevAll().length-1 ;");
//sb.Append("var str = 'dt.Rows[' + row + '][' + column + '].ToString()';");
//sb.Append("console.log(str);alert(str);");
//sb.Append("});");
//sb.Append("</script>");
sb.Append("</body></html>");
return sb.ToString();
}
/// <summary>
/// 发送材料订单邮件
/// </summary>
public static void SendOrderMail()
{
AppBoxContext DB = EntitiesFactory.CreateAppBoxInstance();
ScpEntities SDB = EntitiesFactory.CreateScpInstance();
var emailList = SDB.TS_Email.Where(q => q.EmailSendState == 0).ToList();
try
{
foreach (var item in emailList)
{
MyWebSmtpMail webmail = new MyWebSmtpMail();
webmail.SendOrdersEmail(item.EmailAddress, item.EmailString, "材料订单提醒");
Console.WriteLine($"发送邮件:供应商编码为{ item.EmailToUser}");
}
emailList.ForEach(q =>
{
q.EmailSendState = 1;
});
SDB.TS_Email.AddOrUpdate(q => q.UID, emailList.ToArray());
SDB.SaveChanges();
}
catch(Exception ex)
{
emailList.ForEach(q =>
{
q.EmailSendState = -1;
q.EmailSendFailReason = ex.Message;
});
Console.WriteLine(ex.Message);
SDB.TS_Email.AddOrUpdate(q => q.UID, emailList.ToArray());
SDB.SaveChanges();
}
}
}
}