From 7eca0ab1b6d5142d623efd471985b2a20b559616 Mon Sep 17 00:00:00 2001
From: 小飞侠 <8277136+liaoxujun@user.noreply.gitee.com>
Date: 星期一, 01 十二月 2025 10:55:02 +0800
Subject: [PATCH] 修正审批备注长度
---
cylsg/cylsg.Application/Transfer/UserTransfer.cs | 1011 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 998 insertions(+), 13 deletions(-)
diff --git a/cylsg/cylsg.Application/Transfer/UserTransfer.cs b/cylsg/cylsg.Application/Transfer/UserTransfer.cs
index a5dcbdf..a420c36 100644
--- a/cylsg/cylsg.Application/Transfer/UserTransfer.cs
+++ b/cylsg/cylsg.Application/Transfer/UserTransfer.cs
@@ -1,14 +1,27 @@
锘縰sing cylsg.Core;
+using cylsg.Model.TransferOrder;
using cylsg.Model.UserModel;
+using cylsg.Model.utilityViewModel;
+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 TencentCloud.Domain.V20180808.Models;
+using static SKIT.FlurlHttpClient.Wechat.Api.Models.ChannelsLeadsGetLeadsInfoByComponentIdResponse.Types;
namespace cylsg.Application.Transfer
{
@@ -21,16 +34,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 +69,975 @@
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($"鐢ㄦ埛寰俊纭澶辫触");
+ }
+ 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.IsSetOK!=null)
+ {
+ SearchList = SearchList.And(x =>x.IsSetOK==param.IsSetOK);
+ }
+ if (param.HasSendOk == false)
+ SearchList= SearchList.And(x =>( x.FailNum >0||x.BatchStatus!= "FINISHED")||(x.BatchStatus==null&&x.ErrorCode== "NOT_ENOUGH")||x.FailAmount>0); //NOT_ENOUGH 鏄处鎴锋病鏈夐挶
+ else
+ //鏈変竴绗斿ぇ浣�0 鐨勮涓哄け璐�
+ SearchList= SearchList.And(x => x.FailNum ==0&&x.BatchStatus=="FINISHED");
+ var data=await WeChatTransferOrderwork.AsQueryable().Includes(x => x.user, u => u.Worek).Where(SearchList).Select(x=>new WeChatTransferOrder
+ {
+ UserName=x.user.Worek.name,
+ UserIDCode = x.user.Worek.IdCode,
+ ItCode = x.user.ItCode,
+ YiTiXianGz = x.user.Worek.YiTiXianJine,
+ ZhongGz = x.user.Worek.TiXianZonge,
+ BatchRemark = SqlFunc.Subqueryable<UserWorker>().Where(uw=>uw.UserId==x.UserID).Select(uw => uw.name+ uw.IdCode)
+ },true).ToPageListAsync(pageModel.PageIndex, pageModel.PageSize,pageModel.TotalCount);
+ //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>
+ /// <param name="id"> 璁㈠崟ID</param>
+ /// <returns></returns>
+ [AllowAnonymous]
+ [HttpGet]
+ [ApiExplorerSettings(IgnoreApi = true)]
+ public async Task ReSendCreadTransferMoney([FromQuery] string id)
+ {
+
+
+ var itmsRes = new BaseRepository<WeChatTransferOrder>();
+ if (string.IsNullOrEmpty(id))
+ throw Oops.Oh("鍙傛暟閿欒");
+
+
+ var TOrder = await itmsRes.GetByIdAsync(id.toInt());
+ if (TOrder == null)
+ {
+ throw Oops.Oh("娌℃湁璁㈠崟闇�瑕佸鐞�");
+ }
+ if(TOrder.IsSetOK ==true)
+ {
+ throw Oops.Oh("宸茬粡澶勭悊涓嶅啀澶勭悊");
+ }
+ if(!((TOrder.ErrorCode== "INVALID_REQUEST"&&TOrder.ErrorMsg== "瀵瑰簲鍗曞彿宸茶秴鍑洪噸璇曟湡,璇锋煡鍗曠‘璁ゅ悗鍐冲畾鏄惁鎹㈠崟璇锋眰")|| (TOrder.ErrorCode == "NOT_ENOUGH")||(TOrder.FailAmount>0)))
+ {
+ //涓嶆弧瓒冲啿娲楁敮浠樿姹�
+ throw Oops.Oh("涓嶆弧瓒抽噸鏂版敮浠樿姹�");
+ }
+
+ var rs = new BaseRepository<UserWorker>();
+ var userid = TOrder.UserID;
+ decimal Money = 0;
+
+ if (TOrder.FailAmount==null)
+ {
+ decimal overTotal = 0;
+ if (TOrder.BatchId == null)
+ {
+ overTotal = 0;//娌℃湁鏀粯鍗曪紝璇佹槑娌℃湁鏀粯
+ }
+ else
+ overTotal = (TOrder.SuccessAmount??0)/100m;
+
+
+ //杩欎釜鏄病鏈夊垱寤烘彁浜ゅ崟 鎸夊師浠烽噸鏂版敮浠�
+ Money = ((TOrder.TotalAmount??0)/100m)-overTotal;
+
+ }
+ else
+ Money = (TOrder.FailAmount??0)/100m;
+ if(Money<0.03m)
+ {
+ throw Oops.Oh("澶辫触閲戦涓嶈冻0.3鍏冧笉鑳藉啀娆″彂璧锋敮浠�");
+ }
+
+ if (await _redisService.TryLock(StaticStringDef.TransferMoneyLockKey + userid.ToString(), 300))
+ {
+
+ 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("璇ョ敤鎴锋病鏈夋敹鍏�");
+ }
+
+
+
+ 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) && Money<= (uw.TiXianZonge ?? 0))
+ {
+ //婊¤冻鏉′欢锛屽彂璧锋敮浠� 杩欓噷涓嶅垽鏂敮浠橀噾棰濆ぇ楸煎彲鎻愮幇浣欓
+ 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,
+ RemakeDes = "琛ュ厖鍙戣捣鏀粯" ,
+ WeChatTransferOrderPrId = TOrder.Id
+
+
+ };
+ 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();
+
+ TOrder.IsSetOK = true;
+ TOrder.RemakeDes = "宸茬粡閲嶆柊寤虹珛鏀粯璁㈠崟 id="+TransferOrder.Id.ToString();
+ TOrder.UpDataBy = "閲嶆柊绠�鍗曟敮浠楢PI";
+ TOrder.UpDataTime= DateTime.Now;
+ await WeChatTransferOrderwork.UpdateAsync(TOrder);
+
+
+
+ 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());
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ else
+ throw Oops.Oh("璇蜂笉瑕侀绻侀噸澶嶇敵璇�");
+
+
+
+
+
+ }
+
+ /// <summary>
+ /// 閲嶆柊鍒涘缓鏂扮殑鏀粯鍗�
+ /// </summary>
+ /// <param name="ids"></param>
+ /// <returns></returns>
+ [AllowAnonymous]
+ [HttpPost]
+ [ApiExplorerSettings(IgnoreApi = true)]
+ public async Task<WeChatTransferOrder> CreateTransferOder(CreatTransferOderIN Param)
+ {
+ if(Param.Key!= DateTime.Now.ToString("yyyy-MM-dd:HH")+"CreatTransfer")
+ {
+ //key 閿欒
+ throw Oops.Oh("key閿欒");
+ }
+
+
+ var userbs= new BaseRepository<User>();
+ //鍒ゆ柇鏄惁鏄敤鎴�
+ var user= await userbs.GetByIdAsync(Param.UserID);
+ if (user == null)
+ throw Oops.Oh("娌℃湁鐢ㄦ埛");
+ if(Param.Money<=0.3m)
+ {
+ throw Oops.Oh("杞处閲戦蹇呴』澶т綑0.3鍏�");
+ }
+ if (Param.Money >2000)
+ {
+ throw Oops.Oh("涓�澶╄浆璐﹂噾棰濆繀椤诲皬浜�2000");
+ }
+ if (Param.Money > 2000)
+ {
+ throw Oops.Oh("涓�澶╄浆璐﹂噾棰濆繀椤诲皬浜�2000");
+ }
+
+ var totle = _redisService.Get<decimal>(StaticStringDef.TransferMoneyManKey + Param.UserID.ToString());
+ if (totle + Param.Money > 2000)
+ {
+ throw Oops.Oh("涓�澶╄浆璐﹂噾棰濆繀椤诲皬浜�2000");
+ }
+
+ decimal Money = Param.Money;
+
+ //婊¤冻鏉′欢锛屽彂璧锋敮浠�
+ var TransferOrder = new WeChatTransferOrder
+ {
+
+ CreateBy = Param.UserID.ToString(),
+ CreateTime = DateTime.Now,
+ // BatchId = _redisService.Get32sn(),
+ OutBatchNumber = _redisService.Get32sn(),
+ Remake = "宸濆嵃宸ヨ祫鏀粯",
+ TransferDetailList = new List<WeChatTransferItem>(),
+ UserID = Param.UserID,
+ RemakeDes = Param.Remake,
+
+
+
+
+
+ };
+
+
+
+ //鏄惁鍏宠仈鏀跺叆閽卞寘琛�
+ if (Param.HasAboutReCome)
+ {
+ var UserTiXianDetailwork = new BaseRepository<UserTiXianDetail>();
+ var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
+ var rs = new BaseRepository<UserWorker>();
+ var uw = await rs.GetFirstAsync(x => x.UserId == Param.UserID);
+ if(uw==null)
+ {
+ throw Oops.Oh("璇ョ敤鎴锋病鏈夊叧鑱旈挶鍖�");
+ }
+ //閿佸畾閽卞寘
+ if (await _redisService.TryLock(StaticStringDef.TransferMoneyLockKey + Param.UserID.ToString(), 300))
+ {
+ 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 = Param.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 = Param.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 = Param.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 + Param.UserID.ToString(), totle, 60 * 60 * 24);
+ //鍙戣捣鏀粯
+ await InitQMessages.SendMessageAsync(InitQMessages.WxTransfer, TransferOrder.Id.ToString());
+ }
+ catch (Exception)
+ {
+
+ throw;
+ }
+ finally
+ {
+ //閲婃斁
+ await _redisService.TryUnLock(StaticStringDef.TransferMoneyLockKey + Param.UserID.ToString());
+ }
+
+
+ }
+ else
+ {
+ throw Oops.Oh("绯荤粺绻佸繖锛岀◢鍚庨噸璇�");
+ }
+
+ }
+ else
+ {
+ //鐩存帴杞处锛屼笉璁″叆閽卞寘璁板綍锛屼富瑕佺敤浜庡鐞嗚秴鏃跺悗鏃犳硶閲嶆柊鏀粯鐨勫崟瀛�
+
+ var UserTiXianDetailwork = new BaseRepository<UserTiXianDetail>();
+ var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
+
+
+ //閿佸畾閽卞寘
+ if (await _redisService.TryLock(StaticStringDef.TransferMoneyLockKey + Param.UserID.ToString(), 300))
+ {
+ 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 = Param.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 = Param.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.AsTenant().CommitTranAsync();
+
+ totle += Money;
+ //璁剧疆姣忔棩鎻愮幇闄愰
+ _redisService.Add(StaticStringDef.TransferMoneyManKey + Param.UserID.ToString(), totle, 60 * 60 * 24);
+ //鍙戣捣鏀粯
+ await InitQMessages.SendMessageAsync(InitQMessages.WxTransfer, TransferOrder.Id.ToString());
+ }
+ catch (Exception)
+ {
+
+ throw;
+ }
+ finally
+ {
+ //閲婃斁
+ await _redisService.TryUnLock(StaticStringDef.TransferMoneyLockKey + Param.UserID.ToString());
+ }
+
+
+ }
+ else
+ {
+ throw Oops.Oh("绯荤粺绻佸繖锛岀◢鍚庨噸璇�");
+ }
+
+ }
+
+
+ return TransferOrder;
+
+
+
+
+ }
+ /// <summary>
+ /// 璁剧疆涓哄鐞嗙姸鎬�
+ /// </summary>
+ /// <param name="remak"></param>
+ /// <returns></returns>
+ [AllowAnonymous]
+ [HttpGet]
+ [ApiExplorerSettings(IgnoreApi = true)]
+ public async Task<bool > SetOk([FromQuery] string remark,[FromQuery] string id)
+ {
+ if(string.IsNullOrEmpty(remark))
+ {
+ throw Oops.Oh("蹇呴』瑕佹湁澶囨敞淇℃伅");
+
+ }
+ if (string.IsNullOrEmpty(id))
+ {
+ throw Oops.Oh("蹇呴』鏈塈D淇℃伅");
+
+ }
+ var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
+ var oder= await WeChatTransferOrderwork.GetByIdAsync(id.toInt());
+ if(oder == null)
+ {
+ throw Oops.Oh("娌℃湁鎵惧埌璁㈠崟");
+ }
+
+ if(oder.IsSetOK== true)
+ {
+ throw Oops.Oh("宸茬粡澶勭悊浜�");
+ }
+ oder.IsSetOK = true;
+ oder.RemakeDes = remark;
+ oder.UpDataBy = "API";
+ oder.UpDataTime= DateTime.Now;
+ await WeChatTransferOrderwork.UpdateAsync(oder);
+
+ return true;
+
+
+
+ }
+
+
+ /// <summary>
+ /// 鑾峰彇鍒楄〃璇︽儏
+ /// </summary>
+ /// <returns></returns>
+ [HttpPost]
+ [AllowAnonymous]
+ public async Task<RetPageData<WeChatTransferOrder>> GetTransferOrder(SSPageByWhereOrder Param)
+ {
+ if (Param.Page == null)
+ throw Oops.Oh("鍙傛暟閿欒");
+
+ Expression<Func<WeChatTransferOrder, bool>> where = null;
+
+
+ if (!string.IsNullOrEmpty( Param.Where as string))
+ {
+ //where = CommonHelper.FormatWhereExpression<WeChatTransferOrder>(Param.Where);
+ where = CommonHelper.FormatWhereExpression<WeChatTransferOrder>(Param.Where as string);
+
+ }
+ Expression<Func<WeChatTransferOrder, object>> order = null;
+ if (Param.Order?.Name!=null)
+ {
+ order = CommonHelper.FormatPropertyExpression<WeChatTransferOrder>(Param.Order.Name);
+
+ }
+ RefAsync<int> title = 0;
+ var BR = new BaseRepository<WeChatTransferOrder>();
+ var data = await BR.AsQueryable().Includes(x => x.user, u => u.Worek).Select(x => new WeChatTransferOrder
+ {
+ Id = 0,
+ UserIDCode = x.user.Worek.IdCode,
+ UserName = x.user.Worek.name,
+ TotalAmount = x.TotalAmount,
+ TotalNum = x.TotalNum,
+ BatchId = x.BatchId,
+ SuccessNum = x.SuccessNum,
+ OutBatchNumber = x.OutBatchNumber,
+ BatchName = x.BatchName,
+ BatchStatus = x.BatchStatus,
+ UserID = x.UserID,
+ UpDataTime = x.UpDataTime,
+ YiTiXianGz = x.user.Worek.YiTiXianJine,
+ ZhongGz = x.user.Worek.TiXianZonge,
+ ItCode = x.user.ItCode,
+ SuccessAmount = x.SuccessAmount,
+ FailAmount = x.FailAmount,
+ CreateTime = x.CreateTime
+
+
+
+
+
+
+
+ },true).MergeTable().WhereIF(where != null, where).OrderByIF(order!=null,order,Param.Order?.Des?? OrderByType.Asc).ToPageListAsync(Param.Page.PageIndex,Param.Page.PageSize, title);
+
+
+
+ Param.Page.TotalCount = title;
+
+ return new RetPageData<WeChatTransferOrder>()
+ {
+ data= data,
+ Page=Param.Page,
+ };
+; }
+
+
}
+ /// <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; }
+
+ /// <summary>
+ /// 鏄惁鐗规畩澶勭悊姣斿鏀粯澶辫触鍚庡凡缁忓鐞嗕负鍏朵粬鎯呭喌
+ /// </summary>
+ public bool? IsSetOK { get; set; }
+
+ }
+
+ public class TransferOderOut
+ {
+ public List<WeChatTransferOrder> listdata { get; set; }
+ public int TotalCount { get; set; }
+ }
+ /// <summary>
+ ///
+ /// </summary>
+ public class CreatTransferOderIN
+ {
+ /// <summary>
+ /// 鎻愮幇閲戦
+ /// </summary>
+ [Required]
+ public decimal Money { get; set; }
+ /// <summary>
+ /// 鎻愮幇鐢ㄦ埛
+ /// </summary>
+ [Required]
+ public int UserID { get; set; }
+
+ /// <summary>
+ ///
+ /// </summary>
+ [Required]
+ public string Remake{ get; set; }
+
+ /// <summary>
+ /// 鎿嶄綔key
+ /// </summary>
+ [Required]
+ public string Key { get; set; }
+
+ /// <summary>
+ /// 鏄惁鍏宠仈鏀剁泭
+ /// </summary>
+ [Required]
+ public Boolean HasAboutReCome { get; set; }
+
+
+
+ }
+
+
+
+
}
--
Gitblit v1.9.1