足力健后端,使用.netcore版本,合并1个项目使用

HangfireController.cs 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Microsoft.Extensions.Logging;
  7. using Hangfire;
  8. using System.Text;
  9. using System.IO;
  10. using System.Net;
  11. using System.Linq.Expressions;
  12. using System.Common;
  13. using System.IRepositories;
  14. using System.Model;
  15. using TVShoppingCallCenter_ZLJ.Models.Inputs;
  16. using Utility;
  17. using SqlSugar;
  18. using TVShoppingCallCenter_ZLJ.Controllers.Order;
  19. using Microsoft.Extensions.Configuration;
  20. namespace TVShoppingCallCenter_ZLJ.Controllers.hangfire
  21. {
  22. /// <summary>
  23. /// 任务调度Hangfire
  24. /// </summary>
  25. [Produces("application/json")]
  26. [Route("api/[controller]")]
  27. public class HangfireController : BaseController
  28. {
  29. private readonly OrderFunctionController busOrderFunctionController;
  30. private readonly ILogger<HangfireController> _logger;
  31. private readonly IBus_OrderDetailRepository bus_OrderDetailRepository;
  32. private readonly IBus_OrderRepository bus_OrderRepository;
  33. private readonly IBus_ProductRepository bus_productRepository;
  34. private readonly ICus_VipInfoRepository cus_vip_infoRepository;
  35. private readonly IBus_StockLogRepository bus_StockLogRepository;
  36. private readonly ISys_DictionaryValueRepository dictionaryValueRepository;
  37. private readonly IConfiguration config;
  38. 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)
  39. {
  40. dictionaryValueRepository = _dictionaryValueRepository;
  41. _logger = logger;
  42. bus_OrderDetailRepository = _bus_OrderDetailRepository;
  43. bus_OrderRepository = _bus_OrderRepository;
  44. busOrderFunctionController = _OrderFunctionController;
  45. bus_productRepository = _productRepository;
  46. cus_vip_infoRepository = _cus_vip_infoRepository;
  47. bus_StockLogRepository = _bus_StockLogRepository;
  48. config = _configuration;
  49. }
  50. #region 四个定时基础方法
  51. /// <summary>
  52. /// 基于队列的任务处理(Fire-and-forget jobs)
  53. /// </summary>
  54. /// <param name="str"></param>
  55. /// <returns></returns>
  56. public IActionResult EnqueueAsync(string str)
  57. {
  58. var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!"));
  59. return Success($"基于队列的任务处理 Enqueue : jobId={jobId}");
  60. }
  61. /// <summary>
  62. /// 延迟任务执行(Delayed jobs)
  63. /// </summary>
  64. /// <returns></returns>
  65. public IActionResult Delayed()
  66. {
  67. var jobId = BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"),
  68. TimeSpan.FromSeconds(10));
  69. return Success($"延迟任务执行 Delayed : jobId={jobId}");
  70. }
  71. /// <summary>
  72. /// 定时任务执行(Recurring jobs)
  73. /// </summary>
  74. /// <returns></returns>
  75. public IActionResult Recurring()
  76. {
  77. //_logger.LogError("定时任务执行 Recurring ");
  78. RecurringJob.AddOrUpdate(() => Console.Write("定时任务执行 Recurring "), "1/1 * * * *");
  79. return Success($"定时任务执行 Recurring ");
  80. }
  81. /// <summary>
  82. /// 延续性任务执行
  83. /// </summary>
  84. /// <param name="jobId"></param>
  85. /// <returns></returns>
  86. [Obsolete]
  87. public IActionResult Continuations(string jobId)
  88. {
  89. BackgroundJob.ContinueWith(jobId, () => Console.WriteLine("Continuation!"));
  90. return Success($"延续性任务执行 Continuation ");
  91. }
  92. #endregion
  93. /// <summary>
  94. /// 定时任务执行导出
  95. /// </summary>
  96. /// <returns></returns>
  97. public IActionResult RecurringToExport()
  98. {
  99. RecurringJob.AddOrUpdate(() => HttpGetExport(), Cron.Minutely);
  100. return Success($"定时任务执行导出 api/Values/Export/ ");
  101. }
  102. /// <summary>
  103. /// 执行导出
  104. /// </summary>
  105. private void HttpGetExport()
  106. {
  107. try
  108. {
  109. //_logger.LogInformation("定时任务执行【导出】【开始】 api/Values/Export/");
  110. //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:8082/api/Values/Export?start=2017-12-08&end=2017-12-09");
  111. //request.Method = "GET";
  112. //request.ContentType = "text/html;charset=UTF-8";
  113. //HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  114. //Stream myResponseStream = response.GetResponseStream();
  115. //StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
  116. //var result = myStreamReader.ReadToEnd();
  117. //myStreamReader.Close();
  118. //myResponseStream.Close();
  119. //if (result != "定时导出Excel文件,并保存Excel文件信息到数据库中")
  120. // throw new Exception("导出错误");
  121. //_logger.LogInformation("定时任务执行【导出】【结束】 api/Values/Export/");
  122. }
  123. catch (Exception e)
  124. {
  125. //_logger.LogError(e, "定时任务执行【导出】【失败】 api/Values/Export/");
  126. }
  127. }
  128. /// <summary>
  129. /// 创建生日订单
  130. /// </summary>
  131. /// <param name="input"></param>
  132. /// <returns></returns>
  133. public async Task<IActionResult> AddOrder()
  134. {
  135. try
  136. {
  137. OrderInput input = new OrderInput();
  138. 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));
  139. List<T_Sys_DictionaryValue> dicStockList = await dictionaryValueRepository.GetListALL(q => q.F_ParentCode.ToUpper() == "STOCK");
  140. //遍历需要发生日礼物的人 发一个更新一个 比较安全
  141. if (modelvipList != null && modelvipList.Count > 0&& dicStockList !=null&& dicStockList.Count>0)
  142. {
  143. foreach (T_Cus_VipInfo modelvip in modelvipList)
  144. {
  145. //modelvipListUpdate.Add(modelvip)
  146. 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);
  147. T_Bus_Order modelOrder = new T_Bus_Order();
  148. if (OldOrderList != null && OldOrderList.Count > 0)
  149. {
  150. modelOrder = OldOrderList[0];
  151. }
  152. else
  153. {
  154. modelOrder.F_Customer = modelvip.F_Name;
  155. modelOrder.F_CustomerPhone = modelvip.F_Mobile;
  156. modelOrder.F_Addressee = modelvip.F_Name;
  157. modelOrder.F_AddPhone = modelvip.F_Mobile;
  158. modelOrder.F_AddProvince = modelvip.F_Province;
  159. modelOrder.F_AddCity = modelvip.F_City;
  160. modelOrder.F_AddArea = modelvip.F_Area;
  161. modelOrder.F_AddTown = modelvip.F_Town;
  162. modelOrder.F_AddDes = "生日单";
  163. modelOrder.F_Address = modelvip.F_Address;
  164. modelOrder.F_PostalCode = modelvip.F_Postcode;
  165. modelOrder.F_Express = "中通快递";
  166. modelOrder.F_Belong = modelvip.F_Saleperson.ObjToInt();
  167. modelOrder.F_BelongName = "ID:" + modelvip.F_Saleperson;
  168. }
  169. #region 订单属性
  170. //必填
  171. modelOrder.F_ADFrom = "生日单";
  172. modelOrder.F_Type = "系统单";
  173. modelOrder.F_Id = "BJ" + modelvip.F_Saleperson + "T" + DateTimeConvert.ToTimetag(DateTime.Now);
  174. modelOrder.F_VipId = modelvip.F_ID;
  175. modelOrder.F_UseActivity = "生日单";
  176. //选填 快递属性
  177. modelOrder.F_TrackingNo = "";
  178. modelOrder.F_ExpressFee = 0;
  179. modelOrder.F_PayType = "系统免单";
  180. modelOrder.F_Remark = "生日单";
  181. modelOrder.F_RealPrice = 0.00M;
  182. modelOrder.F_UseScore = 0.00M;
  183. //选填 关联属性
  184. modelOrder.F_Status = 0;
  185. //必须属性 系统生成
  186. modelOrder.F_AddTime = DateTime.Now;
  187. modelOrder.F_AddUser = 0;
  188. modelOrder.F_AddUserName = "系统";
  189. #endregion
  190. #region
  191. //未删除的赠品
  192. List<T_Bus_Product> modelProductList = await bus_productRepository.GetListALL(b => b.F_ClassName == "生日赠品" && b.F_IsDelete == 1 && b.F_IsSale == 0);
  193. if (modelProductList == null || modelProductList.Count == 0)
  194. return Error("没有设置生日赠品");
  195. int n = 1;
  196. List<T_Bus_OrderDetail> modelDetailList = new List<T_Bus_OrderDetail>();
  197. foreach (T_Bus_Product modelProduct in modelProductList)
  198. {
  199. T_Bus_OrderDetail modelDetail = new T_Bus_OrderDetail();
  200. modelDetail.F_ProductName = modelProduct.F_ProductName;
  201. modelDetail.F_ProductId = modelProduct.F_ProductId;
  202. modelDetail.F_Id = Guid.NewGuid().ToString().Replace("-", "");
  203. modelDetail.F_OrderId = modelOrder.F_Id;
  204. modelDetail.F_Count = 1;
  205. modelDetail.F_Price = modelProduct.F_MemberPrice;
  206. modelDetail.F_DealPrice = 0.00M;
  207. modelDetail.F_Remark = "生日赠品-活动";
  208. modelDetail.F_Sort = n;
  209. modelDetail.F_AddTime = DateTime.Now;
  210. modelDetail.F_AddUser = 0;
  211. modelDetail.F_AddUserName = "系统";
  212. modelDetailList.Add(modelDetail);
  213. n++;
  214. }
  215. modelOrder.F_TotlePrice = 0.00M;
  216. modelOrder.F_ActivityMoney = 0.00M;
  217. modelOrder.F_ShouldPrice = 0.00M;
  218. modelOrder.F_PayState = 1;
  219. modelOrder.F_Score = 0.00M;
  220. #endregion
  221. #region 直接提交 锁库存log 锁积分log
  222. modelOrder.F_SubmitTime = DateTime.Now;
  223. modelOrder.F_State = 1;
  224. modelOrder.F_Stock = dicStockList[0].F_Value;
  225. modelOrder.F_FlowNum = Guid.NewGuid().ToString().Replace("-", "");
  226. string strStock = await busOrderFunctionController.ChangeStockOne(modelOrder, 1, modelDetailList);
  227. if (strStock != "1")
  228. {
  229. if (dicStockList.Count > 1)
  230. {
  231. modelOrder.F_Stock = dicStockList[1].F_Value;
  232. modelOrder.F_FlowNum = Guid.NewGuid().ToString().Replace("-", "");
  233. strStock = await busOrderFunctionController.ChangeStockOne(modelOrder, 1, modelDetailList);
  234. if (strStock != "1")
  235. {
  236. modelOrder.F_State = 0;
  237. modelOrder.F_SubmitTime = null;
  238. }
  239. }
  240. }
  241. #endregion
  242. if (await bus_OrderRepository.AddReturnCount(modelOrder))
  243. {
  244. if (await bus_OrderDetailRepository.AddMany(modelDetailList))
  245. {
  246. continue;
  247. }
  248. else
  249. {
  250. _logger.LogError("TODO系统订单详情添加失败库存已减:"+ modelOrder.F_Id);
  251. break;
  252. }
  253. }
  254. else
  255. {
  256. _logger.LogError("TODO系统订单添加失败库存已减" + modelDetailList.ToJson());
  257. break;
  258. }
  259. }
  260. }
  261. else
  262. { }
  263. }
  264. catch (Exception ex)
  265. {
  266. return Error("==error==");
  267. }
  268. return Success("==1==");
  269. }
  270. }
  271. }