OrdersController.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.Extensions.Logging;
  7. using Microsoft.Extensions.Options;
  8. using Microsoft.AspNetCore.Authorization;
  9. using System.Web;
  10. using MySystem.Models;
  11. using MySystem.MainModels;
  12. using LitJson;
  13. using Library;
  14. namespace MySystem.Areas.Api.Controllers.v1.pos
  15. {
  16. [Area("Api")]
  17. [Route("Api/v1/pos/[controller]/[action]")]
  18. public class OrdersController : BaseController
  19. {
  20. public OrdersController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
  21. {
  22. }
  23. #region 商城-确认订单
  24. [Authorize]
  25. public JsonResult ConfirmOrder(string value)
  26. {
  27. value = DesDecrypt(value);
  28. JsonData data = JsonMapper.ToObject(value);
  29. AppResultJson result = ConfirmOrderDo(value);
  30. return Json(new AppResultJson() { Status = result.Status, Info = result.Info, Data = result.Data });
  31. }
  32. public AppResultJson ConfirmOrderDo(string value)
  33. {
  34. JsonData data = JsonMapper.ToObject(value);
  35. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  36. int StoreId = int.Parse(function.CheckInt(data["StoreId"].ToString())); //仓库
  37. int DeliveryType = int.Parse(function.CheckInt(data["DeliveryType"].ToString())); //提货类型
  38. string Remark = data["Remark"].ToString(); //订单备注
  39. int AddressId = int.Parse(function.CheckInt(data["AddressId"].ToString())); //收货地址Id
  40. JsonData ProductJson = data["ProductJson"]; //商品信息
  41. Dictionary<string, object> Obj = new Dictionary<string, object>();
  42. string OrderNo = "BM61" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
  43. UserAddress address = UserAddressDbconn.Instance.Get(AddressId) ?? new UserAddress();
  44. StoreHouse store = StoreHouseDbconn.Instance.Get(StoreId) ?? new StoreHouse();
  45. Users storeUser = UsersDbconn.Instance.Get(store.ManageUserId) ?? new Users();
  46. Users user = UsersDbconn.Instance.Get(UserId) ?? new Users();
  47. int TopUserId = PublicFunction.GetTopUserId(user.ParentNav);
  48. decimal TotalPrice = 0; //订单总额
  49. Orders query = maindb.Orders.Add(new Orders()
  50. {
  51. OrderNo = OrderNo,
  52. RealName = address.RealName,
  53. Mobile = address.Mobile,
  54. Areas = address.Areas,
  55. Address = address.Address,
  56. StoreContact = storeUser.RealName,
  57. StoreContactMobile = store.ManageMobile,
  58. StoreUserId = store.UserId,
  59. StoreType = store.StoreType,
  60. CreateDate = DateTime.Now, //创建时间
  61. UserId = UserId, //创客
  62. StoreId = StoreId, //仓库
  63. TopUserId = TopUserId, //顶级创客
  64. DeliveryType = DeliveryType, //提货类型
  65. BuyCount = 0,
  66. TotalPrice = TotalPrice, //订单总额
  67. Remark = Remark, //订单备注
  68. }).Entity;
  69. maindb.SaveChanges();
  70. for (int i = 0; i < ProductJson.Count; i++)
  71. {
  72. JsonData item = ProductJson[i];
  73. int ProductId = int.Parse(function.CheckInt(item["ProductId"].ToString()));
  74. int NormId = int.Parse(function.CheckInt(item["NormId"].ToString()));
  75. int BuyCount = int.Parse(function.CheckInt(item["BuyCount"].ToString()));
  76. Products product = ProductsDbconn.Instance.Get(ProductId) ?? new Products();
  77. ProductNorm norm = ProductNormDbconn.Instance.Get(NormId) ?? new ProductNorm();
  78. OrderProduct pro = maindb.OrderProduct.Add(new OrderProduct()
  79. {
  80. CreateDate = DateTime.Now, //创建时间
  81. OrderId = query.Id,
  82. ProductId = ProductId,
  83. ProductCount = BuyCount,
  84. NormId = NormId.ToString(),
  85. NormDetail = norm.ColName,
  86. ProductPrice = norm.Price,
  87. TotalPrice = norm.Price * BuyCount,
  88. ProductCode = product.ProductCode,
  89. UserId = UserId,
  90. StoreId = StoreId,
  91. }).Entity;
  92. TotalPrice += norm.Price * BuyCount;
  93. }
  94. query.TotalPrice = TotalPrice;
  95. maindb.SaveChanges();
  96. Obj.Add("Id", query.Id); //Id
  97. return new AppResultJson() { Status = "1", Info = "", Data = Obj };
  98. }
  99. #endregion
  100. #region 首页-客小爽产品-机具管理-机具申请-要兑换的机具
  101. [Authorize]
  102. public JsonResult ExchangeMachines(string value)
  103. {
  104. value = DesDecrypt(value);
  105. JsonData data = JsonMapper.ToObject(value);
  106. Dictionary<string, object> Other = new Dictionary<string, object>();
  107. List<Dictionary<string, object>> dataList = ExchangeMachinesDo(value, out Other);
  108. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList, Other = Other });
  109. }
  110. public List<Dictionary<string, object>> ExchangeMachinesDo(string value, out Dictionary<string, object> Other)
  111. {
  112. JsonData data = JsonMapper.ToObject(value);
  113. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  114. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  115. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  116. int ProductType = int.Parse(function.CheckInt(data["ProductType"].ToString()));
  117. DateTime now = DateTime.Now;
  118. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  119. IQueryable<PosMachinesTwo> query = maindb.PosMachinesTwo.Where(m => m.Status > -1 && m.BuyUserId == UserId && m.BrandId == ProductType && m.IsPurchase == 0);
  120. int ExpiredCount = query.Count(m => m.RecycEndDate < now);
  121. int ActCount = query.Count(m => m.ActivationState == 1);
  122. query = query.Where(m => m.RecycEndDate >= now && m.ActivationState == 1);
  123. if (PageNum == 1)
  124. {
  125. query = query.Take(PageSize);
  126. }
  127. else
  128. {
  129. int skipNum = PageSize * (PageNum - 1);
  130. query = query.Skip(skipNum).Take(PageSize);
  131. }
  132. foreach (var subdata in query.ToList())
  133. {
  134. Dictionary<string, object> curData = new Dictionary<string, object>();
  135. curData.Add("SnId", subdata.Id); //机具Id
  136. curData.Add("SnNo", subdata.PosSn); //SN号
  137. curData.Add("MachineType", RelationClass.GetPosSnTypeInfo(subdata.PosSnType)); //机具类型
  138. int day = 0;
  139. if (subdata.RecycEndDate != null)
  140. {
  141. TimeSpan ts = subdata.RecycEndDate.Value - DateTime.Now;
  142. day = ts.Days;
  143. }
  144. curData.Add("RecycDays", day); //循环剩余天数
  145. curData.Add("EndDate", subdata.RecycEndDate == null ? "" : subdata.RecycEndDate.Value.ToString("yyyy-MM-dd")); //截止日期
  146. List<KqProducts> pros = KqProductsDbconn.Instance.GetList();
  147. string BrandIdString = "";
  148. foreach (KqProducts pro in pros)
  149. {
  150. BrandIdString += pro.Name.Substring(0, 1) + "=" + pro.Id + ",";
  151. }
  152. curData.Add("ProductType", BrandIdString.TrimEnd(',')); //产品类型 // TODO:数据需要组合,格式:大=1,签=2,超=3
  153. dataList.Add(curData);
  154. }
  155. Other = new Dictionary<string, object>();
  156. Other.Add("ActCount", ActCount); //激活数
  157. Other.Add("ExpiredCount", ExpiredCount); //过期数
  158. Other.Add("MinCount", 1); //最少领取数
  159. return dataList;
  160. }
  161. #endregion
  162. #region 首页-客小爽产品-机具管理-机具申请-要兑换的机具-V2
  163. [Authorize]
  164. public JsonResult ExchangeMachines2(string value)
  165. {
  166. value = DesDecrypt(value);
  167. JsonData data = JsonMapper.ToObject(value);
  168. Dictionary<string, object> Other = new Dictionary<string, object>();
  169. List<Dictionary<string, object>> dataList = ExchangeMachines2Do(value, out Other);
  170. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList, Other = Other });
  171. }
  172. public List<Dictionary<string, object>> ExchangeMachines2Do(string value, out Dictionary<string, object> Other)
  173. {
  174. JsonData data = JsonMapper.ToObject(value);
  175. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  176. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  177. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  178. int ProductType = int.Parse(function.CheckInt(data["ProductType"].ToString()));
  179. DateTime now = DateTime.Now;
  180. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  181. IQueryable<PosMachinesTwo> query = maindb.PosMachinesTwo.Where(m => m.Status > -1 && m.BuyUserId == UserId && m.BrandId == ProductType && m.IsPurchase == 0);
  182. int ExpiredCount = query.Count(m => m.RecycEndDate < now);
  183. int ActCount = query.Count(m => m.ActivationState == 1);
  184. query = query.Where(m => m.RecycEndDate >= now && (m.ActivationState == 1 || (!string.IsNullOrEmpty(m.SeoKeyword) && m.SeoKeyword != "0")));
  185. if (PageNum == 1)
  186. {
  187. query = query.Take(PageSize);
  188. }
  189. else
  190. {
  191. int skipNum = PageSize * (PageNum - 1);
  192. query = query.Skip(skipNum).Take(PageSize);
  193. }
  194. foreach (var subdata in query.ToList())
  195. {
  196. Dictionary<string, object> curData = new Dictionary<string, object>();
  197. int IsLeader = 0;//是否为大盟主机(0-否 1-是)
  198. if (subdata.LeaderUserId > 0)
  199. {
  200. IsLeader = 1;
  201. }
  202. else
  203. {
  204. IsLeader = 0;
  205. }
  206. curData.Add("SnId", subdata.Id); //机具Id
  207. curData.Add("SnNo", subdata.PosSn); //SN号
  208. curData.Add("MachineType", RelationClass.GetPosSnTypeInfo(subdata.PosSnType)); //机具类型
  209. int day = 0;
  210. if (subdata.RecycEndDate != null)
  211. {
  212. TimeSpan ts = subdata.RecycEndDate.Value - DateTime.Now;
  213. day = ts.Days;
  214. }
  215. curData.Add("RecycDays", day); //循环剩余天数
  216. curData.Add("EndDate", subdata.RecycEndDate == null ? "" : subdata.RecycEndDate.Value.ToString("yyyy-MM-dd")); //截止日期
  217. // List<KqProducts> pros = KqProductsDbconn.Instance.GetList();
  218. List<int> BrandIds = new List<int>();
  219. // foreach (KqProducts pro in pros)
  220. // {
  221. // BrandIds.Add(pro.Id);
  222. // }
  223. if (ProductType == 1 || ProductType == 2 || ProductType == 4 || ProductType == 6 || ProductType == 7 || ProductType == 8 || ProductType == 10)
  224. {
  225. BrandIds.Add(1);
  226. BrandIds.Add(2);
  227. BrandIds.Add(4);
  228. BrandIds.Add(6);
  229. BrandIds.Add(7);
  230. BrandIds.Add(8);
  231. BrandIds.Add(10);
  232. }
  233. else
  234. {
  235. BrandIds.Add(3);
  236. BrandIds.Add(5);
  237. BrandIds.Add(9);
  238. BrandIds.Add(11);
  239. }
  240. curData.Add("ProductType", BrandIds); //产品类型 // TODO:数据需要组合,格式:大=1,签=2,超=3
  241. curData.Add("IsLeader",IsLeader);
  242. dataList.Add(curData);
  243. }
  244. Other = new Dictionary<string, object>();
  245. Other.Add("ActCount", ActCount); //激活数
  246. Other.Add("ExpiredCount", ExpiredCount); //过期数
  247. Other.Add("MinCount", 1); //最少领取数
  248. return dataList;
  249. }
  250. #endregion
  251. #region 首页-仓库管理-订单列表
  252. [Authorize]
  253. public JsonResult StoreOrderList(string value)
  254. {
  255. value = DesDecrypt(value);
  256. JsonData data = JsonMapper.ToObject(value);
  257. List<Dictionary<string, object>> dataList = StoreOrderListDo(value);
  258. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
  259. }
  260. public List<Dictionary<string, object>> StoreOrderListDo(string value)
  261. {
  262. JsonData data = JsonMapper.ToObject(value);
  263. string SearchKey = data["SearchKey"].ToString(); //手机号
  264. int StoreId = int.Parse(function.CheckInt(data["StoreId"].ToString())); //仓库
  265. int Status = int.Parse(function.CheckInt(data["Status"].ToString())); //订单状态
  266. string StartDate = data["StartDate"].ToString(); //下单开始时间
  267. string EndDate = data["EndDate"].ToString(); //下单结束时间
  268. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  269. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  270. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  271. List<StoreOrders> query = RedisDbconn.Instance.GetList<StoreOrders>("StoreOrders:" + StoreId, 1, 100000);
  272. if (!string.IsNullOrEmpty(SearchKey))
  273. {
  274. query = query.Where(m => m.RealName == SearchKey || m.Mobile == SearchKey).ToList();
  275. }
  276. if (!string.IsNullOrEmpty(StartDate))
  277. {
  278. DateTime time = DateTime.Parse(StartDate.Substring(0, 4) + "-" + StartDate.Substring(4, 2) + "-" + StartDate.Substring(6, 2) + " 00:00:00");
  279. query = query.Where(m => m.CreateDate >= time).ToList();
  280. }
  281. if (!string.IsNullOrEmpty(EndDate))
  282. {
  283. DateTime time = DateTime.Parse(EndDate.Substring(0, 4) + "-" + EndDate.Substring(4, 2) + "-" + EndDate.Substring(6, 2) + " 23:59:59");
  284. query = query.Where(m => m.CreateDate <= time).ToList();
  285. }
  286. if (Status > 0)
  287. {
  288. if(Status == 2) Status = 0;
  289. query = query.Where(m => m.SendStatus == Status).ToList();
  290. }
  291. if (PageNum == 1)
  292. {
  293. query = query.Take(PageSize).ToList();
  294. }
  295. else
  296. {
  297. int skipNum = PageSize * (PageNum - 1);
  298. query = query.Skip(skipNum).Take(PageSize).ToList();
  299. }
  300. foreach (var item in query)
  301. {
  302. Orders subdata = OrdersDbconn.Instance.Get(item.Id) ?? new Orders();
  303. Dictionary<string, object> curData = new Dictionary<string, object>();
  304. curData.Add("OrderNo", subdata.OrderNo); //订单号
  305. curData.Add("RealName", subdata.RealName); //姓名
  306. curData.Add("Mobile", subdata.Mobile); //手机号
  307. curData.Add("Areas", subdata.Areas); //所在地区
  308. curData.Add("Address", subdata.Address); //详细地址
  309. curData.Add("DeliveryType", subdata.DeliveryType); //提货类型
  310. curData.Add("BuyCount", subdata.BuyCount); //下单数量
  311. curData.Add("SnNos", subdata.SnNos); //SN编号
  312. curData.Add("Id", subdata.Id); //Id
  313. curData.Add("CreateDate", subdata.CreateDate == null ? "" : subdata.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //CreateDate
  314. Products pro = ProductsDbconn.Instance.Get(subdata.ProductId) ?? new Products();
  315. curData.Add("ProductName", pro.ProductName); //商品名称
  316. Users user = UsersDbconn.Instance.Get(subdata.UserId) ?? new Users();
  317. curData.Add("OrderRealName", user.RealName); //下单人姓名
  318. curData.Add("OrderMakerCode", user.MakerCode); //下单人编号
  319. curData.Add("OrderKind", subdata.Sort > 0 ? "机具申请" : "商城购买"); //订单类型
  320. curData.Add("SendStatus", item.SendStatus);
  321. dataList.Add(curData);
  322. }
  323. return dataList;
  324. }
  325. #endregion
  326. #region 首页-仓库管理-订单详情
  327. [Authorize]
  328. public JsonResult StoreOrderDetail(string value)
  329. {
  330. value = DesDecrypt(value);
  331. JsonData data = JsonMapper.ToObject(value);
  332. Dictionary<string, object> Obj = StoreOrderDetailDo(value);
  333. return Json(new AppResultJson() { Status = "1", Info = "", Data = Obj });
  334. }
  335. public Dictionary<string, object> StoreOrderDetailDo(string value)
  336. {
  337. JsonData data = JsonMapper.ToObject(value);
  338. int Id = int.Parse(function.CheckInt(data["Id"].ToString()));
  339. Dictionary<string, object> Obj = new Dictionary<string, object>();
  340. Orders query = OrdersDbconn.Instance.Get(Id) ?? new Orders();
  341. Obj.Add("UserId", RelationClass.GetUsersInfo(query.UserId)); //创客
  342. Obj.Add("RealName", query.RealName); //姓名
  343. Obj.Add("Mobile", query.Mobile); //手机号
  344. Obj.Add("Areas", function.CheckNull(query.Areas).Replace(",", "")); //所在地区
  345. Obj.Add("Address", query.Address); //详细地址
  346. Obj.Add("DeliveryType", query.DeliveryType); //提货类型
  347. Obj.Add("BuyCount", query.BuyCount); //下单数量
  348. Obj.Add("SnNos", query.SnNos); //SN编号
  349. Obj.Add("CreateDate", query.CreateDate == null ? "" : query.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //CreateDate
  350. Products pro = RedisDbconn.Instance.Get<Products>("Products:" + query.ProductId) ?? new Products();
  351. Obj.Add("ProductName", pro.ProductName); //商品名称
  352. return Obj;
  353. }
  354. #endregion
  355. #region 检查签名是否合法,合法返回1,不合法返回提示信息
  356. /// <summary>
  357. /// 检查签名是否合法,合法返回1,不合法返回提示信息
  358. /// </summary>
  359. /// <param name="value">请求的参数(json字符串)</param>
  360. /// <param name="signField">要签名的字段</param>
  361. /// <returns></returns>
  362. private string CheckSign(string value, string[] signField)
  363. {
  364. JsonData json = JsonMapper.ToObject(value);
  365. Dictionary<string, string> dic = new Dictionary<string, string>();
  366. for (int i = 0; i < signField.Length; i++)
  367. {
  368. dic.Add(signField[i], json[signField[i]].ToString());
  369. }
  370. string sign = json["sign"].ToString(); //客户端签名字符串
  371. return new Sign().sign(dic, sign);
  372. }
  373. #endregion
  374. }
  375. }