UserCashRecordController.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  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.MainModels;
  11. using LitJson;
  12. using Library;
  13. namespace MySystem.Areas.Api.Controllers.v1
  14. {
  15. [Area("Api")]
  16. [Route("Api/v1/[controller]/[action]")]
  17. public class UserCashRecordController : BaseController
  18. {
  19. public UserCashRecordController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
  20. {
  21. }
  22. #region 创客-我的-提现-提交提现申请
  23. [Authorize]
  24. public JsonResult PostWithdraw(string value)
  25. {
  26. value = DesDecrypt(value);
  27. JsonData data = JsonMapper.ToObject(value);
  28. AppResultJson result = PostWithdrawDo(value);
  29. return Json(new AppResultJson() { Status = result.Status, Info = result.Info, Data = result.Data });
  30. }
  31. public AppResultJson PostWithdrawDo(string value)
  32. {
  33. JsonData data = JsonMapper.ToObject(value);
  34. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  35. decimal TradeAmount = decimal.Parse(function.CheckNum(data["TradeAmount"].ToString())); //交易金额
  36. var amount = 0;//手续费
  37. if (TradeAmount < 100)
  38. {
  39. return new AppResultJson() { Status = "-1", Info = "100元起提" };
  40. }
  41. if (TradeAmount < 500)
  42. {
  43. amount = 3;
  44. }
  45. UserAccount account = maindb.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new UserAccount();
  46. if (account.AccountStatus == 1)
  47. {
  48. return new AppResultJson() { Status = "-1", Info = "参数错误,请联系客服" };
  49. }
  50. if (account.BalanceAmount <= 0 || account.BalanceAmount - account.ToChargeAmount <= 0)
  51. {
  52. return new AppResultJson() { Status = "-1", Info = "余额不足" };
  53. }
  54. if (account.BalanceAmount - account.ToChargeAmount < TradeAmount)
  55. {
  56. TradeAmount = account.BalanceAmount - account.ToChargeAmount;
  57. }
  58. Dictionary<string, object> Obj = new Dictionary<string, object>();
  59. string CashOrderNo = "BC" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
  60. Users user = UsersDbconn.Instance.Get(UserId) ?? new Users();
  61. decimal ManageFee = TradeAmount * 0.08M;
  62. decimal ActualTradeAmount = TradeAmount - ManageFee;
  63. decimal TradeFee = 0; // 服务费
  64. if(TradeAmount < 500) //单次提现500元以下的订单收取3元提现服务费/笔
  65. {
  66. TradeFee = 3;
  67. ActualTradeAmount -= TradeFee;
  68. }
  69. UserCashRecord cash = maindb.UserCashRecord.Add(new UserCashRecord()
  70. {
  71. CreateDate = DateTime.Now,
  72. CashOrderNo = CashOrderNo, //申请提现单号
  73. UserId = UserId, //创客
  74. IdCardNo = user.CertId, //身份证号
  75. SettleBankCardNo = user.SettleBankCardNo, //提现卡号
  76. SettleBankName = user.SettleBankName, //银行名称
  77. TradeType = 2, //交易类型
  78. TradeAmount = TradeAmount, //交易金额
  79. ActualTradeAmount = ActualTradeAmount,
  80. ManageFee = ManageFee,
  81. TradeFee = TradeFee,
  82. }).Entity;
  83. maindb.SaveChanges();
  84. decimal BeforeTotalAmount = account.TotalAmount; //变更前总金额
  85. decimal BeforeFreezeAmount = account.FreezeAmount; //变更前冻结金额
  86. decimal BeforeBalanceAmount = account.BalanceAmount; //变更前余额
  87. account.BalanceAmount -= TradeAmount;
  88. account.FreezeAmount += TradeAmount;
  89. decimal AfterTotalAmount = account.TotalAmount; //变更后总金额
  90. decimal AfterFreezeAmount = account.FreezeAmount; //变更后冻结金额
  91. decimal AfterBalanceAmount = account.BalanceAmount; //变更后余额
  92. maindb.UserAccountRecord.Add(new UserAccountRecord()
  93. {
  94. CreateDate = DateTime.Now,
  95. UpdateDate = DateTime.Now,
  96. UserId = user.Id, //创客
  97. ChangeType = 2, //变动类型
  98. ProductType = 99, //产品类型
  99. ChangeAmount = TradeAmount, //变更金额
  100. BeforeTotalAmount = BeforeTotalAmount, //变更前总金额
  101. AfterTotalAmount = AfterTotalAmount, //变更后总金额
  102. BeforeFreezeAmount = BeforeFreezeAmount, //变更前冻结金额
  103. AfterFreezeAmount = AfterFreezeAmount, //变更后冻结金额
  104. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  105. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  106. });
  107. maindb.SaveChanges();
  108. RedisDbconn.Instance.Clear("UserCashRecordList:" + UserId);
  109. return new AppResultJson() { Status = "1", Info = "", Data = Obj };
  110. }
  111. #endregion
  112. #region 创客-我的-提现-提现记录
  113. [Authorize]
  114. public JsonResult List(string value)
  115. {
  116. value = DesDecrypt(value);
  117. JsonData data = JsonMapper.ToObject(value);
  118. List<Dictionary<string, object>> dataList = ListDo(value);
  119. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
  120. }
  121. public List<Dictionary<string, object>> ListDo(string value)
  122. {
  123. JsonData data = JsonMapper.ToObject(value);
  124. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  125. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  126. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  127. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  128. // List<int> query = UserCashRecordDbconn.Instance.GetList(UserId, PageNum, PageSize);
  129. IQueryable<UserCashRecord> query = maindb.UserCashRecord.Where(m => m.UserId == UserId && m.TradeType < 3).OrderByDescending(m => m.Id);
  130. if (PageNum == 1)
  131. {
  132. query = query.Take(PageSize);
  133. }
  134. else
  135. {
  136. int skipNum = PageSize * (PageNum - 1);
  137. query = query.Skip(skipNum).Take(PageSize);
  138. }
  139. foreach (UserCashRecord subdata in query.ToList())
  140. {
  141. // UserCashRecord subdata = UserCashRecordDbconn.Instance.Get(CashRecordId) ?? new UserCashRecord();
  142. Dictionary<string, object> curData = new Dictionary<string, object>();
  143. curData.Add("TradeAmount", subdata.TradeAmount); //交易金额
  144. curData.Add("Remark", "提现到" + subdata.SettleBankName + "(" + subdata.SettleBankCardNo.Substring(subdata.SettleBankCardNo.Length - 4) + ")"); //备注
  145. curData.Add("Status", subdata.Status); //状态,0-处理中,1-交易成功,2-提现失败,3-挂账,-1-状态异常
  146. curData.Add("CreateDate", subdata.CreateDate == null ? "" : subdata.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //CreateDate
  147. curData.Add("Id", subdata.Id); //Id
  148. dataList.Add(curData);
  149. }
  150. return dataList;
  151. }
  152. #endregion
  153. #region 创客-盟主可提现金额提现-提交提现申请
  154. [Authorize]
  155. public JsonResult LeaderPostWithdraw(string value)
  156. {
  157. value = DesDecrypt(value);
  158. JsonData data = JsonMapper.ToObject(value);
  159. AppResultJson result = LeaderPostWithdrawDo(value);
  160. return Json(new AppResultJson() { Status = result.Status, Info = result.Info, Data = result.Data });
  161. }
  162. public AppResultJson LeaderPostWithdrawDo(string value)
  163. {
  164. JsonData data = JsonMapper.ToObject(value);
  165. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  166. decimal TradeAmount = decimal.Parse(function.CheckNum(data["TradeAmount"].ToString())); //交易金额
  167. if (TradeAmount < 100)
  168. {
  169. return new AppResultJson() { Status = "-1", Info = "100元起提" };
  170. }
  171. UserAccount account = maindb.UserAccount.FirstOrDefault(m => m.Id == UserId) ?? new UserAccount();
  172. if (account.AccountStatus == 1)
  173. {
  174. return new AppResultJson() { Status = "-1", Info = "参数错误,请联系客服" };
  175. }
  176. if (account.LeaderBalanceAmount <= 0)
  177. {
  178. return new AppResultJson() { Status = "-1", Info = "余额不足" };
  179. }
  180. if (account.LeaderBalanceAmount < TradeAmount)
  181. {
  182. TradeAmount = account.LeaderBalanceAmount;
  183. }
  184. Dictionary<string, object> Obj = new Dictionary<string, object>();
  185. string CashOrderNo = "MZTX" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
  186. Users user = UsersDbconn.Instance.Get(UserId) ?? new Users();
  187. decimal ActualTradeAmount = TradeAmount;
  188. decimal ManageFee = TradeAmount - ActualTradeAmount;
  189. UserCashRecord cash = maindb.UserCashRecord.Add(new UserCashRecord()
  190. {
  191. CreateDate = DateTime.Now,
  192. CashOrderNo = CashOrderNo, //申请提现单号
  193. UserId = UserId, //创客
  194. IdCardNo = user.CertId, //身份证号
  195. SettleBankCardNo = user.SettleBankCardNo, //提现卡号
  196. SettleBankName = user.SettleBankName, //银行名称
  197. TradeType = 3, //交易类型(3 盟主可提现金额提现)
  198. TradeAmount = TradeAmount, //交易金额
  199. ActualTradeAmount = TradeAmount,
  200. ManageFee = ManageFee,
  201. }).Entity;
  202. maindb.SaveChanges();
  203. decimal BeforeBalanceAmount = account.LeaderBalanceAmount; //变更前余额
  204. account.LeaderBalanceAmount -= TradeAmount;
  205. decimal AfterBalanceAmount = account.LeaderBalanceAmount; //变更后余额
  206. maindb.LeaderAccountRecord.Add(new LeaderAccountRecord()
  207. {
  208. CreateDate = DateTime.Now,
  209. Sort = cash.Id,//提现详情Id
  210. TransRecordNo = CashOrderNo,//提现单号
  211. SeoDescription = "提现到" + user.SettleBankName + "(" + user.SettleBankCardNo.Substring(user.SettleBankCardNo.Length - 4) + ")",//详情
  212. UserId = user.Id, //创客
  213. ChangeType = 2, //变动类型
  214. ProductType = 99, //产品类型
  215. ChangeAmount = TradeAmount, //变更金额
  216. BeforeBalanceAmount = BeforeBalanceAmount, //变更前余额
  217. AfterBalanceAmount = AfterBalanceAmount, //变更后余额
  218. });
  219. maindb.SaveChanges();
  220. return new AppResultJson() { Status = "1", Info = "", Data = Obj };
  221. }
  222. #endregion
  223. #region 创客-盟主可提现金额提现-提现记录
  224. [Authorize]
  225. public JsonResult LeaderList(string value)
  226. {
  227. value = DesDecrypt(value);
  228. JsonData data = JsonMapper.ToObject(value);
  229. List<Dictionary<string, object>> dataList = LeaderListDo(value);
  230. return Json(new AppResultJson() { Status = "1", Info = "", Data = dataList });
  231. }
  232. public List<Dictionary<string, object>> LeaderListDo(string value)
  233. {
  234. JsonData data = JsonMapper.ToObject(value);
  235. int UserId = int.Parse(function.CheckInt(data["UserId"].ToString())); //创客
  236. int PageSize = int.Parse(function.CheckInt(data["PageSize"].ToString()));
  237. int PageNum = int.Parse(function.CheckInt(data["PageNum"].ToString()));
  238. List<Dictionary<string, object>> dataList = new List<Dictionary<string, object>>();
  239. IQueryable<UserCashRecord> query = maindb.UserCashRecord.Where(m => m.UserId == UserId && m.TradeType == 3).OrderByDescending(m => m.Id);
  240. if (PageNum == 1)
  241. {
  242. query = query.Take(PageSize);
  243. }
  244. else
  245. {
  246. int skipNum = PageSize * (PageNum - 1);
  247. query = query.Skip(skipNum).Take(PageSize);
  248. }
  249. foreach (UserCashRecord subdata in query.ToList())
  250. {
  251. Dictionary<string, object> curData = new Dictionary<string, object>();
  252. curData.Add("TradeAmount", subdata.ActualTradeAmount); //交易金额
  253. curData.Add("Remark", "提现到" + subdata.SettleBankName + "(" + subdata.SettleBankCardNo.Substring(subdata.SettleBankCardNo.Length - 4) + ")"); //备注
  254. curData.Add("Status", subdata.Status); //状态,0-处理中,1-交易成功,2-提现失败,3-挂账,-1-状态异常
  255. curData.Add("CreateDate", subdata.CreateDate == null ? "" : subdata.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //CreateDate
  256. curData.Add("Id", subdata.Id); //Id
  257. curData.Add("DetailId", subdata.Id); //详情Id
  258. dataList.Add(curData);
  259. }
  260. return dataList;
  261. }
  262. #endregion
  263. #region 创客-我的-提现-提现记录详情
  264. [Authorize]
  265. public JsonResult Detail(string value)
  266. {
  267. value = DesDecrypt(value);
  268. JsonData data = JsonMapper.ToObject(value);
  269. Dictionary<string, object> Obj = DetailDo(value);
  270. return Json(new AppResultJson() { Status = "1", Info = "", Data = Obj });
  271. }
  272. public Dictionary<string, object> DetailDo(string value)
  273. {
  274. JsonData data = JsonMapper.ToObject(value);
  275. Dictionary<string, object> Obj = new Dictionary<string, object>();
  276. int Id = int.Parse(function.CheckInt(data["Id"].ToString()));
  277. UserCashRecord query = UserCashRecordDbconn.Instance.Get(Id) ?? new UserCashRecord();
  278. Obj.Add("CashOrderNo", query.CashOrderNo); //申请提现单号
  279. Obj.Add("TradeAmount", query.TradeAmount); //交易金额
  280. Obj.Add("ActualTradeAmount", query.ActualTradeAmount); //实际交易金额
  281. Obj.Add("TradeFee", query.TradeFee); //交易手续费
  282. Obj.Add("ManageFee", query.ManageFee); //扣税金额
  283. Obj.Add("PaymentDate", query.PaymentDate == null ? "" : query.PaymentDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //支付时间
  284. Obj.Add("Remark", query.Remark); //备注
  285. Obj.Add("Id", query.Id); //Id
  286. Obj.Add("CreateDate", query.CreateDate); //创建时间
  287. Obj.Add("Status", query.Status); //状态,0-处理中,1-交易成功,2-提现失败,3-挂账,-1-状态异常
  288. return Obj;
  289. }
  290. #endregion
  291. #region 创客-我的-盟主可提现金额提现-提现记录详情
  292. [Authorize]
  293. public JsonResult LeaderDetail(string value)
  294. {
  295. value = DesDecrypt(value);
  296. JsonData data = JsonMapper.ToObject(value);
  297. Dictionary<string, object> Obj = LeaderDetailDo(value);
  298. return Json(new AppResultJson() { Status = "1", Info = "", Data = Obj });
  299. }
  300. public Dictionary<string, object> LeaderDetailDo(string value)
  301. {
  302. JsonData data = JsonMapper.ToObject(value);
  303. Dictionary<string, object> Obj = new Dictionary<string, object>();
  304. int Id = int.Parse(function.CheckInt(data["Id"].ToString()));
  305. UserCashRecord query = maindb.UserCashRecord.FirstOrDefault(m => m.Id == Id) ?? new UserCashRecord();
  306. Obj.Add("CashOrderNo", query.CashOrderNo); //申请提现单号
  307. Obj.Add("TradeAmount", query.TradeAmount); //交易金额
  308. Obj.Add("ActualTradeAmount", query.ActualTradeAmount); //实际交易金额
  309. Obj.Add("TradeFee", query.TradeFee); //交易手续费
  310. Obj.Add("ManageFee", query.ManageFee); //扣税金额
  311. Obj.Add("PaymentDate", query.PaymentDate == null ? "" : query.PaymentDate.Value.ToString("yyyy-MM-dd HH:mm:ss")); //支付时间
  312. Obj.Add("Remark", query.Remark); //备注
  313. Obj.Add("Id", query.Id); //Id
  314. Obj.Add("CreateDate", query.CreateDate); //创建时间
  315. Obj.Add("Status", query.Status); //状态,0-处理中,1-交易成功,2-提现失败,3-挂账,-1-状态异常
  316. return Obj;
  317. }
  318. #endregion
  319. #region 检查签名是否合法,合法返回1,不合法返回提示信息
  320. /// <summary>
  321. /// 检查签名是否合法,合法返回1,不合法返回提示信息
  322. /// </summary>
  323. /// <param name="value">请求的参数(json字符串)</param>
  324. /// <param name="signField">要签名的字段</param>
  325. /// <returns></returns>
  326. private string CheckSign(string value, string[] signField)
  327. {
  328. JsonData json = JsonMapper.ToObject(value);
  329. Dictionary<string, string> dic = new Dictionary<string, string>();
  330. for (int i = 0; i < signField.Length; i++)
  331. {
  332. dic.Add(signField[i], json[signField[i]].ToString());
  333. }
  334. string sign = json["sign"].ToString(); //客户端签名字符串
  335. return new Sign().sign(dic, sign);
  336. }
  337. #endregion
  338. }
  339. }