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