Commit 8a54e55d authored by liudong1993's avatar liudong1993

自动收货

parent cefd9bc9
...@@ -904,6 +904,19 @@ GROUP BY od.GoodsId,o.OrderId ...@@ -904,6 +904,19 @@ GROUP BY od.GoodsId,o.OrderId
string sql = $@"SELECT OrderId,UserId,OrderNo,OrderSource,CouponsIds FROM rb_goods_order where TenantId ={t} and MallBaseId ={m} and `Status`=0 and OrderStatus =1 and DATE_ADD(CreateDate,INTERVAL {cancelTime} MINUTE) < '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}'"; string sql = $@"SELECT OrderId,UserId,OrderNo,OrderSource,CouponsIds FROM rb_goods_order where TenantId ={t} and MallBaseId ={m} and `Status`=0 and OrderStatus =1 and DATE_ADD(CreateDate,INTERVAL {cancelTime} MINUTE) < '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}'";
return Get<RB_Goods_Order_Extend>(sql).ToList(); return Get<RB_Goods_Order_Extend>(sql).ToList();
} }
/// <summary>
/// 获取可自动收货的订单列表
/// </summary>
/// <param name="day"></param>
/// <param name="t"></param>
/// <param name="m"></param>
/// <returns></returns>
public List<RB_Goods_Order_Extend> GetCanReceivingOrderList(int day, int t, int m)
{
string sql = $@"SELECT OrderId,UserId,OrderNo,OrderSource,CouponsIds FROM rb_goods_order where TenantId ={t} and MallBaseId ={m} and `Status`=0 and OrderStatus =3 and DATE_ADD(DeliveryTime,INTERVAL {day} DAY) < '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}'";
return Get<RB_Goods_Order_Extend>(sql).ToList();
}
#endregion #endregion
} }
} }
...@@ -43,5 +43,24 @@ namespace Mall.WindowsService.Helper ...@@ -43,5 +43,24 @@ namespace Mall.WindowsService.Helper
Interlocked.Exchange(ref inTimer, 0); Interlocked.Exchange(ref inTimer, 0);
} }
} }
/// <summary>
/// 自动收货订单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void AutoReceivingOrder(object sender, System.Timers.ElapsedEventArgs e)
{
if (Interlocked.Exchange(ref inTimer, 1) == 0)
{
if (DateTime.Now.Hour == 1)
{
LogHelper.Write("AutoReceivingOrder=====Start");
Module.FinanceModule.AutoReceivingOrder();
LogHelper.Write("AutoReceivingOrder=====End");
Interlocked.Exchange(ref inTimer, 0);
}
}
}
} }
} }
...@@ -257,177 +257,258 @@ and DATE_FORMAT(b.CreateDate,'%y-%m-%d')<DATE_FORMAT('{endDate}','%y-%m-%d') an ...@@ -257,177 +257,258 @@ and DATE_FORMAT(b.CreateDate,'%y-%m-%d')<DATE_FORMAT('{endDate}','%y-%m-%d') an
var olist = goods_OrderRepository.GetCanCancelOrderList(item.CancelTime, item.TenantId, item.MallBaseId); var olist = goods_OrderRepository.GetCanCancelOrderList(item.CancelTime, item.TenantId, item.MallBaseId);
foreach (var qitem in olist) foreach (var qitem in olist)
{ {
Dictionary<string, object> keyValues = new Dictionary<string, object>() { }; try
keyValues.Add(nameof(RB_Goods_Order_Extend.OrderStatus), OrderStatusEnum.Cancel); {
keyValues.Add(nameof(RB_Goods_Order_Extend.CancelTime), DateTime.Now); Dictionary<string, object> keyValues = new Dictionary<string, object>() { };
keyValues.Add(nameof(RB_Goods_Order_Extend.OrderStatus), OrderStatusEnum.Cancel);
List<WhereHelper> wheres = new List<WhereHelper>() { keyValues.Add(nameof(RB_Goods_Order_Extend.CancelTime), DateTime.Now);
new WhereHelper(){
FiledName=nameof(RB_Goods_Order_Extend.OrderId), List<WhereHelper> wheres = new List<WhereHelper>() {
FiledValue=qitem.OrderId, new WhereHelper(){
OperatorEnum=OperatorEnum.Equal FiledName=nameof(RB_Goods_Order_Extend.OrderId),
}, FiledValue=qitem.OrderId,
new WhereHelper(){ OperatorEnum=OperatorEnum.Equal
FiledName=nameof(RB_Goods_Order_Extend.UserId), },
FiledValue=qitem.UserId, new WhereHelper(){
OperatorEnum=OperatorEnum.Equal FiledName=nameof(RB_Goods_Order_Extend.UserId),
}, FiledValue=qitem.UserId,
new WhereHelper(){ OperatorEnum=OperatorEnum.Equal
FiledName=nameof(RB_Goods_Order_Extend.TenantId), },
FiledValue=item.TenantId, new WhereHelper(){
OperatorEnum=OperatorEnum.Equal FiledName=nameof(RB_Goods_Order_Extend.TenantId),
}, FiledValue=item.TenantId,
new WhereHelper(){ OperatorEnum=OperatorEnum.Equal
FiledName=nameof(RB_Goods_Order_Extend.MallBaseId), },
FiledValue=item.MallBaseId, new WhereHelper(){
OperatorEnum=OperatorEnum.Equal FiledName=nameof(RB_Goods_Order_Extend.MallBaseId),
} FiledValue=item.MallBaseId,
}; OperatorEnum=OperatorEnum.Equal
bool flag = goods_OrderRepository.Update(keyValues, wheres); }
if (flag) };
{ bool flag = goods_OrderRepository.Update(keyValues, wheres);
//回滚商品库存 if (flag)
if (true)
{ {
int tenantId = item.TenantId; //回滚商品库存
int mallBaseId = item.MallBaseId; if (true)
int TotalIntegralNumber = 0;
var detailList = goodsOrderDetailRepository.GetOrderDetailList(new RB_Goods_OrderDetail_Extend() { OrderId = qitem.OrderId, TenantId = tenantId, MallBaseId = mallBaseId });
if (detailList.Any())
{ {
string goodsIds = string.Join(",", detailList.Select(x => x.GoodsId ?? 0).Distinct()); int tenantId = item.TenantId;
var goodsList = goodsRepository.GetList(new RB_Goods_Extend() { GoodsIds = goodsIds, TenantId = tenantId, MallBaseId = mallBaseId }); int mallBaseId = item.MallBaseId;
var speciPList = goods_SpecificationPriceRepository.GetList(new RB_Goods_SpecificationPrice_Extend() { GoodsIds = goodsIds, TenantId = tenantId, MallBaseId = mallBaseId }); int TotalIntegralNumber = 0;
var detailList = goodsOrderDetailRepository.GetOrderDetailList(new RB_Goods_OrderDetail_Extend() { OrderId = qitem.OrderId, TenantId = tenantId, MallBaseId = mallBaseId });
foreach (var ditem in detailList) if (detailList.Any())
{ {
var gmodel = goodsList.Where(x => x.Id == ditem.GoodsId).FirstOrDefault(); string goodsIds = string.Join(",", detailList.Select(x => x.GoodsId ?? 0).Distinct());
if (gmodel == null) var goodsList = goodsRepository.GetList(new RB_Goods_Extend() { GoodsIds = goodsIds, TenantId = tenantId, MallBaseId = mallBaseId });
{ var speciPList = goods_SpecificationPriceRepository.GetList(new RB_Goods_SpecificationPrice_Extend() { GoodsIds = goodsIds, TenantId = tenantId, MallBaseId = mallBaseId });
continue;
} foreach (var ditem in detailList)
if (string.IsNullOrEmpty(ditem.SpecificationSort))
{ {
if (gmodel.IsCustomSpecification == 1) var gmodel = goodsList.Where(x => x.Id == ditem.GoodsId).FirstOrDefault();
if (gmodel == null)
{ {
continue; continue;
} }
} if (string.IsNullOrEmpty(ditem.SpecificationSort))
else
{
if (gmodel.IsCustomSpecification != 1)
{ {
continue; if (gmodel.IsCustomSpecification == 1)
{
continue;
}
} }
var speciPModel = speciPList.Where(x => x.GoodsId == ditem.GoodsId && x.SpecificationSort == ditem.SpecificationSort).FirstOrDefault(); else
if (speciPModel == null)
{ {
continue; if (gmodel.IsCustomSpecification != 1)
{
continue;
}
var speciPModel = speciPList.Where(x => x.GoodsId == ditem.GoodsId && x.SpecificationSort == ditem.SpecificationSort).FirstOrDefault();
if (speciPModel == null)
{
continue;
}
//更新商品规格表库存 + 商品表总库存
Dictionary<string, object> keyValues2 = new Dictionary<string, object>() {
{ nameof(RB_Goods_SpecificationPrice_Extend.InventoryNum), (speciPModel.InventoryNum??0)+(ditem.Number??0)}
};
List<WhereHelper> wheres2 = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Goods_SpecificationPrice_Extend.Id),
FiledValue=speciPModel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
goods_SpecificationPriceRepository.Update(keyValues2, wheres2);
} }
//更新商品规格表库存 + 商品表总库存 //更新商品库存
Dictionary<string, object> keyValues2 = new Dictionary<string, object>() { Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Goods_SpecificationPrice_Extend.InventoryNum), (speciPModel.InventoryNum??0)+(ditem.Number??0)} { nameof(RB_Goods_Extend.InventoryNum), (gmodel.InventoryNum??0)+(ditem.Number??0)}
}; };
List<WhereHelper> wheres2 = new List<WhereHelper>() { List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){ new WhereHelper(){
FiledName=nameof(RB_Goods_SpecificationPrice_Extend.Id), FiledName=nameof(RB_Goods_Extend.Id),
FiledValue=speciPModel.Id, FiledValue=gmodel.Id,
OperatorEnum=OperatorEnum.Equal OperatorEnum=OperatorEnum.Equal
} }
}; };
goods_SpecificationPriceRepository.Update(keyValues2, wheres2); goodsRepository.Update(keyValues1, wheres1);
goods_LogRepository.Insert(new Mall.Model.Entity.Product.RB_Goods_Log()
{
Id = 0,
Type = 2,
SourceId = ditem.GoodsId,
Content = $"取消订单{qitem.OrderId},还原商品库存:" + ditem.Number,
CreateDate = DateTime.Now,
MallBaseId = mallBaseId,
TenantId = tenantId
});
if (ditem.IntegralNumber > 0)
{
TotalIntegralNumber += (ditem.IntegralNumber ?? 0);
}
} }
//更新商品表库存 }
var umodel = member_UserRepository.GetEntity(qitem.UserId);
//积分抵扣回滚
if (TotalIntegralNumber > 0)
{
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() { Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Goods_Extend.InventoryNum), (gmodel.InventoryNum??0)+(ditem.Number??0)} { nameof(RB_Member_User_Extend.Integral),umodel.Integral + TotalIntegralNumber}
}; };
List<WhereHelper> wheres1 = new List<WhereHelper>() { List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){ new WhereHelper(){
FiledName=nameof(RB_Goods_Extend.Id), FiledName=nameof(RB_Member_User_Extend.Id),
FiledValue=gmodel.Id, FiledValue=umodel.Id,
OperatorEnum=OperatorEnum.Equal OperatorEnum=OperatorEnum.Equal
} }
}; };
goodsRepository.Update(keyValues1, wheres1); bool flag2 = member_UserRepository.Update(keyValues1, wheres1);
goods_LogRepository.Insert(new Mall.Model.Entity.Product.RB_Goods_Log() if (flag2)
{ {
Id = 0, member_IntegralRepository.Insert(new Mall.Model.Entity.User.RB_Member_Integral()
Type = 2, {
SourceId = ditem.GoodsId, Id = 0,
Content = $"取消订单{qitem.OrderId},还原商品库存:" + ditem.Number, CreateDate = DateTime.Now,
CreateDate = DateTime.Now, Description = "订单取消返回积分抵扣,订单号:" + qitem.OrderNo,
MallBaseId = mallBaseId, Image = 0,
TenantId = tenantId Integral = TotalIntegralNumber,
}); MallBaseId = item.MallBaseId,
PlatformType = qitem.OrderSource,
if (ditem.IntegralNumber > 0) Remarks = "",
{ TenantId = item.TenantId,
TotalIntegralNumber += (ditem.IntegralNumber ?? 0); Type = Common.Enum.MarketingCenter.RecordTypeEnum.Income,
UserId = qitem.UserId,
OrderId = qitem.OrderId
});
} }
} }
} //优惠券回滚
var umodel = member_UserRepository.GetEntity(qitem.UserId); if (!string.IsNullOrEmpty(qitem.CouponsIds))
//积分抵扣回滚
if (TotalIntegralNumber > 0)
{
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Member_User_Extend.Integral),umodel.Integral + TotalIntegralNumber}
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Member_User_Extend.Id),
FiledValue=umodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag2 = member_UserRepository.Update(keyValues1, wheres1);
if (flag2)
{ {
member_IntegralRepository.Insert(new Mall.Model.Entity.User.RB_Member_Integral() var cList = member_CouponRepository.GetList(new RB_Member_DiscountCoupon_Extend() { UseState = 1, Ids = qitem.CouponsIds, UserId = qitem.UserId, TenantId = item.TenantId, MallBaseId = item.MallBaseId });
foreach (var citem in cList)
{ {
Id = 0, Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
CreateDate = DateTime.Now, { nameof(RB_Member_DiscountCoupon_Extend.UseState),0}
Description = "订单取消返回积分抵扣,订单号:" + qitem.OrderNo, };
Image = 0, List<WhereHelper> wheres1 = new List<WhereHelper>() {
Integral = TotalIntegralNumber, new WhereHelper(){
MallBaseId = item.MallBaseId, FiledName=nameof(RB_Member_DiscountCoupon_Extend.Id),
PlatformType = qitem.OrderSource, FiledValue=citem.Id,
Remarks = "", OperatorEnum=OperatorEnum.Equal
TenantId = item.TenantId, }
Type = Common.Enum.MarketingCenter.RecordTypeEnum.Income, };
UserId = qitem.UserId, member_CouponRepository.Update(keyValues1, wheres1);
OrderId = qitem.OrderId
});
}
}
//优惠券回滚
if (!string.IsNullOrEmpty(qitem.CouponsIds))
{
var cList = member_CouponRepository.GetList(new RB_Member_DiscountCoupon_Extend() { UseState = 1, Ids = qitem.CouponsIds, UserId = qitem.UserId, TenantId = item.TenantId, MallBaseId = item.MallBaseId });
foreach (var citem in cList)
{
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Member_DiscountCoupon_Extend.UseState),0}
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Member_DiscountCoupon_Extend.Id),
FiledValue=citem.Id,
OperatorEnum=OperatorEnum.Equal
} }
};
member_CouponRepository.Update(keyValues1, wheres1);
} }
} //余额支付回滚
//余额支付回滚
}
goods_LogRepository.Insert(new Mall.Model.Entity.Product.RB_Goods_Log()
{
Id = 0,
Type = 1,
SourceId = qitem.OrderId,
Content = "订单超时,自动取消订单",
CreateDate = DateTime.Now,
MallBaseId = item.MallBaseId,
TenantId = item.TenantId
});
} }
}
catch (Exception ex)
{
Helper.LogHelper.Write("AutoCancelOrder:" + ex.Message);
continue;
}
}
}
}
return true;
}
catch (Exception ex)
{
Helper.LogHelper.Write("AutoCancelOrder:" + ex.Message);
return false;
}
}
#endregion
#region 自动收货
/// <summary>
/// 自动收货
/// </summary>
/// <returns></returns>
public static bool AutoReceivingOrder() {
try
{
var list = mallBaseRepository.GetListRepository(new Mall.Model.Extend.BaseSetUp.RB_MallBase_Extend() { });
foreach (var item in list)
{
if (item.AutoReceiving > 0)
{
//查询未付款的所有订单
var olist = goods_OrderRepository.GetCanReceivingOrderList(item.CancelTime, item.TenantId, item.MallBaseId);
foreach (var qitem in olist)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() { };
keyValues.Add(nameof(RB_Goods_Order_Extend.OrderStatus), OrderStatusEnum.Received);
keyValues.Add(nameof(RB_Goods_Order_Extend.ReceivingTime), DateTime.Now);
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Goods_Order_Extend.OrderId),
FiledValue=qitem.OrderId,
OperatorEnum=OperatorEnum.Equal
},
new WhereHelper(){
FiledName=nameof(RB_Goods_Order_Extend.UserId),
FiledValue=qitem.UserId,
OperatorEnum=OperatorEnum.Equal
},
new WhereHelper(){
FiledName=nameof(RB_Goods_Order_Extend.TenantId),
FiledValue=item.TenantId,
OperatorEnum=OperatorEnum.Equal
},
new WhereHelper(){
FiledName=nameof(RB_Goods_Order_Extend.MallBaseId),
FiledValue=item.MallBaseId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = goods_OrderRepository.Update(keyValues, wheres);
if (flag)
{
goods_LogRepository.Insert(new Mall.Model.Entity.Product.RB_Goods_Log() goods_LogRepository.Insert(new Mall.Model.Entity.Product.RB_Goods_Log()
{ {
Id = 0, Id = 0,
Type = 1, Type = 1,
SourceId = qitem.OrderId, SourceId = qitem.OrderId,
Content = "订单超时,自动取消订单", Content = "系统自动确认收货",
CreateDate = DateTime.Now, CreateDate = DateTime.Now,
MallBaseId = item.MallBaseId, MallBaseId = item.MallBaseId,
TenantId = item.TenantId TenantId = item.TenantId
...@@ -442,7 +523,7 @@ and DATE_FORMAT(b.CreateDate,'%y-%m-%d')<DATE_FORMAT('{endDate}','%y-%m-%d') an ...@@ -442,7 +523,7 @@ and DATE_FORMAT(b.CreateDate,'%y-%m-%d')<DATE_FORMAT('{endDate}','%y-%m-%d') an
{ {
Helper.LogHelper.Write("AutoCancelOrder:" + ex.Message); Helper.LogHelper.Write("AutoCancelOrder:" + ex.Message);
return false; return false;
} }
} }
#endregion #endregion
......
...@@ -13,6 +13,7 @@ namespace Mall.WindowsService ...@@ -13,6 +13,7 @@ namespace Mall.WindowsService
{ {
System.Timers.Timer timer1; //计时器 System.Timers.Timer timer1; //计时器
private System.Timers.Timer timer2; //订单取消计时器 private System.Timers.Timer timer2; //订单取消计时器
private System.Timers.Timer timer3; //订单自动收货计时器
public WindowsService() public WindowsService()
{ {
...@@ -39,6 +40,18 @@ namespace Mall.WindowsService ...@@ -39,6 +40,18 @@ namespace Mall.WindowsService
timer2.Enabled = true; timer2.Enabled = true;
#endregion #endregion
#region 订单自动完成定时器
timer3 = new System.Timers.Timer();
timer2 = new System.Timers.Timer
{
Interval = 1000 * (60 * 60) //60分钟调用一次
};
timer3.Elapsed += new System.Timers.ElapsedEventHandler(helper.AutoReceivingOrder);
timer3.Enabled = true;
#endregion
} }
protected override void OnStop() protected override void OnStop()
...@@ -47,6 +60,7 @@ namespace Mall.WindowsService ...@@ -47,6 +60,7 @@ namespace Mall.WindowsService
Helper.LogHelper.Write("主服务停止运行......"); Helper.LogHelper.Write("主服务停止运行......");
this.timer1.Enabled = false; this.timer1.Enabled = false;
this.timer2.Enabled = false; this.timer2.Enabled = false;
this.timer3.Enabled = false;
} }
} }
} }
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