Commit 903951ed by 心随飞扬

新增安全库存设定,可根据品类、仓库动态配置,库存预测列表数据重复调整,供应链时间配置,交期、物流天数等动态配置

parent 6ffd0934
......@@ -189,11 +189,6 @@ namespace Bailun.DataCenter.Application.CostManage
StringBuilder strgroup = new StringBuilder();
if (queryParam != null)
{
if (!queryParam["platform"].IsEmpty())
{
var platform = queryParam["platform"].ToString();
strwhere.AppendFormat(" and t1.platform='{0}'", platform);
}
if (!queryParam["statisticstype"].IsEmpty())
{
statisticstype = queryParam["statisticstype"].ToString();
......@@ -228,16 +223,26 @@ namespace Bailun.DataCenter.Application.CostManage
searchField.Append(",t1.origin_order_id,t1.platform,t1.bailun_account,t1.website");
strgroup.Append(" group by t1.origin_order_id,t1.platform,t1.bailun_account,t1.website");
}
if (!queryParam["platform"].IsEmpty())
{
var platform = queryParam["platform"].ToString();
strwhere.AppendFormat(" and t1.platform='{0}'", platform);
}
if (!queryParam["sellaccout"].IsEmpty())
{
var sellaccout = queryParam["sellaccout"].ToString();
strwhere.AppendFormat(" and t1.bailun_account='{0}'", sellaccout);
if (statisticstype == "SkuReportIndex")
{
searchField.Append(",t1.bailun_account");
strgroup.Append(" ,t1.bailun_account");
}
}
if (!queryParam["website"].IsEmpty())
{
var website = queryParam["website"].ToString();
strwhere.AppendFormat(" and t1.website='{0}'", website);
if(statisticstype== "CategoryReportIndex")
if(statisticstype== "CategoryReportIndex"||statisticstype== "SkuReportIndex")
{
searchField.Append(",t1.website");
strgroup.Append(" ,t1.website");
......@@ -267,11 +272,6 @@ namespace Bailun.DataCenter.Application.CostManage
{
var sellername = queryParam["sellername"].ToString();
strwhere.AppendFormat(" and t1.seller_name='{0}'", sellername);
if(statisticstype== "SkuReportIndex")
{
searchField.Append(",t1.seller_name");
strgroup.Append(",t1.seller_name");
}
}
if (!queryParam["sku"].IsEmpty())
{
......
......@@ -85,6 +85,8 @@ namespace Bailun.DataCenter.Application.Inventory
if (!queryParam["qhorry"].IsEmpty())
{
query = query.Where(d =>d.nostock_quantity>0||d.redundancy_quantity>0);
var Idlist = query.GroupBy(d => new { d.warehouse_code, d.s_number }, (key, group) => group.Min(d=>d.Id));
query = query.Where(d => Idlist.Contains(d.Id));
}
}
return query;
......
......@@ -108,13 +108,9 @@ namespace Bailun.DataCenter.Application.Statistic
}
}
var querydata = from d in data
select new WarehouseInfo()
{
WareName = d.warehouse_name,
WareCode = d.warehouse_code
};
return querydata.Distinct().ToList();
var querydata = (from d in data
select new {d.warehouse_code,d.warehouse_name }).ToList();
return querydata.Distinct().Select(d=>new WarehouseInfo{WareCode=d.warehouse_code,WareName=d.warehouse_name }).ToList();
}
/// <summary>
/// 获取实体
......
......@@ -35,9 +35,9 @@
</common>
<appSettings>
<!--dev环境-->
<add key="connectionString" value="server=192.168.6.140;port=3306;database=bailun_datacenter;uid=root;password=123456;" />
<!--<add key="connectionString" value="server=192.168.6.140;port=3306;database=bailun_datacenter;uid=root;password=123456;" />-->
<!--生产外网测试-->
<!--<add key="connectionString" value="server=gz-cdb-hqmznu0w.sql.tencentcdb.com;port=63523;database=bailun_datacenter;uid=root;password=#7kfnymAM$Y9-Ntf;" />-->
<add key="connectionString" value="server=gz-cdb-hqmznu0w.sql.tencentcdb.com;port=63523;database=bailun_datacenter;uid=root;password=#7kfnymAM$Y9-Ntf;" />
<!--生产-->
<!--<add key="connectionString" value="server=db.blt.com;port=3306;database=bailun_datacenter;uid=root;password=#7kfnymAM$Y9-Ntf;" />-->
......
......@@ -82,6 +82,11 @@ namespace Bailun.DataCenter.Tasks.Entity.Dto
/// </summary>
public DateTime payTimeUtc { get; set; }
/// <summary>
/// 平台订单状态
/// </summary>
public string PlatOrderStatus { get; set; }
}
/// <summary>
......
......@@ -93,6 +93,11 @@ namespace Bailun.DataCenter.Tasks.Entity
///
/// </summary>
public string remark { get; set; }
/// <summary>
/// fba调拨头程费
/// </summary>
public decimal head_fee { get; set; }
#endregion Model
}
}
......@@ -128,7 +128,7 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuFbaOrder
dlog.Remark = string.Format("订单{0}产品{1}仓库编码为空", product.originOrderNo, item.skuNo);
dlog.CreateTime = DateTime.Now;
Db.Insert(dlog);
continue;
//continue;
}
string strSql = string.Format("SELECT * FROM dc_sku_order WHERE s_number='{0}' AND o_number='{1}'", item.skuNo, product.bailunOrderNo);
var skuO = SqlMapper.Query<dc_sku_order>(conn, strSql).FirstOrDefault();
......@@ -142,7 +142,7 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuFbaOrder
skuO.delivery_warehousecode = warehouse?.wareNo;// item.wareHouseNo;
skuO.delivery_warehouse_name = warehouse?.wareName;// item.wareHouseName;
skuO.state = product.bailunOrderStatus.ToInt();
skuO.shipping_status = product.bailunOrderStatus == OrderStatusEnum.Finished ? ShippingStatusEnum.TotalShipping.ToInt() : product.shippingStatus.ToInt();
skuO.shipping_status = (product.PlatOrderStatus.ToLower() != "pending" || product.PlatOrderStatus.ToLower() != "canceled"|| product.PlatOrderStatus.ToLower() != "unshipped")?2:1; //product.bailunOrderStatus == OrderStatusEnum.Finished ? ShippingStatusEnum.TotalShipping.ToInt() : product.shippingStatus.ToInt();
skuO.s_number = item.skuNo;
skuO.s_number_publish = "";
skuO.s_title = item.title ?? "";
......@@ -182,7 +182,7 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuFbaOrder
o_number_external = product.originOrderNo,
delivery_warehousecode = warehouse?.wareNo,// item.wareHouseNo,
delivery_warehouse_name = warehouse?.wareName,// item.wareHouseName,
shipping_status = product.bailunOrderStatus == OrderStatusEnum.Finished ? ShippingStatusEnum.TotalShipping.ToInt() : product.shippingStatus.ToInt(),
shipping_status = (product.PlatOrderStatus.ToLower() != "pending" || product.PlatOrderStatus.ToLower() != "canceled" || product.PlatOrderStatus.ToLower() != "unshipped") ? 2 : 1,// product.bailunOrderStatus == OrderStatusEnum.Finished ? ShippingStatusEnum.TotalShipping.ToInt() : product.shippingStatus.ToInt(),
state = product.bailunOrderStatus.ToInt(),
s_number = item.skuNo,
s_number_publish = "",
......@@ -190,7 +190,7 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuFbaOrder
totalprice = skufee,
price = item.quantityOrdered != 0 ? skufee / item.quantityOrdered : 0,
quantity = item.quantityOrdered,
shipping_quantity = (product.bailunOrderStatus == OrderStatusEnum.Finished||product.shippingStatus==ShippingStatusEnum.TotalShipping) ? item.quantityOrdered : item.quantityShipped,
shipping_quantity = (product.PlatOrderStatus.ToLower() != "pending" || product.PlatOrderStatus.ToLower() != "canceled" || product.PlatOrderStatus.ToLower() != "unshipped") ? item.quantityOrdered : item.quantityShipped, // (product.bailunOrderStatus == OrderStatusEnum.Finished||product.shippingStatus==ShippingStatusEnum.TotalShipping) ? item.quantityOrdered : item.quantityShipped,
currency = product.orderCharge.totalAmount.currencyCode ?? "",
currencyname = item.unitPrice.currencyCode ?? "",
createtime = product.purchaseTimeUtc,
......
......@@ -56,10 +56,18 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuSales
using (IDbConnection conn = new MySqlConnection(connString))
{
DateTime dtNow = DateTime.Now;
#region 环球订单数据表
string strSql = string.Format(@"SELECT s_number,delivery_warehousecode,delivery_warehouse_name,DATE_FORMAT(paytime,'%Y-%m-%d') paytime,SUM(quantity) quantity
FROM dc_sku_order
WHERE payTime>='{0}' and payTime<'{1}' and state !=3 and ifnull(delivery_warehousecode,'')!=''
GROUP BY s_number,delivery_warehousecode,DATE_FORMAT(paytime,'%Y-%m-%d')", dtNow.AddDays(-30).ToShortDateString(), dtNow.ToShortDateString());
#endregion
#region 百伦订单数据表
//string strSql = string.Format(@"select t.warehouse_code as delivery_warehousecode,t.bailun_sku as s_number,t.warehouse_name as delivery_warehouse_name,DATE_FORMAT(t.paid_time,'%Y-%m-%d') as paytime,sum(quantity_ordered) quantity from dc_bailun_sku t
// where payTime>='{0}' and payTime<'{1}' and t.bailun_order_status!='Canceled' and ifnull(delivery_warehousecode,'')!=''
// GROUP BY warehouse_code,bailun_sku,DATE_FORMAT(t.paid_time,'%Y-%m-%d')", dtNow.AddDays(-30).ToShortDateString(), dtNow.ToShortDateString());
#endregion
List<dc_sku_order> skuSOList = SqlMapper.Query<dc_sku_order>(conn, strSql).ToList();
string MaterSql = string.Format("SELECT * FROM dc_material_statistic");
......
......@@ -47,35 +47,6 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
{
SkuStatistics(skuNumber);
}
//List<System.Threading.Tasks.Task> tasklist = new List<System.Threading.Tasks.Task>();
//skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
//if (!string.IsNullOrEmpty(skuNumber))
//{
// tasklist.Add(System.Threading.Tasks.Task.Factory.StartNew(() =>
// {
// SkuStatistics(skuNumber);
// }));
//}
//skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
//if (!string.IsNullOrEmpty(skuNumber))
//{
// tasklist.Add(System.Threading.Tasks.Task.Factory.StartNew(() =>
// {
// SkuStatistics(skuNumber);
// }));
//}
//skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
//if (!string.IsNullOrEmpty(skuNumber))
//{
// tasklist.Add(System.Threading.Tasks.Task.Factory.StartNew(() =>
// {
// SkuStatistics(skuNumber);
// }));
//}
//if (tasklist.Count > 0)
//{
// System.Threading.Tasks.Task.WaitAll(tasklist.ToArray());
//}
}
while (!string.IsNullOrEmpty(skuNumber));
log.InfoFormat("SkuStatisticsJob says: {0} executing end at {1}", jobKey, DateTime.Now.ToString());
......@@ -95,63 +66,6 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
{
#region 按一个个sku汇总
//#region 采购sku库存汇总
////采购sku库存汇总
//string strSql = string.Format(@"SELECT s_number,warehouse_tocode,warehouse_name_to,state,SUM(quantity) quantity,
// SUM(shipped_quantity) shipped_quantity, SUM(notshipped_quantity) notshipped_quantity,
// SUM(arrived_quantity) arrived_quantity, SUM(notarrived_quantity) notarrived_quantity,
// SUM(checked_quantity) checked_quantity, SUM(checked_passed_quantity) checked_passed_quantity,
// SUM(checked_notpassed_quantity) checked_notpassed_quantity,
// SUM(testing_quantity) testing_quantity, SUM(testing_passed_quantity) testing_passed_quantity,
// SUM(testing_notpassed_quantity) testing_notpassed_quantity,
// SUM(deletion_quantity) deletion_quantity, SUM(damage_quantity) damage_quantity,
// SUM(return_quantity) return_quantity, SUM(exchange_quantity) exchange_quantity,
// SUM(storage_quantity) storage_quantity, SUM(stayallot_quantity) stayallot_quantity
// FROM dc_sku_purchase
// WHERE s_number='{0}' and state != 3
// GROUP BY s_number, warehouse_tocode, state", skunumber);
//List<dc_sku_purchase> skuPList = SqlMapper.Query<dc_sku_purchase>(conn, strSql).ToList();
//#endregion
//#region 调拨sku库存汇总
////调拨sku库存汇总
//strSql = string.Format(@"SELECT s_number,warehouse_tocode,warehouse_name_to,state,type,SUM(allot_quantity) allot_quantity,
// SUM(arrived_quantity) arrived_quantity, SUM(notarrived_quantity) notarrived_quantity,
// SUM(deletion_quantity) deletion_quantity, SUM(storage_quantity) storage_quantity
// FROM dc_sku_allot
// WHERE s_number='{0}' and state != 3
// GROUP BY s_number, warehouse_tocode, state,type", skunumber);
//List<dc_sku_allot> skuAList = SqlMapper.Query<dc_sku_allot>(conn, strSql).ToList();
//#endregion
//#region 销售订单sku库存汇总
////销售订单sku库存汇总
//strSql = string.Format(@"SELECT s_number,delivery_warehousecode,delivery_warehouse_name,state,shipping_status,SUM(quantity) quantity
// FROM dc_sku_order
// WHERE s_number='{0}' and state != 3 and ifnull(delivery_warehousecode,'')!=''
// GROUP BY s_number,delivery_warehousecode,state,shipping_status", skunumber);
//List<dc_sku_order> skuOList = SqlMapper.Query<dc_sku_order>(conn, strSql).ToList();
//#endregion
//#region 环球库存
//strSql = string.Format("SELECT * FROM dc_sku_stock WHERE s_number='{0}'", skunumber);
//List<dc_sku_stock> skuSList = SqlMapper.Query<dc_sku_stock>(conn, strSql).ToList();
//#endregion
//#region fba库存
//strSql = string.Format("SELECT * FROM dc_fba_sku_stock WHERE s_number='{0}'",skunumber);
//List<dc_fba_sku_stock> skuFbaSList = SqlMapper.Query<dc_fba_sku_stock>(conn, strSql).ToList();
//#endregion
//#region 半成品库存
//strSql = string.Format("SELECT * FROM dc_material_stock WHERE s_number='{0}'", skunumber);
//List<dc_material_stock> skuMaterialSList = SqlMapper.Query<dc_material_stock>(conn, strSql).ToList();
//#endregion
#endregion
#region 按所有数据汇总
#region 采购sku库存汇总
//采购sku库存汇总
string strSql = string.Format(@"SELECT s_number,warehouse_tocode,warehouse_name_to,state,SUM(quantity) quantity,
......@@ -165,8 +79,8 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
SUM(return_quantity) return_quantity, SUM(exchange_quantity) exchange_quantity,
SUM(storage_quantity) storage_quantity, SUM(stayallot_quantity) stayallot_quantity
FROM dc_sku_purchase
WHERE state != 3
GROUP BY s_number, warehouse_tocode, state");
WHERE s_number='{0}' and state != 3
GROUP BY s_number, warehouse_tocode, state", skunumber);
List<dc_sku_purchase> skuPList = SqlMapper.Query<dc_sku_purchase>(conn, strSql).ToList();
#endregion
......@@ -176,8 +90,8 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
SUM(arrived_quantity) arrived_quantity, SUM(notarrived_quantity) notarrived_quantity,
SUM(deletion_quantity) deletion_quantity, SUM(storage_quantity) storage_quantity
FROM dc_sku_allot
WHERE state != 3
GROUP BY s_number, warehouse_tocode, state,type");
WHERE s_number='{0}' and state != 3
GROUP BY s_number, warehouse_tocode, state,type", skunumber);
List<dc_sku_allot> skuAList = SqlMapper.Query<dc_sku_allot>(conn, strSql).ToList();
#endregion
......@@ -185,28 +99,85 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
//销售订单sku库存汇总
strSql = string.Format(@"SELECT s_number,delivery_warehousecode,delivery_warehouse_name,state,shipping_status,SUM(quantity) quantity
FROM dc_sku_order
WHERE state != 3 and ifnull(delivery_warehousecode,'')!=''
GROUP BY s_number,delivery_warehousecode,state,shipping_status");
List<dc_sku_order> skuOList = SqlMapper.Query<dc_sku_order>(conn, strSql, null, null, true, 90000, null).ToList();
WHERE s_number='{0}' and state != 3 and ifnull(delivery_warehousecode,'')!=''
GROUP BY s_number,delivery_warehousecode,state,shipping_status", skunumber);
List<dc_sku_order> skuOList = SqlMapper.Query<dc_sku_order>(conn, strSql).ToList();
#endregion
#region 环球库存
strSql = string.Format("SELECT * FROM dc_sku_stock");
strSql = string.Format("SELECT * FROM dc_sku_stock WHERE s_number='{0}'", skunumber);
List<dc_sku_stock> skuSList = SqlMapper.Query<dc_sku_stock>(conn, strSql).ToList();
#endregion
#region fba库存
strSql = string.Format("SELECT * FROM dc_fba_sku_stock");
strSql = string.Format("SELECT * FROM dc_fba_sku_stock WHERE s_number='{0}'", skunumber);
List<dc_fba_sku_stock> skuFbaSList = SqlMapper.Query<dc_fba_sku_stock>(conn, strSql).ToList();
#endregion
#region 半成品库存
strSql = string.Format("SELECT * FROM dc_material_stock");
strSql = string.Format("SELECT * FROM dc_material_stock WHERE s_number='{0}'", skunumber);
List<dc_material_stock> skuMaterialSList = SqlMapper.Query<dc_material_stock>(conn, strSql).ToList();
#endregion
#endregion
#region 按所有数据汇总
//#region 采购sku库存汇总
////采购sku库存汇总
//string strSql = string.Format(@"SELECT s_number,warehouse_tocode,warehouse_name_to,state,SUM(quantity) quantity,
// SUM(shipped_quantity) shipped_quantity, SUM(notshipped_quantity) notshipped_quantity,
// SUM(arrived_quantity) arrived_quantity, SUM(notarrived_quantity) notarrived_quantity,
// SUM(checked_quantity) checked_quantity, SUM(checked_passed_quantity) checked_passed_quantity,
// SUM(checked_notpassed_quantity) checked_notpassed_quantity,
// SUM(testing_quantity) testing_quantity, SUM(testing_passed_quantity) testing_passed_quantity,
// SUM(testing_notpassed_quantity) testing_notpassed_quantity,
// SUM(deletion_quantity) deletion_quantity, SUM(damage_quantity) damage_quantity,
// SUM(return_quantity) return_quantity, SUM(exchange_quantity) exchange_quantity,
// SUM(storage_quantity) storage_quantity, SUM(stayallot_quantity) stayallot_quantity
// FROM dc_sku_purchase
// WHERE state != 3
// GROUP BY s_number, warehouse_tocode, state");
//List<dc_sku_purchase> skuPList = SqlMapper.Query<dc_sku_purchase>(conn, strSql).ToList();
//#endregion
//#region 调拨sku库存汇总
////调拨sku库存汇总
//strSql = string.Format(@"SELECT s_number,warehouse_tocode,warehouse_name_to,state,type,SUM(allot_quantity) allot_quantity,
// SUM(arrived_quantity) arrived_quantity, SUM(notarrived_quantity) notarrived_quantity,
// SUM(deletion_quantity) deletion_quantity, SUM(storage_quantity) storage_quantity
// FROM dc_sku_allot
// WHERE state != 3
// GROUP BY s_number, warehouse_tocode, state,type");
//List<dc_sku_allot> skuAList = SqlMapper.Query<dc_sku_allot>(conn, strSql).ToList();
//#endregion
//#region 销售订单sku库存汇总
////销售订单sku库存汇总
//strSql = string.Format(@"SELECT s_number,delivery_warehousecode,delivery_warehouse_name,state,shipping_status,SUM(quantity) quantity
// FROM dc_sku_order
// WHERE state != 3 and ifnull(delivery_warehousecode,'')!=''
// GROUP BY s_number,delivery_warehousecode,state,shipping_status");
//List<dc_sku_order> skuOList = SqlMapper.Query<dc_sku_order>(conn, strSql, null, null, true, 90000, null).ToList();
//#endregion
//#region 环球库存
//strSql = string.Format("SELECT * FROM dc_sku_stock");
//List<dc_sku_stock> skuSList = SqlMapper.Query<dc_sku_stock>(conn, strSql).ToList();
//#endregion
//#region fba库存
//strSql = string.Format("SELECT * FROM dc_fba_sku_stock");
//List<dc_fba_sku_stock> skuFbaSList = SqlMapper.Query<dc_fba_sku_stock>(conn, strSql).ToList();
//#endregion
//#region 半成品库存
//strSql = string.Format("SELECT * FROM dc_material_stock");
//List<dc_material_stock> skuMaterialSList = SqlMapper.Query<dc_material_stock>(conn, strSql).ToList();
//#endregion
#endregion
var wareSql = string.Format("select * from dc_warehouse_info");
List<dc_warehouse_info> WareList = SqlMapper.Query<dc_warehouse_info>(conn, wareSql).ToList();
......@@ -581,37 +552,39 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
#endregion
#region 整表统计
List<string> skulist = new List<string>();
List<ResultAllProductInfo> skuinfolist = new List<ResultAllProductInfo>();
if (dsaList.Count > 0 || dssList.Count > 0)
{
skulist.AddRange(dsaList.Select(d => d.s_number));
}
if (skulist.Count > 1000)
{
int count = Math.Ceiling(skulist.Count / 1000.0).ToInt();
for (int i = 0; i < count; i++)
{
var postDataStr = "{\"resultType\":1,\"skus\":\"" + string.Join(",", skulist.Skip(i * 1000).Take(1000)) + "\"}";
skuinfolist.AddRange(CommonApi.GetBaseInfo<ResultAllProductInfo>(postDataStr, "BaiLunSku", "get.product.all"));
}
}
else
{
var postDataStr = "{\"resultType\":1,\"skus\":\"" + skunumber + "\"}";
ResultAllProductInfo skuinfo = CommonApi.GetBaseInfo<ResultAllProductInfo>(postDataStr, "BaiLunSku", "get.product.all").FirstOrDefault();
}
//List<string> skulist = new List<string>();
//List<ResultAllProductInfo> skuinfolist = new List<ResultAllProductInfo>();
//if (dsaList.Count > 0 || dssList.Count > 0)
//{
// skulist.AddRange(dsaList.Select(d => d.s_number));
//}
//if (skulist.Count > 1000)
//{
// int count = Math.Ceiling(skulist.Count / 1000.0).ToInt();
// for (int i = 0; i < count; i++)
// {
// var postDataStr = "{\"resultType\":1,\"skus\":\"" + string.Join(",", skulist.Skip(i * 1000).Take(1000)) + "\"}";
// skuinfolist.AddRange(CommonApi.GetBaseInfo<ResultAllProductInfo>(postDataStr, "BaiLunSku", "get.product.all"));
// }
//}
//else
//{
// var postDataStr = "{\"resultType\":1,\"skus\":\"" + skunumber + "\"}";
// ResultAllProductInfo skuinfo = CommonApi.GetBaseInfo<ResultAllProductInfo>(postDataStr, "BaiLunSku", "get.product.all").FirstOrDefault();
//}
#endregion
//var postDataStr = "{\"resultType\":1,\"skus\":\"" + skunumber + "\"}";
//ResultAllProductInfo skuinfo = CommonApi.GetBaseInfo<ResultAllProductInfo>(postDataStr, "BaiLunSku", "get.product.all").FirstOrDefault();
var postDataStr = "{\"resultType\":1,\"skus\":\"" + skunumber + "\"}";
ResultAllProductInfo skuinfo = CommonApi.GetBaseInfo<ResultAllProductInfo>(postDataStr, "BaiLunSku", "get.product.all").FirstOrDefault();
#region dc_sku_active最新信息新增修改
if (dsaList.Count > 0)
{
foreach (var item in dsaList)
{
ResultAllProductInfo skuinfo = skuinfolist.FirstOrDefault(d => d.sku == item.s_number);
try
{
//ResultAllProductInfo skuinfo = skuinfolist.FirstOrDefault(d => d.sku == item.s_number);
if (skuinfo == null)
{
skuinfo = new ResultAllProductInfo();
......@@ -623,7 +596,7 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
dsaR.purchase_transit_quantity = item.purchase_transit_quantity;
dsaR.allot_transit_quantity = item.allot_transit_quantity;
dsaR.plan_shipped = item.plan_shipped;
dsaR.out_stock = item.stock_quantity - item.plan_shipped < 0 ? Math.Abs(item.stock_quantity - item.plan_shipped) : 0;
dsaR.out_stock = item.stock_quantity + item.purchase_transit_quantity + item.allot_transit_quantity - item.plan_shipped < 0 ? Math.Abs(item.stock_quantity + item.purchase_transit_quantity + item.allot_transit_quantity - item.plan_shipped) : 0;
dsaR.stock_quantity = item.stock_quantity;
dsaR.buyprice = skuinfo.price > 0m ? skuinfo.price : 0m;
......@@ -654,6 +627,7 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
}
else
{
item.out_stock = item.stock_quantity + item.purchase_transit_quantity + item.allot_transit_quantity - item.plan_shipped < 0 ? Math.Abs(item.stock_quantity + item.purchase_transit_quantity + item.allot_transit_quantity - item.plan_shipped) : 0;
item.buyprice = skuinfo.price > 0m ? skuinfo.price : 0m;
item.purchase_transit_money = item.purchase_transit_quantity * item.buyprice;
item.allot_transit_money = item.allot_transit_quantity * item.buyprice;
......@@ -673,6 +647,12 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
Db.Insert(item);
}
}
catch (Exception ex)
{
RedisOprate.Set_Add("SkuSet", item.s_number);
log.ErrorFormat("计算sku【{0}】时错误,错误原因:" + ex.Message, skunumber);
}
}
}
#endregion
......@@ -681,7 +661,9 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
{
foreach (var item in dssList)
{
ResultAllProductInfo skuinfo = skuinfolist.FirstOrDefault(d => d.sku == item.s_number);
try
{
//ResultAllProductInfo skuinfo = skuinfolist.FirstOrDefault(d => d.sku == item.s_number);
if (skuinfo == null)
{
skuinfo = new ResultAllProductInfo();
......@@ -719,7 +701,7 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
dssR.allot_library_totalquantity = item.allot_library_totalquantity;
dssR.storage_totalquantity = item.storage_totalquantity;
dssR.plan_shipped = item.plan_shipped;
dssR.out_stock = item.stock_quantity - item.plan_shipped < 0 ? Math.Abs(item.stock_quantity - item.plan_shipped) : 0;
dssR.out_stock = item.stock_quantity + item.purchase_transit_quantity + item.allot_transit_quantity - item.plan_shipped < 0 ? Math.Abs(item.stock_quantity + item.purchase_transit_quantity + item.allot_transit_quantity - item.plan_shipped) : 0;
//dssR.out_stock = item.total_stock_quantity - item.plan_shipped < 0 ? Math.Abs(item.total_stock_quantity - item.plan_shipped) : 0;
dssR.stock_quantity = item.stock_quantity;
dssR.allot_transit_quantity = item.allot_transit_quantity;
......@@ -754,15 +736,15 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
{
dssR.s_title_chinese = skuinfo.cTitle;
}
if (dssR.s_categoryid != skuinfo.categoryId &&skuinfo.categoryId > 0)
if (dssR.s_categoryid != skuinfo.categoryId && skuinfo.categoryId > 0)
{
dssR.s_categoryid = skuinfo.categoryId;
}
if (dssR.s_supplierid != skuinfo.deliverId && skuinfo.deliverId > 0)
{
dssR.s_categoryid = skuinfo.deliverId;
dssR.s_supplierid = skuinfo.deliverId;
}
if (dssR.s_suppliername != skuinfo.deliverName &&!string.IsNullOrEmpty(skuinfo.deliverName))
if (dssR.s_suppliername != skuinfo.deliverName && !string.IsNullOrEmpty(skuinfo.deliverName))
{
dssR.s_suppliername = skuinfo.deliverName;
}
......@@ -784,6 +766,7 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
{
buyprice = skuinfo.price;
}
item.out_stock = item.stock_quantity + item.purchase_transit_quantity + item.allot_transit_quantity - item.plan_shipped < 0 ? Math.Abs(item.stock_quantity + item.purchase_transit_quantity + item.allot_transit_quantity - item.plan_shipped) : 0;
item.purchase_transit_money = item.purchase_transit_quantity * buyprice;
item.allot_transit_money = item.allot_transit_quantity * buyprice;
item.stock_money = item.stock_quantity * buyprice;
......@@ -809,6 +792,12 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
}
#endregion
}
catch (Exception ex)
{
RedisOprate.Set_Add("SkuSet", item.s_number);
log.ErrorFormat("计算sku【{0}】,仓库编码【{1}】时错误,错误原因:" + ex.Message, skunumber,item.warehouse_code);
}
}
}
#endregion
}
......
......@@ -30,12 +30,12 @@ namespace Bailun.DataCenter.Tasks.Jobs.SkuStatistics
.StartNow()
//http://blog.csdn.net/a355586533/article/details/40348537
//http://cron.qqe2.com/
.WithSimpleSchedule(x => x
.WithIntervalInMinutes(30)//多少小时执行一次
.RepeatForever()//一直执行
)
//.WithSimpleSchedule(x => x
// .WithIntervalInMinutes(180)//多少小时执行一次
// .RepeatForever()//一直执行
// )
//.WithDescription("注释")
//.WithCronSchedule("0 0 * * * ? ")//Cron运行模式 每十秒钟运行一次
.WithCronSchedule("0 0 * * * ? ")//Cron运行模式 每十秒钟运行一次
.Build();
return trigger;
}
......
......@@ -149,47 +149,47 @@ namespace Bailun.DataCenter.Tasks
// isFirstRequest = false;
//} while (pageCurrent3 > 0);
SkuStatisticsJob ss = new SkuStatisticsJob();
ss.SkuStatistics("");
string skuNumber = string.Empty;
do
{
skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
if (!string.IsNullOrEmpty(skuNumber))
{
ss.SkuStatistics(skuNumber);
}
//List<System.Threading.Tasks.Task> tasklist = new List<System.Threading.Tasks.Task>();
//skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
//if (!string.IsNullOrEmpty(skuNumber))
//{
// tasklist.Add(System.Threading.Tasks.Task.Factory.StartNew(() =>
// {
// ss.SkuStatistics(skuNumber);
// }));
//}
//skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
//if (!string.IsNullOrEmpty(skuNumber))
//{
// tasklist.Add(System.Threading.Tasks.Task.Factory.StartNew(() =>
// {
// ss.SkuStatistics(skuNumber);
// }));
//}
//skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
//if (!string.IsNullOrEmpty(skuNumber))
//SkuStatisticsJob ss = new SkuStatisticsJob();
//ss.SkuStatistics("");
//string skuNumber = string.Empty;
//do
//{
// tasklist.Add(System.Threading.Tasks.Task.Factory.StartNew(() =>
// skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
// if (!string.IsNullOrEmpty(skuNumber))
// {
// ss.SkuStatistics(skuNumber);
// }));
//}
//if (tasklist.Count > 0)
//{
// System.Threading.Tasks.Task.WaitAll(tasklist.ToArray());
// }
// //List<System.Threading.Tasks.Task> tasklist = new List<System.Threading.Tasks.Task>();
// //skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
// //if (!string.IsNullOrEmpty(skuNumber))
// //{
// // tasklist.Add(System.Threading.Tasks.Task.Factory.StartNew(() =>
// // {
// // ss.SkuStatistics(skuNumber);
// // }));
// //}
// //skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
// //if (!string.IsNullOrEmpty(skuNumber))
// //{
// // tasklist.Add(System.Threading.Tasks.Task.Factory.StartNew(() =>
// // {
// // ss.SkuStatistics(skuNumber);
// // }));
// //}
// //skuNumber = RedisOprate.Set_Pop<string>("SkuSet");
// //if (!string.IsNullOrEmpty(skuNumber))
// //{
// // tasklist.Add(System.Threading.Tasks.Task.Factory.StartNew(() =>
// // {
// // ss.SkuStatistics(skuNumber);
// // }));
// //}
// //if (tasklist.Count > 0)
// //{
// // System.Threading.Tasks.Task.WaitAll(tasklist.ToArray());
// //}
//}
}
while (!string.IsNullOrEmpty(skuNumber));
//while (!string.IsNullOrEmpty(skuNumber));
//ss.WarehouseStatistics();
//SkuSalesJob ssa = new SkuSalesJob();
......
......@@ -13,8 +13,8 @@ namespace Bailun.DataCenter.Web
//ASP.NET Web API Route Config
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional }
);
routes.MapRoute(
......
......@@ -119,5 +119,32 @@ namespace Bailun.DataCenter.Web.Areas.BasicInfo.Controllers
var data = list.Select(d =>new { ChinaName = d.Site, EnglishName=d.SiteEn});
return ToJsonResult(data);
}
/// <summary>
/// 邮件发送接口
/// </summary>
/// <param name="server">邮件服务器地址</param>
/// <param name="port">端口号</param>
/// <param name="login">登录名</param>
/// <param name="password">密码</param>
/// <param name="from">发件箱</param>
/// <param name="to">收件箱</param>
/// <param name="subject">主题</param>
/// <param name="text">内容</param>
[ValidateInput(false)]
public string SendMail(string server,int port,string login,string password,string from,string to,string subject,string text)
{
try
{
Util.Email.CDOMail.SendMail(server, port, login, password, from, to, subject, text);
return "success";
}
catch (System.Exception ex)
{
return ex.Message;
}
}
}
}
\ No newline at end of file
......@@ -97,7 +97,6 @@
});
};
$("#sel_Account").change(function () {
debugger;
var account = $(this).attr("data-value");
if (account) {
$("#sel_Site").ComboBox({
......@@ -118,8 +117,6 @@
allowSearch: true
});
}
});
$('#sel_Account').change(function () {
BtnSearch();
});
$('#sel_Site').change(function () {
......
......@@ -8,11 +8,11 @@
<label class="lb-title">统计维度:</label>
<div id="sel_statistics_type" type="select" class="ui-select div-select" style="width: 100px;"></div>
</div>
<div class="col-xs-6 col-sm-1 div-group" style="width: 160px;" id="div_platform">
<div class="col-xs-6 col-sm-1 div-group" style="width: 200px;">
<label class="lb-title">
销售:
销售账号:
</label>
<div id="sel_seller" type="select" class="ui-select div-select" style="width: 100px;"></div>
<div id="sel_Account" type="select" class="ui-select div-select" style="width: 130px;"></div>
</div>
<div class="col-xs-6 col-sm-1 div-group" style="width: 180px;">
<label class="lb-title">
......@@ -56,11 +56,11 @@
//初始化页面
function InitialPage() {
$("#sel_seller").ComboBox({
url: "/BasicInfo/Common/GetSeller",
id: "LoginName",
description: "全部",
text: "LoginName",
$("#sel_Account").ComboBox({
url: "/BasicInfo/Common/GetPlatAccount?platfrom=amazon",
id: "Account",
description: "选择账号",
text: "Account",
height: "200px",
allowSearch: true
});
......@@ -102,8 +102,28 @@
editcolum.push("website");
BtnSearch();
});
$('#sel_seller').change(function () {
editcolum.push("seller_name");
$('#sel_Account').change(function () {
editcolum.push("bailun_account");
var account = $(this).attr("data-value");
if (account) {
$("#sel_Site").ComboBox({
url: "/BasicInfo/Common/GetSiteByAccount?platform=Amazon&account=" + account,
id: "EnglishName",
description: "全部",
text: "ChinaName",
height: "200px",
allowSearch: true
});
} else {
$("#sel_Site").ComboBox({
url: "/BasicInfo/Common/GetSiteByPlatform?platform=Amazon",
id: "EnglishName",
description: "全部",
text: "ChinaName",
height: "200px",
allowSearch: true
});
}
BtnSearch();
});
//加载表格
......@@ -118,7 +138,7 @@
}
},
{ label: '产品名称', name: 'title', index: 'title', align: 'center', sortable: true },
{ label: '销售员', name: 'seller_name', index: 'seller_name', align: 'center', sortable: true, hidden: true },
{ label: '销售账号', name: 'bailun_account', index: 'bailun_account', align: 'center', sortable: true, hidden: true },
{ label: '站点', name: 'website', index: 'website', width: 100, align: 'center', sortable: true, hidden: true },
//{label: '币种', name: 'order_currency', index: 'order_currency', width: 100, align: 'center'},
{ label: '商品收入', name: 'total_amount_rmb', index: 'total_amount_rmb', width: 100, align: 'center', sortable: true },
......@@ -218,7 +238,7 @@
website: $('#sel_Site').attr("data-value"),
starttime: $("#StartTime").val(),
endtime: $("#EndTime").val(),
sellername: $("#sel_seller").attr("data-value"),
sellaccout: $("#sel_Account").attr("data-value"),
sku:$("#txt_sku").val(),
statisticstype: "SkuReportIndex"
}
......
......@@ -231,9 +231,7 @@
if (sku) {
$("#txt_Sku").val(sku)
}
if (sku || warehousecode) {
$(".titlePanel").hide();
}
var queryJson = {
Sku: $("#txt_Sku").val(),
Warehouse: $("#Warehouse").attr("data-value"),
......@@ -241,6 +239,10 @@
warehousetype: $("#sel_warehouse_type").attr("data-value"),
qhorry:1
};
if (sku || warehousecode) {
$(".titlePanel").hide();
queryJson.qhorry = "";
}
return JSON.stringify(queryJson);
}
//新增
......
......@@ -345,7 +345,7 @@
//跳转到采购系统
var navigateToOrder = function (orderno, datasource) {
var url = 'http://tj.oa.com/OrderList/Order/OrderIndex?orderno=' + orderno;
var url = 'http://tj.bailuntec.com/OrderList/Order/OrderIndex?orderno=' + orderno;
if (datasource.toLowerCase() == "fba") {
url = "";
}
......
......@@ -158,7 +158,7 @@
{ label: '英文标题', name: 's_title', index: 's_title',align: 'left', sortable: false },
{ label: '中文标题', name: 's_title_chinese', index: 's_title_chinese', align: 'left', sortable: false },
{ label: '库存总数量', name: 'stock_quantity', index: 'stock_quantity', align: 'center', sortable: true },
{ label: '库存总金额', name: 'stock_money', index: 'stock_quantity', align: 'center', sortable: true },
{ label: '库存总金额', name: 'stock_money', index: 'stock_money', align: 'center', sortable: true },
{
label: '采购在途数量', name: 'purchase_transit_quantity', index: 'purchase_transit_quantity', align: 'center', sortable: true,
formatter: function (cellvalue, options, rowObject) {
......@@ -287,7 +287,7 @@
rowList: [30, 50, 100],
pager: "#gridPager",
sortname: 'Id',
sortorder: 'desc',
sortorder: 'asc',
rownumbers: true,
gridview: true,
viewrecords: true,
......
......@@ -121,6 +121,15 @@
<HintPath>..\packages\Hangfire.SqlServer.1.6.14\lib\net45\Hangfire.SqlServer.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Interop.ADODB">
<HintPath>..\dll\Interop.ADODB.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Interop.CDO, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<EmbedInteropTypes>False</EmbedInteropTypes>
<HintPath>..\dll\Interop.CDO.dll</HintPath>
</Reference>
<Reference Include="JetBrains.Annotations, Version=11.0.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL">
<HintPath>..\packages\JetBrains.Annotations.11.0.0\lib\net20\JetBrains.Annotations.dll</HintPath>
<Private>True</Private>
......
......@@ -10,9 +10,9 @@
</configSections>
<connectionStrings>
<!--Dev-->
<add name="Default" connectionString="server=192.168.6.140;port=3306;database=bailun_datacenter;uid=root;password=123456;" providerName="MySql.Data.MySqlClient" />
<!--<add name="Default" connectionString="server=192.168.6.140;port=3306;database=bailun_datacenter;uid=root;password=123456;" providerName="MySql.Data.MySqlClient" />-->
<!--生产外网测试-->
<!--<add name="Default" connectionString="server=gz-cdb-hqmznu0w.sql.tencentcdb.com;port=63523;database=bailun_datacenter;uid=root;password=#7kfnymAM$Y9-Ntf;" providerName="MySql.Data.MySqlClient" />-->
<add name="Default" connectionString="server=gz-cdb-hqmznu0w.sql.tencentcdb.com;port=63523;database=bailun_datacenter;uid=root;password=#7kfnymAM$Y9-Ntf;" providerName="MySql.Data.MySqlClient" />
<!--生产-->
<!--<add name="Default" connectionString="server=db.blt.com;port=3306;database=bailun_datacenter;uid=root;password=#7kfnymAM$Y9-Ntf;" providerName="MySql.Data.MySqlClient"/>-->
</connectionStrings>
......@@ -88,7 +88,7 @@
</assemblies>
</compilation>
<httpRuntime targetFramework="4.6" />
<customErrors mode="RemoteOnly" />
<customErrors mode="Off" />
<!--<authentication mode="None" />
<compilation debug="true" targetFramework="4.5.2" >
<assemblies>
......
using Bailun.DataCenter.Application.Common.Dto;
using Bailun.DataCenter.Application.Statistic;
using Bailun.Util;
using Bailun.Util.Email;
using Bailun.Util.WebControl;
using System;
using System.Linq;
......@@ -9,10 +10,14 @@ using System.Web.Http;
namespace BaiLun.DataCenter.WebApi.Api
{
public class SkuSotckServiceController: BaseApiController
public class SkuSotckServiceController : BaseApiController
{
public ISkuActiveAppService _skuActiveAppService { get; set; }
/// <summary>
/// 推送给采购系统库存数据
/// </summary>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
public Task<BaseResponseResult<decimal>> GetSkuStock()
{
......@@ -34,7 +39,7 @@ namespace BaiLun.DataCenter.WebApi.Api
{
br.code = 500;
br.message = "失败:" + ex.Message;
br.data =0;
br.data = 0;
//br.totalcount = 0;
//br.pagesize = jsondata.page_size;
//br.currentpage = jsondata.page_current;
......
......@@ -47,10 +47,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bailun.DataCenter.Common", "Bailun.DataCenter.Common\Bailun.DataCenter.Common.csproj", "{DA8B703D-AF78-4778-A236-1D75786803B4}"
EndProject
Global
GlobalSection(SubversionScc) = preSolution
Svn-Managed = True
Manager = AnkhSVN - Subversion Support for Visual Studio
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
......
......@@ -233,8 +233,9 @@ namespace Bailun.Util.Extension.EntityFramework
/// <returns></returns>
public T SingleBySql<T>(string sql, MySqlParameter[] para)
{
var list = para != null ? Context.Database.SqlQuery<T>(sql, para).ToList() : Context.Database.SqlQuery<T>(sql).ToList();
return list.Count <= 0 ? default(T) : list[0];
var list =new List<T>();
list = para != null ? Context.Database.SqlQuery<T>(sql, para).ToList() : Context.Database.SqlQuery<T>(sql).ToList();
return list==null||list.Count <= 0 ? default(T): list[0];
}
public List<TResult> FindList<TResult>(Expression<Func<TEntity, bool>> condition = null)
......
......@@ -35,6 +35,14 @@
<HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Interop.ADODB">
<HintPath>..\dll\Interop.ADODB.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Interop.CDO">
<HintPath>..\dll\Interop.CDO.dll</HintPath>
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.Owin, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.3.1.0\lib\net45\Microsoft.Owin.dll</HintPath>
<Private>True</Private>
......@@ -91,7 +99,9 @@
<Compile Include="CommonHelper.cs" />
<Compile Include="DataHelper.cs" />
<Compile Include="DynamicLambda.cs" />
<Compile Include="Email\CDOMail.cs" />
<Compile Include="Email\EmailManager.cs" />
<Compile Include="Email\IMAP.cs" />
<Compile Include="Extension\EnumExtensions.cs" />
<Compile Include="Extension\ListExtension.cs" />
<Compile Include="Extension\ObjectExtension.cs" />
......
using CDO;
namespace Bailun.Util.Email
{
public class CDOMail
{
/// <summary>
/// 发送一封邮件
/// </summary>
/// <param name="server">邮箱服务器</param>
/// <param name="login">登录名</param>
/// <param name="password">密码</param>
/// <param name="from">发送人</param>
/// <param name="to">接收人</param>
/// <param name="subject">主题</param>
/// <param name="text">内容</param>
/// <returns></returns>
public static void SendMail(string server, int port, string login, string password, string from, string to, string subject, string text)
{
try
{
//if(server.Contains("163") && attachments!=null && attachments.Length>=1)throw new Exception("无法使用163邮箱发送附件");
if (port != 465)
{
IMAP.SendMail(server,port,login,password,from,to,subject,text);
return;
}
CDO.Message oMsg = new CDO.Message();
Configuration conf = new ConfigurationClass();
conf.Fields[CdoConfiguration.cdoSendUsingMethod].Value = CdoSendUsing.cdoSendUsingPort;
conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value = CdoProtocolsAuthentication.cdoBasic;
conf.Fields[CdoConfiguration.cdoSMTPUseSSL].Value = true;
conf.Fields[CdoConfiguration.cdoSMTPServer].Value = server;//必填,而且要真实可用
conf.Fields[CdoConfiguration.cdoSMTPServerPort].Value = port;//465特有
conf.Fields[CdoConfiguration.cdoSendEmailAddress].Value = "<" + login + ">";
conf.Fields[CdoConfiguration.cdoSendUserName].Value = login;//真实的邮件地址
conf.Fields[CdoConfiguration.cdoSendPassword].Value = password; //为邮箱密码,必须真实
conf.Fields.Update();
oMsg.BodyPart.Charset = "UTF-8";
oMsg.Configuration = conf;
oMsg.TextBody = text;
oMsg.Subject = subject;
oMsg.From = from;
oMsg.To = to;
oMsg.Send();
}
catch (System.Net.Mail.SmtpException ex)
{
throw ex;
}
}
}
}

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Security.Authentication;
using System.Text;
using System.Threading.Tasks;
namespace Bailun.Util.Email
{
public class IMAP
{
/// <summary>
/// 发送一封邮件
/// </summary>
/// <param name="server">邮箱服务器</param>
/// <param name="login">登录名</param>
/// <param name="password">密码</param>
/// <param name="from">发送人</param>
/// <param name="to">接收人</param>
/// <param name="subject">主题</param>
/// <param name="text">内容</param>
/// <returns></returns>
public static System.Net.Mail.MailMessage SendMail(string server, int port, string login, string password, string from, string to, string subject, string text)
{
try
{
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
mail.From = new System.Net.Mail.MailAddress(from);
mail.To.Add(new System.Net.Mail.MailAddress(to));
mail.Subject = subject;
mail.Body = text;
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
client.Host = server;
client.Port = port;
client.EnableSsl = true;
client.Credentials = new NetworkCredential(login, password);
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
client.Send(mail);
return mail;
}
catch (Exception e)
{
throw new Exception("Mail.Send: " + e.Message);
}
}
private static string DateToString(DateTime date)
{
return date.ToString("dd-MMM-yyyy", DateTimeFormatInfo.InvariantInfo);
}
/// <summary>
/// 通过邮箱类型获取邮箱收收服务器
/// </summary>
/// <param name="mailboxType"></param>
/// <returns></returns>
public string GetImapServer(string mailboxType)
{
if (string.IsNullOrWhiteSpace(mailboxType)) return "";
switch (mailboxType.ToLower())
{
case "qq": return "imap.qq.com";
case "zoho": return "imap.zoho.com.cn";
case "hotmail": return "imap-mail.outlook.com";
case "outlook": return "imap-mail.outlook.com";
case "_163": return "imap.163.com";
case "sina": return "imap.sina.com";
default: return "";
}
}
/// <summary>
/// 通过邮箱类型获取邮箱收收服务器
/// </summary>
/// <param name="mailboxType"></param>
/// <returns></returns>
public static string GetSmtpServer(string mailboxType)
{
if (string.IsNullOrWhiteSpace(mailboxType)) return "";
switch (mailboxType.ToLower())
{
case "qq": return "smtp.qq.com";
case "zoho": return "smtp.zoho.com.cn";
case "hotmail": return "smtp-mail.outlook.com";
case "gmail": return "smtp.gmail.com";
case "aol": return "smtp.aol.com";
case "outlook": return "smtp-mail.outlook.com";
case "yahoo": return "smtp.mail.yahoo.com";
case "_163": return "smtp.163.com";
case "sina": return "smtp.sina.com";
case "qyqq":return "smtp.exmail.qq.com";
default: return "";
}
}
/// <summary>
/// 通过邮箱类型获取邮箱收件服务器端口
/// </summary>
/// <param name="mailboxType"></param>
/// <returns></returns>
public int GetImapPort(string mailboxType)
{
if (string.IsNullOrWhiteSpace(mailboxType)) return 0;
switch (mailboxType.ToLower())
{
case "qq": return 993;
case "zoho": return 993;
case "hotmail": return 993;
case "gmail": return 995;
case "outlook": return 993;
case "_163": return 993;
case "sina": return 993;
default: return 0;
}
}
/// <summary>
/// 通过邮箱类型获取邮箱收件服务器端口
/// </summary>
/// <param name="mailboxType"></param>
/// <returns></returns>
public static int GetSmtpPort(string mailboxType)
{
if (string.IsNullOrWhiteSpace(mailboxType)) return 0;
switch (mailboxType.ToLower())
{
case "qq": return 465;
case "zoho": return 465;
case "hotmail": return 587;
case "outlook": return 587;
case "gmail": return 465;
case "aol": return 465;
case "yahoo": return 465;
case "_163": return 465;
case "sina": return 465;
case "qyqq": return 465;
default: return 0;
}
}
}
public enum MailboxType
{
qq = 0,
zoho = 1,
hotmail = 2,
outlook = 4,
_163 = 5,
aol = 6,
sina = 7,
qyqq = 8
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment