RecycMachineOrderController.cs 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Data;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Microsoft.AspNetCore.Http;
  7. using Microsoft.Extensions.Logging;
  8. using Microsoft.Extensions.Options;
  9. using Microsoft.AspNetCore.Authorization;
  10. using System.Web;
  11. using MySystem.MainModels;
  12. using LitJson;
  13. using Library;
  14. namespace MySystem.Areas.Api.Controllers.v1
  15. {
  16. [Area("Api")]
  17. [Route("Api/v1/[controller]/[action]")]
  18. public class RecycMachineOrderController : BaseController
  19. {
  20. public RecycMachineOrderController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
  21. {
  22. OtherMySqlConn.connstr = Library.ConfigurationManager.AppSettings["SqlConnStr"].ToString();
  23. }
  24. #region 创客-过期机具回收-仓库管理-待回收机具
  25. [Authorize]
  26. public JsonResult StoreList(string value)
  27. {
  28. value = DesDecrypt(value);
  29. JsonData data = JsonMapper.ToObject(value);
  30. Dictionary<string, object> Obj = new Dictionary<string, object>();
  31. List<Dictionary<string, object>> dataList = StoreListDo(value, out Obj);
  32. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList, Other = Obj });
  33. }
  34. public List<Dictionary<string, object>> StoreListDo(string value, out Dictionary<string, object> Other)
  35. {
  36. JsonData data = JsonMapper.ToObject(value);
  37. string UserId = data["UserId"].ToString(); //创客Id
  38. int Status = int.Parse(function.CheckInt(data["Status"].ToString())); //状态
  39. string Keyword = data["Keyword"].ToString(); //搜索关键词
  40. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  41. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  42. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  43. IQueryable<RecycMachineOrder> list = maindb.RecycMachineOrder.Where(m => m.SeoTitle == UserId);
  44. //待处理
  45. if (Status == 0)
  46. {
  47. list = list.Where(m => m.Sort != m.QueryCount).OrderByDescending(m => m.CreateDate);
  48. }
  49. else
  50. {
  51. list = list.Where(m => m.Sort == m.QueryCount).OrderByDescending(m => m.UpdateDate);
  52. }
  53. if (!string.IsNullOrEmpty(Keyword))
  54. {
  55. List<int> PosIdList = maindb.RecycMachineOrderPos.Select(m => new { m.SnNo, m.OrderId }).Where(m => m.SnNo.EndsWith(Keyword)).ToList().Select(m => m.OrderId).ToList();
  56. UserForMakerCode code = maindb.UserForMakerCode.FirstOrDefault(m => m.MakerCode == Keyword) ?? new UserForMakerCode();
  57. list = list.Where(m => (PosIdList.Contains(m.Id) || m.UserId == code.UserId));
  58. }
  59. foreach (var item in list.ToList())
  60. {
  61. var order = maindb.RecycMachineOrder.FirstOrDefault(m => m.Id == item.Id && m.Sort == 1) ?? new RecycMachineOrder();
  62. var orderp = maindb.RecycMachineOrderPos.FirstOrDefault(m => m.Status == 0 && m.OrderId == order.Id) ?? new RecycMachineOrderPos();
  63. var pos = maindb.PosMachinesTwo.FirstOrDefault(m => m.Status > -1 && m.BindingState == 1 && m.ActivationState == 1 && m.PosSn == orderp.SnNo) ?? new PosMachinesTwo();
  64. if (order.Id == 0 || pos.Id == 0)
  65. {
  66. Dictionary<string, object> curData = new Dictionary<string, object>();
  67. Users UsersData = maindb.Users.FirstOrDefault(m => m.Id == item.UserId) ?? new Users();
  68. curData.Add("Id", item.Id); //Id
  69. curData.Add("RealName", UsersData.RealName); //真实姓名
  70. curData.Add("Mobile", UsersData.Mobile); //手机号
  71. curData.Add("MakerCode", UsersData.MakerCode); //创客编号
  72. curData.Add("RecycOrderNo", item.RecycOrderNo); //申请单号
  73. if (item.PostType == 1)
  74. {
  75. curData.Add("PostType", item.PostType); //寄回方式(1 邮寄 2 送货上门)
  76. curData.Add("ErpCode", item.ErpCode); //快递单号
  77. }
  78. if (item.PostType == 2)
  79. {
  80. curData.Add("PostType", item.PostType); //寄回方式(1 邮寄 2 送货上门)
  81. }
  82. curData.Add("CreateDate", item.CreateDate == null ? "" : item.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //CreateDate
  83. curData.Add("UpdateDate", item.UpdateDate == null ? "" : item.UpdateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //确认或驳回时间
  84. curData.Add("BrandId", item.BrandId); //机具品牌
  85. var brandInfo = maindb.KqProducts.FirstOrDefault(m => m.Id == item.BrandId) ?? new KqProducts();
  86. curData.Add("BrandName", brandInfo.Name); //品牌名称
  87. List<Dictionary<string, object>> SnLists = new List<Dictionary<string, object>>();
  88. var orderPos = maindb.RecycMachineOrderPos.Where(m => m.OrderId == item.Id).ToList();
  89. foreach (var items in orderPos)
  90. {
  91. var posMachinesTwo = maindb.PosMachinesTwo.FirstOrDefault(m => m.Status > -1 && m.BindingState == 1 && m.ActivationState == 1 && m.PosSn == items.SnNo) ?? new PosMachinesTwo();
  92. Dictionary<string, object> SnList = new Dictionary<string, object>();
  93. if (posMachinesTwo.Id == 0)
  94. {
  95. SnList.Add("Status", items.Status);
  96. SnList.Add("SnNo", items.SnNo);
  97. SnLists.Add(SnList);
  98. }
  99. }
  100. curData.Add("SnList", SnLists);
  101. dataList.Add(curData);
  102. }
  103. }
  104. dataList = dataList.Skip((PageNum - 1) * PageSize).Take(PageSize).ToList();//分页的重点
  105. Dictionary<string, object> Obj = new Dictionary<string, object>();
  106. var PendCount = maindb.RecycMachineOrder.Where(m => m.Sort != m.QueryCount && m.SeoTitle == UserId).Count();//待处理
  107. var RecyclableCount = maindb.RecycMachineOrder.Where(m => m.Sort == m.QueryCount && m.SeoTitle == UserId).Count();//已完成
  108. Obj.Add("RecyclableCount", RecyclableCount);//已完成
  109. Obj.Add("PendCount", PendCount);//待处理数量
  110. Other = Obj;
  111. return dataList;
  112. }
  113. #endregion
  114. #region 创客-过期机具回收-仓库管理-待回收详情
  115. [Authorize]
  116. public JsonResult Detail(string value)
  117. {
  118. value = DesDecrypt(value);
  119. JsonData data = JsonMapper.ToObject(value);
  120. List<Dictionary<string, object>> dataList = DetailDo(value);
  121. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
  122. }
  123. public List<Dictionary<string, object>> DetailDo(string value)
  124. {
  125. JsonData data = JsonMapper.ToObject(value);
  126. int RecycStoreId = int.Parse(function.CheckInt(data["RecycStoreId"].ToString())); //退回仓库
  127. int Id = int.Parse(function.CheckInt(data["Id"].ToString()));//申请订单Id
  128. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  129. var query = maindb.RecycMachineOrder.FirstOrDefault(m => m.Id == Id) ?? new RecycMachineOrder();
  130. var recycMachineOrderPos = maindb.RecycMachineOrderPos.Where(m => m.OrderId == query.Id).ToList();
  131. if (recycMachineOrderPos.Count > 0)
  132. {
  133. Dictionary<string, object> curData = new Dictionary<string, object>();
  134. var count = recycMachineOrderPos.Count();
  135. curData.Add("Count", count); //数量
  136. Users UsersData = maindb.Users.FirstOrDefault(m => m.Id == query.UserId) ?? new Users();
  137. curData.Add("RealName", UsersData.RealName); //真实姓名
  138. curData.Add("Mobile", UsersData.Mobile); //手机号
  139. curData.Add("MakerCode", UsersData.MakerCode); //创客编号
  140. curData.Add("RecycOrderNo", query.RecycOrderNo); //申请单号
  141. if (query.PostType == 1)
  142. {
  143. curData.Add("PostType", query.PostType); //寄回方式(1 邮寄 2 送货上门)
  144. curData.Add("ErpCode", query.ErpCode); //快递单号
  145. }
  146. if (query.PostType == 2)
  147. {
  148. curData.Add("PostType", query.PostType); //寄回方式(1 邮寄 2 送货上门)
  149. }
  150. curData.Add("CreateDate", query.CreateDate == null ? "" : query.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //CreateDate
  151. curData.Add("UpdateDate", query.UpdateDate == null ? "" : query.UpdateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //确认或驳回时间
  152. curData.Add("BrandId", query.BrandId); //机具品牌
  153. var brandInfo = maindb.KqProducts.FirstOrDefault(m => m.Id == query.BrandId) ?? new KqProducts();
  154. curData.Add("BrandName", brandInfo.Name); //品牌名称
  155. foreach (var items in recycMachineOrderPos)
  156. {
  157. Dictionary<string, object> SnList = new Dictionary<string, object>();
  158. SnList.Add("Status", items.Status);//状态(-1 已撤回 0 待处理 1 已确认 2 驳回)
  159. SnList.Add("SnNo", items.SnNo);
  160. curData.Add("SnList", SnList);
  161. }
  162. dataList.Add(curData);
  163. }
  164. return dataList;
  165. }
  166. #endregion
  167. #region 创客-过期机具回收-仓库管理-确认收货
  168. [Authorize]
  169. public JsonResult ConfirmRecyc(string value)
  170. {
  171. value = DesDecrypt(value);
  172. JsonData data = JsonMapper.ToObject(value);
  173. AppResultJson result = ConfirmRecycDo(value);
  174. return Json(new AppResultJson() { Status = result.Status, Info = result.Info, Data = result.Data });
  175. }
  176. public AppResultJson ConfirmRecycDo(string value)
  177. {
  178. JsonData data = JsonMapper.ToObject(value);
  179. int RecycStoreId = int.Parse(function.CheckInt(data["RecycStoreId"].ToString())); //仓库Id
  180. int OrderId = int.Parse(function.CheckInt(data["OrderId"].ToString())); //记录Id
  181. string SnList = data["SnList"].ToString(); //机具Sn
  182. string[] Sns = SnList.Split(',');
  183. string checks = RedisDbconn.Instance.Get<string>("CheckConfirmRecyc:" + OrderId);
  184. if (checks == "1")
  185. {
  186. return new AppResultJson() { Status = "-1", Info = "请勿重复操作" };
  187. }
  188. RedisDbconn.Instance.Set("CheckConfirmRecyc:" + OrderId, "1");
  189. RedisDbconn.Instance.SetExpire("CheckConfirmRecyc:" + OrderId, 10);
  190. Dictionary<string, object> Obj = new Dictionary<string, object>();
  191. var query = maindb.RecycMachineOrder.FirstOrDefault(m => m.Id == OrderId) ?? new RecycMachineOrder();
  192. var recycMachineOrderPos = maindb.RecycMachineOrderPos.Where(m => m.OrderId == OrderId && m.Status == 0).ToList();
  193. foreach (var item in Sns)
  194. {
  195. var pos = maindb.PosMachinesTwo.FirstOrDefault(m => m.Status > -1 && m.PosSn == item && m.BindingState == 0 && m.ActivationState == 0 && m.RecycStatus == 99) ?? new PosMachinesTwo();
  196. var poscount = maindb.PosMachinesTwo.FirstOrDefault(m => m.Status > -1 && m.PosSn == item && m.BindingState == 1 && m.ActivationState == 1) ?? new PosMachinesTwo();
  197. var orderposcount = recycMachineOrderPos.FirstOrDefault(m => m.QueryCount == 0 && m.SnNo == item) ?? new RecycMachineOrderPos();
  198. if (poscount.Id > 0 && orderposcount.Id > 0)
  199. {
  200. query.QueryCount += 1;
  201. query.UpdateDate = DateTime.Now;
  202. orderposcount.QueryCount += 1;
  203. orderposcount.UpdateDate = DateTime.Now;
  204. maindb.SaveChanges();
  205. return new AppResultJson() { Status = "-1", Info = "部分机具已激活,请重新刷新操作" };
  206. }
  207. if (pos.Id == 0)
  208. {
  209. return new AppResultJson() { Status = "-1", Info = "机具" + item + "不满足操作条件", Data = Obj };
  210. // return new AppResultJson() { Status = "-1", Info = "部分机具已激活,请重新刷新操作" };
  211. }
  212. var brandinfo = maindb.KqProducts.FirstOrDefault(m => m.Id == pos.BrandId) ?? new KqProducts();
  213. var storeInfo = maindb.StoreHouse.FirstOrDefault(m => m.Id == query.RecycStoreId) ?? new StoreHouse();
  214. var storeAccount = maindb.UserAccount.FirstOrDefault(m => m.Id == storeInfo.UserId) ?? new UserAccount();
  215. var amount = 0;
  216. if (brandinfo.Name.Contains("电签"))
  217. {
  218. amount = 200;
  219. }
  220. if (brandinfo.Name.Contains("大POS"))
  221. {
  222. amount = 300;
  223. }
  224. //扣减机具来源创客机具数
  225. var fInfo = pos.BuyUserId + "_" + pos.BrandId;
  226. var userMachineDatas = maindb.UserMachineData.FirstOrDefault(m => m.IdBrand == fInfo) ?? new UserMachineData();
  227. userMachineDatas.TotalMachineCount -= 1;
  228. userMachineDatas.UnBindCount -= 1;
  229. //增加分仓机具数
  230. var tInfo = storeInfo.UserId + "_" + pos.BrandId;
  231. var userMachineData = maindb.UserMachineData.FirstOrDefault(m => m.IdBrand == tInfo) ?? new UserMachineData();
  232. userMachineData.TotalMachineCount += 1;
  233. userMachineData.UnBindCount += 1;
  234. //增加仓库剩余库存数和总数
  235. storeInfo.LaveNum += 1;
  236. storeInfo.TotalNum += 1;
  237. storeAccount.ValidAmount -= amount;//扣减分仓可用额度
  238. var add = maindb.StoreHouseAmountRecord.Add(new StoreHouseAmountRecord()
  239. {
  240. CreateDate = DateTime.Now, //创建时间
  241. BeforeAmount = storeAccount.ValidAmount - amount,
  242. AfterAmount = storeAccount.ValidAmount,
  243. UseAmount = amount,
  244. UserId = storeInfo.UserId,
  245. }).Entity;
  246. var info = recycMachineOrderPos.FirstOrDefault(m => m.Status == 0 && m.OrderId == OrderId && m.SnNo == item) ?? new RecycMachineOrderPos();
  247. if (info.Id == 0)
  248. {
  249. return new AppResultJson() { Status = "-1", Info = "机具" + item + "不满足操作条件", Data = Obj };
  250. }
  251. info.Status = 1;//状态(-1 已撤回 0 待处理 1 已确认 2 驳回)
  252. info.UpdateDate = DateTime.Now;
  253. info.ResultDate = DateTime.Now;
  254. //重置为仓库机
  255. pos.Status = 1;
  256. pos.StoreId = query.RecycStoreId;
  257. pos.QueryCount = 0;
  258. pos.UpdateDate = null;
  259. pos.ActivityList = null;
  260. pos.SeoKeyword = null;
  261. pos.SeoDescription = null;
  262. pos.OrderId = 0;
  263. pos.RecycEndDate = null;
  264. pos.RecycBackCount = 0;
  265. pos.PrizeParams = null;
  266. pos.ScanQrTrade = 0;
  267. pos.BindMerchantId = 0;
  268. pos.CreditTrade = 0;
  269. pos.DebitCardTrade = 0;
  270. pos.IsVip = 0;
  271. pos.UserNav = null;
  272. pos.TransferTime = null;
  273. pos.IsPurchase = 0;
  274. pos.Detail = null;
  275. pos.BindingTime = null;
  276. pos.BindingState = 0;
  277. pos.ActivationTime = null;
  278. pos.ActivationState = 0;
  279. pos.LeaderUserId = 0;
  280. pos.PreUserId = 0;
  281. pos.IsFirst = 0;
  282. pos.DownFeeMan = null;
  283. pos.DownFeeFlag = 0;
  284. pos.DownFeeDate = null;
  285. pos.UpFeeMan = null;
  286. pos.UpFeeFlag = 0;
  287. pos.UpFeeDate = null;
  288. pos.OpReserve1 = 0;
  289. pos.OpReserve2 = 0;
  290. pos.OpReserve3 = 0;
  291. pos.OpId = 0;
  292. pos.RecycStartDate = null;
  293. pos.SourcePosSn = null;
  294. pos.BuyUserId = 0;
  295. pos.UserId = 0;
  296. pos.RecycStatus = 0;
  297. // maindb.SaveChanges();
  298. }
  299. query.UpdateDate = DateTime.Now;
  300. query.ResultDate = DateTime.Now;
  301. query.QueryCount += Sns.Length;//添加订单完成数
  302. maindb.SaveChanges();
  303. return new AppResultJson() { Status = "1", Info = "", Data = Obj };
  304. }
  305. #endregion
  306. #region 创客-过期机具回收-仓库管理-驳回
  307. [Authorize]
  308. public JsonResult RefuseRecyc(string value)
  309. {
  310. value = DesDecrypt(value);
  311. JsonData data = JsonMapper.ToObject(value);
  312. AppResultJson result = RefuseRecycDo(value);
  313. return Json(new AppResultJson() { Status = result.Status, Info = result.Info, Data = result.Data });
  314. }
  315. public AppResultJson RefuseRecycDo(string value)
  316. {
  317. JsonData data = JsonMapper.ToObject(value);
  318. // int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  319. int RecycStoreId = int.Parse(function.CheckInt(data["RecycStoreId"].ToString())); //仓库Id
  320. int OrderId = int.Parse(function.CheckInt(data["OrderId"].ToString())); //记录Id
  321. string SnList = data["SnList"].ToString(); //机具Sn
  322. string[] Sns = SnList.Split(',');
  323. string checks = RedisDbconn.Instance.Get<string>("CheckRefuseRecyc:" + OrderId);
  324. if (checks == "1")
  325. {
  326. return new AppResultJson() { Status = "-1", Info = "请勿重复操作" };
  327. }
  328. RedisDbconn.Instance.Set("CheckRefuseRecyc:" + OrderId, "1");
  329. RedisDbconn.Instance.SetExpire("CheckRefuseRecyc:" + OrderId, 10);
  330. var PosInfo = "";
  331. Dictionary<string, object> Obj = new Dictionary<string, object>();
  332. var query = maindb.RecycMachineOrder.FirstOrDefault(m => m.Id == OrderId) ?? new RecycMachineOrder();
  333. var store = maindb.StoreHouse.FirstOrDefault(m => m.Id == query.RecycStoreId) ?? new StoreHouse();
  334. var brand = maindb.KqProducts.FirstOrDefault(m => m.Id == query.BrandId) ?? new KqProducts();
  335. var recycMachineOrderPos = maindb.RecycMachineOrderPos.Where(m => m.OrderId == OrderId && m.Status == 0).ToList();
  336. foreach (var item in Sns)
  337. {
  338. PosInfo += brand.Name + ":" + item + "," + "<br/>";
  339. var pos = maindb.PosMachinesTwo.FirstOrDefault(m => m.Status > -1 && m.PosSn == item && m.BindingState == 0 && m.ActivationState == 0 && m.RecycStatus == 99) ?? new PosMachinesTwo();
  340. var poscount = maindb.PosMachinesTwo.FirstOrDefault(m => m.Status > -1 && m.PosSn == item && m.BindingState == 1 && m.ActivationState == 1) ?? new PosMachinesTwo();
  341. var orderposcount = recycMachineOrderPos.FirstOrDefault(m => m.QueryCount == 0 && m.SnNo == item) ?? new RecycMachineOrderPos();
  342. if (poscount.Id > 0 && orderposcount.Id > 0)
  343. {
  344. query.QueryCount += 1;
  345. query.UpdateDate = DateTime.Now;
  346. orderposcount.QueryCount += 1;
  347. orderposcount.UpdateDate = DateTime.Now;
  348. maindb.SaveChanges();
  349. return new AppResultJson() { Status = "-1", Info = "部分机具已激活,请重新刷新操作" };
  350. }
  351. var info = recycMachineOrderPos.FirstOrDefault(m => m.Status == 0 && m.OrderId == OrderId && m.SnNo == item) ?? new RecycMachineOrderPos();
  352. if (info.Id == 0 || pos.Id == 0)
  353. {
  354. return new AppResultJson() { Status = "-1", Info = "机具" + pos.PosSn + "不满足驳回条件" };
  355. // return new AppResultJson() { Status = "-1", Info = "部分机具已激活,请重新刷新操作" };
  356. }
  357. pos.RecycStatus = 0;
  358. info.Status = 2;//状态(-1 已撤回 0 待处理 1 已确认 2 驳回)
  359. info.UpdateDate = DateTime.Now;
  360. info.ResultDate = DateTime.Now;
  361. maindb.SaveChanges();
  362. }
  363. query.UpdateDate = DateTime.Now;
  364. query.ResultDate = DateTime.Now;
  365. query.QueryCount += Sns.Length;//添加订单完成数
  366. maindb.SaveChanges();
  367. RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal()
  368. {
  369. UserId = query.UserId, //创客
  370. Title = "机具回收驳回通知", //标题
  371. Content = "<div class='f16'>" + PosInfo + "</ div > ",//内容
  372. Summary = "您提交的过期回收机具已被" + store.StoreNo + "_" + store.StoreName + "驳回,请打开我的-回收机具及时处理!",
  373. CreateDate = DateTime.Now,
  374. }));
  375. return new AppResultJson() { Status = "1", Info = "", Data = Obj };
  376. }
  377. #endregion
  378. #region 创客-过期机具回收-提交回收申请
  379. [Authorize]
  380. public JsonResult Add(string value)
  381. {
  382. value = DesDecrypt(value);
  383. JsonData data = JsonMapper.ToObject(value);
  384. AppResultJson result = AddDo(value);
  385. return Json(new AppResultJson() { Status = result.Status, Info = result.Info, Data = result.Data });
  386. }
  387. public AppResultJson AddDo(string value)
  388. {
  389. JsonData data = JsonMapper.ToObject(value);
  390. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  391. int RecycStoreId = int.Parse(function.CheckInt(data["RecycStoreId"].ToString())); //退回仓库
  392. int PostType = int.Parse(function.CheckInt(data["PostType"].ToString())); //寄回方式(1 邮寄 2 送货上门)
  393. string ErpName = data["ErpName"].ToString(); //快递名称
  394. string ErpCode = data["ErpCode"].ToString(); //快递单号
  395. int BrandId = int.Parse(function.CheckInt(data["BrandId"].ToString())); //机具品牌
  396. string SnList = data["SnList"].ToString(); //机具Sn列表
  397. string[] Sns = SnList.Split(',');
  398. string checks = RedisDbconn.Instance.Get<string>("CheckRecyMachineAdd:" + UserId);
  399. if (checks == "1")
  400. {
  401. return new AppResultJson() { Status = "-1", Info = "请勿重复操作" };
  402. }
  403. RedisDbconn.Instance.Set("CheckRecyMachineAdd:" + UserId, "1");
  404. RedisDbconn.Instance.SetExpire("CheckRecyMachineAdd:" + UserId, 10);
  405. Dictionary<string, object> Obj = new Dictionary<string, object>();
  406. RecycMachineOrder query = new RecycMachineOrder();
  407. RecycMachineOrderPos querys = new RecycMachineOrderPos();
  408. var store = maindb.StoreHouse.FirstOrDefault(m => m.Id == RecycStoreId) ?? new StoreHouse();
  409. var user = maindb.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  410. var brand = maindb.KqProducts.FirstOrDefault(m => m.Id == BrandId) ?? new KqProducts();
  411. var PosInfo = "";
  412. query = maindb.RecycMachineOrder.Add(new RecycMachineOrder()
  413. {
  414. CreateDate = DateTime.Now, //创建时间
  415. Sort = Sns.Length,//订单包含机具数
  416. QueryCount = 0,//订单机具完成数
  417. UserId = UserId, //创客
  418. RecycOrderNo = "JJHS" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8),
  419. RecycStoreId = RecycStoreId, //退回仓库
  420. SeoTitle = store.UserId.ToString(),//寄回仓库所属创客Id
  421. PostType = PostType, //寄回方式
  422. ErpName = ErpName, //快递名称
  423. ErpCode = ErpCode, //快递单号
  424. BrandId = BrandId, //机具品牌
  425. }).Entity;
  426. maindb.SaveChanges();
  427. foreach (var item in Sns)
  428. {
  429. PosInfo += brand.Name + ":" + item + "," + "<br/>";
  430. var pos = maindb.PosMachinesTwo.FirstOrDefault(m => m.Status > -1 && m.BrandId == BrandId && m.PosSn == item) ?? new PosMachinesTwo();
  431. pos.RecycStatus = 99;//机具回收状态设为待处理
  432. querys = maindb.RecycMachineOrderPos.Add(new RecycMachineOrderPos()
  433. {
  434. CreateDate = DateTime.Now, //创建时间
  435. OrderId = query.Id,//订单Id
  436. BrandId = BrandId, //机具品牌
  437. SnNo = item,//机具Sn
  438. }).Entity;
  439. maindb.SaveChanges();
  440. }
  441. RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal()
  442. {
  443. UserId = store.UserId, //创客
  444. Title = "机具回收通知", //标题
  445. Content = "<div class='f16'>" + PosInfo + "</ div > ",//内容
  446. Summary = "您收到来自创客" + user.MakerCode + "机具回收订单,请打开仓库管理及时处理!",
  447. CreateDate = DateTime.Now,
  448. }));
  449. return new AppResultJson() { Status = "1", Info = "成功", Data = Obj };
  450. }
  451. #endregion
  452. #region 创客-过期机具回收-回收分仓列表
  453. [Authorize]
  454. public JsonResult StoreInfoList(string value)
  455. {
  456. value = DesDecrypt(value);
  457. JsonData data = JsonMapper.ToObject(value);
  458. List<Dictionary<string, object>> dataList = StoreInfoListDo(value);
  459. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
  460. }
  461. public List<Dictionary<string, object>> StoreInfoListDo(string value)
  462. {
  463. JsonData data = JsonMapper.ToObject(value);
  464. int BrandId = int.Parse(function.CheckInt(data["BrandId"].ToString())); //机具品牌
  465. string KeyWord = data["KeyWord"].ToString(); //搜索关键词
  466. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  467. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  468. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  469. var strBrandId = BrandId.ToString();
  470. IQueryable<StoreHouse> query = maindb.StoreHouse.Where(m => m.Status > 0 && m.Sort == 0 && m.BrandId == strBrandId);
  471. query = query.OrderByDescending(m => m.Sort).ThenByDescending(m => m.Id);
  472. if (!string.IsNullOrEmpty(KeyWord))
  473. {
  474. query = query.Where(m => m.StoreName.Contains(KeyWord));
  475. }
  476. if (PageNum == 1)
  477. {
  478. query = query.Take(PageSize);
  479. }
  480. else
  481. {
  482. int skipNum = PageSize * (PageNum - 1);
  483. query = query.Skip(skipNum).Take(PageSize);
  484. }
  485. var mydata = query.ToList();
  486. foreach (var subdata in mydata)
  487. {
  488. Dictionary<string, object> curData = new Dictionary<string, object>();
  489. var user = maindb.Users.FirstOrDefault(m => m.Id == subdata.UserId) ?? new Users();
  490. curData.Add("Id", subdata.Id); //仓库Id
  491. curData.Add("BrandId", subdata.BrandId); //仓库品牌
  492. curData.Add("Name", subdata.StoreName); //仓库名称
  493. curData.Add("Address", subdata.Address); //仓库地址
  494. curData.Add("UserName", user.RealName); //仓库所属人
  495. curData.Add("userMobile", user.Mobile); //仓库所属人手机号
  496. dataList.Add(curData);
  497. }
  498. return dataList;
  499. }
  500. #endregion
  501. #region 创客-过期机具回收-撤回申请
  502. [Authorize]
  503. public JsonResult Cancel(string value)
  504. {
  505. value = DesDecrypt(value);
  506. JsonData data = JsonMapper.ToObject(value);
  507. AppResultJson result = CancelDo(value);
  508. return Json(new AppResultJson() { Status = result.Status, Info = result.Info, Data = result.Data });
  509. }
  510. public AppResultJson CancelDo(string value)
  511. {
  512. JsonData data = JsonMapper.ToObject(value);
  513. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  514. Dictionary<string, object> Obj = new Dictionary<string, object>();
  515. string SnIds = data["SnIds"].ToString(); //机具Id
  516. string[] strids = SnIds.Split(',');
  517. string checks = RedisDbconn.Instance.Get<string>("CheckRecyMachineCancel:" + UserId);
  518. if (checks == "1")
  519. {
  520. return new AppResultJson() { Status = "-1", Info = "请勿重复操作" };
  521. }
  522. RedisDbconn.Instance.Set("CheckRecyMachineCancel:" + UserId, "1");
  523. RedisDbconn.Instance.SetExpire("CheckRecyMachineCancel:" + UserId, 10);
  524. var user = maindb.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
  525. var PosInfo = "";
  526. foreach (var item in strids)
  527. {
  528. var Id = int.Parse(item);
  529. var pos = maindb.PosMachinesTwo.FirstOrDefault(m => m.Status > -1 && m.Id == Id && m.BindingState == 0 && m.ActivationState == 0 && m.RecycStatus == 99) ?? new PosMachinesTwo();
  530. var recy = maindb.RecycMachineOrderPos.FirstOrDefault(m => m.Status == 0 && m.SnNo == pos.PosSn) ?? new RecycMachineOrderPos();
  531. if (recy.Id == 0 || pos.Id == 0)
  532. {
  533. return new AppResultJson() { Status = "-1", Info = "机具" + pos.PosSn + "不满足撤回条件" };
  534. }
  535. var brand = maindb.KqProducts.FirstOrDefault(m => m.Id == pos.BrandId) ?? new KqProducts();
  536. PosInfo += brand.Name + ":" + pos.PosSn + "," + "<br/>";
  537. var recyOrder = maindb.RecycMachineOrder.FirstOrDefault(m => m.Id == recy.OrderId) ?? new RecycMachineOrder();
  538. pos.RecycStatus = 0;//变更机具回收状态
  539. pos.UpdateDate = DateTime.Now;
  540. recy.Status = -1;//变更机具回收记录状态
  541. recy.UpdateDate = DateTime.Now;
  542. recy.CancelDate = DateTime.Now;
  543. recyOrder.UpdateDate = DateTime.Now;//变更机具回收订单时间
  544. recyOrder.CancelDate = DateTime.Now;//变更机具回收订单时间
  545. recyOrder.QueryCount += 1;//添加订单机具完成数
  546. }
  547. maindb.SaveChanges();
  548. RedisDbconn.Instance.AddList("MsgPersonalQueue", Newtonsoft.Json.JsonConvert.SerializeObject(new MsgPersonal()
  549. {
  550. UserId = UserId, //创客
  551. Title = "机具回收撤回通知", //标题
  552. Content = "<div class='f16'>" + PosInfo + "</ div > ",//内容
  553. Summary = "您的部分过期回收机具已被您撤回,请查看!",
  554. CreateDate = DateTime.Now,
  555. }));
  556. return new AppResultJson() { Status = "1", Info = "撤回成功", Data = Obj };
  557. }
  558. #endregion
  559. #region 创客-过期机具回收-机具寄回记录
  560. [Authorize]
  561. public JsonResult List(string value)
  562. {
  563. value = DesDecrypt(value);
  564. JsonData data = JsonMapper.ToObject(value);
  565. List<Dictionary<string, object>> dataList = ListDo(value);
  566. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
  567. }
  568. public List<Dictionary<string, object>> ListDo(string value)
  569. {
  570. JsonData data = JsonMapper.ToObject(value);
  571. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  572. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  573. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  574. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  575. IQueryable<RecycMachineOrder> query = maindb.RecycMachineOrder.Where(m => m.Status >= -1);//Status(-1 撤回 0 待处理 1 已确认 2 驳回)
  576. if (!string.IsNullOrEmpty(data["UserId"].ToString()))
  577. {
  578. query = query.Where(m => m.UserId == UserId);
  579. }
  580. int TotalCount = query.Count();
  581. query = query.OrderByDescending(m => m.CreateDate).ThenByDescending(m => m.Id);
  582. if (PageNum == 1)
  583. {
  584. query = query.Take(PageSize);
  585. }
  586. else
  587. {
  588. int skipNum = PageSize * (PageNum - 1);
  589. query = query.Skip(skipNum).Take(PageSize);
  590. }
  591. var mydata = query.ToList();
  592. foreach (var subdata in mydata)
  593. {
  594. Dictionary<string, object> curData = new Dictionary<string, object>();
  595. curData.Add("RecycStoreId", subdata.RecycStoreId); //退回仓库
  596. Dictionary<string, object> UserInfo = new Dictionary<string, object>();
  597. StoreHouse StoreHouseData = maindb.StoreHouse.FirstOrDefault(m => m.Id == subdata.RecycStoreId) ?? new StoreHouse();
  598. var user = maindb.Users.FirstOrDefault(m => m.Id == StoreHouseData.UserId) ?? new Users();
  599. UserInfo.Add("UserName", user.RealName); //仓库所属人
  600. UserInfo.Add("UserMobile", user.Mobile); //仓库所属人手机号
  601. UserInfo.Add("StoreName", StoreHouseData.StoreName); //仓库名称
  602. UserInfo.Add("Address", StoreHouseData.Address); //仓库地址
  603. curData.Add("UserInfo", UserInfo);
  604. curData.Add("RecycOrderNo", subdata.RecycOrderNo); //申请单号
  605. if (subdata.PostType == 1)
  606. {
  607. curData.Add("PostType", subdata.PostType); //寄回方式(1 邮寄 2 送货上门)
  608. curData.Add("ErpCode", subdata.ErpCode); //快递单号
  609. }
  610. if (subdata.PostType == 2)
  611. {
  612. curData.Add("PostType", subdata.PostType); //寄回方式(1 邮寄 2 送货上门)
  613. }
  614. curData.Add("CreateDate", subdata.CreateDate == null ? "" : subdata.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //CreateDate
  615. curData.Add("UpdateDate", subdata.UpdateDate == null ? "" : subdata.UpdateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //最后操作时间
  616. curData.Add("BrandId", subdata.BrandId); //机具品牌
  617. var brandInfo = maindb.KqProducts.FirstOrDefault(m => m.Id == subdata.BrandId) ?? new KqProducts();
  618. curData.Add("BrandName", brandInfo.Name); //品牌名称
  619. var recycMachineOrderPos = maindb.RecycMachineOrderPos.Where(m => m.OrderId == subdata.Id).ToList();
  620. var count = recycMachineOrderPos.Count();
  621. curData.Add("Count", count); //数量
  622. List<Dictionary<string, object>> SnLists = new List<Dictionary<string, object>>();
  623. foreach (var item in recycMachineOrderPos)
  624. {
  625. var posMachinesTwo = maindb.PosMachinesTwo.FirstOrDefault(m => m.Status > -1 && m.BindingState == 1 && m.ActivationState == 1 && m.PosSn == item.SnNo) ?? new PosMachinesTwo();
  626. Dictionary<string, object> SnList = new Dictionary<string, object>();
  627. if (posMachinesTwo.Id == 0)
  628. {
  629. SnList.Add("Status", item.Status);
  630. SnList.Add("SnNo", item.SnNo);
  631. SnLists.Add(SnList);
  632. }
  633. }
  634. curData.Add("SnList", SnLists);
  635. dataList.Add(curData);
  636. }
  637. return dataList;
  638. }
  639. #endregion
  640. #region 创客-过期机具回收-可回收机具数
  641. [Authorize]
  642. public JsonResult UserPosCount(string value)
  643. {
  644. value = DesDecrypt(value);
  645. JsonData data = JsonMapper.ToObject(value);
  646. Dictionary<string, object> Obj = UserPosCounDo(value);
  647. return Json(new AppResultJson() { Status = "1", Info = "", Data = Obj });
  648. }
  649. public Dictionary<string, object> UserPosCounDo(string value)
  650. {
  651. JsonData data = JsonMapper.ToObject(value);
  652. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客Id
  653. Dictionary<string, object> Obj = new Dictionary<string, object>();
  654. var time = DateTime.Parse(DateTime.Now.AddDays(-10).ToString("yyyy-MM-dd 00:00:00"));//过期限制时间
  655. var Count = maindb.PosMachinesTwo.Where(m => m.Status > -1 && m.ScanQrTrade == 999 && m.BuyUserId == UserId && m.BindingState == 0 && m.ActivationState == 0 && m.RecycEndDate < time && m.RecycStatus == 0).Count();
  656. Obj.Add("Count", Count);
  657. return Obj;
  658. }
  659. #endregion
  660. #region 仓库-过期机具回收-订单数
  661. [Authorize]
  662. public JsonResult StorePosCount(string value)
  663. {
  664. value = DesDecrypt(value);
  665. JsonData data = JsonMapper.ToObject(value);
  666. Dictionary<string, object> Obj = StorePosCountDo(value);
  667. return Json(new AppResultJson() { Status = "1", Info = "", Data = Obj });
  668. }
  669. public Dictionary<string, object> StorePosCountDo(string value)
  670. {
  671. JsonData data = JsonMapper.ToObject(value);
  672. string UserId = data["UserId"].ToString(); //创客Id
  673. Dictionary<string, object> Obj = new Dictionary<string, object>();
  674. var Count = maindb.RecycMachineOrder.Where(m => m.SeoTitle == UserId && m.Sort != m.QueryCount).Count();
  675. Obj.Add("Count", Count);
  676. return Obj;
  677. }
  678. #endregion
  679. #region 创客-过期机具回收-过期机具预扣款
  680. [Authorize]
  681. public JsonResult ChargeList(string value)
  682. {
  683. value = DesDecrypt(value);
  684. JsonData data = JsonMapper.ToObject(value);
  685. Dictionary<string, object> Obj = new Dictionary<string, object>();
  686. List<Dictionary<string, object>> dataList = ChargeListDo(value, out Obj);
  687. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList, Other = Obj });
  688. }
  689. public List<Dictionary<string, object>> ChargeListDo(string value, out Dictionary<string, object> Other)
  690. {
  691. JsonData data = JsonMapper.ToObject(value);
  692. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客Id
  693. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  694. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  695. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  696. var userAccount = maindb.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new UserAccount();
  697. var query = maindb.ToChargeBackRecord.Where(m => m.Status == 0 && m.UserId == UserId).OrderByDescending(m => m.Id).ToList();
  698. foreach (var item in query)
  699. {
  700. Dictionary<string, object> dataInfo = new Dictionary<string, object>();
  701. dataInfo.Add("ChargeAmount", item.ChargeAmount);
  702. dataInfo.Add("ChargeType", item.ChargeType);
  703. dataInfo.Add("CreateDate", item.CreateDate);
  704. dataInfo.Add("Remark", item.Remark);
  705. dataList.Add(dataInfo);
  706. }
  707. Dictionary<string, object> Obj = new Dictionary<string, object>();
  708. Obj.Add("BalanceAmount", userAccount.BalanceAmount);//余额
  709. Obj.Add("ToChargeAmount", userAccount.ToChargeAmount);//预扣款金额
  710. Other = Obj;
  711. dataList = dataList.Skip((PageNum - 1) * PageSize).Take(PageSize).ToList();//分页的重点
  712. return dataList;
  713. }
  714. #endregion
  715. #region 创客-过期机具回收--待回收机具品牌
  716. [Authorize]
  717. public JsonResult RecycPosBrandList(string value)
  718. {
  719. value = DesDecrypt(value);
  720. JsonData data = JsonMapper.ToObject(value);
  721. List<Dictionary<string, object>> dataList = RecycPosBrandListDo(value);
  722. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
  723. }
  724. public List<Dictionary<string, object>> RecycPosBrandListDo(string value)
  725. {
  726. JsonData data = JsonMapper.ToObject(value);
  727. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客Id
  728. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  729. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  730. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  731. var time = DateTime.Now.AddDays(-10).ToString("yyyy-MM-dd 00:00:00");//过期限制时间
  732. DataTable dt = OtherMySqlConn.dtable("SELECT BrandId FROM PosMachinesTwo WHERE `Status`>-1 AND ScanQrTrade=999 AND BuyUserId>0 AND BuyUserId=" + UserId + " AND BindingState=0 AND ActivationState=0 AND RecycEndDate <'" + time + "' GROUP BY BrandId");//消息推送创客
  733. var brandInfo = maindb.KqProducts.ToList();
  734. foreach (DataRow item in dt.Rows)
  735. {
  736. int BrandId = int.Parse(item["BrandId"].ToString());
  737. var brand = brandInfo.FirstOrDefault(m => m.Id == BrandId);
  738. Dictionary<string, object> dataInfo = new Dictionary<string, object>();
  739. dataInfo.Add("Id", brand.Id);
  740. dataInfo.Add("Name", brand.Name);
  741. dataList.Add(dataInfo);
  742. }
  743. return dataList;
  744. }
  745. #endregion
  746. #region 检查签名是否合法,合法返回1,不合法返回提示信息
  747. /// <summary>
  748. /// 检查签名是否合法,合法返回1,不合法返回提示信息
  749. /// </summary>
  750. /// <param name="value">请求的参数(json字符串)</param>
  751. /// <param name="signField">要签名的字段</param>
  752. /// <returns></returns>
  753. private string CheckSign(string value, string[] signField)
  754. {
  755. JsonData json = JsonMapper.ToObject(value);
  756. Dictionary<string, string> dic = new Dictionary<string, string>();
  757. for (int i = 0; i < signField.Length; i++)
  758. {
  759. dic.Add(signField[i], json[signField[i]].ToString());
  760. }
  761. string sign = json["sign"].ToString(); //客户端签名字符串
  762. return new Sign().sign(dic, sign);
  763. }
  764. #endregion
  765. }
  766. }