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

OrderFunctionController.cs 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. /* =============================================
  2. -- Author: <Author,,zhangkun>
  3. -- Create date: <Create Date,,20200618>
  4. -- Description: <Description,,订单相关操作)>
  5. -- ============================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Common;
  9. using System.Common.Helpers;
  10. using System.Data;
  11. using System.IRepositories;
  12. using System.Linq;
  13. using System.Model;
  14. using System.Repositories;
  15. using System.Security.Claims;
  16. using System.Threading.Tasks;
  17. using System.Utility.Http;
  18. using Microsoft.AspNetCore.Mvc;
  19. using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
  20. using Microsoft.Extensions.Configuration;
  21. using Microsoft.Extensions.Logging;
  22. using NPOI.SS.Formula.Atp;
  23. using SqlSugar;
  24. using TVShoppingCallCenter_ZLJ.Models.Inputs;
  25. using Utility;
  26. namespace TVShoppingCallCenter_ZLJ.Controllers.Order
  27. {
  28. [Route("api/[controller]")]
  29. public class OrderFunctionController : BaseController
  30. {
  31. private readonly IBus_OrderDetailRepository bus_OrderDetailRepository;
  32. private readonly IBus_OrderRepository bus_OrderRepository;
  33. private readonly ISys_MarketingRepository bus_MarketingRepository;
  34. private readonly IBus_ProductRepository bus_productRepository;
  35. private readonly ICus_VipInfoRepository cus_vip_infoRepository;
  36. private readonly IBus_StockLogRepository bus_StockLogRepository;
  37. private readonly ICus_ScoreSetRepository cus_score_setRepository;
  38. private readonly IConfiguration config;
  39. private readonly ISys_DictionaryValueRepository dictionaryValueRepository;
  40. private readonly ILogger<OrderFunctionController> _logger;
  41. public OrderFunctionController(ILogger<OrderFunctionController> logger,ISys_DictionaryValueRepository _dictionaryValueRepository,ICus_ScoreSetRepository _cus_score_setRepository, IBus_StockLogRepository _bus_StockLogRepository, IBus_OrderRepository _bus_OrderRepository, IBus_OrderDetailRepository _bus_OrderDetailRepository, ISys_MarketingRepository _bus_MarketingRepository, IBus_ProductRepository _productRepository, ICus_VipInfoRepository _cus_vip_infoRepository, IConfiguration _configuration)
  42. {
  43. _logger = logger;
  44. dictionaryValueRepository = _dictionaryValueRepository;
  45. bus_OrderDetailRepository = _bus_OrderDetailRepository;
  46. bus_OrderRepository = _bus_OrderRepository;
  47. bus_MarketingRepository = _bus_MarketingRepository;
  48. bus_productRepository = _productRepository;
  49. cus_vip_infoRepository = _cus_vip_infoRepository;
  50. bus_StockLogRepository = _bus_StockLogRepository;
  51. cus_score_setRepository = _cus_score_setRepository;
  52. config = _configuration;
  53. }
  54. /// <summary>
  55. /// state=1 提交锁库存 减库存减积分
  56. /// </summary>
  57. /// <param name="modelOrder"></param>
  58. /// <param name="state"></param>
  59. /// <param name="score"></param>
  60. /// <returns></returns>
  61. internal async Task<string> ChangeStockOne(T_Bus_Order modelOrder,int state,List< T_Bus_OrderDetail> modelDetailList)
  62. {
  63. bool blstock = false;
  64. bool blScore = false;
  65. string msg = "";
  66. T_Cus_VipInfo modelvip = null;
  67. #region 变更积分
  68. if (modelOrder.F_UseScore > 0)
  69. {
  70. //退回积分 查询批次号核算积分是否已经退回
  71. modelvip = await cus_vip_infoRepository.GetSingle(q => q.F_ID == modelOrder.F_VipId);
  72. modelvip.F_Score = modelvip.F_Score + modelOrder.F_UseScore;
  73. if (await cus_vip_infoRepository.Update(modelvip))
  74. {
  75. //log 或者冻结转作废
  76. blScore = true;
  77. }
  78. else { return ("积分处理失败"); }
  79. }
  80. #endregion
  81. #region 退回库存
  82. List<StockChangeModel> stockChangeModels = new List<StockChangeModel>();
  83. List<T_Bus_StockLog> newstockLogList = new List<T_Bus_StockLog>();
  84. if (state == 1)
  85. {
  86. if (modelDetailList.Count <= 0)
  87. return "提交商品详情不能为空";
  88. foreach (T_Bus_OrderDetail productstock in modelDetailList)
  89. {
  90. T_Bus_StockLog modelStock = new T_Bus_StockLog();
  91. modelStock.F_Id = Guid.NewGuid().ToString().Replace("-", "");
  92. modelStock.F_Action = 1;
  93. modelStock.F_AddTime = DateTime.Now;
  94. modelStock.F_FlowNum = modelOrder.F_FlowNum;
  95. modelStock.F_BatchNum = modelDetailList.Count;
  96. modelStock.F_OrderId = modelOrder.F_Id;
  97. modelStock.F_State = 0;
  98. modelStock.F_UserId = modelOrder.F_AddUser;
  99. modelStock.F_UserName = modelOrder.F_AddUserName;
  100. modelStock.F_Stock = modelOrder.F_Stock;
  101. modelStock.F_Status = 0;
  102. modelStock.F_Num = -productstock.F_Count;
  103. modelStock.F_ProductId = productstock.F_ProductId;
  104. newstockLogList.Add(modelStock);
  105. StockChangeModel stockChangeModel = new StockChangeModel();
  106. stockChangeModel.sku = productstock.F_ProductId;
  107. stockChangeModel.qty = modelStock.F_Num;
  108. stockChangeModels.Add(stockChangeModel);
  109. }
  110. }
  111. else
  112. {
  113. List<T_Bus_StockLog> stockLogList = await bus_StockLogRepository.GetListALL(q => q.F_OrderId == modelOrder.F_Id && q.F_FlowNum == modelOrder.F_FlowNum);
  114. if (stockLogList != null && stockLogList.Count > 0)
  115. {
  116. foreach (T_Bus_StockLog modelStock in stockLogList)
  117. {
  118. modelStock.F_Id = Guid.NewGuid().ToString().Replace("-", "");
  119. modelStock.F_Action = 2;
  120. modelStock.F_AddTime = DateTime.Now;
  121. modelStock.F_Num = -modelStock.F_Num;
  122. modelStock.F_State = 0;
  123. if (state == 0)
  124. {
  125. modelStock.F_UserId =modelOrder.F_AddUser;
  126. modelStock.F_UserName = modelOrder.F_AddUserName;
  127. }
  128. else
  129. {
  130. modelStock.F_UserId = modelOrder.F_CheckUser;
  131. modelStock.F_UserName = modelOrder.F_CheckUserName;
  132. }
  133. modelStock.F_Status = 0;
  134. newstockLogList.Add(modelStock);
  135. //拼装请求亿博士接口
  136. StockChangeModel stockChangeModel = new StockChangeModel();
  137. stockChangeModel.sku = modelStock.F_ProductId;
  138. stockChangeModel.qty = modelStock.F_Num;
  139. stockChangeModels.Add(stockChangeModel);
  140. }
  141. }
  142. else
  143. {
  144. return "没有提交扣库存记录";
  145. }
  146. }
  147. //添加库存记录
  148. if (await bus_StockLogRepository.AddMany(newstockLogList))
  149. {
  150. //请求亿博士接口
  151. SetStockModel setStockModel = new SetStockModel();
  152. //modelset.store
  153. //modelset.dts
  154. //modelset.masterid
  155. //modelset.remark
  156. //modelset.ms
  157. setStockModel.store = modelOrder.F_Stock;
  158. setStockModel.dts = stockChangeModels;
  159. //long masterlong =long.Parse(modelOrder.F_FlowNum.Replace("U", "").Replace("R", "") + DateTime.Now.ToString("ddHHmmss"));
  160. setStockModel.masterid = modelOrder.F_FlowNum+ state;
  161. if(state==1)
  162. setStockModel.remark = "客服分仓锁库存";
  163. else if (state == 0)
  164. setStockModel.remark = "客服撤回加库存";
  165. else if (state == 2)
  166. setStockModel.remark = "审核不通过加库存";
  167. //更新库存记录
  168. ResultMessage ModelResultMessage = await ChangeStock(setStockModel, newstockLogList);
  169. blstock = ModelResultMessage.Status;
  170. msg = ModelResultMessage.Msg;
  171. }
  172. if (!blstock)
  173. {
  174. if (blScore)
  175. {
  176. modelvip.F_Score = modelvip.F_Score + modelOrder.F_UseScore;
  177. if (await cus_vip_infoRepository.Update(modelvip))
  178. {
  179. return ("库存可能不足//积分回滚") + msg;
  180. }
  181. else
  182. {
  183. return ("回滚") + msg;
  184. }
  185. }
  186. return ("对接亿博士库存失败"+ msg);
  187. }
  188. #endregion
  189. return "1";
  190. }
  191. internal async Task<ResultMessage> ChangeStock(SetStockModel modelset1, List<T_Bus_StockLog> modelStockLogs)
  192. {
  193. //modelset.store
  194. //modelset.dts
  195. //modelset.masterid
  196. //modelset.remark
  197. //modelset.ms
  198. SetStockModel modelset = new SetStockModel();
  199. modelset.store = modelset1.store.Contains("新乡")? config["eBoss:stock1"].ToString() : config["eBoss:stock"].ToString();
  200. modelset.dts = modelset1.dts;
  201. modelset.masterid = modelset1.masterid;
  202. modelset.remark = modelset1.remark;
  203. modelset.appid = config["eBoss:appid"].ToString();
  204. modelset.appkey = config["eBoss:appkey"].ToString();
  205. modelset.billdate = DateTime.Now.ToString("yyyyMMdd");
  206. string url = config["eBoss:url"].ToString();
  207. string ret = await HttpHelper.HttpGetAsync(url + modelset.ToJson());//"\"success\": true";
  208. //ret.ToJson();
  209. foreach (T_Bus_StockLog stocklog in modelStockLogs)
  210. {
  211. stocklog.F_Result = ret;
  212. if (ret.Contains("\"success\": true"))
  213. {
  214. LogDefault.Error("成功"+ret);
  215. stocklog.F_State = 1;
  216. }
  217. else
  218. {
  219. LogDefault.Error("失败" + ret);
  220. stocklog.F_State = 2;
  221. }
  222. }
  223. await bus_StockLogRepository.UpdateList(modelStockLogs);//不计较更新成功失败
  224. //string ret = await HttpHelper.HttpGetAsync(url + "{\"appid\":\""+ appid + "\",\"appkey\":\""+ appkey + "\",\"method\":\"eboss.drp.adj.add\",\"masterid\":\""+ masterid + "\",\"billdate\":\"" + billdate + "\",\"adjtype\":\"正常调整\",\"store\":\"WLZZ0001\",\"remark\":\"备注测试备注测试备注测试备注测试备注测试备注测试备注测试备注测试备注测试\",\"createid\":\"000\",\"dts\":[{\"sku\":\"010801001\",\"qty\":1},{\"sku\":\"010801002\",\"qty\":2}],\"ms\":[{\"sku\":\"010801001\",\"mastercode\":\"code1\",\"mastercode2\":\"code2\"},{\"sku\":\"010801002\",\"mastercode\":\"code3\",\"mastercode2\":\"code4\"}]}");
  225. return new ResultMessage() { Code = 0, Status = ret.Contains("\"success\": true"), Msg = ret };
  226. }
  227. #region 对接亿博士
  228. /// <summary>
  229. /// 获取相应商品库存
  230. /// </summary>
  231. /// <param name="sku">010801001 不传则为全部商品</param>
  232. /// <param name="stock">WLZZ0001 不传则为全部仓库</param>
  233. /// <returns></returns>
  234. [HttpPost("getStock")]
  235. public async Task<List<EBossStock>> GetStock(string sku, string stock, int pageindex = 1, int pagesize = 10)
  236. {
  237. try
  238. {
  239. stock = stock.Contains("新乡") ? config["eBoss:stock1"].ToString() : config["eBoss:stock"].ToString();
  240. string url = config["eBoss:url"].ToString();
  241. string appid = config["eBoss:appid"].ToString();
  242. string appkey = config["eBoss:appkey"].ToString();
  243. string ret = await HttpHelper.HttpGetAsync(url + "{\"appid\":\"" + appid + "\",\"appkey\":\"" + appkey + "\",\"method\":\"eboss.drp.stock.get\",\"pageno\":\"" + pageindex + "\",\"pagesize\":\"" + pagesize + "\",\"sku\":\"" + sku + "\",\"store\":\"" + stock + "\",\"modifybeg\":\"20000202\",\"modifyend\":\"20250505\"}");
  244. GetStock obj = ret.ToObject<GetStock>();
  245. return obj.stocks;
  246. }
  247. catch (Exception ex)
  248. {
  249. return null;
  250. }
  251. }
  252. /// <summary>
  253. /// 物理调整单
  254. /// </summary>
  255. /// <param name="modelset1"></param>
  256. /// <returns></returns>
  257. [HttpPost("setStock")]
  258. public async Task<IActionResult> SetStock([FromBody]SetStockModel modelset1)
  259. {
  260. //modelset.store
  261. //modelset.dts
  262. //modelset.masterid
  263. //modelset.remark
  264. //modelset.ms
  265. SetStockModel modelset = new SetStockModel();
  266. modelset.store = modelset1.store;
  267. modelset.dts = modelset1.dts;
  268. modelset.masterid = modelset1.masterid;
  269. modelset.remark = modelset1.remark;
  270. modelset.appid = config["eBoss:appid"].ToString();
  271. modelset.appkey = config["eBoss:appkey"].ToString();
  272. modelset.billdate = DateTime.Now.ToString("yyyyMMdd");
  273. string url = config["eBoss:url"].ToString();
  274. string ret = await HttpHelper.HttpGetAsync(url + modelset.ToJson());
  275. ret.ToJson();
  276. //string ret = await HttpHelper.HttpGetAsync(url + "{\"appid\":\""+ appid + "\",\"appkey\":\""+ appkey + "\",\"method\":\"eboss.drp.adj.add\",\"masterid\":\""+ masterid + "\",\"billdate\":\"" + billdate + "\",\"adjtype\":\"正常调整\",\"store\":\"WLZZ0001\",\"remark\":\"备注测试备注测试备注测试备注测试备注测试备注测试备注测试备注测试备注测试\",\"createid\":\"000\",\"dts\":[{\"sku\":\"010801001\",\"qty\":1},{\"sku\":\"010801002\",\"qty\":2}],\"ms\":[{\"sku\":\"010801001\",\"mastercode\":\"code1\",\"mastercode2\":\"code2\"},{\"sku\":\"010801002\",\"mastercode\":\"code3\",\"mastercode2\":\"code4\"}]}");
  277. return Success("", ret.Contains("\"success\": true"));
  278. }
  279. #endregion
  280. #region 日循环 创建生日订单
  281. /// <summary>
  282. /// 创建生日订单
  283. /// </summary>
  284. /// <param name="input"></param>
  285. /// <returns></returns>
  286. [NonAction]
  287. public async Task<string> AddBirthDayOrder()
  288. {
  289. int n1 = 0;
  290. int n2 = 0;
  291. try
  292. {
  293. OrderInput input = new OrderInput();
  294. List<T_Cus_VipInfo> modelvipList = await cus_vip_infoRepository.GetListALL(q => (q.F_GiftYear == (DateTime.Now.Year - 1).ToString() || q.F_GiftYear == (DateTime.Now.Year - 2).ToString()) && q.F_Birthday > DateTime.Now.AddDays(-15) && q.F_Birthday < DateTime.Now.AddDays(7));
  295. List<T_Sys_DictionaryValue> dicStockList = await dictionaryValueRepository.GetListALL(q => q.F_ParentCode.ToUpper() == "STOCK");
  296. //遍历需要发生日礼物的人 发一个更新一个 比较安全
  297. if (modelvipList != null && modelvipList.Count > 0 && dicStockList != null && dicStockList.Count > 0)
  298. {
  299. foreach (T_Cus_VipInfo modelvip in modelvipList)
  300. {
  301. n1++;
  302. //modelvipListUpdate.Add(modelvip)
  303. 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);
  304. T_Bus_Order modelOrder = new T_Bus_Order();
  305. if (OldOrderList != null && OldOrderList.Count > 0)
  306. {
  307. modelOrder = OldOrderList[0];
  308. }
  309. else
  310. {
  311. modelOrder.F_Customer = modelvip.F_Name;
  312. modelOrder.F_CustomerPhone = modelvip.F_Mobile;
  313. modelOrder.F_Addressee = modelvip.F_Name;
  314. modelOrder.F_AddPhone = modelvip.F_Mobile;
  315. modelOrder.F_AddProvince = modelvip.F_Province;
  316. modelOrder.F_AddCity = modelvip.F_City;
  317. modelOrder.F_AddArea = modelvip.F_Area;
  318. modelOrder.F_AddTown = modelvip.F_Town;
  319. modelOrder.F_AddDes = "生日单";
  320. modelOrder.F_Address = modelvip.F_Address;
  321. modelOrder.F_PostalCode = modelvip.F_Postcode;
  322. modelOrder.F_Express = "中通快递";
  323. modelOrder.F_Belong = modelvip.F_Saleperson.ObjToInt();
  324. modelOrder.F_BelongName = "ID:" + modelvip.F_Saleperson;
  325. }
  326. #region 订单属性
  327. //必填
  328. modelOrder.F_ADFrom = "生日单";
  329. modelOrder.F_Type = "系统单";
  330. modelOrder.F_Id = "BJ" + modelvip.F_Saleperson + "T" + DateTimeConvert.ToTimetag(DateTime.Now);
  331. modelOrder.F_VipId = modelvip.F_ID;
  332. modelOrder.F_UseActivity = "生日单";
  333. //选填 快递属性
  334. modelOrder.F_TrackingNo = "";
  335. modelOrder.F_ExpressFee = 0;
  336. modelOrder.F_PayType = "系统免单";
  337. modelOrder.F_Remark = "生日单";
  338. modelOrder.F_RealPrice = 0.00M;
  339. modelOrder.F_UseScore = 0.00M;
  340. //选填 关联属性
  341. modelOrder.F_Status = 0;
  342. //必须属性 系统生成
  343. modelOrder.F_AddTime = DateTime.Now;
  344. modelOrder.F_AddUser = 0;
  345. modelOrder.F_AddUserName = "系统";
  346. #endregion
  347. #region
  348. //未删除的赠品
  349. List<T_Bus_Product> modelProductList = await bus_productRepository.GetListALL(b => b.F_ClassId == 3 && b.F_IsDelete == 1 && b.F_IsSale == 0);
  350. if (modelProductList == null || modelProductList.Count == 0)
  351. return "==error==没有设置生日赠品";
  352. int n = 1;
  353. List<T_Bus_OrderDetail> modelDetailList = new List<T_Bus_OrderDetail>();
  354. foreach (T_Bus_Product modelProduct in modelProductList)
  355. {
  356. T_Bus_OrderDetail modelDetail = new T_Bus_OrderDetail();
  357. modelDetail.F_ProductName = modelProduct.F_ProductName;
  358. modelDetail.F_ProductId = modelProduct.F_ProductId;
  359. modelDetail.F_Specifications = modelProduct.F_Specifications;
  360. modelDetail.F_ProductShortName = modelProduct.F_ProductShortName;
  361. modelDetail.F_Id = Guid.NewGuid().ToString().Replace("-", "");
  362. modelDetail.F_OrderId = modelOrder.F_Id;
  363. modelDetail.F_Count = 1;
  364. modelDetail.F_Price = modelProduct.F_MemberPrice;
  365. modelDetail.F_DealPrice = 0.00M;
  366. modelDetail.F_Remark = "生日赠品-活动";
  367. modelDetail.F_Sort = n;
  368. modelDetail.F_AddTime = DateTime.Now;
  369. modelDetail.F_AddUser = 0;
  370. modelDetail.F_AddUserName = "系统";
  371. modelDetailList.Add(modelDetail);
  372. n++;
  373. }
  374. modelOrder.F_TotlePrice = 0.00M;
  375. modelOrder.F_ActivityMoney = 0.00M;
  376. modelOrder.F_ShouldPrice = 0.00M;
  377. modelOrder.F_PayState = 1;
  378. modelOrder.F_Score = 0.00M;
  379. #endregion
  380. #region 直接提交 锁库存log 锁积分log
  381. modelOrder.F_SubmitTime = DateTime.Now;
  382. modelOrder.F_State = 1;
  383. modelOrder.F_Stock = dicStockList[0].F_Value;
  384. modelOrder.F_FlowNum = DateTime.Now.ToString("yyMMddHHmmss") + "U" + modelOrder.F_AddUser + "R" + new Random().Next(9);
  385. string strStock = await ChangeStockOne(modelOrder, 1, modelDetailList);
  386. if (strStock != "1")
  387. {
  388. if (dicStockList.Count > 1)
  389. {
  390. modelOrder.F_Stock = dicStockList[1].F_Value;
  391. modelOrder.F_FlowNum = DateTime.Now.ToString("yyMMddHHmmss") + "U" + modelOrder.F_AddUser + "R" + new Random().Next(9);
  392. strStock = await ChangeStockOne(modelOrder, 1, modelDetailList);
  393. if (strStock != "1")
  394. {
  395. modelOrder.F_State = 0;
  396. modelOrder.F_SubmitTime = null;
  397. }
  398. }
  399. }
  400. #endregion
  401. if (await bus_OrderRepository.AddReturnCount(modelOrder))
  402. {
  403. n2++;
  404. if (await bus_OrderDetailRepository.AddMany(modelDetailList))
  405. {
  406. continue;
  407. }
  408. else
  409. {
  410. _logger.LogError("TODO系统订单详情添加失败库存已减:" + modelOrder.F_Id);
  411. break;
  412. }
  413. }
  414. else
  415. {
  416. _logger.LogError("TODO系统订单添加失败库存已减" + modelDetailList.ToJson());
  417. break;
  418. }
  419. }
  420. }
  421. else
  422. { }
  423. }
  424. catch (Exception ex)
  425. {
  426. return "==error==" + ex.Message;
  427. }
  428. return $"==1==执行{n1}成功{n2}";
  429. }
  430. #endregion
  431. }
  432. }