lvzb
4 years ago
9 changed files with 271 additions and 6 deletions
@ -0,0 +1,18 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- |
|||
此文件由 Web 项目的发布/打包过程使用。可以通过编辑此 MSBuild 文件 |
|||
自定义此过程的行为。为了解与此相关的更多内容,请访问 https://go.microsoft.com/fwlink/?LinkID=208121。 |
|||
--> |
|||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|||
<PropertyGroup> |
|||
<WebPublishMethod>FileSystem</WebPublishMethod> |
|||
<PublishProvider>FileSystem</PublishProvider> |
|||
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> |
|||
<LastUsedPlatform>Any CPU</LastUsedPlatform> |
|||
<SiteUrlToLaunchAfterPublish /> |
|||
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> |
|||
<ExcludeApp_Data>False</ExcludeApp_Data> |
|||
<publishUrl>D:\work\JZJHPublish</publishUrl> |
|||
<DeleteExistingFiles>False</DeleteExistingFiles> |
|||
</PropertyGroup> |
|||
</Project> |
@ -0,0 +1,179 @@ |
|||
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.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 aaa = ToDataTable(stocklist); |
|||
var bb = GetHtmlString(aaa); |
|||
MyWebSmtpMail webmail = new MyWebSmtpMail(); |
|||
webmail.Send(mails, bb, "库存"); |
|||
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 = " ";//如果是NULL则在HTML里面使用一个空格替换之
|
|||
} |
|||
if (obj.ToString() == "") |
|||
{ |
|||
obj = " "; |
|||
} |
|||
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(); |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue