From 4686d9d5bc63a5aeb35452ee9049a4720123b992 Mon Sep 17 00:00:00 2001
From: 移动系统liao <liaoxujun@qq.com>
Date: 星期一, 30 九月 2024 15:37:14 +0800
Subject: [PATCH] no message
---
cylsg/cylsg.Application/Transfer/UserTransfer.cs | 332 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 319 insertions(+), 13 deletions(-)
diff --git a/cylsg/cylsg.Application/Transfer/UserTransfer.cs b/cylsg/cylsg.Application/Transfer/UserTransfer.cs
index a5dcbdf..b9c320e 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,298 @@
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??0) - (uw.YiTiXianJine??0)) >= 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,
+ Remark = "鐢ㄦ埛鎻愮幇"
+
+ });
+ //閽卞寘浣欓璋冩暣
+ uw.YiTiXianJine = (uw.YiTiXianJine??0)+ 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;
+ }
+ // 鍙戣捣鏀粯
+
+
+
+ }
+ else
+ {
+ throw Oops.Oh("绯荤粺閿欒");
+ }
+
+ }
+ 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