From 446957fb241cd6489576281c28050062aa6df073 Mon Sep 17 00:00:00 2001 From: username@email.com <yzy2002yzy@163.com> Date: 星期三, 25 九月 2024 14:56:11 +0800 Subject: [PATCH] Merge branch 'master' of http://47.108.235.38:8080/r/cylsg --- cylsg/cylsg.Application/Transfer/UserTransfer.cs | 327 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 314 insertions(+), 13 deletions(-) diff --git a/cylsg/cylsg.Application/Transfer/UserTransfer.cs b/cylsg/cylsg.Application/Transfer/UserTransfer.cs index a5dcbdf..0aaf219 100644 --- a/cylsg/cylsg.Application/Transfer/UserTransfer.cs +++ b/cylsg/cylsg.Application/Transfer/UserTransfer.cs @@ -1,14 +1,25 @@ 锘縰sing cylsg.Core; +using cylsg.Model.TransferOrder; using cylsg.Model.UserModel; +using cylsg.utility; +using cylsg.utility.Extend; using Cylsg.Filter; +using EzCoreNet.Redis; using EzInitqMessageDef; +using EzWechat; +using Furion.LinqBuilder; +using MapsterMapper; +using Newtonsoft.Json; using SKIT.FlurlHttpClient.Wechat.Api.Models; using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Security.Claims; using System.Text; using System.Threading.Tasks; +using TencentCloud.Ame.V20190916.Models; +using static SKIT.FlurlHttpClient.Wechat.Api.Models.ChannelsLeadsGetLeadsInfoByComponentIdResponse.Types; namespace cylsg.Application.Transfer { @@ -21,16 +32,30 @@ public class UserTransfer { - - public UserTransfer() { } + private readonly IEzCoreNetRedisService _redisService; + private readonly IWecharPayServicecs _wecharPayServicecs; + + public UserTransfer(IEzCoreNetRedisService ezCoreNetRedisService,IWecharPayServicecs wecharPayServicecs) { + + _redisService = ezCoreNetRedisService; + _wecharPayServicecs = wecharPayServicecs; + } + + /// <summary> /// 鎻愮幇 /// </summary> /// <param name="Money"></param> - [LimitFilter(LimiType = Limttype.User,timespan =10,ResponseMeg ="璇峰嬁鍦�10绉掑唴閲嶅璇锋眰")] - public async Task GetTransferMoney( [FromQuery]decimal Money) + [LimitFilter(LimiType = Limttype.User, timespan = 10, ResponseMeg = "璇峰嬁鍦�10绉掑唴閲嶅璇锋眰")] + public async Task GetTransferMoney([FromQuery] decimal Money) { - var rs= new BaseRepository<UserWorker>(); + + if (Money < 0.3m) + throw Oops.Oh("蹇呴』澶т簬0.3鍏�"); + if (Money > 2000) + throw Oops.Oh("姣忎汉姣忓ぉ鏈�澶氬彧鑳芥彁鍙�2000鍏�"); + + var rs = new BaseRepository<UserWorker>(); var UserID = App.User?.FindFirstValue("UserID"); int userid = 0; if (!string.IsNullOrEmpty(UserID)) @@ -42,17 +67,293 @@ throw Oops.Oh("娌℃湁璇嗗埆鍒扮敤鎴锋敹鍏�"); } - var uw= await rs.GetByIdAsync(userid); - if((uw.TiXianZonge-uw.YiTiXianJine)< Money) + + if (await _redisService.TryLock(StaticStringDef.TransferMoneyLockKey + userid.ToString(), 300)) { - throw Oops.Oh("鐢ㄦ埛浣欓涓嶈冻"); + + try + { + var UserRs = new BaseRepository<User>(); + var user = await UserRs.GetByIdAsync(userid); + if (user == null) + { + throw Oops.Oh($"娌℃湁鎵惧埌鐢ㄦ埛"); + } + if (string.IsNullOrEmpty(user.WxOpenId)) + { + throw Oops.Oh($"鐢ㄦ埛寰俊OpenID纭疄"); + } + var uw = await rs.GetFirstAsync(x => x.UserId == userid); + if (uw == null) + { + throw Oops.Oh("璇ョ敤鎴锋病鏈夋敹鍏�"); + } + if ((uw.TiXianZonge - uw.YiTiXianJine) < Money) + { + throw Oops.Oh("鐢ㄦ埛浣欓涓嶈冻"); + } + + + var totle = _redisService.Get<decimal>(StaticStringDef.TransferMoneyManKey + userid.ToString()); + if (totle + Money > 2000) + { + throw Oops.Oh("鎻愮幇閲戦涓嶅彲瓒呭嚭2000"); + } + + + + + var UserTiXianDetailwork = new BaseRepository<UserTiXianDetail>(); + var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>(); + if ((uw != null) && ((uw.TiXianZonge - uw.YiTiXianJine) >= Money)) + { + //婊¤冻鏉′欢锛屽彂璧锋敮浠� + var TransferOrder = new WeChatTransferOrder + { + + CreateBy = uw.UserId.ToString(), + CreateTime = DateTime.Now, + // BatchId = _redisService.Get32sn(), + OutBatchNumber = _redisService.Get32sn(), + Remake = "宸濆嵃宸ヨ祫鏀粯", + TransferDetailList = new List<WeChatTransferItem>(), + UserID = uw.UserId, + + + + + }; + try + { + + await UserTiXianDetailwork.AsTenant().BeginTranAsync(); + + + + + var moneylist = Money; + + var maxPayItem = Convert.ToDecimal(App.Configuration["WechartPay:PayMoneyMax"].toInt()); ; + while ((moneylist > maxPayItem)) + { + TransferOrder.TransferDetailList.Add(new WeChatTransferItem + { + CreateBy = uw.UserId.ToString(), + CreateTime = TransferOrder.CreateTime, + IsEn = true, + OpenId = user.WxOpenId, + OutDetailNumber = _redisService.Get32sn(), + + TransferAmount = (int)maxPayItem * 100, + TransferRemark = "宸濆嵃宸ヨ祫鏀粯", + + }); + + moneylist -= maxPayItem; + } + if (moneylist <= 0.3m) + { + //濡傛灉杩欓噷浣庝簬0.3姣涳紝灏嗙ぞ鍖洪妫�锛岀暀涓嬫澶勭悊 + Money -= moneylist; + } + else + + { + TransferOrder.TransferDetailList.Add(new WeChatTransferItem + { + CreateBy = uw.UserId.ToString(), + CreateTime = TransferOrder.CreateTime, + IsEn = true, + OpenId = user.WxOpenId, + OutDetailNumber = _redisService.Get32sn(), + + TransferAmount = (int)(moneylist * 100), + TransferRemark = "宸濆嵃宸ヨ祫鏀粯", + + }); + } + + TransferOrder.TotalAmount = (int)(Money * 100); + TransferOrder.TotalNum = TransferOrder.TransferDetailList.Count(); + + TransferOrder = await WeChatTransferOrderwork.AsSugarClient().InsertNav(TransferOrder).Include(x => x.TransferDetailList).ExecuteReturnEntityAsync(); + await UserTiXianDetailwork.InsertAsync(new UserTiXianDetail + { + CreateBy = uw.UserId.ToString(), + CreateTime = DateTime.Now, + UserId = user.Id, + ZhiChuShouRu = 0, + YiTiXianJine = Money, + WeChatTransferOrderID = TransferOrder.Id, + + }); + //閽卞寘浣欓璋冩暣 + uw.YiTiXianJine += Money; + uw.UpDataBy = uw.UserId.ToString(); + uw.UpDataTime = DateTime.Now; + await rs.UpdateAsync(uw); + + + await UserTiXianDetailwork.AsTenant().CommitTranAsync(); + + totle += Money; + //璁剧疆姣忔棩鎻愮幇闄愰 + _redisService.Add(StaticStringDef.TransferMoneyManKey + userid.ToString(), totle, 60 * 60 * 24); + //鍙戣捣鏀粯 + await InitQMessages.SendMessageAsync(InitQMessages.WxTransfer, TransferOrder.Id.ToString()); + } + catch (Exception) + { + await UserTiXianDetailwork.AsTenant().RollbackTranAsync(); + throw; + } + // 鍙戣捣鏀粯 + + + + } + + } + catch (Exception) + { + + throw; + } + finally + { + await _redisService.TryUnLock(StaticStringDef.TransferMoneyLockKey + userid.ToString()); + } + + + + + + + + + + + + + } - var b = await InitQMessages.SendMessageAsync(InitQMessages.WxTransferMSQ, Money.ToString()); - if (b) - return; - else - throw Oops.Oh("璇锋眰澶辫触"); + else + throw Oops.Oh("璇蜂笉瑕侀绻侀噸澶嶇敵璇�"); + + + + + } + /// <summary> + /// 鑾峰彇涓烘敮浠樺垪琛� + /// </summary> + [AllowAnonymous] + [HttpPost] + [ApiExplorerSettings(IgnoreApi = true)] + public async Task<TransferOderOut> GetTransferOder(SearchTransferOder param) + { + + var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>(); + PageModel pageModel = new PageModel + { PageIndex = param.PageIndex, PageSize = param.PageSize }; + + + Expression<Func<WeChatTransferOrder, bool>> SearchList = (x) => true; + + + if (!string.IsNullOrEmpty(param.BatchStatus)) + { + SearchList= SearchList.And(x => x.BatchStatus.Contains(param.BatchStatus)); + } + if (!string.IsNullOrEmpty(param.NoTBatchStatus)) + { + var lisstring = param.NoTBatchStatus?.Split('|'); + foreach (var lis in lisstring) + { + SearchList= SearchList.And(x => x.BatchStatus != lis); + } + } + if (param.HasSendOk == false) + SearchList= SearchList.And(x => x.BatchId == null); + else + SearchList= SearchList.And(x => x.BatchId != null); + var data = await WeChatTransferOrderwork.GetPageListAsync(SearchList, pageModel); + + return new TransferOderOut + { + listdata = data, + TotalCount=pageModel.TotalCount, + }; + } + /// <summary> + /// 閲嶆柊鏀粯 + /// </summary> + /// <param name="Id"> 鎸夎鍗曟壒娆℃搷浣�</param> + /// <returns></returns> + [AllowAnonymous] + [HttpGet] + [ApiExplorerSettings(IgnoreApi = true)] + public async Task<bool> ReSendTransferOder([FromQuery] string ids) + { + var itmsRes = new BaseRepository<WeChatTransferOrder>(); + if (string.IsNullOrEmpty(ids)) + throw Oops.Oh("鍙傛暟閿欒"); + var idsr= ids.Split(',').Select(x=>x.toInt()).ToList(); + + foreach (var id in idsr) + { + + + if (itmsRes.GetById(id) != null) + await InitQMessages.SendMessageAsync(InitQMessages.WxTransferAg, id.ToString()); + + + } + return true; + + + + + } + + } + /// <summary> + /// + /// </summary> + public class SearchTransferOder + { + + /// <summary> + /// 鎼滅储鐘舵�佸�� 妯$硦鏌ヨ + /// </summary> + public string BatchStatus { get; set; } + /// <summary> + /// 鎺掗櫎鎼滅储鍊肩姸鎬� 瑕佹帓闄ょ殑鐘舵�佸�煎繀椤绘槸鍏ㄧО锛屽涓箣闂寸敤 鈥渱鈥濋棿闅� + /// </summary> + public string NoTBatchStatus { get; set; } + /// <summary> + /// 鏄惁宸茬粡鎴愬姛鍙戣捣浜� + /// </summary> + public bool HasSendOk { get; set; } = false; + /// <summary> + /// 褰撳墠椤电爜 + /// </summary> + public int PageIndex { get; set; } + /// <summary> + /// 椤甸潰澶у皬 + /// </summary> + public int PageSize { get; set; } + + } + + public class TransferOderOut + { + public List<WeChatTransferOrder> listdata { get; set; } + public int TotalCount { get; set; } + } + + } -- Gitblit v1.9.1