| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Logging;
- using Hangfire;
- using System.Text;
- using System.IO;
- using System.Net;
- using System.Linq.Expressions;
- using System.Common;
- using System.IRepositories;
- using System.Model;
- using TVShoppingCallCenter_ZLJ.Models.Inputs;
- using Utility;
- using SqlSugar;
- using TVShoppingCallCenter_ZLJ.Controllers.Order;
- using Microsoft.Extensions.Configuration;
- namespace TVShoppingCallCenter_ZLJ.Controllers.hangfire
- {
- /// <summary>
- /// 任务调度Hangfire
- /// </summary>
- [Produces("application/json")]
- [Route("api/[controller]")]
- public class HangfireController : BaseController
- {
- private readonly OrderFunctionController busOrderFunctionController;
- private readonly ILogger<HangfireController> _logger;
- private readonly IBus_OrderDetailRepository bus_OrderDetailRepository;
- private readonly IBus_OrderRepository bus_OrderRepository;
- private readonly IBus_ProductRepository bus_productRepository;
- private readonly ICus_VipInfoRepository cus_vip_infoRepository;
- private readonly IBus_StockLogRepository bus_StockLogRepository;
- private readonly ISys_DictionaryValueRepository dictionaryValueRepository;
- private readonly IConfiguration config;
- public HangfireController(ISys_DictionaryValueRepository _dictionaryValueRepository, ILogger<HangfireController> logger, IBus_StockLogRepository _bus_StockLogRepository, IBus_OrderRepository _bus_OrderRepository, IBus_OrderDetailRepository _bus_OrderDetailRepository, OrderFunctionController _OrderFunctionController, IBus_ProductRepository _productRepository, ICus_VipInfoRepository _cus_vip_infoRepository, IConfiguration _configuration)
- {
- dictionaryValueRepository = _dictionaryValueRepository;
- _logger = logger;
- bus_OrderDetailRepository = _bus_OrderDetailRepository;
- bus_OrderRepository = _bus_OrderRepository;
- busOrderFunctionController = _OrderFunctionController;
- bus_productRepository = _productRepository;
- cus_vip_infoRepository = _cus_vip_infoRepository;
- bus_StockLogRepository = _bus_StockLogRepository;
- config = _configuration;
- }
- #region 四个定时基础方法
- /// <summary>
- /// 基于队列的任务处理(Fire-and-forget jobs)
- /// </summary>
- /// <param name="str"></param>
- /// <returns></returns>
- public IActionResult EnqueueAsync(string str)
- {
- var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!"));
- return Success($"基于队列的任务处理 Enqueue : jobId={jobId}");
- }
- /// <summary>
- /// 延迟任务执行(Delayed jobs)
- /// </summary>
- /// <returns></returns>
- public IActionResult Delayed()
- {
- var jobId = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"),
- TimeSpan.FromSeconds(10));
- return Success($"延迟任务执行 Delayed : jobId={jobId}");
- }
- /// <summary>
- /// 定时任务执行(Recurring jobs)
- /// </summary>
- /// <returns></returns>
- public IActionResult Recurring()
- {
- //_logger.LogError("定时任务执行 Recurring ");
- RecurringJob.AddOrUpdate(() => Console.Write("定时任务执行 Recurring "), "1/1 * * * *");
- return Success($"定时任务执行 Recurring ");
- }
- /// <summary>
- /// 延续性任务执行
- /// </summary>
- /// <param name="jobId"></param>
- /// <returns></returns>
- [Obsolete]
- public IActionResult Continuations(string jobId)
- {
- BackgroundJob.ContinueWith(jobId, () => Console.WriteLine("Continuation!"));
- return Success($"延续性任务执行 Continuation ");
- }
- #endregion
- /// <summary>
- /// 定时任务执行导出
- /// </summary>
- /// <returns></returns>
- public IActionResult RecurringToExport()
- {
- RecurringJob.AddOrUpdate(() => HttpGetExport(), Cron.Minutely);
- return Success($"定时任务执行导出 api/Values/Export/ ");
- }
- /// <summary>
- /// 执行导出
- /// </summary>
- private void HttpGetExport()
- {
- try
- {
- //_logger.LogInformation("定时任务执行【导出】【开始】 api/Values/Export/");
- //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:8082/api/Values/Export?start=2017-12-08&end=2017-12-09");
- //request.Method = "GET";
- //request.ContentType = "text/html;charset=UTF-8";
- //HttpWebResponse response = (HttpWebResponse)request.GetResponse();
- //Stream myResponseStream = response.GetResponseStream();
- //StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
- //var result = myStreamReader.ReadToEnd();
- //myStreamReader.Close();
- //myResponseStream.Close();
- //if (result != "定时导出Excel文件,并保存Excel文件信息到数据库中")
- // throw new Exception("导出错误");
- //_logger.LogInformation("定时任务执行【导出】【结束】 api/Values/Export/");
- }
- catch (Exception e)
- {
- //_logger.LogError(e, "定时任务执行【导出】【失败】 api/Values/Export/");
- }
- }
- /// <summary>
- /// 创建生日订单
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public async Task<IActionResult> AddOrder()
- {
- try
- {
- OrderInput input = new OrderInput();
- List<T_Cus_VipInfo> modelvipList = await cus_vip_infoRepository.GetListALL(q => q.F_GiftYear == (DateTime.Now.Year - 1).ToString() && q.F_Birthday > DateTime.Now.AddDays(-30) && q.F_Birthday < DateTime.Now.AddDays(2));
- List<T_Sys_DictionaryValue> dicStockList = await dictionaryValueRepository.GetListALL(q => q.F_ParentCode.ToUpper() == "STOCK");
- //遍历需要发生日礼物的人 发一个更新一个 比较安全
- if (modelvipList != null && modelvipList.Count > 0&& dicStockList !=null&& dicStockList.Count>0)
- {
- foreach (T_Cus_VipInfo modelvip in modelvipList)
- {
- //modelvipListUpdate.Add(modelvip)
- List<T_Bus_Order> OldOrderList = await bus_OrderRepository.GetListALL(q => q.F_State > 3 && (q.F_CustomerPhone == modelvip.F_Mobile || q.F_CustomerPhone == modelvip.F_Mobile1 || q.F_CustomerPhone == modelvip.F_Mobile || q.F_CustomerPhone == modelvip.F_Mobile), q => q.F_AddTime, SqlSugar.OrderByType.Desc);
- T_Bus_Order modelOrder = new T_Bus_Order();
- if (OldOrderList != null && OldOrderList.Count > 0)
- {
- modelOrder = OldOrderList[0];
- }
- else
- {
- modelOrder.F_Customer = modelvip.F_Name;
- modelOrder.F_CustomerPhone = modelvip.F_Mobile;
- modelOrder.F_Addressee = modelvip.F_Name;
- modelOrder.F_AddPhone = modelvip.F_Mobile;
- modelOrder.F_AddProvince = modelvip.F_Province;
- modelOrder.F_AddCity = modelvip.F_City;
- modelOrder.F_AddArea = modelvip.F_Area;
- modelOrder.F_AddTown = modelvip.F_Town;
- modelOrder.F_AddDes = "生日单";
- modelOrder.F_Address = modelvip.F_Address;
- modelOrder.F_PostalCode = modelvip.F_Postcode;
- modelOrder.F_Express = "中通快递";
- modelOrder.F_Belong = modelvip.F_Saleperson.ObjToInt();
- modelOrder.F_BelongName = "ID:" + modelvip.F_Saleperson;
- }
- #region 订单属性
- //必填
- modelOrder.F_ADFrom = "生日单";
- modelOrder.F_Type = "系统单";
- modelOrder.F_Id = "BJ" + modelvip.F_Saleperson + "T" + DateTimeConvert.ToTimetag(DateTime.Now);
- modelOrder.F_VipId = modelvip.F_ID;
- modelOrder.F_UseActivity = "生日单";
- //选填 快递属性
- modelOrder.F_TrackingNo = "";
- modelOrder.F_ExpressFee = 0;
- modelOrder.F_PayType = "系统免单";
- modelOrder.F_Remark = "生日单";
- modelOrder.F_RealPrice = 0.00M;
- modelOrder.F_UseScore = 0.00M;
- //选填 关联属性
- modelOrder.F_Status = 0;
- //必须属性 系统生成
- modelOrder.F_AddTime = DateTime.Now;
- modelOrder.F_AddUser = 0;
- modelOrder.F_AddUserName = "系统";
- #endregion
- #region
- //未删除的赠品
- List<T_Bus_Product> modelProductList = await bus_productRepository.GetListALL(b => b.F_ClassName == "生日赠品" && b.F_IsDelete == 1 && b.F_IsSale == 0);
- if (modelProductList == null || modelProductList.Count == 0)
- return Error("没有设置生日赠品");
- int n = 1;
- List<T_Bus_OrderDetail> modelDetailList = new List<T_Bus_OrderDetail>();
- foreach (T_Bus_Product modelProduct in modelProductList)
- {
- T_Bus_OrderDetail modelDetail = new T_Bus_OrderDetail();
- modelDetail.F_ProductName = modelProduct.F_ProductName;
- modelDetail.F_ProductId = modelProduct.F_ProductId;
- modelDetail.F_Id = Guid.NewGuid().ToString().Replace("-", "");
- modelDetail.F_OrderId = modelOrder.F_Id;
- modelDetail.F_Count = 1;
- modelDetail.F_Price = modelProduct.F_MemberPrice;
- modelDetail.F_DealPrice = 0.00M;
- modelDetail.F_Remark = "生日赠品-活动";
- modelDetail.F_Sort = n;
- modelDetail.F_AddTime = DateTime.Now;
- modelDetail.F_AddUser = 0;
- modelDetail.F_AddUserName = "系统";
- modelDetailList.Add(modelDetail);
- n++;
- }
- modelOrder.F_TotlePrice = 0.00M;
- modelOrder.F_ActivityMoney = 0.00M;
- modelOrder.F_ShouldPrice = 0.00M;
- modelOrder.F_PayState = 1;
- modelOrder.F_Score = 0.00M;
- #endregion
- #region 直接提交 锁库存log 锁积分log
-
-
- modelOrder.F_SubmitTime = DateTime.Now;
- modelOrder.F_State = 1;
- modelOrder.F_Stock = dicStockList[0].F_Value;
- modelOrder.F_FlowNum = Guid.NewGuid().ToString().Replace("-", "");
- string strStock = await busOrderFunctionController.ChangeStockOne(modelOrder, 1, modelDetailList);
- if (strStock != "1")
- {
- if (dicStockList.Count > 1)
- {
- modelOrder.F_Stock = dicStockList[1].F_Value;
- modelOrder.F_FlowNum = Guid.NewGuid().ToString().Replace("-", "");
- strStock = await busOrderFunctionController.ChangeStockOne(modelOrder, 1, modelDetailList);
- if (strStock != "1")
- {
- modelOrder.F_State = 0;
- modelOrder.F_SubmitTime = null;
- }
- }
- }
- #endregion
- if (await bus_OrderRepository.AddReturnCount(modelOrder))
- {
- if (await bus_OrderDetailRepository.AddMany(modelDetailList))
- {
- continue;
- }
- else
- {
- _logger.LogError("TODO系统订单详情添加失败库存已减:"+ modelOrder.F_Id);
- break;
- }
- }
- else
- {
- _logger.LogError("TODO系统订单添加失败库存已减" + modelDetailList.ToJson());
- break;
- }
- }
- }
- else
- { }
- }
- catch (Exception ex)
- {
- return Error("==error==");
- }
- return Success("==1==");
- }
- }
- }
|