From 1571dee924ea10cdcb55300cf02f70c6208c0333 Mon Sep 17 00:00:00 2001 From: 移动系统liao <liaoxujun@qq.com> Date: 星期二, 27 八月 2024 16:37:28 +0800 Subject: [PATCH] 增加人脸验证逻辑,支付接口,和逻辑 --- cylsg/EzWechat/WechatConfig.json | 5 cylsg/cylsg.Application/Orders/Dtos/OrderDto.cs | 6 cylsg/cylsg.Application/Users/UserAppService.cs | 2 cylsg/EzInitQ/Mapper.cs | 21 .gitignore | 8 cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj | 4 cylsg/EzInitqMessageDef/MsqModels.cs | 24 cylsg/cylsg.Model/TransferOrder/WeChartTransferOrder.cs | 249 +++++++ cylsg/EzInitQ/Startup.cs | 36 + cylsg/cylsg.redis/IEzCoreNetRedisService.cs | 11 cylsg/Cylsg.Filter/LimitFilterAttribute.cs | 121 +++ cylsg/cylsg.sln | 28 cylsg/cylsg.Core/Attributes/CoderFirstAttribute.cs | 1 cylsg/EzInitQ/PayServiceMessageQ.cs | 195 +++++ cylsg/EzInitqMessageDef/InitQMessages.cs | 46 + cylsg/cylsg.Model/UserModel/UserTiXianDetail.cs | 12 cylsg/EzJob/EzJob.csproj | 17 cylsg/cylsg.Application/Orders/OrderWorkerAppService.cs | 31 cylsg/EzUpFile/UpFileController.cs | 2 cylsg/cylsg.Application/cylsg.Application.xml | 786 +++++++++++++++++++++++ cylsg/EzInitQ/EzInitQ.csproj | 24 cylsg/EzInitqMessageDef/EzInitqMessageDef.csproj | 17 cylsg/EzJob/WeChatJob.cs | 100 +++ cylsg/cylsg.redis/EzCoreNetRedisService.cs | 22 cylsg/cylsg.Application/cylsg.Application.csproj | 2 cylsg/EzJob/StartUpcs.cs | 30 cylsg/cylsg.Application/applicationsettings.json | 5 cylsg/EzInitQ/InitQConfig.json | 8 cylsg/Cylsg.Filter/Cylsg.Filter.csproj | 14 cylsg/cylsg.Application/LogoInController.cs | 2 cylsg/EzWechat/WecharPayServicecs.cs | 20 cylsg/EzTencentCloud/TencentCloudService.cs | 6 cylsg/EzWechat/IWecharPayServicecs.cs | 14 cylsg/cylsg.Application/Transfer/UserTransfer.cs | 58 + 34 files changed, 1,913 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 324afb0..117cf69 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,11 @@ cylsg/EzUpFile/bin/ cylsg/cylsg.Web.Entry/wwwroot/wechartKey/ cylsg/cylsg.Web.Entry/wwwroot/1669018589_20240820_cert.zip +cylsg/Cylsg.Filter/bin/ +cylsg/Cylsg.Filter/obj/ +cylsg/EzInitQ/bin/ +cylsg/EzInitQ/obj/ +cylsg/EzInitqMessageDef/bin/ +cylsg/EzInitqMessageDef/obj/ +cylsg/EzJob/bin/ +cylsg/EzJob/obj/ diff --git a/cylsg/Cylsg.Filter/Cylsg.Filter.csproj b/cylsg/Cylsg.Filter/Cylsg.Filter.csproj new file mode 100644 index 0000000..b7cfb2e --- /dev/null +++ b/cylsg/Cylsg.Filter/Cylsg.Filter.csproj @@ -0,0 +1,14 @@ +锘�<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>net8.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + + <ItemGroup> + <ProjectReference Include="..\cylsg.Core\cylsg.Core.csproj" /> + <ProjectReference Include="..\cylsg.redis\cylsg.redis.csproj" /> + </ItemGroup> + +</Project> diff --git a/cylsg/Cylsg.Filter/LimitFilterAttribute.cs b/cylsg/Cylsg.Filter/LimitFilterAttribute.cs new file mode 100644 index 0000000..ea35a0a --- /dev/null +++ b/cylsg/Cylsg.Filter/LimitFilterAttribute.cs @@ -0,0 +1,121 @@ +锘� +using EzCoreNet.Redis; +using Furion; +using Furion.FriendlyException; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; + +namespace Cylsg.Filter +{ + + public enum Limttype + { + /// <summary> + ///鍏辩敤闄愭祦 + /// </summary> + All, + /// <summary> + /// 鐢ㄦ埛绾ч檺娴� + /// </summary> + User + } + + /// <summary> + /// 闄愭祦 + /// </summary> + + public class LimitFilterAttribute : Attribute,IAsyncActionFilter + { + + /// <summary> + /// redis闄愭祦鏂囦欢澶瑰悕绉� + /// </summary> + private const string DirKey = "UserRateLimit:"; + /// <summary> + /// 闄愭祦鍙戠敓鏃� 杩斿洖鐨勬彁绀� + /// </summary> + public string ResponseMeg { get; set; } = "璇蜂笉瑕佸湪鐭椂闂村唴閲嶅璁块棶璇ヨ祫婧�"; + + /// <summary> + /// 闄愭祦鏃堕暱 鍗曚綅绉� 榛樿涓�1绉� + /// </summary> + public int timespan { get; set; } = 1; + /// <summary> + /// 闄愭祦娆℃暟 榛樿涓�1娆� + /// </summary> + public int InCount { get; set; } = 1; + + /// <summary> + /// 榛樿涓虹敤鎴风骇 + /// </summary> + public Limttype LimiType { get; set; }= Limttype.All; + + public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) + { + var redisHelper = App.GetService<IEzCoreNetRedisService>(); + if(redisHelper == null) + { + throw Oops.Oh("鍐呭瓨鏈嶅姟寮傚父锛岃姹傜粓姝�"); + } + + var path = context.HttpContext?.Request?.Path.Value; + if (string.IsNullOrEmpty(path)) + { + //闈濧PI鎺у埗鍣紝鐩存帴鏀捐 娌℃湁鎵惧埌璺緞 + await next.Invoke(); + return; + } + string key = ""; + if (LimiType == Limttype.User) + { + if (App.User?.FindFirstValue("UserID") == null) + { + //娌℃湁鐢ㄦ埛鐩存帴鏀捐 + await next.Invoke(); + return; + } + + key = $"{DirKey}:{path}:{App.User?.FindFirstValue("UserID")}"; + } + else + if(LimiType == Limttype.All) + { + key = $"{DirKey}:{path}:All"; + } + else + { + await next.Invoke(); + return; + } + + + long? count = redisHelper.Get<int>(key); + if (count == null || count == 0) + { + redisHelper.Incrby(key); + redisHelper.SetTtl(key, timespan); + } + else + if (count >= (InCount)) + { + throw Oops.Oh(ResponseMeg); + + } + else + { + redisHelper.Incrby(key); + } + + await next.Invoke(); + + + } + } +} diff --git a/cylsg/EzInitQ/EzInitQ.csproj b/cylsg/EzInitQ/EzInitQ.csproj new file mode 100644 index 0000000..89ed748 --- /dev/null +++ b/cylsg/EzInitQ/EzInitQ.csproj @@ -0,0 +1,24 @@ +锘�<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>net8.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + + <ItemGroup> + <ProjectReference Include="..\cylsg.Core\cylsg.Core.csproj" /> + <ProjectReference Include="..\cylsg.Model\cylsg.Model.csproj" /> + <ProjectReference Include="..\cylsg.redis\cylsg.redis.csproj" /> + <ProjectReference Include="..\cylsg.services\cylsg.services.csproj" /> + <ProjectReference Include="..\EzInitqMessageDef\EzInitqMessageDef.csproj" /> + <ProjectReference Include="..\EzWechat\EzWechat.csproj" /> + </ItemGroup> + + <ItemGroup> + <None Update="InitQConfig.json"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> + </ItemGroup> + +</Project> diff --git a/cylsg/EzInitQ/InitQConfig.json b/cylsg/EzInitQ/InitQConfig.json new file mode 100644 index 0000000..92e1732 --- /dev/null +++ b/cylsg/EzInitQ/InitQConfig.json @@ -0,0 +1,8 @@ +{ + //璇蜂繚鎸乺edis涓烘甯稿彲鐢� + "InitQRedisConfig": { + // 濡傛灉閲囩敤瀹瑰櫒鍖栭儴缃睸ervice 瑕佸啓鎴恟edis鐨勬湇鍔″悕锛屽惁鍒欏啓鍦板潃 + "ConnectionString": "127.0.0.1:6379,password=,connectTimeout=30000,responseTimeout=30000,abortConnect=false,connectRetry=1,syncTimeout=10000,DefaultDatabase=3" //redis鏁版嵁搴撹繛鎺ュ瓧绗︿覆 + + } +} diff --git a/cylsg/EzInitQ/Mapper.cs b/cylsg/EzInitQ/Mapper.cs new file mode 100644 index 0000000..51ef636 --- /dev/null +++ b/cylsg/EzInitQ/Mapper.cs @@ -0,0 +1,21 @@ +锘縰sing cylsg.Model.TransferOrder; +using cylsg.Model.UserModel; +using Mapster; +using SKIT.FlurlHttpClient.Wechat.TenpayV3.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EzInitQ +{ + public class Mapper : IRegister + { + public void Register(TypeAdapterConfig config) + { + config.ForType<CreateTransferBatchRequest, WeChatTransferOrder>(); + + } + } +} diff --git a/cylsg/EzInitQ/PayServiceMessageQ.cs b/cylsg/EzInitQ/PayServiceMessageQ.cs new file mode 100644 index 0000000..a4224b7 --- /dev/null +++ b/cylsg/EzInitQ/PayServiceMessageQ.cs @@ -0,0 +1,195 @@ +锘縰sing cylsg.Core; +using cylsg.Model.TransferOrder; +using cylsg.Model.UserModel; +using cylsg.utility.Extend; +using EzCoreNet.Redis; +using EzInitqMessageDef; +using EzWechat; +using Furion; +using Furion.DatabaseAccessor; +using Furion.FriendlyException; +using InitQ.Abstractions; +using InitQ.Attributes; +using Mapster; +using MapsterMapper; +using Newtonsoft.Json; +using SKIT.FlurlHttpClient.Wechat.TenpayV3.Models; +using SqlSugar.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EzInitQ +{ + + + public class PayServiceMessageQ: IRedisSubscribe + { + private IEzCoreNetRedisService _ezCoreNetRedisService; + private IWecharPayServicecs _wecharPayServicecs; + private IMapper _mapper; + //public PayServiceMessageQ(IEzCoreNetRedisService ezCoreNetRedisService,IWecharPayServicecs wecharPayServicecs,IMapper mapper) { + + // _ezCoreNetRedisService = ezCoreNetRedisService; + // _wecharPayServicecs = wecharPayServicecs; + // _mapper = mapper; + + //} + + /// <summary> + /// 寰俊杞处闃熷垪澶勭悊 + /// </summary> + [Subscribe(InitQMessages.WxTransferMSQ)] + public async void WxTransferMSQInit(string msg) + { + _ezCoreNetRedisService = App.GetService<IEzCoreNetRedisService>(); + _wecharPayServicecs = App.GetService<IWecharPayServicecs>(); + _mapper = App.GetService<IMapper>(); + + var userdata= JsonConvert.DeserializeObject<WxTransferMsqModels>(msg); + if( userdata != null ) { + + throw Oops.Oh($"闃熷垪WxTransferMSQInit 澶勭悊澶辫触锛屾病鏈夎幏鍙栧埌鐢ㄦ埛淇℃伅+++++++++{msg}"); + } + var UserRs = new BaseRepository<User>(); + var user = await UserRs.GetByIdAsync(userdata.UserID); + if(user !=null) + { + throw Oops.Oh($"闃熷垪WxTransferMSQInit 澶勭悊澶辫触锛屾病鏈夎幏鍙栧埌鐢ㄦ埛淇℃伅++++++++{msg}"); + } + if(string.IsNullOrEmpty( user.WxOpenId)) + { + throw Oops.Oh($"闃熷垪WxTransferMSQInit 澶勭悊澶辫触锛屾病鏈夎幏鍙栧埌openID+++++++++{msg}"); + } + var uWorkRs = new BaseRepository<UserWorker>(); + + + var UserTiXianDetailwork = new BaseRepository<UserTiXianDetail>(); + + var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>(); + var uWork = await uWorkRs.GetFirstAsync(x=>x.UserId==user.Id); + if((uWork != null)& ((uWork.TiXianZonge - uWork.YiTiXianJine) > userdata.money)) + { + var TransferOrder = new WeChatTransferOrder + { + CreateBy = uWork.UserId.ToString(), + CreateTime = DateTime.Now, + BatchId = _ezCoreNetRedisService.Get32sn(), + OutBatchNumber = _ezCoreNetRedisService.Get32sn(), + Remake = "宸濆嵃宸ヨ祫鏀粯", + TransferDetailList = new List<WeChatTransferItem>() + + + }; + try + { + //婊¤冻鏉′欢锛屽彂璧锋敮浠� + await UserTiXianDetailwork.AsTenant().BeginTranAsync(); + + + + + var moneylist= userdata.money; + if(moneylist<=0.3m) + { + //鏀惧純澶勭悊锛屼綆浜�0.3姣涗笉鑳藉彂璧疯浆璐� + throw Oops.Oh($"闃熷垪WxTransferMSQInit 澶勭悊澶辫触锛岃浆璐﹂噾棰濅綆浜�0.3鍏�+++++++++{msg}"); + } + var maxPayItem = Convert.ToDecimal(App.Configuration["WechartPay:PayMoneyMax"].toInt()); ; + while ((moneylist > maxPayItem)) + { + TransferOrder.TransferDetailList.Add(new WeChatTransferItem + { + CreateBy = uWork.UserId.ToString(), + CreateTime = TransferOrder.CreateTime, + IsEn = true, + OpenId = user.WxOpenId, + OutDetailNumber = _ezCoreNetRedisService.Get32sn(), + + TransferAmount = (int )maxPayItem * 100, + TransferRemark="宸濆嵃宸ヨ祫鏀粯", + + }); + + moneylist -= maxPayItem; + } + if (moneylist <= 0.3m) + { + //濡傛灉杩欓噷浣庝簬0.3姣涳紝灏嗙ぞ鍖洪妫�锛岀暀涓嬫澶勭悊 + userdata.money -= moneylist; + } + else + + { + TransferOrder.TransferDetailList.Add(new WeChatTransferItem + { + CreateBy = uWork.UserId.ToString(), + CreateTime = TransferOrder.CreateTime, + IsEn = true, + OpenId = user.WxOpenId, + OutDetailNumber = _ezCoreNetRedisService.Get32sn(), + + TransferAmount = (int)(moneylist * 100), + TransferRemark = "宸濆嵃宸ヨ祫鏀粯", + + }); + } + + TransferOrder = await WeChatTransferOrderwork.AsSugarClient().InsertNav(TransferOrder).Include(x=>x.TransferDetailList).ExecuteReturnEntityAsync(); + await UserTiXianDetailwork.InsertAsync(new UserTiXianDetail + { + CreateBy = uWork.UserId.ToString(), + CreateTime = DateTime.Now, + UserId = user.Id, + ZhiChuShouRu= 0, + YiTiXianJine=userdata.money, + WeChatTransferOrderID= TransferOrder.Id, + + + + }); + + + + //閽卞寘浣欓璋冩暣 + + uWork.YiTiXianJine += userdata.money; + uWork.UpDataBy = uWork.UserId.ToString(); + uWork.UpDataTime = DateTime.Now; + await uWorkRs.UpdateAsync(uWork); + + + await UserTiXianDetailwork.AsTenant().CommitTranAsync(); + + + } + catch (Exception) + { + await UserTiXianDetailwork.AsTenant().RollbackTranAsync(); + throw; + } + // 鍙戣捣鏀粯 + + var requit = _mapper.Map<CreateTransferBatchRequest>(TransferOrder); + var ret= await _wecharPayServicecs.Transfer(requit); + if (ret.IsSuccessful()) + { + var retdata= await WeChatTransferOrderwork.GetByIdAsync(TransferOrder.Id); + retdata.BatchId = ret.BatchId; + retdata.BatchStatus= ret.BatchStatus; + retdata.UpDataBy = "寰俊浠樻璇锋眰涔嬪悗"; + retdata.UpDataTime= DateTime.Now; + await WeChatTransferOrderwork.UpdateAsync(retdata); + } + else + throw Oops.Oh($"寰俊璇锋眰浠樻澶辫触+++++++++++++{ret.ToString()}+++++++++++msg{msg}"); + + + } + + + } + } +} diff --git a/cylsg/EzInitQ/Startup.cs b/cylsg/EzInitQ/Startup.cs new file mode 100644 index 0000000..4ce942f --- /dev/null +++ b/cylsg/EzInitQ/Startup.cs @@ -0,0 +1,36 @@ +锘縰sing Furion; +using InitQ; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EzInitQ +{ + + public class Startup : AppStartup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddInitQ(m => + { + m.SuspendTime = 1000; + m.IntervalTime = 1000; + m.ConnectionString = App.Configuration["InitQRedisConfig:ConnectionString"]; + m.ListSubscribe = new List<Type>() { typeof(PayServiceMessageQ) }; + m.ShowLog = false; + + }); + + } + + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + + } + } +} diff --git a/cylsg/EzInitqMessageDef/EzInitqMessageDef.csproj b/cylsg/EzInitqMessageDef/EzInitqMessageDef.csproj new file mode 100644 index 0000000..21b908a --- /dev/null +++ b/cylsg/EzInitqMessageDef/EzInitqMessageDef.csproj @@ -0,0 +1,17 @@ +锘�<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>net8.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + + <ItemGroup> + <PackageReference Include="InitQ" Version="1.0.0.19" /> + </ItemGroup> + + <ItemGroup> + <ProjectReference Include="..\cylsg.Core\cylsg.Core.csproj" /> + </ItemGroup> + +</Project> diff --git a/cylsg/EzInitqMessageDef/InitQMessages.cs b/cylsg/EzInitqMessageDef/InitQMessages.cs new file mode 100644 index 0000000..531a373 --- /dev/null +++ b/cylsg/EzInitqMessageDef/InitQMessages.cs @@ -0,0 +1,46 @@ +锘縰sing Furion; +using InitQ.Cache; +using Newtonsoft.Json; +using StackExchange.Redis; + +namespace EzInitqMessageDef +{ + /// <summary> + /// 闃熷垪娑堟伅瀹氫箟 + /// </summary> + public static class InitQMessages + { + /// <summary> + /// 杞处 + /// </summary> + public const string WxTransferMSQ = "WxTransferMSQ"; + + /// <summary> + /// 鍚戝爢鏍堜腑鍘嬪叆涓�涓秷鎭� + /// </summary> + /// <typeparam name="T"> 绫诲瀷</typeparam> + /// <param name="MessageName"> 娑堟伅鍚嶇О</param> + /// <param name="msg">绫诲瀷</param> + /// <returns></returns> + public static async Task<bool> SendMessageAsync<T>(string MessageName,T msg) + { + var _redis= App.GetService<ICacheService>(); + + await _redis.ListRightPushAsync(MessageName, JsonConvert.SerializeObject(msg)); + return true; + } + /// <summary> + /// 鍚戝爢鏍堜腑鍘嬪叆涓�涓秷鎭� + /// </summary> + /// <param name="MessageName"></param> + /// <param name="msg"></param> + /// <returns></returns> + public static async Task<bool> SendMessageAsync(string MessageName, string msg) + { + var _redis = App.GetService<ICacheService>(); + + await _redis.ListRightPushAsync(MessageName, msg); + return true; + } + } +} diff --git a/cylsg/EzInitqMessageDef/MsqModels.cs b/cylsg/EzInitqMessageDef/MsqModels.cs new file mode 100644 index 0000000..c368608 --- /dev/null +++ b/cylsg/EzInitqMessageDef/MsqModels.cs @@ -0,0 +1,24 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EzInitqMessageDef +{ + /// <summary> + /// 寰俊鎻愮幇璇锋眰 + /// </summary> + public class WxTransferMsqModels + { + /// <summary> + /// 浣撶幇閲戦 + /// </summary> + public decimal money { get; set; } + + /// <summary> + /// 鎻愮幇鐢ㄦ埛 + /// </summary> + public int UserID { get; set; } + } +} diff --git a/cylsg/EzJob/EzJob.csproj b/cylsg/EzJob/EzJob.csproj new file mode 100644 index 0000000..5d6e03f --- /dev/null +++ b/cylsg/EzJob/EzJob.csproj @@ -0,0 +1,17 @@ +锘�<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>net8.0</TargetFramework> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + </PropertyGroup> + + <ItemGroup> + <ProjectReference Include="..\cylsg.Core\cylsg.Core.csproj" /> + <ProjectReference Include="..\cylsg.Model\cylsg.Model.csproj" /> + <ProjectReference Include="..\cylsg.redis\cylsg.redis.csproj" /> + <ProjectReference Include="..\cylsg.services\cylsg.services.csproj" /> + <ProjectReference Include="..\EzWechat\EzWechat.csproj" /> + </ItemGroup> + +</Project> diff --git a/cylsg/EzJob/StartUpcs.cs b/cylsg/EzJob/StartUpcs.cs new file mode 100644 index 0000000..8659fdd --- /dev/null +++ b/cylsg/EzJob/StartUpcs.cs @@ -0,0 +1,30 @@ +锘縰sing Furion; +using Furion.Schedule; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EzJob +{ + public class Startup : AppStartup + { + public void ConfigureServices(IServiceCollection services) + { + + services.AddSchedule(options => + { + options.AddJob<WeChatJob>(concurrent: false, Triggers.Hourly()); // 涓茶 + }); + } + + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + + } + } +} diff --git a/cylsg/EzJob/WeChatJob.cs b/cylsg/EzJob/WeChatJob.cs new file mode 100644 index 0000000..60c5e9a --- /dev/null +++ b/cylsg/EzJob/WeChatJob.cs @@ -0,0 +1,100 @@ +锘縰sing cylsg.Core; +using cylsg.Model.TransferOrder; +using EzWechat; +using Furion; +using Furion.FriendlyException; +using Furion.Schedule; +using Microsoft.AspNetCore.Http.HttpResults; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EzJob +{ + public class WeChatJob : IJob + { + + + /// <summary> + /// 鏌ヨ璁㈠崟瀹屾垚鎯呭喌 + /// </summary> + /// <param name="context"></param> + /// <param name="stoppingToken"></param> + /// <returns></returns> + public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) + { + var payServices= App.GetService<IWecharPayServicecs>(); + if(payServices == null) + { + throw Oops.Oh($"瀹氭椂浠诲姟WeChatJob 澶勭悊澶辫触锛屾湭鑳借幏鍙朓WecharPayServicecs 鏈嶅姟"); + } + + var WeChatTransferOrderRs = new BaseRepository<WeChatTransferOrder>(); + var OderList = await WeChatTransferOrderRs.AsQueryable().Includes(x=>x.TransferDetailList).Where(x => (x.BatchId != null && x.BatchId != "") || x.BatchStatus == "ACCEPTED" || x.BatchStatus == "PROCESSING").ToListAsync(); + + foreach( var o in OderList ) + { + var ret = await payServices.TransferBatches(new SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.GetTransferBatchByBatchIdRequest + { + BatchId = o.BatchId + + }); + if(ret != null) + { + if(ret.IsSuccessful()) + { + + + if (ret.TransferBatch.BatchStatus == "FINISHED") + { + //宸茬粡鍏ㄩ儴瀹屾垚 + o.BatchStatus= ret.TransferBatch.BatchStatus; + o.UpDataBy = "ExecuteAsync"; + o.UpDataTime=DateTime.Now; + o.CloseReason = ret.TransferBatch.CloseReason; + o.FailAmount= ret.TransferBatch.FailAmount; + o.FailNum = ret.TransferBatch.FailNumber; + o.SuccessNum = ret.TransferBatch.SuccessNumber; + o.SuccessAmount= ret.TransferBatch.SuccessAmount; + foreach (var item in o.TransferDetailList) + { + var del =ret.TransferDetailList.Where(x=>x.OutDetailNumber==item.OutDetailNumber).FirstOrDefault(); + item.DetailStatus = del?.DetailStatus; + switch (item.DetailStatus) + { + case "FAIL": + //澶辫触锛岃幏鍙栧け璐ュ師鍥� + var retde = await payServices.TransferBatchesDetails(new SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.GetTransferBatchDetailByDetailIdRequest + { + BatchId = o.BatchId, + DetailId = del.DetailId, + + }); + + item.FailReason = retde?.FailReason; + break; + case "SUCCESS": + item.DetailStatus = "SUCCESS"; + + break; + + default: + item.DetailStatus = del?.DetailStatus; + break; + } + + + + } + + + + } + } + } + } + } + } +} diff --git a/cylsg/EzTencentCloud/TencentCloudService.cs b/cylsg/EzTencentCloud/TencentCloudService.cs index ceafd97..a276174 100644 --- a/cylsg/EzTencentCloud/TencentCloudService.cs +++ b/cylsg/EzTencentCloud/TencentCloudService.cs @@ -138,7 +138,7 @@ httpProfile.Endpoint = ("ocr.tencentcloudapi.com"); clientProfile.HttpProfile = httpProfile; - var _ocrClient = new OcrClient(cred, "ap-chengdu", clientProfile); + var _ocrClient = new OcrClient(cred, "ap-shanghai", clientProfile); var ret = _ocrClient.BizLicenseOCRSync(new BizLicenseOCRRequest() { @@ -256,7 +256,7 @@ httpProfile.Endpoint = ("iai.tencentcloudapi.com"); clientProfile.HttpProfile = httpProfile; - var iaiClient = new IaiClient(cred, "ap-chengdu", clientProfile); + var iaiClient = new IaiClient(cred, "ap-shanghai", clientProfile); var ret = iaiClient.CreateFace( new TencentCloud.Iai.V20200303.Models.CreateFaceRequest { @@ -291,7 +291,7 @@ httpProfile.Endpoint = ("iai.tencentcloudapi.com"); clientProfile.HttpProfile = httpProfile; - var iaiClient = new IaiClient(cred, "ap-chengdu", clientProfile); + var iaiClient = new IaiClient(cred, "ap-shanghai", clientProfile); var ret = iaiClient.VerifyFaceSync(new TencentCloud.Iai.V20200303.Models.VerifyFaceRequest { diff --git a/cylsg/EzUpFile/UpFileController.cs b/cylsg/EzUpFile/UpFileController.cs index a3ee514..108fdf1 100644 --- a/cylsg/EzUpFile/UpFileController.cs +++ b/cylsg/EzUpFile/UpFileController.cs @@ -78,7 +78,7 @@ public async Task<object> IaiAddPersoBase64([FromServices] IEzFileUploadService fileUploadService, UpDataFileData param) { if (string.IsNullOrEmpty(param.imgBase64)) - throw Oops.Oh("娌℃湁鏂囦欢绫诲"); + throw Oops.Oh("娌℃湁鏂囦欢鍐呭"); if (string.IsNullOrEmpty(param.Name)) throw Oops.Oh("娌℃湁濮撳悕"); if (string.IsNullOrEmpty(param.CordId)) diff --git a/cylsg/EzWechat/IWecharPayServicecs.cs b/cylsg/EzWechat/IWecharPayServicecs.cs index 21173bd..6f973fa 100644 --- a/cylsg/EzWechat/IWecharPayServicecs.cs +++ b/cylsg/EzWechat/IWecharPayServicecs.cs @@ -14,6 +14,18 @@ /// </summary> /// <param name="request"></param> /// <returns></returns> - Task<CreateTransferBatchResponse> PayOderAsync(CreateTransferBatchRequest request); + Task<CreateTransferBatchResponse> Transfer(CreateTransferBatchRequest request); + /// <summary> + /// 閫氳繃寰俊 BatchId 鏌ヨ鏀粯鐘舵�� + /// </summary> + /// <param name="request"></param> + /// <returns></returns> + Task<GetTransferBatchByBatchIdResponse> TransferBatches(GetTransferBatchByBatchIdRequest request); + /// <summary> + /// 鏍规嵁Detail id 鏌ヨ鍚嶅崟璇︾粏 + /// </summary> + /// <param name="request"></param> + /// <returns></returns> + Task<GetTransferBatchDetailByDetailIdResponse> TransferBatchesDetails(GetTransferBatchDetailByDetailIdRequest request); } } diff --git a/cylsg/EzWechat/WecharPayServicecs.cs b/cylsg/EzWechat/WecharPayServicecs.cs index e4a37ab..a679bee 100644 --- a/cylsg/EzWechat/WecharPayServicecs.cs +++ b/cylsg/EzWechat/WecharPayServicecs.cs @@ -32,12 +32,26 @@ _V3Client = WechatTenpayClientBuilder.Create(options).Build(); } - public async Task<CreateTransferBatchResponse> PayOderAsync(CreateTransferBatchRequest request) + public async Task<CreateTransferBatchResponse> Transfer(CreateTransferBatchRequest request) { - - var response = await _V3Client.ExecuteCreateTransferBatchAsync(request); + + var response = await _V3Client.ExecuteCreateTransferBatchAsync(request); return response; } + + public async Task<GetTransferBatchByBatchIdResponse> TransferBatches(GetTransferBatchByBatchIdRequest request) + { + + var response = await _V3Client.ExecuteGetTransferBatchByBatchIdAsync(request); + return response; + + } + + public async Task<GetTransferBatchDetailByDetailIdResponse> TransferBatchesDetails(GetTransferBatchDetailByDetailIdRequest request) + { + var response = await _V3Client.ExecuteGetTransferBatchDetailByDetailIdAsync(request); + return response; + } } } diff --git a/cylsg/EzWechat/WechatConfig.json b/cylsg/EzWechat/WechatConfig.json index a7d7366..2072927 100644 --- a/cylsg/EzWechat/WechatConfig.json +++ b/cylsg/EzWechat/WechatConfig.json @@ -10,7 +10,10 @@ "MerchantV3Secret": "lojdhuqyt5648dikunm623ddsl2543a5", "MerchantId": "1669018589", "MerchantCertificateSerialNumber": "49FFE8CB27B5EDD026BFF23C41F0DAA83405EB10", - "apiclient_keyFile": "wwwroot\\wechartKey\\apiclient_key.pem" + "apiclient_keyFile": "wwwroot\\wechartKey\\apiclient_key.pem", + "PayMoneyMax": 200 + + } } \ No newline at end of file diff --git a/cylsg/cylsg.Application/LogoInController.cs b/cylsg/cylsg.Application/LogoInController.cs index a97ec29..92d8070 100644 --- a/cylsg/cylsg.Application/LogoInController.cs +++ b/cylsg/cylsg.Application/LogoInController.cs @@ -105,7 +105,7 @@ } var jwt = new EzJwtModel() { - ITCode = user.ItCode, + // ITCode = user.ItCode, NickName = user.Nickname, UserID = user.Id, diff --git a/cylsg/cylsg.Application/Orders/Dtos/OrderDto.cs b/cylsg/cylsg.Application/Orders/Dtos/OrderDto.cs index c524481..09e9b61 100644 --- a/cylsg/cylsg.Application/Orders/Dtos/OrderDto.cs +++ b/cylsg/cylsg.Application/Orders/Dtos/OrderDto.cs @@ -222,6 +222,12 @@ public string CheckPhoto { get; set; } + /// <summary> + /// 浜鸿劯鍥剧墖 + /// </summary> + public string FaceImg { get; set; } + + } diff --git a/cylsg/cylsg.Application/Orders/OrderWorkerAppService.cs b/cylsg/cylsg.Application/Orders/OrderWorkerAppService.cs index 3f658a3..d8731ba 100644 --- a/cylsg/cylsg.Application/Orders/OrderWorkerAppService.cs +++ b/cylsg/cylsg.Application/Orders/OrderWorkerAppService.cs @@ -3,9 +3,11 @@ using cylsg.Core; using cylsg.Model.OrderModel; using cylsg.Model.UserModel; +using EzTencentCloud; using Furion.LinqBuilder; using MapsterMapper; using Org.BouncyCastle.Asn1.X509; +using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.Linq; @@ -26,11 +28,13 @@ private readonly ISystemService _systemService; private ISqlSugarClient _sqlSugarClient; private IMapper _mapper; - public OrderWorkerAppService(ISystemService systemService, ISqlSugarClient sqlSugarClient, IMapper mapper) + private readonly ITencentCloudService _tencentCloudService; + public OrderWorkerAppService(ISystemService systemService, ISqlSugarClient sqlSugarClient, IMapper mapper,ITencentCloudService tencentCloudService) { _systemService = systemService; _sqlSugarClient = sqlSugarClient; _mapper = mapper; + _tencentCloudService = tencentCloudService; } @@ -176,6 +180,7 @@ return result; } + @@ -416,6 +421,30 @@ { throw Oops.Oh("璇ユ墦鍗¤褰曞凡缁忓鎵癸紝涓嶈兘鎵撳崱锛�"); } + //浜鸿劯璇嗗埆 + if (App.Configuration["VerifyFace:Enable"].ObjToBool()) + { + if (string.IsNullOrWhiteSpace(dakaDto.FaceImg)) + { + throw Oops.Oh("鏈瘑鍒汉鑴�"); + } + + var UserWorkRes = await new BaseRepository<UserWorker>().GetFirstAsync(x => x.UserId == userid); + if (UserWorkRes == null) + { + throw Oops.Oh("鍛樺伐鏈敞鍐屾垚宸ヤ汉"); + } + var faseres = _tencentCloudService.VerifyFace(dakaDto.FaceImg, UserWorkRes.IAIPersonId); + + if (faseres.IsMatch != true) + { + throw Oops.Oh("涓嶆槸鏈汉"); + } + } + + + + if(orderBiddingDetail == null) { orderBiddingDetail = new OrderBiddingDetail(); diff --git a/cylsg/cylsg.Application/Transfer/UserTransfer.cs b/cylsg/cylsg.Application/Transfer/UserTransfer.cs new file mode 100644 index 0000000..a5dcbdf --- /dev/null +++ b/cylsg/cylsg.Application/Transfer/UserTransfer.cs @@ -0,0 +1,58 @@ +锘縰sing cylsg.Core; +using cylsg.Model.UserModel; +using Cylsg.Filter; +using EzInitqMessageDef; +using SKIT.FlurlHttpClient.Wechat.Api.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; + +namespace cylsg.Application.Transfer +{ + /// <summary> + /// 鎻愮幇鏈嶅姟绋嬪簭 + /// </summary> + /// + [DynamicApiController] + [Authorize] + public class UserTransfer + { + + + public UserTransfer() { } + /// <summary> + /// 鎻愮幇 + /// </summary> + /// <param name="Money"></param> + [LimitFilter(LimiType = Limttype.User,timespan =10,ResponseMeg ="璇峰嬁鍦�10绉掑唴閲嶅璇锋眰")] + public async Task GetTransferMoney( [FromQuery]decimal Money) + { + var rs= new BaseRepository<UserWorker>(); + var UserID = App.User?.FindFirstValue("UserID"); + int userid = 0; + if (!string.IsNullOrEmpty(UserID)) + { + userid = int.Parse(UserID); + } + else + { + + throw Oops.Oh("娌℃湁璇嗗埆鍒扮敤鎴锋敹鍏�"); + } + var uw= await rs.GetByIdAsync(userid); + if((uw.TiXianZonge-uw.YiTiXianJine)< Money) + { + throw Oops.Oh("鐢ㄦ埛浣欓涓嶈冻"); + } + var b = await InitQMessages.SendMessageAsync(InitQMessages.WxTransferMSQ, Money.ToString()); + if (b) + return; + else + throw Oops.Oh("璇锋眰澶辫触"); + } + + } +} diff --git a/cylsg/cylsg.Application/Users/UserAppService.cs b/cylsg/cylsg.Application/Users/UserAppService.cs index baf8708..d7312b8 100644 --- a/cylsg/cylsg.Application/Users/UserAppService.cs +++ b/cylsg/cylsg.Application/Users/UserAppService.cs @@ -202,5 +202,7 @@ return userDto; } + + } } diff --git a/cylsg/cylsg.Application/applicationsettings.json b/cylsg/cylsg.Application/applicationsettings.json index 47b488e..d20414e 100644 --- a/cylsg/cylsg.Application/applicationsettings.json +++ b/cylsg/cylsg.Application/applicationsettings.json @@ -21,6 +21,11 @@ } ] }, + + "VerifyFace": { + "Enable": true + }, + "CorsAccessorSettings": { "WithExposedHeaders": [ "access-token", diff --git a/cylsg/cylsg.Application/cylsg.Application.csproj b/cylsg/cylsg.Application/cylsg.Application.csproj index 0d6e2b3..c961b51 100644 --- a/cylsg/cylsg.Application/cylsg.Application.csproj +++ b/cylsg/cylsg.Application/cylsg.Application.csproj @@ -24,9 +24,11 @@ <ItemGroup> <ProjectReference Include="..\cylsg.Authorization\cylsg.Authorization.csproj" /> <ProjectReference Include="..\cylsg.Core\cylsg.Core.csproj" /> + <ProjectReference Include="..\Cylsg.Filter\Cylsg.Filter.csproj" /> <ProjectReference Include="..\cylsg.Model\cylsg.Model.csproj" /> <ProjectReference Include="..\cylsg.redis\cylsg.redis.csproj" /> <ProjectReference Include="..\cylsg.utility\cylsg.utility.csproj" /> + <ProjectReference Include="..\EzInitqMessageDef\EzInitqMessageDef.csproj" /> <ProjectReference Include="..\EzTencentCloud\EzTencentCloud.csproj" /> <ProjectReference Include="..\EzUpFile\EzUpFile.csproj" /> <ProjectReference Include="..\EzWechat\EzWechat.csproj" /> diff --git a/cylsg/cylsg.Application/cylsg.Application.xml b/cylsg/cylsg.Application/cylsg.Application.xml index b9d8279..1aa58f3 100644 --- a/cylsg/cylsg.Application/cylsg.Application.xml +++ b/cylsg/cylsg.Application/cylsg.Application.xml @@ -62,6 +62,586 @@ jscode </summary> </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.Id"> + <summary> + 鎷涘伐Id + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.OrderUserId"> + <summary> + 鎷涘伐鐢ㄦ埛id + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.OrderName"> + <summary> + 鎷涘伐鍚嶇О + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.WordStartTime"> + <summary> + 宸ヤ綔寮�濮嬫椂闂� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.WordEndTime"> + <summary> + 宸ヤ綔缁撴潫鏃堕棿 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.Demand"> + <summary> + 闇�姹� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.WorderCount"> + <summary> + 鎷涘伐浜烘暟 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.WorderCounted"> + <summary> + 宸叉嫑宸ヤ汉鏁� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.WorderAddress"> + <summary> + 宸ヤ綔鍦扮偣 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.ContactPhone"> + <summary> + 鑱旂郴鐢佃瘽 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.WorkerType"> + <summary> + 宸ヤ綔鏂瑰紡 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.WorkPrice"> + <summary> + 宸ヤ环 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.OrderStatus"> + <summary> + 鎷涘伐鐘舵�� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.OrderStatusName"> + <summary> + 鏄惁閫変腑 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.IsSelected"> + <summary> + 鏄惁閫変腑 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.IsSelectedName"> + <summary> + 鏄惁閫変腑 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDto.orderBidding"> + <summary> + 鎷涘伐鏄庣粏 + </summary> + </member> + <member name="T:cylsg.Application.Orders.Dtos.OrderBiddingDto"> + <summary> + 鎷涘伐鏄庣粏 + </summary> + </member> + <member name="M:cylsg.Application.Orders.Dtos.OrderBiddingDto.#ctor"> + <summary> + 鎷涘伐鏄庣粏 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.Id"> + <summary> + 宸ヤ汉鎶曢�扞d + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.WorkerUserId"> + <summary> + 鐢ㄦ埛id + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.WorkerName"> + <summary> + 鐢ㄦ埛鏄电О + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.WorkerAvatar"> + <summary> + 鐢ㄦ埛鏄电О + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.OrderId"> + <summary> + 鎷涘伐id + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.IsSelected"> + <summary> + 鏄惁閫変腑 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.IsSelectedName"> + <summary> + 鏄惁閫変腑 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.Selectedtime"> + <summary> + 閫変腑鏃堕棿 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.Remark"> + <summary> + 澶囨敞 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDto.Salary"> + <summary> + 宸ヨ祫鎬婚 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.BaoMingDto.OrderId"> + <summary> + 鎷涘伐OrderId + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.QueRenDto.OrderBiddingId"> + <summary> + 鎷涘伐鏄庣粏OrderBiddingId + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.DakaDetailDto.OrderBiddingDetailId"> + <summary> + 鎷涘伐鏄庣粏OrderBiddingId + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.DakaDto.OrderBiddingId"> + <summary> + 鎷涘伐鏄庣粏OrderBiddingId + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.DakaDto.CheckPhoto"> + <summary> + 鎵撳崱鐓х墖 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.DakaDto.FaceImg"> + <summary> + 浜鸿劯鍥剧墖 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.OrderBiddingDetailId"> + <summary> + 宸ヤ汉宸ヤ綔鏄庣粏琛↖d + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.OrderBiddingId"> + <summary> + 宸ヤ汉鎶曢�抜d + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.WorkDate"> + <summary> + 宸ヤ綔鏃ユ湡 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.WorkTime"> + <summary> + 宸ヤ綔鏃堕暱 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.WorkCount"> + <summary> + 璁′欢鏁伴噺 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.TodaySalary"> + <summary> + 褰撴棩宸ヨ祫 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.IsShenPi"> + <summary> + 瀹℃壒鐘舵�� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.ShenPitime"> + <summary> + 瀹℃壒鏃堕棿 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.IsTiXian"> + <summary> + 鏄惁鎻愮幇 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.TiXiantime"> + <summary> + 鎻愮幇鏃堕棿 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailDto.orderBiddingDetailCheck"> + <summary> + 鎵撳崱鏄庣粏 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailCheckDto.OrderBiddingDetailCheckId"> + <summary> + 鎵撳崱璁板綍琛↖d + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailCheckDto.OrderBiddingDetailId"> + <summary> + 宸ヤ汉宸ヤ綔鏄庣粏琛↖d + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailCheckDto.CheckPhoto"> + <summary> + 鎵撳崱鐓х墖 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderBiddingDetailCheckDto.Checktime"> + <summary> + 鎵撳崱鏃堕棿 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.OrderBiddingDetailId"> + <summary> + 鎷涘伐鎵撳崱Id + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.OrderName"> + <summary> + 鎷涘伐鍚嶇О + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.WorkDate"> + <summary> + 宸ヤ綔鏃ユ湡 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.WorkTime"> + <summary> + 宸ヤ綔鏃堕暱 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.WorkerType"> + <summary> + 宸ヤ綔鏂瑰紡 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.WorkerTypeName"> + <summary> + 宸ヤ綔鏂瑰紡鍚嶇О + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.WorkPrice"> + <summary> + 宸ヤ环 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.WorkCount"> + <summary> + 璁′欢鏁伴噺 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.TodaySalary"> + <summary> + 褰撴棩宸ヨ祫 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.IsShenPi"> + <summary> + 瀹℃壒鐘舵�� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.IsShenPiName"> + <summary> + 瀹℃壒鐘舵�佸悕绉� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaDto.DakaMingxi"> + <summary> + 鎵撳崱鏄庣粏 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.OrderBiddingDetailId"> + <summary> + 鎷涘伐鎵撳崱Id + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.OrderName"> + <summary> + 鎷涘伐鍚嶇О + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.WorkDate"> + <summary> + 宸ヤ綔鏃ユ湡 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.WorkTime"> + <summary> + 宸ヤ綔鏃堕暱 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.WorkerType"> + <summary> + 宸ヤ綔鏂瑰紡 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.WorkerTypeName"> + <summary> + 宸ヤ綔鏂瑰紡鍚嶇О + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.WorkPrice"> + <summary> + 宸ヤ环 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.WorkCount"> + <summary> + 璁′欢鏁伴噺 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.TodaySalary"> + <summary> + 褰撴棩宸ヨ祫 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.IsShenPi"> + <summary> + 瀹℃壒鐘舵�� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.IsShenPiName"> + <summary> + 瀹℃壒鐘舵�佸悕绉� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.WorkerUserId"> + <summary> + 鐢ㄦ埛id + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.WorkerUserName"> + <summary> + 鐢ㄦ埛鏄电О + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.WorkerUserAvatar"> + <summary> + 鐢ㄦ埛澶村儚 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaMingxiDto.orderBiddingDetailCheck"> + <summary> + 鎵撳崱鏄庣粏 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.DakaQuerenDetailDto.OrderBiddingDetailId"> + <summary> + 鎷涘伐鎵撳崱Id + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.DakaQuerenDetailDto.WorkTime"> + <summary> + 宸ヤ綔鏃堕暱 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.DakaQuerenDetailDto.WorkCount"> + <summary> + 璁′欢鏁伴噺 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.DakaQuerenDetailDto.TodaySalary"> + <summary> + 褰撴棩宸ヨ祫 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.PageBaseSearch.PageIndex"> + <summary> + 椤电爜 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.PageBaseSearch.PageSize"> + <summary> + 鍒嗛〉澶у皬 + </summary> + </member> + <member name="T:cylsg.Application.Orders.Dtos.PageResult`1"> + <summary> + 鍒嗛〉鏁版嵁淇℃伅 + </summary> + <typeparam name="T"></typeparam> + </member> + <member name="P:cylsg.Application.Orders.Dtos.PageResult`1.PageIndex"> + <summary> + 椤电爜 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.PageResult`1.PageSize"> + <summary> + 鍒嗛〉澶у皬 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.PageResult`1.TotalCount"> + <summary> + 璁板綍鎬绘暟 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.PageResult`1.Items"> + <summary> + 璁板綍闆嗗悎 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.PageResult`1.TotalPage"> + <summary> + 鎬婚〉鏁� + </summary> + </member> + <member name="T:cylsg.Application.Orders.Dtos.OrderPageSearch"> + <summary> + 鎷涘伐璁㈠崟鍒嗛〉鏌ヨ + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderPageSearch.OrderName"> + <summary> + 鎷涘伐鍚嶇О + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderPageSearch.WordStartTime"> + <summary> + 宸ヤ綔寮�濮嬫椂闂� + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderPageSearch.WordEndTime"> + <summary> + 宸ヤ綔缁撴潫鏃堕棿 + </summary> + </member> + <member name="T:cylsg.Application.Orders.Dtos.OrderDakaPageSearch"> + <summary> + 鎷涘伐璁㈠崟鍒嗛〉鏌ヨ + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaPageSearch.WordDate"> + <summary> + 宸ヤ綔鏃ユ湡 + </summary> + </member> + <member name="P:cylsg.Application.Orders.Dtos.OrderDakaPageSearch.IsJieSuan"> + <summary> + 鏄惁缁撶畻 + </summary> + </member> + <member name="T:cylsg.Application.Orders.OrderCompanyAppService"> + <summary> + 璁㈠崟鍏徃鎺ュ彛 + </summary> + </member> + <member name="M:cylsg.Application.Orders.OrderCompanyAppService.PostMyListPage(cylsg.Application.Orders.Dtos.OrderPageSearch)"> + <summary> + 鏌ヨ鍏徃宸茬粡鍙戝竷鐨勬嫑宸ヨ鍗� + </summary> + <param name="page"></param> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderCompanyAppService.saveOrder(cylsg.Application.Orders.Dtos.OrderDto)"> + <summary> + 淇濆瓨鎷涘伐淇℃伅锛堟柊澧�/淇敼锛� + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderCompanyAppService.saveQueRen(cylsg.Application.Orders.Dtos.QueRenDto)"> + <summary> + 鍏徃閫夋嫨宸ヤ汉 + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderCompanyAppService.PostMyComDakaListPage(cylsg.Application.Orders.Dtos.OrderDakaPageSearch)"> + <summary> + 鏌ヨ鍏徃涓嬪伐浜虹殑鎵撳崱璁板綍 + </summary> + <param name="page"></param> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderCompanyAppService.saveDakaDetail(cylsg.Application.Orders.Dtos.DakaQuerenDetailDto)"> + <summary> + 鍏徃纭宸ヤ汉褰撳ぉ鎵撳崱璇︽儏 + </summary> + <returns></returns> + </member> + <member name="T:cylsg.Application.Orders.OrderWorkerAppService"> + <summary> + 璁㈠崟宸ヤ汉鎺ュ彛 + </summary> + </member> + <member name="M:cylsg.Application.Orders.OrderWorkerAppService.PostListPage(cylsg.Application.Orders.Dtos.OrderPageSearch)"> + <summary> + 鏌ヨ宸ヤ汉鍙互鎶曢�掔殑鎷涘伐璁㈠崟 + </summary> + <param name="page"></param> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderWorkerAppService.PostMyListPage(cylsg.Application.Orders.Dtos.OrderPageSearch)"> + <summary> + 鏌ヨ宸ヤ汉宸茬粡鎶曢�掔殑鎷涘伐璁㈠崟 + </summary> + <param name="page"></param> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderWorkerAppService.getOrder(System.Int32)"> + <summary> + 鏍规嵁Id鏌ヨ鎷涘伐鏄庣粏 + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderWorkerAppService.saveBaoMing(cylsg.Application.Orders.Dtos.BaoMingDto)"> + <summary> + 宸ヤ汉鎶曢�� + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderWorkerAppService.getDaka(cylsg.Application.Orders.Dtos.BaoMingDto)"> + <summary> + 杩涘叆鎵撳崱椤甸潰 + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderWorkerAppService.saveDaka(cylsg.Application.Orders.Dtos.DakaDto)"> + <summary> + 宸ヤ汉鎵撳崱 + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderWorkerAppService.PostMyDakaListPage(cylsg.Application.Orders.Dtos.OrderDakaPageSearch)"> + <summary> + 鏌ヨ宸ヤ汉鐨勬墦鍗¤褰� + </summary> + <param name="page"></param> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderWorkerAppService.getDakaDetail(cylsg.Application.Orders.Dtos.DakaDetailDto)"> + <summary> + 杩涘叆濉啓/瀹℃壒宸ヤ环椤甸潰 + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Orders.OrderWorkerAppService.saveDakaDetail(cylsg.Application.Orders.Dtos.DakaQuerenDetailDto)"> + <summary> + 宸ヤ汉纭褰撳ぉ鎵撳崱璇︽儏 + </summary> + <returns></returns> + </member> <member name="T:cylsg.Application.SystemAppService"> <summary> 绯荤粺鏈嶅姟鎺ュ彛 @@ -73,5 +653,211 @@ </summary> <returns></returns> </member> + <member name="T:cylsg.Application.Transfer.UserTransfer"> + <summary> + 鎻愮幇鏈嶅姟绋嬪簭 + </summary> + + </member> + <member name="M:cylsg.Application.Transfer.UserTransfer.GetTransferMoney(System.Decimal)"> + <summary> + 鎻愮幇 + </summary> + <param name="Money"></param> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.Id"> + <summary> + 鐢ㄦ埛Id + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.Phone"> + <summary> + 鐢佃瘽 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.name"> + <summary> + 鍚嶇О + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.ItCode"> + <summary> + 鐢佃瘽鍙风爜 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.Nickname"> + <summary> + 鏄电О + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.PassWord"> + <summary> + 瀵嗙爜 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.Avatar"> + <summary> + 澶村儚鍦板潃 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.WxOpenId"> + <summary> + 寰俊WxOpenId + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.userWorker"> + <summary> + 鐢ㄦ埛宸ヤ汉淇℃伅 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserDto.userCompany"> + <summary> + 鐢ㄦ埛鍏徃淇℃伅 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.Id"> + <summary> + 鐢ㄦ埛宸ヤ汉Id + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.UserId"> + <summary> + 鐢ㄦ埛id + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.IdCardFace"> + <summary> + 韬唤璇佹闈㈣矾寰� + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.IdCardBack"> + <summary> + 韬唤璇佸弽闈㈣矾寰� + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.name"> + <summary> + 濮撳悕 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.Phone"> + <summary> + 鐢佃瘽鍙风爜 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.IdCode"> + <summary> + 韬唤璇佸彿 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.Address"> + <summary> + 鑱旂郴鍦板潃 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.Resume"> + <summary> + 绠�鍘嗘弿杩� + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.TiXianZonge"> + <summary> + 鎻愮幇鎬婚 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserWorkerDto.YiTiXianJine"> + <summary> + 宸叉彁鐜伴噾棰� + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.Id"> + <summary> + 鐢ㄦ埛鍏徃Id + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.UserId"> + <summary> + 鐢ㄦ埛id + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.BusinessLicense"> + <summary> + 钀ヤ笟鎵х収璺緞 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.Suppliername"> + <summary> + 浼佷笟鍚嶇О + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.Regtime"> + <summary> + 娉ㄥ唽鏃堕棿 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.Address"> + <summary> + 鑱旂郴鍦板潃 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.Suppliercode"> + <summary> + 浼佷笟娉ㄥ唽鍙� + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.Contact"> + <summary> + 鑱旂郴浜� + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.Phone"> + <summary> + 鑱旂郴鐢佃瘽 + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.Resume"> + <summary> + 鍏徃绠�浠� + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.ChongZhiYue"> + <summary> + 鍏呭�间綑棰� + </summary> + </member> + <member name="P:cylsg.Application.Users.Dtos.UserCompanyDto.IsTiXian"> + <summary> + 鏄惁鍙互鍏呭�硷紝宸ヤ汉鎻愮幇 + </summary> + </member> + <member name="T:cylsg.Application.Users.UserAppService"> + <summary> + 鐢ㄦ埛鎺ュ彛 + </summary> + </member> + <member name="M:cylsg.Application.Users.UserAppService.getUser"> + <summary> + 鏌ヨ褰撳墠鐢ㄦ埛 + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Users.UserAppService.saveUserWorker(cylsg.Application.Users.Dtos.UserWorkerDto)"> + <summary> + 淇濆瓨鐢ㄦ埛宸ヤ汉淇℃伅 + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Users.UserAppService.saveUserCompany(cylsg.Application.Users.Dtos.UserCompanyDto)"> + <summary> + 淇濆瓨鐢ㄦ埛鍏徃淇℃伅 + </summary> + <returns></returns> + </member> + <member name="M:cylsg.Application.Users.UserAppService.getUser(System.Int32)"> + <summary> + 鏍规嵁Id鏌ヨ鐢ㄦ埛 + </summary> + <returns></returns> + </member> </members> </doc> diff --git a/cylsg/cylsg.Core/Attributes/CoderFirstAttribute.cs b/cylsg/cylsg.Core/Attributes/CoderFirstAttribute.cs index e7facf9..53a82fb 100644 --- a/cylsg/cylsg.Core/Attributes/CoderFirstAttribute.cs +++ b/cylsg/cylsg.Core/Attributes/CoderFirstAttribute.cs @@ -12,5 +12,6 @@ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] public class CoderFirstAttribute : Attribute { + } } diff --git a/cylsg/cylsg.Model/TransferOrder/WeChartTransferOrder.cs b/cylsg/cylsg.Model/TransferOrder/WeChartTransferOrder.cs new file mode 100644 index 0000000..697153d --- /dev/null +++ b/cylsg/cylsg.Model/TransferOrder/WeChartTransferOrder.cs @@ -0,0 +1,249 @@ +锘縰sing cylsg.Core; +using cylsg.Core.Attributes; +using Newtonsoft.Json; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace cylsg.Model.TransferOrder +{ + /// <summary> + /// 杞处鍗曡处妯″瀷 + /// </summary> + [SugarTable(TableDescription = "杞处鍗曡处妯″瀷")] + [CoderFirst] + public class WeChatTransferOrder: BaseModel + { + /// <summary> + /// ID + /// </summary> + [SugarColumn(ColumnDescription = "ID", IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + /// <summary> + /// 鑾峰彇鎴栬缃晢鎴锋壒娆″崟鍙枫�� + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃晢鎴锋壒娆″崟鍙�")] + public string OutBatchNumber { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃井淇℃壒娆″崟鍙枫�� + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃井淇℃壒娆″崟鍙�")] + public string BatchId { get; set; } + + + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆$姸鎬併�� + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆$姸鎬�")] + public string? BatchStatus { get; set; } + + + + + + + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆$殑鍚嶇О銆� + /// 绀轰緥: "2019骞�1鏈堟繁鍦冲垎閮ㄦ姤閿�鍗�" + /// </summary> + /// + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆$殑鍚嶇О", IsNullable = true)] + public string? BatchName { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆$殑澶囨敞銆� + /// 绀轰緥: "2019骞�1鏈堟繁鍦冲垎閮ㄦ姤閿�鍗�" + /// </summary> + /// + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆$殑澶囨敞", IsNullable = true)] + public string? BatchRemark { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃叧闂壒娆$殑鍘熷洜銆� + /// 绀轰緥: "OVERDUE_CLOSE" + /// </summary> + /// + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃叧闂壒娆$殑鍘熷洜", IsNullable = true)] + public string? CloseReason { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆′腑鐨勬�婚噾棰濄�� + /// 绀轰緥: 4000000 + /// </summary> + /// + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆′腑鐨勬�婚噾棰�", IsNullable = true)] + public int? TotalAmount { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆′腑鐨勯」鐩�绘暟銆� + /// 绀轰緥: 200 + /// </summary> + /// + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆′腑鐨勯」鐩�绘暟", IsNullable = true)] + public int? TotalNum { get; set; } + + + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆′腑鐨勬垚鍔熸�婚噾棰濄�� + /// 绀轰緥: 3900000 + /// </summary> + /// + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆′腑鐨勬垚鍔熸�婚噾棰�", IsNullable = true)] + public int? SuccessAmount { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆′腑鐨勬垚鍔熼」鐩暟銆� + /// 绀轰緥: 199 + /// </summary> + /// + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆′腑鐨勬垚鍔熼」鐩暟", IsNullable = true)] + public int? SuccessNum { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆′腑鐨勫け璐ユ�婚噾棰濄�� + /// 绀轰緥: 100000 + /// </summary> + /// + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆′腑鐨勫け璐ユ�婚噾棰�", IsNullable = true)] + public int? FailAmount { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆′腑鐨勫け璐ラ」鐩暟銆� + /// 绀轰緥: 1 + /// </summary> + /// + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆′腑鐨勫け璐ラ」鐩暟", IsNullable = true)] + public int? FailNum { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃浆璐﹀満鏅爣璇嗙銆� + /// 绀轰緥: "1000" + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃浆璐﹀満鏅爣璇嗙", IsNullable = true)] + public string? TransferSceneId { get; set; } + + + + + /// <summary> + /// 鑾峰彇鎴栬缃壒娆′腑鐨勮缁嗚浆璐﹀垪琛ㄣ�� + /// </summary> + [Navigate(NavigateType.OneToMany,nameof(WeChatTransferItem.WeChatTransferOrderID))] + public List<WeChatTransferItem> TransferDetailList { get; set; } + } + + + /// <summary> + /// 杞处鍗曞垪琛� + /// </summary> + [SugarTable(TableDescription = "杞处鍗曡处璇︾粏鍒楄〃妯″瀷")] + public class WeChatTransferItem:BaseModel + { + /// <summary> + /// ID + /// </summary> + [SugarColumn(ColumnDescription = "ID", IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + + /// <summary> + /// WeChatTransferOrderID + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆$姸鎬�")] + public int WeChatTransferOrderID { get; set; } + /// <summary> + /// 鑾峰彇鎴栬缃晢鎴锋槑缁嗗崟鍙枫�� + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆$姸鎬�")] + public string OutDetailNumber { get; set; } + + + /// <summary> + /// 鑾峰彇鎴栬缃浆璐﹂噾棰濓紙鍗曚綅锛氬垎锛夈�� + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆$姸鎬�")] + public int TransferAmount { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃浆璐﹀娉ㄣ�� + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃壒娆$姸鎬�")] + public string TransferRemark { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃敹娆剧敤鎴风殑 OpenId銆� + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃敹娆剧敤鎴风殑 OpenId")] + public string OpenId { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃敹娆剧敤鎴峰鍚嶏紙闇�浣跨敤骞冲彴鍏挜/璇佷功鍔犲瘑锛夈�� + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃敹娆剧敤鎴峰鍚�",IsNullable =true)] + public string? UserName { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃敹娆剧敤鎴疯韩浠借瘉鍙凤紙闇�浣跨敤骞冲彴鍏挜/璇佷功鍔犲瘑锛夈�� + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃敹娆剧敤鎴疯韩浠借瘉鍙�",IsNullable =true)] + public string? UserIdCardNumber { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃槑缁嗙姸鎬併�� + /// INIT: 鍒濆鎬併�傜郴缁熻浆璐︽牎楠屼腑 + /// WAIT_PAY: 寰呯‘璁ゃ�傚緟鍟嗘埛纭, 绗﹀悎鍏嶅瘑鏉′欢鏃�, 绯荤粺浼氳嚜鍔ㄦ壄杞负杞处涓� + /// PROCESSING: 杞处涓�傛鍦ㄥ鐞嗕腑锛岃浆璐︾粨鏋滃皻鏈槑纭� + /// SUCCESS: 杞处鎴愬姛 + /// FAIL: 杞处澶辫触銆傞渶瑕佺‘璁ゅけ璐ュ師鍥犲悗锛屽啀鍐冲畾鏄惁閲嶆柊鍙戣捣瀵硅绗旀槑缁嗗崟鐨勮浆璐︼紙骞堕潪鏁翠釜杞处鎵规鍗曪級 + /// 鏈�澶ч暱搴�: 32 + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃槑缁嗙姸鎬�", IsNullable = true)] + public string? DetailStatus { get; set; } + + /// <summary> + /// 鑾峰彇鎴栬缃槑缁嗗け璐ュ師鍥犮�� + /// 濡傛灉杞处澶辫触鍒欐湁澶辫触鍘熷洜銆� + /// 鍙�夊彇鍊硷細 + /// ACCOUNT_FROZEN: 璇ョ敤鎴疯处鎴疯鍐荤粨 + /// REAL_NAME_CHECK_FAIL: 鏀舵浜烘湭瀹炲悕璁よ瘉锛岄渶瑕佺敤鎴峰畬鎴愬井淇″疄鍚嶈璇� + /// NAME_NOT_CORRECT: 鏀舵浜哄鍚嶆牎楠屼笉閫氳繃锛岃鏍稿疄淇℃伅 + /// OPENID_INVALID: Openid鏍煎紡閿欒鎴栬�呬笉灞炰簬鍟嗗鍏紬璐﹀彿 + /// TRANSFER_QUOTA_EXCEED: 瓒呰繃鐢ㄦ埛鍗曠瑪鏀舵棰濆害锛屾牳瀹炰骇鍝佽缃槸鍚﹀噯纭� + /// DAY_RECEIVED_QUOTA_EXCEED: 瓒呰繃鐢ㄦ埛鍗曟棩鏀舵棰濆害锛屾牳瀹炰骇鍝佽缃槸鍚﹀噯纭� + /// MONTH_RECEIVED_QUOTA_EXCEED: 瓒呰繃鐢ㄦ埛鍗曟湀鏀舵棰濆害锛屾牳瀹炰骇鍝佽缃槸鍚﹀噯纭� + /// DAY_RECEIVED_COUNT_EXCEED: 瓒呰繃鐢ㄦ埛鍗曟棩鏀舵娆℃暟锛屾牳瀹炰骇鍝佽缃槸鍚﹀噯纭� + /// PRODUCT_AUTH_CHECK_FAIL: 鏈紑閫氳鏉冮檺鎴栨潈闄愯鍐荤粨锛岃鏍稿疄浜у搧鏉冮檺鐘舵�� + /// OVERDUE_CLOSE: 瓒呰繃绯荤粺閲嶈瘯鏈燂紝绯荤粺鑷姩鍏抽棴 + /// ID_CARD_NOT_CORRECT: 鏀舵浜鸿韩浠借瘉鏍¢獙涓嶉�氳繃锛岃鏍稿疄淇℃伅 + /// ACCOUNT_NOT_EXIST: 璇ョ敤鎴疯处鎴蜂笉瀛樺湪 + /// TRANSFER_RISK: 璇ョ瑪杞处鍙兘瀛樺湪椋庨櫓锛屽凡琚井淇℃嫤鎴� + /// OTHER_FAIL_REASON_TYPE: 鍏跺畠澶辫触鍘熷洜 + /// REALNAME_ACCOUNT_RECEIVED_QUOTA_EXCEED: 鐢ㄦ埛璐︽埛鏀舵鍙楅檺锛岃寮曞鐢ㄦ埛鍦ㄥ井淇℃敮浠樻煡鐪嬭鎯� + /// RECEIVE_ACCOUNT_NOT_PERMMIT: 鏈厤缃鐢ㄦ埛涓鸿浆璐︽敹娆句汉锛岃鍦ㄤ骇鍝佽缃腑璋冩暣锛屾坊鍔犺鐢ㄦ埛涓烘敹娆句汉 + /// PAYEE_ACCOUNT_ABNORMAL: 鐢ㄦ埛璐︽埛鏀舵寮傚父锛岃鑱旂郴鐢ㄦ埛瀹屽杽鍏跺湪寰俊鏀粯鐨勮韩浠戒俊鎭互缁х画鏀舵 + /// PAYER_ACCOUNT_ABNORMAL: 鍟嗘埛璐︽埛浠樻鍙楅檺锛屽彲鍓嶅線鍟嗘埛骞冲彴鑾峰彇瑙i櫎鍔熻兘闄愬埗鎸囧紩 + /// TRANSFER_SCENE_UNAVAILABLE: 璇ヨ浆璐﹀満鏅殏涓嶅彲鐢紝璇风‘璁よ浆璐﹀満鏅疘D鏄惁姝g‘ + /// TRANSFER_SCENE_INVALID: 浣犲皻鏈幏鍙栬杞处鍦烘櫙锛岃纭杞处鍦烘櫙ID鏄惁姝g‘ + /// TRANSFER_REMARK_SET_FAIL: 杞处澶囨敞璁剧疆澶辫触锛� 璇疯皟鏁村悗閲嶆柊鍐嶈瘯 + /// RECEIVE_ACCOUNT_NOT_CONFIGURE: 璇峰墠寰�鍟嗘埛骞冲彴-鍟嗗杞处鍒伴浂閽�-鍓嶅線鍔熻兘-杞处鍦烘櫙涓坊鍔� + /// BLOCK_B2C_USERLIMITAMOUNT_BSRULE_MONTH: 瓒呭嚭鐢ㄦ埛鍗曟湀杞处鏀舵20w闄愰锛屾湰鏈堜笉鏀寔缁х画鍚戣鐢ㄦ埛浠樻 + /// BLOCK_B2C_USERLIMITAMOUNT_MONTH: 鐢ㄦ埛璐︽埛瀛樺湪椋庨櫓鏀舵鍙楅檺锛屾湰鏈堜笉鏀寔缁х画鍚戣鐢ㄦ埛浠樻 + /// MERCHANT_REJECT: 鍟嗘埛鍛樺伐锛堣浆璐﹂獙瀵嗕汉锛夊凡椹冲洖杞处 + /// MERCHANT_NOT_CONFIRM: 鍟嗘埛鍛樺伐锛堣浆璐﹂獙瀵嗕汉锛夎秴鏃舵湭楠屽瘑 + /// </summary> + [SugarColumn(ColumnDescription = "鑾峰彇鎴栬缃槑缁嗗け璐ュ師鍥�", IsNullable = true)] + public string? FailReason { get; set; } + } + + + +} diff --git a/cylsg/cylsg.Model/UserModel/UserTiXianDetail.cs b/cylsg/cylsg.Model/UserModel/UserTiXianDetail.cs index f867e3f..30a5b4d 100644 --- a/cylsg/cylsg.Model/UserModel/UserTiXianDetail.cs +++ b/cylsg/cylsg.Model/UserModel/UserTiXianDetail.cs @@ -1,5 +1,6 @@ 锘縰sing cylsg.Core; using cylsg.Core.Attributes; +using cylsg.Model.TransferOrder; using SqlSugar; using System; using System.Collections.Generic; @@ -52,6 +53,17 @@ public string Remark { get; set; } + /// <summary> + /// 寰俊鏀粯璁板綍 + /// </summary> + [SugarColumn(ColumnDescription = "澶囨敞",IsNullable = true)] + public int? WeChatTransferOrderID { get; set; } + /// <summary> + /// + /// </summary> + [Navigate(NavigateType.OneToOne, nameof( WeChatTransferOrderID))] + public WeChatTransferOrder? WeChatTransferOrderInfo { get; set; } + } /// <summary> diff --git a/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj b/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj index 76cc66d..4b36e83 100644 --- a/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj +++ b/cylsg/cylsg.Web.Core/cylsg.Web.Core.csproj @@ -16,7 +16,11 @@ <ItemGroup> <ProjectReference Include="..\cylsg.Application\cylsg.Application.csproj" /> <ProjectReference Include="..\cylsg.Authorization\cylsg.Authorization.csproj" /> + <ProjectReference Include="..\EzInitqMessageDef\EzInitqMessageDef.csproj" /> + <ProjectReference Include="..\EzInitQ\EzInitQ.csproj" /> + <ProjectReference Include="..\EzJob\EzJob.csproj" /> <ProjectReference Include="..\EzUpFile\EzUpFile.csproj" /> + <ProjectReference Include="..\EzWechat\EzWechat.csproj" /> </ItemGroup> </Project> diff --git a/cylsg/cylsg.redis/EzCoreNetRedisService.cs b/cylsg/cylsg.redis/EzCoreNetRedisService.cs index ba679b1..5137422 100644 --- a/cylsg/cylsg.redis/EzCoreNetRedisService.cs +++ b/cylsg/cylsg.redis/EzCoreNetRedisService.cs @@ -1,5 +1,6 @@ 锘縰sing Furion; using Furion.DependencyInjection; +using Microsoft.AspNetCore.DataProtection.KeyManagement; using SqlSugar; using System; using System.Collections.Generic; @@ -99,6 +100,25 @@ return Data; } - + public long Incrby(string key) + { + return RedisHelper.IncrBy(key); + } + + public string Get32sn() + { + string formattedDate = DateTime.Now.ToString("yyyyMMdd"); + + + var sn = Incrby($"CreatSnKey:{formattedDate}"); + if(sn<1) + { + //璁剧疆鏈夋晥鏈熼檺涓�24灏忔椂 + SetTtl($"CreatSnKey:{formattedDate}", 24 * 60 * 60); + } + string re = "Ez" + formattedDate + sn.ToString(); + + return re; + } } } diff --git a/cylsg/cylsg.redis/IEzCoreNetRedisService.cs b/cylsg/cylsg.redis/IEzCoreNetRedisService.cs index 853b9d2..e92bb05 100644 --- a/cylsg/cylsg.redis/IEzCoreNetRedisService.cs +++ b/cylsg/cylsg.redis/IEzCoreNetRedisService.cs @@ -76,5 +76,16 @@ /// <param name="Prefix"></param> /// <returns></returns> Task<long> delegateAllKeyWith(string Prefix); + /// <summary> + /// 鍔犱竴 + /// </summary> + /// <param name="key"></param> + long Incrby(string key); + + /// <summary> + /// 鑾峰彇32浣峴n + /// </summary> + string Get32sn(); + } } diff --git a/cylsg/cylsg.sln b/cylsg/cylsg.sln index 963e45a..e2b0e88 100644 --- a/cylsg/cylsg.sln +++ b/cylsg/cylsg.sln @@ -23,9 +23,17 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "cylsg.Authorization", "cylsg.Authorization\cylsg.Authorization.csproj", "{1197C9BB-C73D-42FB-A114-AFB0A7466615}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EzTencentCloud", "EzTencentCloud\EzTencentCloud.csproj", "{8E2530EC-45FE-4EC6-A29A-1B8F25E0F94B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EzTencentCloud", "EzTencentCloud\EzTencentCloud.csproj", "{8E2530EC-45FE-4EC6-A29A-1B8F25E0F94B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EzUpFile", "EzUpFile\EzUpFile.csproj", "{040F7EE0-B57B-4134-8538-20B9599FB898}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EzUpFile", "EzUpFile\EzUpFile.csproj", "{040F7EE0-B57B-4134-8538-20B9599FB898}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EzInitQ", "EzInitQ\EzInitQ.csproj", "{5C84DC88-9B0E-475F-9D20-C7608FDF6B37}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EzInitqMessageDef", "EzInitqMessageDef\EzInitqMessageDef.csproj", "{A17A010E-238D-4C7C-B1F5-5F2B0DFCC619}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cylsg.Filter", "Cylsg.Filter\Cylsg.Filter.csproj", "{2A3AF5AA-E3BE-4C98-A3A7-185ED6F938FE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EzJob", "EzJob\EzJob.csproj", "{EB4CED81-7245-4477-9541-8167BD522CC6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -81,6 +89,22 @@ {040F7EE0-B57B-4134-8538-20B9599FB898}.Debug|Any CPU.Build.0 = Debug|Any CPU {040F7EE0-B57B-4134-8538-20B9599FB898}.Release|Any CPU.ActiveCfg = Release|Any CPU {040F7EE0-B57B-4134-8538-20B9599FB898}.Release|Any CPU.Build.0 = Release|Any CPU + {5C84DC88-9B0E-475F-9D20-C7608FDF6B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5C84DC88-9B0E-475F-9D20-C7608FDF6B37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5C84DC88-9B0E-475F-9D20-C7608FDF6B37}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5C84DC88-9B0E-475F-9D20-C7608FDF6B37}.Release|Any CPU.Build.0 = Release|Any CPU + {A17A010E-238D-4C7C-B1F5-5F2B0DFCC619}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A17A010E-238D-4C7C-B1F5-5F2B0DFCC619}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A17A010E-238D-4C7C-B1F5-5F2B0DFCC619}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A17A010E-238D-4C7C-B1F5-5F2B0DFCC619}.Release|Any CPU.Build.0 = Release|Any CPU + {2A3AF5AA-E3BE-4C98-A3A7-185ED6F938FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A3AF5AA-E3BE-4C98-A3A7-185ED6F938FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A3AF5AA-E3BE-4C98-A3A7-185ED6F938FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A3AF5AA-E3BE-4C98-A3A7-185ED6F938FE}.Release|Any CPU.Build.0 = Release|Any CPU + {EB4CED81-7245-4477-9541-8167BD522CC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB4CED81-7245-4477-9541-8167BD522CC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB4CED81-7245-4477-9541-8167BD522CC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB4CED81-7245-4477-9541-8167BD522CC6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE -- Gitblit v1.9.1