From 8f87da840cc16936e77402cf229237023098382b Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 09 九月 2025 13:32:15 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs | 5 FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs | 10 FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs | 10 FlexJobApi.Core/Enums/Users/EnumWalletTransactionStatus.cs | 4 FlexJobApi.Core/Enums/Users/EnumUserWalletTransactionType.cs | 23 FlexJobApi.Core/Entities/UserServer/Users/UserWallet.cs | 30 FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs | 1 FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs | 390 +++- FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalUserTransactionsQuery.cs | 93 + FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs | 92 FlexJobApi.Database.Migrations/Migrations/20250909053124_UpdateUserWalletTransaction0909.Designer.cs | 3696 ++++++++++++++++++++++++++++++++++++++++ FlexJobApi.Database.Migrations/Migrations/20250909053124_UpdateUserWalletTransaction0909.cs | 152 + /dev/null | 31 FlexJobApi.UserServer.Application/Users/Queries/GetPersonalUserTransactionsQueryHandler.cs | 84 FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs | 14 FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalUserTransactionQuery.cs | 80 FlexJobApi.Core/FlexJobApi.Core.xml | 511 ++++ FlexJobApi.Core/Entities/UserServer/Users/UserWalletTransaction.cs | 140 + FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml | 34 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs | 5 FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs | 32 FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletTransactionQuery.cs | 2 FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs | 45 23 files changed, 5,193 insertions(+), 291 deletions(-) diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs index 9269de7..fdb8b9a 100644 --- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs +++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfo.cs @@ -207,6 +207,16 @@ public int SettlementUserCount { get; set; } /// <summary> + /// 缁撶畻鎿嶄綔浜篒d + /// </summary> + public Guid? SettlementOperatorUserId { get; set; } + + /// <summary> + /// 缁撶畻鎿嶄綔浜� + /// </summary> + public User SettlementOperatorUser { get; set; } + + /// <summary> /// 缁撶畻寮�濮嬫椂闂� /// </summary> public DateTime? SettlementStartTime { get; set; } diff --git a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs index 0d8d0ec..32fa284 100644 --- a/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs +++ b/FlexJobApi.Core/Entities/FlexJobServer/Tasks/TaskInfoUser.cs @@ -123,6 +123,11 @@ /// 缁撶畻澶囨敞 /// </summary> public string SettlementRemark { get; set; } + + /// <summary> + /// 瀹為檯閲戦 + /// </summary> + public decimal ActualAmount { get; set; } /// <summary> /// 鎻愪氦 diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs index aaa535d..b71012a 100644 --- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs +++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWallet.cs @@ -45,6 +45,11 @@ public decimal Balance { get; set; } /// <summary> + /// 鍐荤粨浣欓 + /// </summary> + public decimal FreezeBalance { get; set; } + + /// <summary> /// 鍗忚浜у搧鐮侊紝鍟嗘埛鍜屾敮浠樺疂绛剧害鏃剁‘瀹氾紝涓嶅悓涓氬姟鍦烘櫙瀵瑰簲涓嶅悓鐨勭绾︿骇鍝佺爜銆� /// </summary> public string PersonalProductCode { get; set; } diff --git a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs index 2eb09a6..2e9e162 100644 --- a/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs +++ b/FlexJobApi.Core/Entities/UserServer/Enterprises/EnterpriseWalletTransaction.cs @@ -53,6 +53,36 @@ public decimal Balance { get; set; } /// <summary> + /// 鏀舵敮鍚庝綑棰� + /// </summary> + public decimal AfterBalance { get; set; } + + /// <summary> + /// 鎿嶄綔浜虹敤鎴稩d + /// </summary> + public Guid? OperatorUserId { get; set; } + + /// <summary> + /// 鎿嶄綔浜虹敤鎴� + /// </summary> + public User OperatorUser { get; set; } + + /// <summary> + /// 鎿嶄綔鏃堕棿 + /// </summary> + public DateTime? OperatorTime { get; set; } + + /// <summary> + /// 鏀舵浜虹敤鎴稩d + /// </summary> + public Guid? ReceiveUserId { get; set; } + + /// <summary> + /// 鏀舵浜虹敤鎴� + /// </summary> + public User ReceiveUser { get; set; } + + /// <summary> /// 鏀舵浜哄鍚� /// </summary> public string ReceiveName { get; set; } @@ -130,7 +160,7 @@ /// <summary> /// 鐘舵�� /// </summary> - public EnumEnterpriseWalletTransactionStatus TransactionStatus { get; set; } + public EnumWalletTransactionStatus TransactionStatus { get; set; } #region 杞处鑷虫敮浠樺疂 diff --git a/FlexJobApi.Core/Entities/UserServer/Users/UserWallet.cs b/FlexJobApi.Core/Entities/UserServer/Users/UserWallet.cs new file mode 100644 index 0000000..4e4c60d --- /dev/null +++ b/FlexJobApi.Core/Entities/UserServer/Users/UserWallet.cs @@ -0,0 +1,30 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鐢ㄦ埛閽卞寘 + /// </summary> + public class UserWallet : CommonEntity + { + /// <summary> + /// 鐢ㄦ埛淇℃伅Id + /// </summary> + public Guid UserId { get; set; } + + /// <summary> + /// 鐢ㄦ埛淇℃伅 + /// </summary> + public User User { get; set; } + + /// <summary> + /// 浣欓 + /// </summary> + public decimal Balance { get; set; } + + } +} diff --git a/FlexJobApi.Core/Entities/UserServer/Users/UserWalletTransaction.cs b/FlexJobApi.Core/Entities/UserServer/Users/UserWalletTransaction.cs new file mode 100644 index 0000000..63c3ed2 --- /dev/null +++ b/FlexJobApi.Core/Entities/UserServer/Users/UserWalletTransaction.cs @@ -0,0 +1,140 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鐢ㄦ埛閽卞寘鏀舵敮鏄庣粏 + /// </summary> + public class UserWalletTransaction : CommonEntity + { + /// <summary> + /// 閽卞寘Id + /// </summary> + public Guid WalletId { get; set; } + + /// <summary> + /// 閽卞寘 + /// </summary> + public UserWallet Wallet { get; set; } + + /// <summary> + /// 绫诲瀷 + /// </summary> + public EnumUserWalletTransactionType Type { get; set; } + + /// <summary> + /// 璁㈠崟鍙� + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 鏍囬 + /// </summary> + public string Title { get; set; } + + /// <summary> + /// 閲戦 + /// </summary> + public decimal Amount { get; set; } + + /// <summary> + /// 瀹為檯閲戦 + /// </summary> + public decimal ActualAmount { get; set; } + + /// <summary> + /// 鏈嶅姟璐� + /// </summary> + public decimal ServiceFee { get; set; } + + /// <summary> + /// 浣欓 + /// </summary> + public decimal Balance { get; set; } + + /// <summary> + /// 鏀舵敮鍚庝綑棰� + /// </summary> + public decimal AfterBalance { get; set; } + + /// <summary> + /// 浠诲姟鐢ㄦ埛Id + /// </summary> + public Guid? TaskUserId { get; set; } + + /// <summary> + /// 浠诲姟鐢ㄦ埛 + /// </summary> + public TaskInfoUser TaskUser { get; set; } + + /// <summary> + /// 浼佷笟鍚嶇О + /// </summary> + public string EnterpriseName { get; set; } + + /// <summary> + /// 缁撶畻鏃ユ湡 + /// </summary> + public DateTime? SettlementTime { get; set; } + + /// <summary> + /// 缁撶畻閲戦 + /// </summary> + public decimal? SettlementAmount { get; set; } + + /// <summary> + /// 鎿嶄綔浜虹敤鎴稩d + /// </summary> + public Guid? OperatorUserId { get; set; } + + /// <summary> + /// 鎿嶄綔浜虹敤鎴� + /// </summary> + public User OperatorUser { get; set; } + + /// <summary> + /// 鎿嶄綔鏃堕棿 + /// </summary> + public DateTime? OperatorTime { get; set; } + + /// <summary> + /// 鏀舵浜哄鍚� + /// </summary> + public string ReceiveName { get; set; } + + /// <summary> + /// 鏀舵璐︽埛 + /// </summary> + public string ReceiveAccount { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + public string Remark { get; set; } + + /// <summary> + /// 璁㈠崟鏀粯鏃堕棿 + /// </summary> + public DateTime? TransDate { get; set; } + + /// <summary> + /// 浼佷笟閽卞寘鏀舵敮Id + /// </summary> + public Guid? EnterpriseWalletTransactionId { get; set; } + + /// <summary> + /// 浼佷笟閽卞寘鏀舵敮 + /// </summary> + public EnterpriseWalletTransaction EnterpriseWalletTransaction { get; set; } + + /// <summary> + /// 鐘舵�� + /// </summary> + public EnumWalletTransactionStatus TransactionStatus { get; set; } + + } +} diff --git a/FlexJobApi.Core/Enums/Users/EnumUserWalletTransactionType.cs b/FlexJobApi.Core/Enums/Users/EnumUserWalletTransactionType.cs new file mode 100644 index 0000000..142e0ac --- /dev/null +++ b/FlexJobApi.Core/Enums/Users/EnumUserWalletTransactionType.cs @@ -0,0 +1,23 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鐢ㄦ埛閽卞寘鏀舵敮绫诲瀷 + /// </summary> + public enum EnumUserWalletTransactionType + { + /// <summary> + /// 鏀跺叆 + /// </summary> + Income = 10, + /// <summary> + /// 鎻愮幇 + /// </summary> + Withdraw = 20 + } +} diff --git a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs b/FlexJobApi.Core/Enums/Users/EnumWalletTransactionStatus.cs similarity index 89% rename from FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs rename to FlexJobApi.Core/Enums/Users/EnumWalletTransactionStatus.cs index 84abf3b..7945338 100644 --- a/FlexJobApi.Core/Enums/Users/EnumEnterpriseWalletTransactionStatus.cs +++ b/FlexJobApi.Core/Enums/Users/EnumWalletTransactionStatus.cs @@ -7,9 +7,9 @@ namespace FlexJobApi.Core { /// <summary> - /// 浼佷笟閽卞寘浜ゆ槗鐘舵�� + /// 閽卞寘浜ゆ槗鐘舵�� /// </summary> - public enum EnumEnterpriseWalletTransactionStatus + public enum EnumWalletTransactionStatus { /// <summary> /// 寰呮彁浜� diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index 2ef5396..022b215 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -949,6 +949,16 @@ 缁撶畻浜烘暟 </summary> </member> + <member name="P:FlexJobApi.Core.TaskInfo.SettlementOperatorUserId"> + <summary> + 缁撶畻鎿嶄綔浜篒d + </summary> + </member> + <member name="P:FlexJobApi.Core.TaskInfo.SettlementOperatorUser"> + <summary> + 缁撶畻鎿嶄綔浜� + </summary> + </member> <member name="P:FlexJobApi.Core.TaskInfo.SettlementStartTime"> <summary> 缁撶畻寮�濮嬫椂闂� @@ -1137,6 +1147,11 @@ <member name="P:FlexJobApi.Core.TaskInfoUser.SettlementRemark"> <summary> 缁撶畻澶囨敞 + </summary> + </member> + <member name="P:FlexJobApi.Core.TaskInfoUser.ActualAmount"> + <summary> + 瀹為檯閲戦 </summary> </member> <member name="P:FlexJobApi.Core.TaskInfoUser.Submits"> @@ -2090,6 +2105,11 @@ 浣欓 </summary> </member> + <member name="P:FlexJobApi.Core.EnterpriseWallet.FreezeBalance"> + <summary> + 鍐荤粨浣欓 + </summary> + </member> <member name="P:FlexJobApi.Core.EnterpriseWallet.PersonalProductCode"> <summary> 鍗忚浜у搧鐮侊紝鍟嗘埛鍜屾敮浠樺疂绛剧害鏃剁‘瀹氾紝涓嶅悓涓氬姟鍦烘櫙瀵瑰簲涓嶅悓鐨勭绾︿骇鍝佺爜銆� @@ -2398,6 +2418,36 @@ <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.Balance"> <summary> 浣欓 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.AfterBalance"> + <summary> + 鏀舵敮鍚庝綑棰� + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.OperatorUserId"> + <summary> + 鎿嶄綔浜虹敤鎴稩d + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.OperatorUser"> + <summary> + 鎿嶄綔浜虹敤鎴� + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.OperatorTime"> + <summary> + 鎿嶄綔鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.ReceiveUserId"> + <summary> + 鏀舵浜虹敤鎴稩d + </summary> + </member> + <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.ReceiveUser"> + <summary> + 鏀舵浜虹敤鎴� </summary> </member> <member name="P:FlexJobApi.Core.EnterpriseWalletTransaction.ReceiveName"> @@ -3260,6 +3310,156 @@ <member name="P:FlexJobApi.Core.UserManageIndustrialPark.IndustrialParkId"> <summary> 鍥尯Id + </summary> + </member> + <member name="T:FlexJobApi.Core.UserWallet"> + <summary> + 鐢ㄦ埛閽卞寘 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWallet.UserId"> + <summary> + 鐢ㄦ埛淇℃伅Id + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWallet.User"> + <summary> + 鐢ㄦ埛淇℃伅 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWallet.Balance"> + <summary> + 浣欓 + </summary> + </member> + <member name="T:FlexJobApi.Core.UserWalletTransaction"> + <summary> + 鐢ㄦ埛閽卞寘鏀舵敮鏄庣粏 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.WalletId"> + <summary> + 閽卞寘Id + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.Wallet"> + <summary> + 閽卞寘 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.Type"> + <summary> + 绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.Code"> + <summary> + 璁㈠崟鍙� + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.Title"> + <summary> + 鏍囬 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.Amount"> + <summary> + 閲戦 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.ActualAmount"> + <summary> + 瀹為檯閲戦 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.ServiceFee"> + <summary> + 鏈嶅姟璐� + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.Balance"> + <summary> + 浣欓 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.AfterBalance"> + <summary> + 鏀舵敮鍚庝綑棰� + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.TaskUserId"> + <summary> + 浠诲姟鐢ㄦ埛Id + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.TaskUser"> + <summary> + 浠诲姟鐢ㄦ埛 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.EnterpriseName"> + <summary> + 浼佷笟鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.SettlementTime"> + <summary> + 缁撶畻鏃ユ湡 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.SettlementAmount"> + <summary> + 缁撶畻閲戦 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.OperatorUserId"> + <summary> + 鎿嶄綔浜虹敤鎴稩d + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.OperatorUser"> + <summary> + 鎿嶄綔浜虹敤鎴� + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.OperatorTime"> + <summary> + 鎿嶄綔鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.ReceiveName"> + <summary> + 鏀舵浜哄鍚� + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.ReceiveAccount"> + <summary> + 鏀舵璐︽埛 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.Remark"> + <summary> + 澶囨敞 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.TransDate"> + <summary> + 璁㈠崟鏀粯鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.EnterpriseWalletTransactionId"> + <summary> + 浼佷笟閽卞寘鏀舵敮Id + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.EnterpriseWalletTransaction"> + <summary> + 浼佷笟閽卞寘鏀舵敮 + </summary> + </member> + <member name="P:FlexJobApi.Core.UserWalletTransaction.TransactionStatus"> + <summary> + 鐘舵�� </summary> </member> <member name="T:FlexJobApi.Core.EnumCodeUrlScene"> @@ -4284,41 +4484,6 @@ 缁堟 </summary> </member> - <member name="T:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus"> - <summary> - 浼佷笟閽卞寘浜ゆ槗鐘舵�� - </summary> - </member> - <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.WaitSubmit"> - <summary> - 寰呮彁浜� - </summary> - </member> - <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.WaitPay"> - <summary> - 寰呮敮浠� - </summary> - </member> - <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Dealing"> - <summary> - 澶勭悊涓� - </summary> - </member> - <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Success"> - <summary> - 鎴愬姛 - </summary> - </member> - <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Refund"> - <summary> - 閫�绁� - </summary> - </member> - <member name="F:FlexJobApi.Core.EnumEnterpriseWalletTransactionStatus.Fail"> - <summary> - 澶辫触 - </summary> - </member> <member name="T:FlexJobApi.Core.EnumEnterpriseWalletTransactionType"> <summary> 浼佷笟閽卞寘浜ゆ槗绫诲瀷 @@ -4609,6 +4774,56 @@ 杩愯惀 </summary> </member> + <member name="T:FlexJobApi.Core.EnumUserWalletTransactionType"> + <summary> + 鐢ㄦ埛閽卞寘鏀舵敮绫诲瀷 + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumUserWalletTransactionType.Income"> + <summary> + 鏀跺叆 + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumUserWalletTransactionType.Withdraw"> + <summary> + 鎻愮幇 + </summary> + </member> + <member name="T:FlexJobApi.Core.EnumWalletTransactionStatus"> + <summary> + 閽卞寘浜ゆ槗鐘舵�� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumWalletTransactionStatus.WaitSubmit"> + <summary> + 寰呮彁浜� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumWalletTransactionStatus.WaitPay"> + <summary> + 寰呮敮浠� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumWalletTransactionStatus.Dealing"> + <summary> + 澶勭悊涓� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumWalletTransactionStatus.Success"> + <summary> + 鎴愬姛 + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumWalletTransactionStatus.Refund"> + <summary> + 閫�绁� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumWalletTransactionStatus.Fail"> + <summary> + 澶辫触 + </summary> + </member> <member name="T:FlexJobApi.Core.IIsDisabled"> <summary> 鏄惁宸茬鐢� @@ -4680,10 +4895,74 @@ 瀹屾垚浠诲姟缁撶畻T+1 </summary> </member> - <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWalletTransaction},FlexJobApi.Core.AlipayUtils)"> + <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfoUser},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWallet},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.EnterpriseWalletTransaction},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.UserWallet},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.UserWalletTransaction},FlexJobApi.Core.AlipayUtils)"> <summary> 瀹屾垚浠诲姟缁撶畻T+1 </summary> + </member> + <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.UpdateUserWalletTransactionWithdraw(FlexJobApi.Core.UserWallet,FlexJobApi.Core.UserWalletTransaction,FlexJobApi.Core.EnterpriseWalletTransaction)"> + <summary> + 鏇存柊鐢ㄦ埛閽卞寘鎻愮幇璁板綍 + </summary> + <param name="wallet"></param> + <param name="withdraw"></param> + <param name="transfer"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.AddUserWalletTransactionWithdraw(FlexJobApi.Core.UserWallet,FlexJobApi.Core.TaskInfo,FlexJobApi.Core.TaskInfoUser)"> + <summary> + 娣诲姞鐢ㄦ埛閽卞寘鎻愮幇璁板綍 + </summary> + <param name="wallet"></param> + <param name="task"></param> + <param name="user"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.AddUserWalletTransactionIncome(System.Collections.Generic.List{FlexJobApi.Core.UserWallet},FlexJobApi.Core.TaskInfo,FlexJobApi.Core.TaskInfoUser)"> + <summary> + 娣诲姞鐢ㄦ埛閽卞寘鏀跺叆璁板綍 + </summary> + <param name="wallets"></param> + <param name="task"></param> + <param name="user"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.AddEnterpriseWalletTransactionTransfer(FlexJobApi.Core.EnterpriseWallet,FlexJobApi.Core.TaskInfo,FlexJobApi.Core.TaskInfoUser)"> + <summary> + 娣诲姞浼佷笟閽卞寘杞处璁板綍 + </summary> + <param name="wallet"></param> + <param name="task"></param> + <param name="user"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.GetUserWallets(System.Collections.Generic.List{System.Guid})"> + <summary> + 鏌ヨ鐢ㄦ埛閽卞寘 + </summary> + <param name="userIds"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.GetEnterpriseWallets(System.Collections.Generic.List{System.Guid})"> + <summary> + 鏌ヨ浼佷笟閽卞寘 + </summary> + <param name="enterpriseIds"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.GetTaskUsers(System.Collections.Generic.List{System.Guid})"> + <summary> + 鏌ヨ浠诲姟鐢ㄦ埛 + </summary> + <param name="taskIds"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.Core.CompleteTaskSettlementT1Job.GetTasks(System.String)"> + <summary> + 鏌ヨ浠诲姟 + </summary> + <param name="env"></param> + <returns></returns> </member> <member name="T:FlexJobApi.Core.SaveCodeUrlCommand"> <summary> @@ -10930,26 +11209,6 @@ 鏀粯鍦板潃 </summary> </member> - <member name="T:FlexJobApi.Core.TransferEnterpriseWalletCommand"> - <summary> - 浼佷笟閽卞寘杞处 - </summary> - </member> - <member name="P:FlexJobApi.Core.TransferEnterpriseWalletCommand.Access"> - <summary> - 閫氶亾 - </summary> - </member> - <member name="P:FlexJobApi.Core.TransferEnterpriseWalletCommand.Amount"> - <summary> - 閲戦 - </summary> - </member> - <member name="P:FlexJobApi.Core.TransferEnterpriseWalletCommand.Remark"> - <summary> - 鍏呭�煎娉� - </summary> - </member> <member name="T:FlexJobApi.Core.GetEnterpriseWalletExpandindirectOrderQuery"> <summary> 鏌ヨ鏀粯瀹濊祫閲戜簩绾у晢鎴稫YB浠h繘浠跺崟璇︽儏 @@ -13812,6 +14071,146 @@ 鏈�杩戠绾︽椂闂� </summary> </member> + <member name="T:FlexJobApi.Core.GetPersonalUserTransactionQuery"> + <summary> + 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏璇︽儏 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQuery.Id"> + <summary> + 鏀舵敮Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.Id"> + <summary> + 鏀舵敮Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.Type"> + <summary> + 绫诲瀷 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.Code"> + <summary> + 璁㈠崟鍙� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.EnterpriseName"> + <summary> + 浼佷笟鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.SettlementTime"> + <summary> + 缁撶畻鏃ユ湡 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.SettlementAmount"> + <summary> + 缁撶畻閲戦 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.Amount"> + <summary> + 瀹炲彂閲戦/鎻愮幇閲戦 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.ReceiveName"> + <summary> + 鏀舵浜哄鍚� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.ReceiveAccount"> + <summary> + 鏀舵璐︽埛 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.ServiceFee"> + <summary> + 鏈嶅姟璐� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionQueryResult.ActualAmount"> + <summary> + 瀹為檯鍒拌处 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetPersonalUserTransactionsQuery"> + <summary> + 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏鍒嗛〉鍒楄〃鏁版嵁 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQuery.CreatedTimeStart"> + <summary> + 鍒涘缓鏃堕棿-璧峰 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQuery.CreatedTimeEnd"> + <summary> + 鍒涘缓鏃堕棿-鎴 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQuery.Type"> + <summary> + 绫诲瀷 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetPersonalUserTransactionsQueryResult"> + <summary> + 鏌ヨC绔汉鍛樺垎椤靛垪琛ㄦ暟鎹�-缁撴灉 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQueryResult.ObjectData"> + <summary> + 缁熻 + </summary> + </member> + <member name="T:FlexJobApi.Core.GetPersonalUserTransactionsQueryResultObjectData"> + <summary> + 鏌ヨC绔汉鍛樺垎椤靛垪琛ㄦ暟鎹�-缁撴灉 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQueryResultObjectData.SumIncome"> + <summary> + 鎬绘敹鍏� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQueryResultObjectData.SumWithdraw"> + <summary> + 鎬绘彁鐜� + </summary> + </member> + <member name="T:FlexJobApi.Core.GetPersonalUserTransactionsQueryResultItem"> + <summary> + 鏌ヨC绔汉鍛樺垎椤靛垪琛ㄦ暟鎹�-缁撴灉-椤� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQueryResultItem.Id"> + <summary> + 鏀舵敮Id + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQueryResultItem.Title"> + <summary> + 鏍囬 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQueryResultItem.CreatedTime"> + <summary> + 鍒涘缓鏃堕棿 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQueryResultItem.Amount"> + <summary> + 閲戦 + </summary> + </member> + <member name="P:FlexJobApi.Core.GetPersonalUserTransactionsQueryResultItem.Balance"> + <summary> + 浣欓 + </summary> + </member> <member name="T:FlexJobApi.Core.GetUserInfoRolesQuery"> <summary> 鏌ヨ鐢ㄦ埛瑙掕壊鍒楄〃 diff --git a/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs b/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs index fcd0102..2c9c5a5 100644 --- a/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs +++ b/FlexJobApi.Core/Jobs/CompleteTaskSettlementT1Job.cs @@ -1,10 +1,12 @@ 锘縰sing Aop.Api.Domain; +using Azure; using Furion; using Furion.DatabaseAccessor; using Furion.DistributedIDGenerator; using Furion.FriendlyException; using Furion.Schedule; using Microsoft.EntityFrameworkCore; +using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; @@ -23,12 +25,16 @@ IRepository<TaskInfoUser> repTaskInfoUser, IRepository<EnterpriseWallet> repEnterpriseWallet, IRepository<EnterpriseWalletTransaction> repEnterpriseWalletTransaction, + IRepository<UserWallet> repUserWallet, + IRepository<UserWalletTransaction> repUserWalletTransaction, AlipayUtils alipayUtils ) : IJob { private readonly IRepository<TaskInfo> rep = rep; private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser; private readonly IRepository<EnterpriseWallet> repEnterpriseWallet = repEnterpriseWallet; + private readonly IRepository<UserWallet> repUserWallet = repUserWallet; + private readonly IRepository<UserWalletTransaction> repUserWalletTransaction = repUserWalletTransaction; private readonly AlipayUtils alipayUtils = alipayUtils; [UnitOfWork(false)] @@ -37,39 +43,19 @@ var env = App.GetConfig<string>("Environment"); if (env != "Local") { - var now = DateTime.Now; - var q = rep.AsQueryable() - .Where(it => it.SettlementStatus == EnumTaskSettlementStatus.InProcess); - var minTime = env == "Test" - ? now.AddMinutes(-5) - : now.AddDays(-1); - q = q.Where(it => it.SettlementStartTime.HasValue && it.SettlementStartTime < minTime); - var tasks = await q.ToListAsync(); + var tasks = await GetTasks(env); var enterpriseIds = tasks.DistinctSelect(it => it.EnterpriseId); var taskIds = tasks.DistinctSelect(it => it.Id); - var taskUsers = await repTaskInfoUser - .Where(it => taskIds.Contains(it.TaskInfoId) && it.SettlementStatus == EnumTaskSettlementStatus.InProcess) - .ToListAsync(); - var wallets = await repEnterpriseWallet.AsQueryable() - .Where(it => enterpriseIds.Contains(it.EnterpriseId) && it.Access == EnumEnterpriseWalletAccess.Alipay) - .ToListAsync(); - foreach (var wallet in wallets) - { - var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel - { - AccountBookId = wallet.AccountBookId, - SceneCode = "SATF_FUND_BOOK", - MerchantUserId = wallet.Code, - }); - if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); - wallet.Balance = response.AvailableAmount.ToDecimal() ?? 0; - await repEnterpriseWallet.UpdateNowAsync(wallet); - } + var taskUsers = await GetTaskUsers(taskIds); + var userIds = taskUsers.DistinctSelect(it => it.EnterpriseEmployee.UserId.Value); + var userWallets = await GetUserWallets(userIds); + var enterpriseWallets = await GetEnterpriseWallets(enterpriseIds); if (tasks.IsNotNull()) { foreach (var task in tasks) { - var wallet = wallets.FirstOrDefault(it => it.EnterpriseId == task.EnterpriseId); + var enterpriseWallet = enterpriseWallets.FirstOrDefault(it => it.EnterpriseId == task.EnterpriseId); + task.SettlementStatus = EnumTaskSettlementStatus.Completed; task.SettlementTime = DateTime.Now; await rep.UpdateNowAsync(task); @@ -81,79 +67,286 @@ user.SettlementTime = DateTime.Now; await repTaskInfoUser.UpdateNowAsync(user); - var order = new EnterpriseWalletTransaction(); - order.Type = EnumEnterpriseWalletTransactionType.Recharge; - order.WalletId = wallet.Id; - order.TaskUserId = user.Id; - order.Amount = user.ActualSettlementAmount ?? 0; - order.Remark = user.SettlementRemark; - order.ProductCode = "SINGLE_TRANSFER_NO_PWD"; - order.BizScene = "ENTRUST_TRANSFER"; - order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitSubmit; - order.Balance = wallet.Balance; - order.ReceiveName = user.ReceiveName; - order.ReceiveAccount = user.ReceiveAccount; - await SetCode(order); - await repEnterpriseWalletTransaction.InsertNowAsync(order); + var userWallet = await AddUserWalletTransactionIncome(userWallets, task, user); - var response = alipayUtils.FundTransUniTransfer(new AlipayFundTransUniTransferModel - { - OutBizNo = order.Code, - TransAmount = order.Amount.ToString(), - ProductCode = order.ProductCode, - BizScene = order.BizScene, - PayeeInfo = new Participant - { - IdentityType = "ALIPAY_LOGON_ID", - Identity = order.ReceiveAccount, - Name = order.ReceiveName, - }, - PayerInfo = new Participant - { - IdentityType = "ACCOUNT_BOOK_ID", - Identity = wallet.AccountBookId, - ExtInfo = new - { - agreement_no = wallet.AgreementNo, - }.ToJson(), - }, - OrderTitle = order.Remark, - Remark = order.Remark, - BusinessParams = new - { - withdraw_timeliness = "T0" - }.ToJson() - }, "/api/user/enterpriseWallet/alipayFundTransOrderChangedNotify"); - if (response.IsError) - { - order.ErrorCode = response.Code; - order.FailReason = response.SubMsg ?? response.Msg; - await repEnterpriseWalletTransaction.UpdateNowAsync(order); - } - else - { - order.OrderId = response.OrderId; - order.PayFundOrderId = response.PayFundOrderId; - order.SettleSerialNo = response.SettleSerialNo; - order.TransDate = response.TransDate.ToDateTime(); - order.Link = response.Link; - order.Status = response.Status; - order.SubStatus = response.SubStatus; - order.TransactionStatus = response.Status == "SUCCESS" - ? EnumEnterpriseWalletTransactionStatus.Success - : response.Status == "DEALING" - ? EnumEnterpriseWalletTransactionStatus.Dealing - : response.Status == "REFUND" - ? EnumEnterpriseWalletTransactionStatus.Refund - : EnumEnterpriseWalletTransactionStatus.Fail; - await repEnterpriseWalletTransaction.UpdateNowAsync(order); - } + var withdraw = await AddUserWalletTransactionWithdraw(userWallet, task, user); + + var transfer = await AddEnterpriseWalletTransactionTransfer(enterpriseWallet, task, user); + + await UpdateUserWalletTransactionWithdraw(userWallet, withdraw, transfer); } } } } } + /// <summary> + /// 鏇存柊鐢ㄦ埛閽卞寘鎻愮幇璁板綍 + /// </summary> + /// <param name="wallet"></param> + /// <param name="withdraw"></param> + /// <param name="transfer"></param> + /// <returns></returns> + private async Task UpdateUserWalletTransactionWithdraw(UserWallet wallet, UserWalletTransaction withdraw, EnterpriseWalletTransaction transfer) + { + withdraw.EnterpriseWalletTransactionId = transfer.Id; + withdraw.TransactionStatus = transfer.TransactionStatus; + withdraw.TransDate = transfer.TransDate; + if (withdraw.TransactionStatus == EnumWalletTransactionStatus.Success) + { + withdraw.ActualAmount = withdraw.Amount; + } + else + { + withdraw.ActualAmount = 0; + + var order = new UserWalletTransaction(); + order.WalletId = wallet.Id; + order.Type = EnumUserWalletTransactionType.Income; + order.OperatorUserId = withdraw.OperatorUserId; + order.OperatorTime = withdraw.OperatorTime; + order.Title = $"鏀跺叆-鎻愮幇澶辫触閫�娆�"; + order.Amount = withdraw.Amount; + order.ActualAmount = order.Amount; + order.Balance = wallet.Balance; + order.AfterBalance = wallet.Balance + order.Amount; + order.TransDate = DateTime.Now; + order.TransactionStatus = EnumWalletTransactionStatus.Success; + await SetCode(order); + await repUserWalletTransaction.InsertNowAsync(order); + + wallet.Balance = order.AfterBalance; + await repUserWallet.UpdateNowAsync(wallet); + } + } + + /// <summary> + /// 娣诲姞鐢ㄦ埛閽卞寘鎻愮幇璁板綍 + /// </summary> + /// <param name="wallet"></param> + /// <param name="task"></param> + /// <param name="user"></param> + /// <returns></returns> + private async Task<UserWalletTransaction> AddUserWalletTransactionWithdraw(UserWallet wallet, TaskInfo task, TaskInfoUser user) + { + wallet.Balance -= user.ActualSettlementAmount ?? 0; + await repUserWallet.UpdateNowAsync(wallet); + + var order = new UserWalletTransaction(); + order.WalletId = wallet.Id; + order.Type = EnumUserWalletTransactionType.Withdraw; + order.OperatorUserId = task.SettlementOperatorUserId; + order.OperatorTime = task.SettlementStartTime; + order.Title = $"鎻愮幇-鏀粯瀹濇彁鐜�"; + order.Amount = user.ActualSettlementAmount ?? 0; + order.Balance = wallet.Balance; + order.AfterBalance = wallet.Balance - order.Amount; + order.ReceiveName = user.ReceiveName; + order.ReceiveAccount = user.ReceiveAccount; + order.TransDate = DateTime.Now; + order.TransactionStatus = EnumWalletTransactionStatus.Dealing; + await SetCode(order); + await repUserWalletTransaction.InsertNowAsync(order); + return order; + } + + /// <summary> + /// 娣诲姞鐢ㄦ埛閽卞寘鏀跺叆璁板綍 + /// </summary> + /// <param name="wallets"></param> + /// <param name="task"></param> + /// <param name="user"></param> + /// <returns></returns> + private async Task<UserWallet> AddUserWalletTransactionIncome(List<UserWallet> wallets, TaskInfo task, TaskInfoUser user) + { + var wallet = wallets.FirstOrDefault(it => it.UserId == user.EnterpriseEmployee.UserId); + if (wallet == null) + { + wallet = new UserWallet(); + wallet.UserId = user.EnterpriseEmployee.UserId.Value; + await repUserWallet.InsertNowAsync(wallet); + } + var order = new UserWalletTransaction(); + order.WalletId = wallet.Id; + order.Type = EnumUserWalletTransactionType.Income; + order.TaskUserId = user.Id; + order.EnterpriseName = task.Enterprise.EnterpriseName; + order.SettlementTime = user.SettlementTime; + order.SettlementAmount = user.SettlementAmount; + order.OperatorUserId = task.SettlementOperatorUserId; + order.OperatorTime = task.SettlementStartTime; + order.Title = $"鏀跺叆-{order.EnterpriseName}"; + order.Amount = user.ActualSettlementAmount ?? 0; + order.ActualAmount = order.Amount; + order.Balance = wallet.Balance; + order.AfterBalance = wallet.Balance + order.Amount; + order.TransDate = DateTime.Now; + order.TransactionStatus = EnumWalletTransactionStatus.Success; + await SetCode(order); + await repUserWalletTransaction.InsertNowAsync(order); + + wallet.Balance = order.AfterBalance; + await repUserWallet.UpdateNowAsync(wallet); + + return wallet; + } + + /// <summary> + /// 娣诲姞浼佷笟閽卞寘杞处璁板綍 + /// </summary> + /// <param name="wallet"></param> + /// <param name="task"></param> + /// <param name="user"></param> + /// <returns></returns> + private async Task<EnterpriseWalletTransaction> AddEnterpriseWalletTransactionTransfer(EnterpriseWallet wallet, TaskInfo task, TaskInfoUser user) + { + var order = new EnterpriseWalletTransaction(); + order.Type = EnumEnterpriseWalletTransactionType.Transfer; + order.WalletId = wallet.Id; + order.TaskUserId = user.Id; + order.Amount = user.ActualSettlementAmount ?? 0; + order.Remark = user.SettlementRemark; + order.ProductCode = "SINGLE_TRANSFER_NO_PWD"; + order.BizScene = "ENTRUST_TRANSFER"; + order.TransactionStatus = EnumWalletTransactionStatus.WaitSubmit; + order.Balance = wallet.Balance; + order.AfterBalance = wallet.Balance - order.Amount; + order.OperatorUserId = task.SettlementOperatorUserId; + order.OperatorTime = task.SettlementStartTime; + order.ReceiveUserId = user.EnterpriseEmployee.UserId; + order.ReceiveName = user.ReceiveName; + order.ReceiveAccount = user.ReceiveAccount; + await SetCode(order); + await repEnterpriseWalletTransaction.InsertNowAsync(order); + + var response = alipayUtils.FundTransUniTransfer(new AlipayFundTransUniTransferModel + { + OutBizNo = order.Code, + TransAmount = order.Amount.ToString(), + ProductCode = order.ProductCode, + BizScene = order.BizScene, + PayeeInfo = new Participant + { + IdentityType = "ALIPAY_LOGON_ID", + Identity = order.ReceiveAccount, + Name = order.ReceiveName, + }, + PayerInfo = new Participant + { + IdentityType = "ACCOUNT_BOOK_ID", + Identity = wallet.AccountBookId, + ExtInfo = new + { + agreement_no = wallet.AgreementNo, + }.ToJson(), + }, + OrderTitle = order.Remark, + Remark = order.Remark, + BusinessParams = new + { + withdraw_timeliness = "T0" + }.ToJson() + }, "/api/user/enterpriseWallet/alipayFundTransOrderChangedNotify"); + if (response.IsError) + { + order.ErrorCode = response.Code; + order.FailReason = response.SubMsg ?? response.Msg; + await repEnterpriseWalletTransaction.UpdateNowAsync(order); + } + else + { + order.OrderId = response.OrderId; + order.PayFundOrderId = response.PayFundOrderId; + order.SettleSerialNo = response.SettleSerialNo; + order.TransDate = response.TransDate.ToDateTime(); + order.Link = response.Link; + order.Status = response.Status; + order.SubStatus = response.SubStatus; + order.TransactionStatus = response.Status == "SUCCESS" + ? EnumWalletTransactionStatus.Success + : response.Status == "DEALING" + ? EnumWalletTransactionStatus.Dealing + : response.Status == "REFUND" + ? EnumWalletTransactionStatus.Refund + : EnumWalletTransactionStatus.Fail; + await repEnterpriseWalletTransaction.UpdateNowAsync(order); + } + return order; + } + + /// <summary> + /// 鏌ヨ鐢ㄦ埛閽卞寘 + /// </summary> + /// <param name="userIds"></param> + /// <returns></returns> + private async Task<List<UserWallet>> GetUserWallets(List<Guid> userIds) + { + var wallets = await repUserWallet.AsQueryable().AsNoTracking() + .Where(it => userIds.Contains(it.UserId)) + .ToListAsync(); + return wallets; + } + + /// <summary> + /// 鏌ヨ浼佷笟閽卞寘 + /// </summary> + /// <param name="enterpriseIds"></param> + /// <returns></returns> + private async Task<List<EnterpriseWallet>> GetEnterpriseWallets(List<Guid> enterpriseIds) + { + var wallets = await repEnterpriseWallet.AsQueryable() + .Where(it => enterpriseIds.Contains(it.EnterpriseId) && it.Access == EnumEnterpriseWalletAccess.Alipay) + .ToListAsync(); + foreach (var wallet in wallets) + { + var response = alipayUtils.FundAccountbookQuery(new AlipayFundAccountbookQueryModel + { + AccountBookId = wallet.AccountBookId, + SceneCode = "SATF_FUND_BOOK", + MerchantUserId = wallet.Code, + }); + if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); + wallet.Balance = response.AvailableAmount.ToDecimal() ?? 0; + await repEnterpriseWallet.UpdateNowAsync(wallet); + } + return wallets; + } + + /// <summary> + /// 鏌ヨ浠诲姟鐢ㄦ埛 + /// </summary> + /// <param name="taskIds"></param> + /// <returns></returns> + private async Task<List<TaskInfoUser>> GetTaskUsers(List<Guid> taskIds) + { + var taskUsers = await repTaskInfoUser + .Include(it => it.EnterpriseEmployee) + .Where(it => + taskIds.Contains(it.TaskInfoId) + && it.SettlementStatus == EnumTaskSettlementStatus.InProcess) + .ToListAsync(); + return taskUsers; + } + + /// <summary> + /// 鏌ヨ浠诲姟 + /// </summary> + /// <param name="env"></param> + /// <returns></returns> + private async Task<List<TaskInfo>> GetTasks(string env) + { + var now = DateTime.Now; + var q = rep.AsQueryable() + .Include(it => it.Enterprise) + .Where(it => it.SettlementStatus == EnumTaskSettlementStatus.InProcess); + var minTime = env == "Test" + ? now.AddMinutes(-5) + : now.AddDays(-1); + q = q.Where(it => it.SettlementStartTime.HasValue && it.SettlementStartTime < minTime); + var tasks = await q.ToListAsync(); + return tasks; + } + private async Task SetCode(EnterpriseWalletTransaction entity) { entity.Code = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}"; @@ -165,5 +358,16 @@ } } + private async Task SetCode(UserWalletTransaction entity) + { + entity.Code = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}"; + var exist = await repUserWalletTransaction.AsQueryable().AsNoTracking() + .AnyAsync(it => it.Code == entity.Code); + if (exist) + { + await SetCode(entity); + } + } + } } diff --git a/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs b/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs index 19c6efc..86b07f8 100644 --- a/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs +++ b/FlexJobApi.Core/Jobs/RefreshEnterpriseWalletTransactionStatusJob.cs @@ -31,8 +31,8 @@ { var entities = await rep.AsQueryable() .Where(it => - it.TransactionStatus == EnumEnterpriseWalletTransactionStatus.WaitPay - || it.TransactionStatus == EnumEnterpriseWalletTransactionStatus.Dealing) + it.TransactionStatus == EnumWalletTransactionStatus.WaitPay + || it.TransactionStatus == EnumWalletTransactionStatus.Dealing) .ToListAsync(); if (entities.IsNotNull()) { @@ -62,18 +62,18 @@ entity.TransDate = response.PayDate.ToDateTime(); entity.Status = response.Status; entity.TransactionStatus = response.Status == "SUCCESS" - ? EnumEnterpriseWalletTransactionStatus.Success + ? EnumWalletTransactionStatus.Success : response.Status == "DEALING" - ? EnumEnterpriseWalletTransactionStatus.Dealing + ? EnumWalletTransactionStatus.Dealing : response.Status == "REFUND" - ? EnumEnterpriseWalletTransactionStatus.Refund + ? EnumWalletTransactionStatus.Refund : response.Status == "FAIL" - ? EnumEnterpriseWalletTransactionStatus.Fail + ? EnumWalletTransactionStatus.Fail : throw Oops.Oh(EnumErrorCodeType.s510, $"鏈瘑鍒殑鐘舵�侊細{response.Status}"); await rep.UpdateAsync(entity); } var walletIds = entities - .Where(it => it.TransactionStatus == EnumEnterpriseWalletTransactionStatus.Success) + .Where(it => it.TransactionStatus == EnumWalletTransactionStatus.Success) .Select(it => it.WalletId) .Distinct() .ToList(); diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/TransferEnterpriseWalletCommand.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/TransferEnterpriseWalletCommand.cs deleted file mode 100644 index d315167..0000000 --- a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Commands/TransferEnterpriseWalletCommand.cs +++ /dev/null @@ -1,31 +0,0 @@ -锘縰sing MediatR; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FlexJobApi.Core -{ - /// <summary> - /// 浼佷笟閽卞寘杞处 - /// </summary> - [Resource([EnumResourceController.UserServerEnterpriseWallet])] - public class TransferEnterpriseWalletCommand : IRequest<Guid> - { - /// <summary> - /// 閫氶亾 - /// </summary> - public EnumEnterpriseWalletAccess Access { get; set; } - - /// <summary> - /// 閲戦 - /// </summary> - public decimal Amount { get; set; } - - /// <summary> - /// 鍏呭�煎娉� - /// </summary> - public string Remark { get; set; } - } -} diff --git a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletTransactionQuery.cs b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletTransactionQuery.cs index ddaaad1..59f554c 100644 --- a/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletTransactionQuery.cs +++ b/FlexJobApi.Core/Models/UserServer/EnterpriseWallets/Queries/GetEnterpriseWalletTransactionQuery.cs @@ -57,6 +57,6 @@ /// <summary> /// 鐘舵�� /// </summary> - public EnumEnterpriseWalletTransactionStatus TransactionStatus { get; set; } + public EnumWalletTransactionStatus TransactionStatus { get; set; } } } diff --git a/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalUserTransactionQuery.cs b/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalUserTransactionQuery.cs new file mode 100644 index 0000000..f6aa8ca --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalUserTransactionQuery.cs @@ -0,0 +1,80 @@ +锘縰sing MediatR; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏璇︽儏 + /// </summary> + [Resource([EnumResourceController.UserServerUser])] + public class GetPersonalUserTransactionQuery : IRequest<GetPersonalUserTransactionQueryResult> + { + /// <summary> + /// 鏀舵敮Id + /// </summary> + public Guid Id { get; set; } + } + + public class GetPersonalUserTransactionQueryResult + { + /// <summary> + /// 鏀舵敮Id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 绫诲瀷 + /// </summary> + public EnumUserWalletTransactionType Type { get; set; } + + /// <summary> + /// 璁㈠崟鍙� + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 浼佷笟鍚嶇О + /// </summary> + public string EnterpriseName { get; set; } + + /// <summary> + /// 缁撶畻鏃ユ湡 + /// </summary> + public DateTime? SettlementTime { get; set; } + + /// <summary> + /// 缁撶畻閲戦 + /// </summary> + public decimal? SettlementAmount { get; set; } + + /// <summary> + /// 瀹炲彂閲戦/鎻愮幇閲戦 + /// </summary> + public decimal Amount { get; set; } + + /// <summary> + /// 鏀舵浜哄鍚� + /// </summary> + public string ReceiveName { get; set; } + + /// <summary> + /// 鏀舵璐︽埛 + /// </summary> + public string ReceiveAccount { get; set; } + + /// <summary> + /// 鏈嶅姟璐� + /// </summary> + public decimal ServiceFee { get; set; } + + /// <summary> + /// 瀹為檯鍒拌处 + /// </summary> + public decimal ActualAmount { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalUserTransactionsQuery.cs b/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalUserTransactionsQuery.cs new file mode 100644 index 0000000..be0684b --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/Users/Queries/GetPersonalUserTransactionsQuery.cs @@ -0,0 +1,93 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏鍒嗛〉鍒楄〃鏁版嵁 + /// </summary> + [Resource([EnumResourceController.UserServerUser])] + public class GetPersonalUserTransactionsQuery : PagedListQuery<GetPersonalUserTransactionsQueryResult, GetPersonalUserTransactionsQueryResultItem> + { + /// <summary> + /// 鍒涘缓鏃堕棿-璧峰 + /// </summary> + public DateTimeOffset? CreatedTimeStart { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿-鎴 + /// </summary> + public DateTimeOffset? CreatedTimeEnd { get; set; } + + /// <summary> + /// 绫诲瀷 + /// </summary> + public EnumUserWalletTransactionType? Type { get; set; } + + + } + + /// <summary> + /// 鏌ヨC绔汉鍛樺垎椤靛垪琛ㄦ暟鎹�-缁撴灉 + /// </summary> + public class GetPersonalUserTransactionsQueryResult : PagedListQueryResult<GetPersonalUserTransactionsQueryResultItem> + { + /// <summary> + /// 缁熻 + /// </summary> + public GetPersonalUserTransactionsQueryResultObjectData ObjectData { get; set; } + } + + /// <summary> + /// 鏌ヨC绔汉鍛樺垎椤靛垪琛ㄦ暟鎹�-缁撴灉 + /// </summary> + public class GetPersonalUserTransactionsQueryResultObjectData + { + /// <summary> + /// 鎬绘敹鍏� + /// </summary> + public decimal SumIncome { get; set; } + + /// <summary> + /// 鎬绘彁鐜� + /// </summary> + public decimal SumWithdraw { get; set; } + } + + /// <summary> + /// 鏌ヨC绔汉鍛樺垎椤靛垪琛ㄦ暟鎹�-缁撴灉-椤� + /// </summary> + public class GetPersonalUserTransactionsQueryResultItem + { + /// <summary> + /// 鏀舵敮Id + /// </summary> + public Guid Id { get; set; } + + /// <summary> + /// 鏍囬 + /// </summary> + public string Title { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTimeOffset CreatedTime { get; set; } + + /// <summary> + /// 閲戦 + /// </summary> + public decimal Amount { get; set; } + + /// <summary> + /// 浣欓 + /// </summary> + public decimal Balance { get; set; } + + + } +} diff --git a/FlexJobApi.Database.Migrations/Migrations/20250909053124_UpdateUserWalletTransaction0909.Designer.cs b/FlexJobApi.Database.Migrations/Migrations/20250909053124_UpdateUserWalletTransaction0909.Designer.cs new file mode 100644 index 0000000..dddb7ff --- /dev/null +++ b/FlexJobApi.Database.Migrations/Migrations/20250909053124_UpdateUserWalletTransaction0909.Designer.cs @@ -0,0 +1,3696 @@ +锘�// <auto-generated /> +using System; +using FlexJobApi.EntityFramework.Core; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace FlexJobApi.Database.Migrations.Migrations +{ + [DbContext(typeof(DefaultDbContext))] + [Migration("20250909053124_UpdateUserWalletTransaction0909")] + partial class UpdateUserWalletTransaction0909 + { + /// <inheritdoc /> + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.7") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("FlexJobApi.Core.CodeUrl", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Code") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTime?>("ExpiredTime") + .HasColumnType("datetime2"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("ParamValue1") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ParamValue2") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ParamValue3") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ParamValue4") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ParamValue5") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Scene") + .HasColumnType("int"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Url") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("CodeUrl"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ContractTemplate", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int?>("Access") + .HasColumnType("int"); + + b.Property<string>("Code") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<DateTime?>("CompletedTime") + .HasColumnType("datetime2"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("ElectronSignContractTemplateId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("EnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("File") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsDisabled") + .HasColumnType("bit"); + + b.Property<string>("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<int>("Status") + .HasColumnType("int"); + + b.Property<string>("TemplateEditData") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("TemplateId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("TemplateJsonData") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("WxmpQrCode") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("EnterpriseId"); + + b.ToTable("ContractTemplate"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ContractTemplateValue", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("BindProperty") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("Label") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Name") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Recorder") + .HasColumnType("int"); + + b.Property<bool>("Required") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<Guid>("TemplateId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Type") + .HasColumnType("int"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<int?>("UserType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TemplateId"); + + b.ToTable("ContractTemplateValue"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Department", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("EnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsDisabled") + .HasColumnType("bit"); + + b.Property<string>("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Path") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Remark") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EnterpriseId"); + + b.HasIndex("ParentId"); + + b.ToTable("Department"); + }); + + modelBuilder.Entity("FlexJobApi.Core.DictionaryCategory", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Code") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("FieldNames") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property<string>("Remark") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("DictionaryCategory"); + }); + + modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("CategoryId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Code") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property<string>("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("Deep") + .HasColumnType("int"); + + b.Property<string>("Field1") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Field2") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Field3") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Field4") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Field5") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsDisabled") + .HasColumnType("bit"); + + b.Property<Guid?>("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Path") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("Code") + .IsUnique(); + + b.HasIndex("ParentId"); + + b.ToTable("DictionaryData"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ElectronSignSetting", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int>("Access") + .HasColumnType("int"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsDisabled") + .HasColumnType("bit"); + + b.Property<decimal?>("MergeSignCost") + .HasColumnType("decimal(18,2)"); + + b.Property<decimal?>("RealVerifyCost") + .HasColumnType("decimal(18,2)"); + + b.Property<decimal?>("SignCost") + .HasColumnType("decimal(18,2)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("ElectronSignSetting"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Enterprise", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Address") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("BankBranchName") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("BankCard") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<string>("BankName") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("CityCode") + .HasColumnType("nvarchar(128)"); + + b.Property<string>("ContactEmail") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ContactPhoneNumber") + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property<string>("Contacts") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("EnterpriseName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property<string>("EnterpriseType") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("EstablishmentDate") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("IndustrialParkId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("IndustryTypeCode") + .HasColumnType("nvarchar(128)"); + + b.Property<bool>("IsCheckedBankCard") + .HasColumnType("bit"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsReal") + .HasColumnType("bit"); + + b.Property<string>("LegalIdentity") + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b.Property<string>("LegalPerson") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<string>("LicenseImage") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("MainBusiness") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("PayAccess") + .HasColumnType("int"); + + b.Property<string>("ProvinceCode") + .HasColumnType("nvarchar(128)"); + + b.Property<int?>("RealAccess") + .HasColumnType("int"); + + b.Property<string>("RegisteredCapital") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("SmsAccess") + .HasColumnType("int"); + + b.Property<decimal>("SmsCost") + .HasColumnType("decimal(18,2)"); + + b.Property<string>("SocietyCreditCode") + .IsRequired() + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CityCode"); + + b.HasIndex("IndustryTypeCode"); + + b.HasIndex("ProvinceCode"); + + b.ToTable("Enterprise"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseAuth", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("BankCard") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<string>("BankCardImg") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("CertAccount") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("ElectronSignEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("EnterpriseName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property<int?>("EnterpriseRealMethod") + .HasColumnType("int"); + + b.Property<string>("Identity") + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b.Property<string>("IdentityBackImg") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("IdentityImg") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("LegalIdentity") + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b.Property<string>("LegalPerson") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<string>("LicenseImage") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Name") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<int?>("PersonalRealMethod") + .HasColumnType("int"); + + b.Property<string>("PhoneNumber") + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property<bool?>("Proxy") + .HasColumnType("bit"); + + b.Property<string>("ProxyPowerAttorneyUrl") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("SocietyCreditCode") + .IsRequired() + .HasMaxLength(18) + .HasColumnType("nvarchar(18)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("EnterpriseAuth"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseCost", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<decimal?>("Amount") + .HasColumnType("decimal(18,2)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("EnterpriseEmployeeContractId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("EnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<int?>("Status") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Type") + .HasColumnType("int"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EnterpriseEmployeeContractId"); + + b.HasIndex("EnterpriseId"); + + b.ToTable("EnterpriseCost"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseElectronSignSetting", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("ElectronSignAccess") + .HasColumnType("int"); + + b.Property<Guid>("EnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EnterpriseId"); + + b.ToTable("EnterpriseElectronSignSetting"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployee", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int?>("Age") + .HasColumnType("int"); + + b.Property<DateTime?>("Birthday") + .HasColumnType("datetime2"); + + b.Property<string>("ContactPhoneNumber") + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property<string>("ContractCode") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("ContractTemplateId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("ContractUrl") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("EnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("EnterpriseSignContractErrorMessage") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("EnterpriseSignContractStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("EnterpriseSignContractTime") + .HasColumnType("datetime2"); + + b.Property<int?>("Gender") + .HasColumnType("int"); + + b.Property<string>("Identity") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("IdentityBackImg") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("IdentityImg") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("Name") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("UserSignContractErrorMessage") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("UserSignContractStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("UserSignContractTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("ContractTemplateId"); + + b.HasIndex("EnterpriseId"); + + b.HasIndex("UserId"); + + b.ToTable("EnterpriseEmployee"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployeeContract", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("ContractCode") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("ContractTemplateId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("ContractUrl") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("EnterpriseEmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("EnterpriseSignContractErrorMessage") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("EnterpriseSignContractStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("EnterpriseSignContractTime") + .HasColumnType("datetime2"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("UserSignContractErrorMessage") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("UserSignContractStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("UserSignContractTime") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("ContractTemplateId"); + + b.HasIndex("EnterpriseEmployeeId"); + + b.ToTable("EnterpriseEmployeeContract"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseUserCollect", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<DateTime?>("CollectedTime") + .HasColumnType("datetime2"); + + b.Property<DateTime?>("ContactedTime") + .HasColumnType("datetime2"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("EnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsCollected") + .HasColumnType("bit"); + + b.Property<bool>("IsContacted") + .HasColumnType("bit"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EnterpriseId"); + + b.HasIndex("UserId"); + + b.ToTable("EnterpriseUserCollect"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseWallet", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int>("Access") + .HasColumnType("int"); + + b.Property<string>("Account") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("AccountBookId") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("AccountBookStatus") + .HasColumnType("int"); + + b.Property<string>("AgreementNo") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("AlipayLogonId") + .HasColumnType("nvarchar(max)"); + + b.Property<decimal>("Balance") + .HasColumnType("decimal(18,2)"); + + b.Property<string>("BankAccName") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("CardBank") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("CardBranch") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("CardDeposit") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("CardLocation") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("CardNo") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Code") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("CreditAuthMode") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid>("EnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<decimal>("FreezeBalance") + .HasColumnType("decimal(18,2)"); + + b.Property<DateTime?>("InvalidTime") + .HasColumnType("datetime2"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("MerchantId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("PersonalProductCode") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("PricipalType") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("PrincipalId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("PrincipalOpenId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ProductCode") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("SignScene") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("SignStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("SignTime") + .HasColumnType("datetime2"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("ThirdPartyType") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTime?>("ValidTime") + .HasColumnType("datetime2"); + + b.Property<string>("ZmOpenId") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("EnterpriseId"); + + b.ToTable("EnterpriseWallet"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletExpandindirectOrder", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("BizScene") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("BizType") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Identity") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("IdentityType") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("Name") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("OrderId") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("OrderStatus") + .HasColumnType("int"); + + b.Property<string>("OriginalOrderId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("OutBizNo") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ProductCode") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("RiskReviewRemark") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Scene") + .HasColumnType("int"); + + b.Property<string>("SceneCode") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("SceneDirections") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("SceneImage") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("SceneQualificationImage") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Sites") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("Status") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTime?>("TaskFinishTime") + .HasColumnType("datetime2"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("WalletId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("WalletId"); + + b.ToTable("EnterpriseWalletExpandindirectOrder"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletExpandindirectOrderFile", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("File") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<Guid>("OrderId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Type") + .HasColumnType("int"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("OrderId"); + + b.ToTable("EnterpriseWalletExpandindirectOrderFile"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletTransaction", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<decimal>("AfterBalance") + .HasColumnType("decimal(18,2)"); + + b.Property<decimal>("Amount") + .HasColumnType("decimal(18,2)"); + + b.Property<DateTime?>("ArrivalTimeEnd") + .HasColumnType("datetime2"); + + b.Property<decimal>("Balance") + .HasColumnType("decimal(18,2)"); + + b.Property<string>("BizScene") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Code") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("ErrorCode") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("FailInstErrorCode") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("FailInstName") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("FailInstReason") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("FailReason") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("InflowSettleSerialNo") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("Link") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTime?>("OperatorTime") + .HasColumnType("datetime2"); + + b.Property<Guid?>("OperatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<decimal?>("OrderFee") + .HasColumnType("decimal(18,2)"); + + b.Property<string>("OrderId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("PayFundOrderId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ProductCode") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ReceiveAccount") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ReceiveName") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("ReceiveUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("ReceiverOpenId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ReceiverUserId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Remark") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("SettleSerialNo") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("Status") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("SubStatus") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("TaskUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTime?>("TransDate") + .HasColumnType("datetime2"); + + b.Property<int>("TransactionStatus") + .HasColumnType("int"); + + b.Property<int>("Type") + .HasColumnType("int"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("WalletId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("OperatorUserId"); + + b.HasIndex("ReceiveUserId"); + + b.HasIndex("TaskUserId"); + + b.HasIndex("WalletId"); + + b.ToTable("EnterpriseWalletTransaction"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Menu", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int>("ClientType") + .HasColumnType("int"); + + b.Property<string>("Code") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Group") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Icon") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsCache") + .HasColumnType("bit"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsDisabled") + .HasColumnType("bit"); + + b.Property<string>("Location") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property<Guid?>("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Path") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Remark") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Type") + .HasColumnType("int"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Url") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("UserType") + .HasColumnType("int"); + + b.Property<int>("VisitLevel") + .HasColumnType("int"); + + b.Property<string>("Width") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ParentId"); + + b.ToTable("Menu"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Resource", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("ActionName") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ActionSummary") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("AllowAnonymous") + .HasColumnType("bit"); + + b.Property<string>("ApplicationName") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Code") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ControllerName") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ControllerSummary") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("DynamicAssemblyName") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("FileUpload") + .HasColumnType("bit"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsExpired") + .HasColumnType("bit"); + + b.Property<bool>("IsFromForm") + .HasColumnType("bit"); + + b.Property<int>("Method") + .HasColumnType("int"); + + b.Property<string>("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<string>("RequestTypeFullName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<string>("RequestTypeName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ResponseTypeFullName") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ResponseTypeName") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Route") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<string>("RouteArea") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ServiceName") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("Resource"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Role", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int>("ClientType") + .HasColumnType("int"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("DataPower") + .HasColumnType("int"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsDisabled") + .HasColumnType("bit"); + + b.Property<int>("MinLevel") + .HasColumnType("int"); + + b.Property<string>("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property<string>("Remark") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("UserType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Role"); + }); + + modelBuilder.Entity("FlexJobApi.Core.RoleMenu", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<Guid>("MenuId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("MenuId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleMenu"); + }); + + modelBuilder.Entity("FlexJobApi.Core.RoleResource", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("DataPower") + .HasColumnType("int"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<Guid>("ResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ResourceId"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleResource"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ScheduleJobDetail", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("AssemblyName") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("Concurrent") + .HasColumnType("bit"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Description") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("GroupName") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IncludeAnnotations") + .HasColumnType("bit"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("JobId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("JobType") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("ScheduleJobDetail"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ScheduleJobTrigger", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Args") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("AssemblyName") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Description") + .HasColumnType("nvarchar(max)"); + + b.Property<long>("ElapsedTime") + .HasColumnType("bigint"); + + b.Property<DateTime?>("EndTime") + .HasColumnType("datetime2"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("JobId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTime?>("LastRunTime") + .HasColumnType("datetime2"); + + b.Property<long>("MaxNumberOfErrors") + .HasColumnType("bigint"); + + b.Property<long>("MaxNumberOfRuns") + .HasColumnType("bigint"); + + b.Property<DateTime?>("NextRunTime") + .HasColumnType("datetime2"); + + b.Property<long>("NumRetries") + .HasColumnType("bigint"); + + b.Property<long>("NumberOfErrors") + .HasColumnType("bigint"); + + b.Property<long>("NumberOfRuns") + .HasColumnType("bigint"); + + b.Property<bool>("ResetOnlyOnce") + .HasColumnType("bit"); + + b.Property<string>("Result") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("RetryTimeout") + .HasColumnType("int"); + + b.Property<bool>("RunOnStart") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<bool>("StartNow") + .HasColumnType("bit"); + + b.Property<DateTime?>("StartTime") + .HasColumnType("datetime2"); + + b.Property<long>("Status") + .HasColumnType("bigint"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("TriggerId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("TriggerType") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("ScheduleJobTrigger"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<decimal?>("ActualSettlementAmount") + .HasColumnType("decimal(18,2)"); + + b.Property<string>("AddressDetail") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("AddressName") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("AgeMaxLimit") + .HasColumnType("int"); + + b.Property<int>("AgeMinLimit") + .HasColumnType("int"); + + b.Property<DateTime>("BeginTime") + .HasColumnType("datetime2"); + + b.Property<int>("BillingMethod") + .HasColumnType("int"); + + b.Property<int?>("CheckReceiveStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("CheckReceiveTime") + .HasColumnType("datetime2"); + + b.Property<string>("CityCode") + .HasColumnType("nvarchar(128)"); + + b.Property<string>("Code") + .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTime>("EndTime") + .HasColumnType("datetime2"); + + b.Property<Guid>("EnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("GenderLimit") + .HasColumnType("int"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<DateTime?>("LastCheckReceiveTime") + .HasColumnType("datetime2"); + + b.Property<DateTime?>("LastSubmitTime") + .HasColumnType("datetime2"); + + b.Property<decimal?>("Latitude") + .HasColumnType("decimal(18,6)"); + + b.Property<decimal?>("Longitude") + .HasColumnType("decimal(18,6)"); + + b.Property<string>("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ProvinceCode") + .HasColumnType("nvarchar(128)"); + + b.Property<int>("RecommendStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("RecommendTime") + .HasColumnType("datetime2"); + + b.Property<int>("ReleaseStatus") + .HasColumnType("int"); + + b.Property<decimal>("ServiceFee") + .HasColumnType("decimal(18,2)"); + + b.Property<decimal?>("SettlementAmount") + .HasColumnType("decimal(18,2)"); + + b.Property<int>("SettlementCycle") + .HasColumnType("int"); + + b.Property<Guid?>("SettlementOperatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("SettlementOrderName") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("SettlementOrderStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("SettlementOrderTime") + .HasColumnType("datetime2"); + + b.Property<string>("SettlementOrderUrl") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("SettlementRemark") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTime?>("SettlementStartTime") + .HasColumnType("datetime2"); + + b.Property<int?>("SettlementStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("SettlementTime") + .HasColumnType("datetime2"); + + b.Property<int>("SettlementUserCount") + .HasColumnType("int"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<int>("Status") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CityCode"); + + b.HasIndex("EnterpriseId"); + + b.HasIndex("ProvinceCode"); + + b.HasIndex("SettlementOperatorUserId"); + + b.ToTable("TaskInfo"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoBenefit", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("BenefitCode") + .IsRequired() + .HasColumnType("nvarchar(128)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<Guid>("TaskInfoId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("BenefitCode"); + + b.HasIndex("TaskInfoId"); + + b.ToTable("TaskInfoBenefit"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoCredentialLimit", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<Guid>("TaskInfoId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("TypeCode") + .IsRequired() + .HasColumnType("nvarchar(128)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TaskInfoId"); + + b.HasIndex("TypeCode"); + + b.ToTable("TaskInfoCredentialLimit"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoUser", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<decimal>("ActualAmount") + .HasColumnType("decimal(18,2)"); + + b.Property<decimal?>("ActualSettlementAmount") + .HasColumnType("decimal(18,2)"); + + b.Property<int?>("ArrangeStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("ArrangeTime") + .HasColumnType("datetime2"); + + b.Property<string>("Bank") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("BankBranch") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("CheckReceiveStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("CheckReceiveTime") + .HasColumnType("datetime2"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("EnterpriseEmployeeId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("HireStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("HireTime") + .HasColumnType("datetime2"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<DateTime?>("LastCheckReceiveTime") + .HasColumnType("datetime2"); + + b.Property<DateTime?>("LastSubmitTime") + .HasColumnType("datetime2"); + + b.Property<string>("ReceiveAccount") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("ReceiveName") + .HasColumnType("nvarchar(max)"); + + b.Property<decimal?>("SettlementAmount") + .HasColumnType("decimal(18,2)"); + + b.Property<string>("SettlementRemark") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("SettlementStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("SettlementTime") + .HasColumnType("datetime2"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<Guid>("TaskInfoId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EnterpriseEmployeeId"); + + b.HasIndex("TaskInfoId"); + + b.ToTable("TaskInfoUser"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmit", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int>("CheckReceiveStatus") + .HasColumnType("int"); + + b.Property<DateTime?>("CheckReceiveTime") + .HasColumnType("datetime2"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTime>("Date") + .HasColumnType("datetime2"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<Guid>("TaskInfoUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TaskInfoUserId"); + + b.ToTable("TaskInfoUserSubmit"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmitFile", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("File") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<Guid>("SubmitId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SubmitId"); + + b.ToTable("TaskInfoUserSubmitFile"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskUserCollect", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<Guid>("TaskInfoId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TaskInfoId"); + + b.HasIndex("UserId"); + + b.ToTable("TaskUserCollect"); + }); + + modelBuilder.Entity("FlexJobApi.Core.User", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int?>("Age") + .HasColumnType("int"); + + b.Property<string>("Avatar") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTime?>("Birthday") + .HasColumnType("datetime2"); + + b.Property<string>("CityCode") + .HasColumnType("nvarchar(128)"); + + b.Property<string>("ContactPhoneNumber") + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<int?>("DataSource") + .HasColumnType("int"); + + b.Property<Guid?>("DataSourceId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("EducationalBackgroundCode") + .HasColumnType("nvarchar(128)"); + + b.Property<Guid?>("EnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<int?>("FreeTime") + .HasColumnType("int"); + + b.Property<int?>("Gender") + .HasColumnType("int"); + + b.Property<int?>("Height") + .HasColumnType("int"); + + b.Property<string>("Identity") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsCheckPhoneNumber") + .HasColumnType("bit"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsReal") + .HasColumnType("bit"); + + b.Property<int?>("JobSeekingStatus") + .HasColumnType("int"); + + b.Property<int>("Level") + .HasColumnType("int"); + + b.Property<string>("Name") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<string>("Password") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("PersonalIdentityCode") + .HasColumnType("nvarchar(128)"); + + b.Property<string>("PhoneNumber") + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property<string>("ProvinceCode") + .HasColumnType("nvarchar(128)"); + + b.Property<int?>("RealMethod") + .HasColumnType("int"); + + b.Property<DateTime?>("RealTime") + .HasColumnType("datetime2"); + + b.Property<string>("Remark") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<int>("Status") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Type") + .HasColumnType("int"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("UserName") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<int?>("Weight") + .HasColumnType("int"); + + b.Property<string>("WorkExperience") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("WorkSeniority") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("WxmpOpenId") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.HasKey("Id"); + + b.HasIndex("CityCode"); + + b.HasIndex("EducationalBackgroundCode"); + + b.HasIndex("EnterpriseId"); + + b.HasIndex("PersonalIdentityCode"); + + b.HasIndex("ProvinceCode"); + + b.ToTable("User"); + + b.HasData( + new + { + Id = new Guid("11111111-1111-1111-1111-111111111111"), + CreatedTime = new DateTimeOffset(new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 8, 0, 0, 0)), + IsCheckPhoneNumber = false, + IsDeleted = false, + IsReal = false, + Level = 999, + Name = "绠$悊鍛�", + Password = "iEYggKrMhQ3ASUGLobra1w==:fn/DsMJUbD9FGpvBvR3moMpMPptdxzZlourPVhU479I=", + Sort = 0, + Status = 10, + Type = 100, + UserName = "system" + }); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserAuth", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int?>("Age") + .HasColumnType("int"); + + b.Property<string>("BankCard") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<string>("BankCardImg") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTime?>("Birthday") + .HasColumnType("datetime2"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("ElectronSignUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("FaceRealUrl") + .HasColumnType("nvarchar(max)"); + + b.Property<int?>("Gender") + .HasColumnType("int"); + + b.Property<string>("Identity") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("IdentityBackImg") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("IdentityImg") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("Name") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<string>("PhoneNumber") + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property<int?>("RealAccess") + .HasColumnType("int"); + + b.Property<string>("RealFailMessage") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("RealStatus") + .HasColumnType("int"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("UserAuth"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserBankCard", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<int>("Access") + .HasColumnType("int"); + + b.Property<string>("Bank") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("BankBranch") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Code") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<string>("PhoneNumber") + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserBankCard"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserCredential", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<string>("BackImg") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("Code") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTime?>("EndDate") + .HasColumnType("datetime2"); + + b.Property<string>("Img") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<bool>("IsForever") + .HasColumnType("bit"); + + b.Property<string>("IssueUnit") + .HasColumnType("nvarchar(max)"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<DateTime?>("StartDate") + .HasColumnType("datetime2"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<string>("TypeCode") + .IsRequired() + .HasColumnType("nvarchar(128)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TypeCode"); + + b.HasIndex("UserId"); + + b.ToTable("UserCredential"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserDepartment", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("DepartmentId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("DepartmentId"); + + b.HasIndex("UserId"); + + b.ToTable("UserDepartment"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserExpectJob", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("ExpectJobCode") + .IsRequired() + .HasColumnType("nvarchar(128)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ExpectJobCode"); + + b.HasIndex("UserId"); + + b.ToTable("UserExpectJob"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserManageIndustrialPark", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("IndustrialParkId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserManageIndustrialPark"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserPhoto", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<string>("Img") + .HasColumnType("nvarchar(max)"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserPhoto"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserRole", b => + { + b.Property<Guid>("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property<Guid?>("CreatedEnterpriseId") + .HasColumnType("uniqueidentifier"); + + b.Property<DateTimeOffset>("CreatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("CreatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<bool>("IsDeleted") + .HasColumnType("bit"); + + b.Property<Guid>("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property<int>("Sort") + .HasColumnType("int"); + + b.Property<string>("TraceId") + .HasColumnType("nvarchar(max)"); + + b.Property<DateTimeOffset?>("UpdatedTime") + .HasColumnType("datetimeoffset"); + + b.Property<Guid?>("UpdatedUserId") + .HasColumnType("uniqueidentifier"); + + b.Property<Guid>("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.HasIndex("UserId"); + + b.ToTable("UserRole"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ContractTemplate", b => + { + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithMany("ContractTemplates") + .HasForeignKey("EnterpriseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Enterprise"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ContractTemplateValue", b => + { + b.HasOne("FlexJobApi.Core.ContractTemplate", "Template") + .WithMany("Values") + .HasForeignKey("TemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Template"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Department", b => + { + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithMany("Departments") + .HasForeignKey("EnterpriseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.Department", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId"); + + b.Navigation("Enterprise"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b => + { + b.HasOne("FlexJobApi.Core.DictionaryCategory", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.DictionaryData", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId"); + + b.Navigation("Category"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Enterprise", b => + { + b.HasOne("FlexJobApi.Core.DictionaryData", "City") + .WithMany() + .HasForeignKey("CityCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("FlexJobApi.Core.DictionaryData", "IndustryType") + .WithMany() + .HasForeignKey("IndustryTypeCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("FlexJobApi.Core.DictionaryData", "Province") + .WithMany() + .HasForeignKey("ProvinceCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("City"); + + b.Navigation("IndustryType"); + + b.Navigation("Province"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseAuth", b => + { + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithOne("EnterpriseAuth") + .HasForeignKey("FlexJobApi.Core.EnterpriseAuth", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Enterprise"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseCost", b => + { + b.HasOne("FlexJobApi.Core.EnterpriseEmployeeContract", "EnterpriseEmployeeContract") + .WithMany() + .HasForeignKey("EnterpriseEmployeeContractId"); + + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithMany() + .HasForeignKey("EnterpriseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Enterprise"); + + b.Navigation("EnterpriseEmployeeContract"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseElectronSignSetting", b => + { + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithMany("ElectronSignSettings") + .HasForeignKey("EnterpriseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Enterprise"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployee", b => + { + b.HasOne("FlexJobApi.Core.ContractTemplate", "ContractTemplate") + .WithMany() + .HasForeignKey("ContractTemplateId"); + + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithMany() + .HasForeignKey("EnterpriseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany("EnterpriseEmployees") + .HasForeignKey("UserId"); + + b.Navigation("ContractTemplate"); + + b.Navigation("Enterprise"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployeeContract", b => + { + b.HasOne("FlexJobApi.Core.ContractTemplate", "ContractTemplate") + .WithMany() + .HasForeignKey("ContractTemplateId"); + + b.HasOne("FlexJobApi.Core.EnterpriseEmployee", "EnterpriseEmployee") + .WithMany("Contracts") + .HasForeignKey("EnterpriseEmployeeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ContractTemplate"); + + b.Navigation("EnterpriseEmployee"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseUserCollect", b => + { + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithMany() + .HasForeignKey("EnterpriseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany("EnterpriseUserCollects") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Enterprise"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseWallet", b => + { + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithMany() + .HasForeignKey("EnterpriseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Enterprise"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletExpandindirectOrder", b => + { + b.HasOne("FlexJobApi.Core.EnterpriseWallet", "Wallet") + .WithMany() + .HasForeignKey("WalletId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Wallet"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletExpandindirectOrderFile", b => + { + b.HasOne("FlexJobApi.Core.EnterpriseWalletExpandindirectOrder", "Order") + .WithMany("Files") + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Order"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletTransaction", b => + { + b.HasOne("FlexJobApi.Core.User", "OperatorUser") + .WithMany() + .HasForeignKey("OperatorUserId"); + + b.HasOne("FlexJobApi.Core.User", "ReceiveUser") + .WithMany() + .HasForeignKey("ReceiveUserId"); + + b.HasOne("FlexJobApi.Core.TaskInfoUser", "TaskUser") + .WithMany() + .HasForeignKey("TaskUserId"); + + b.HasOne("FlexJobApi.Core.EnterpriseWallet", "Wallet") + .WithMany() + .HasForeignKey("WalletId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OperatorUser"); + + b.Navigation("ReceiveUser"); + + b.Navigation("TaskUser"); + + b.Navigation("Wallet"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Menu", b => + { + b.HasOne("FlexJobApi.Core.Menu", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("FlexJobApi.Core.RoleMenu", b => + { + b.HasOne("FlexJobApi.Core.Menu", "Menu") + .WithMany() + .HasForeignKey("MenuId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.Role", "Role") + .WithMany("RoleMenus") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Menu"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("FlexJobApi.Core.RoleResource", b => + { + b.HasOne("FlexJobApi.Core.Resource", "Resource") + .WithMany() + .HasForeignKey("ResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.Role", "Role") + .WithMany("RoleResources") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Resource"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b => + { + b.HasOne("FlexJobApi.Core.DictionaryData", "City") + .WithMany() + .HasForeignKey("CityCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithMany() + .HasForeignKey("EnterpriseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.DictionaryData", "Province") + .WithMany() + .HasForeignKey("ProvinceCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("FlexJobApi.Core.User", "SettlementOperatorUser") + .WithMany() + .HasForeignKey("SettlementOperatorUserId"); + + b.Navigation("City"); + + b.Navigation("Enterprise"); + + b.Navigation("Province"); + + b.Navigation("SettlementOperatorUser"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoBenefit", b => + { + b.HasOne("FlexJobApi.Core.DictionaryData", "Benefit") + .WithMany() + .HasForeignKey("BenefitCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo") + .WithMany("Benefits") + .HasForeignKey("TaskInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Benefit"); + + b.Navigation("TaskInfo"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoCredentialLimit", b => + { + b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo") + .WithMany("CredentialLimits") + .HasForeignKey("TaskInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.DictionaryData", "Type") + .WithMany() + .HasForeignKey("TypeCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("TaskInfo"); + + b.Navigation("Type"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoUser", b => + { + b.HasOne("FlexJobApi.Core.EnterpriseEmployee", "EnterpriseEmployee") + .WithMany("TaskInfoUsers") + .HasForeignKey("EnterpriseEmployeeId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo") + .WithMany("TaskInfoUsers") + .HasForeignKey("TaskInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EnterpriseEmployee"); + + b.Navigation("TaskInfo"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmit", b => + { + b.HasOne("FlexJobApi.Core.TaskInfoUser", "TaskInfoUser") + .WithMany("Submits") + .HasForeignKey("TaskInfoUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TaskInfoUser"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmitFile", b => + { + b.HasOne("FlexJobApi.Core.TaskInfoUserSubmit", "Submit") + .WithMany("Files") + .HasForeignKey("SubmitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Submit"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskUserCollect", b => + { + b.HasOne("FlexJobApi.Core.TaskInfo", "TaskInfo") + .WithMany("TaskUserCollects") + .HasForeignKey("TaskInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TaskInfo"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.User", b => + { + b.HasOne("FlexJobApi.Core.DictionaryData", "City") + .WithMany() + .HasForeignKey("CityCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("FlexJobApi.Core.DictionaryData", "EducationalBackground") + .WithMany() + .HasForeignKey("EducationalBackgroundCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("FlexJobApi.Core.Enterprise", "Enterprise") + .WithMany("Users") + .HasForeignKey("EnterpriseId"); + + b.HasOne("FlexJobApi.Core.DictionaryData", "PersonalIdentity") + .WithMany() + .HasForeignKey("PersonalIdentityCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("FlexJobApi.Core.DictionaryData", "Province") + .WithMany() + .HasForeignKey("ProvinceCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("City"); + + b.Navigation("EducationalBackground"); + + b.Navigation("Enterprise"); + + b.Navigation("PersonalIdentity"); + + b.Navigation("Province"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserAuth", b => + { + b.HasOne("FlexJobApi.Core.User", "User") + .WithOne("UserAuth") + .HasForeignKey("FlexJobApi.Core.UserAuth", "Id") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserBankCard", b => + { + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany("BankCards") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserCredential", b => + { + b.HasOne("FlexJobApi.Core.DictionaryData", "Type") + .WithMany() + .HasForeignKey("TypeCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany("UserCredentials") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Type"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserDepartment", b => + { + b.HasOne("FlexJobApi.Core.Department", "Department") + .WithMany() + .HasForeignKey("DepartmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany("UserDepartments") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Department"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserExpectJob", b => + { + b.HasOne("FlexJobApi.Core.DictionaryData", "ExpectJob") + .WithMany() + .HasForeignKey("ExpectJobCode") + .HasPrincipalKey("Code") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany("UserExpectJobs") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ExpectJob"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserManageIndustrialPark", b => + { + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany("UserManageIndustrialParks") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserPhoto", b => + { + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany("Photos") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.UserRole", b => + { + b.HasOne("FlexJobApi.Core.Role", "Role") + .WithMany("UserRoles") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FlexJobApi.Core.User", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("FlexJobApi.Core.ContractTemplate", b => + { + b.Navigation("Values"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Department", b => + { + b.Navigation("Children"); + }); + + modelBuilder.Entity("FlexJobApi.Core.DictionaryData", b => + { + b.Navigation("Children"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Enterprise", b => + { + b.Navigation("ContractTemplates"); + + b.Navigation("Departments"); + + b.Navigation("ElectronSignSettings"); + + b.Navigation("EnterpriseAuth"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseEmployee", b => + { + b.Navigation("Contracts"); + + b.Navigation("TaskInfoUsers"); + }); + + modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletExpandindirectOrder", b => + { + b.Navigation("Files"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Menu", b => + { + b.Navigation("Children"); + }); + + modelBuilder.Entity("FlexJobApi.Core.Role", b => + { + b.Navigation("RoleMenus"); + + b.Navigation("RoleResources"); + + b.Navigation("UserRoles"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfo", b => + { + b.Navigation("Benefits"); + + b.Navigation("CredentialLimits"); + + b.Navigation("TaskInfoUsers"); + + b.Navigation("TaskUserCollects"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoUser", b => + { + b.Navigation("Submits"); + }); + + modelBuilder.Entity("FlexJobApi.Core.TaskInfoUserSubmit", b => + { + b.Navigation("Files"); + }); + + modelBuilder.Entity("FlexJobApi.Core.User", b => + { + b.Navigation("BankCards"); + + b.Navigation("EnterpriseEmployees"); + + b.Navigation("EnterpriseUserCollects"); + + b.Navigation("Photos"); + + b.Navigation("UserAuth"); + + b.Navigation("UserCredentials"); + + b.Navigation("UserDepartments"); + + b.Navigation("UserExpectJobs"); + + b.Navigation("UserManageIndustrialParks"); + + b.Navigation("UserRoles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/FlexJobApi.Database.Migrations/Migrations/20250909053124_UpdateUserWalletTransaction0909.cs b/FlexJobApi.Database.Migrations/Migrations/20250909053124_UpdateUserWalletTransaction0909.cs new file mode 100644 index 0000000..98ffd92 --- /dev/null +++ b/FlexJobApi.Database.Migrations/Migrations/20250909053124_UpdateUserWalletTransaction0909.cs @@ -0,0 +1,152 @@ +锘縰sing System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace FlexJobApi.Database.Migrations.Migrations +{ + /// <inheritdoc /> + public partial class UpdateUserWalletTransaction0909 : Migration + { + /// <inheritdoc /> + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn<decimal>( + name: "ActualAmount", + table: "TaskInfoUser", + type: "decimal(18,2)", + nullable: false, + defaultValue: 0m); + + migrationBuilder.AddColumn<Guid>( + name: "SettlementOperatorUserId", + table: "TaskInfo", + type: "uniqueidentifier", + nullable: true); + + migrationBuilder.AddColumn<decimal>( + name: "AfterBalance", + table: "EnterpriseWalletTransaction", + type: "decimal(18,2)", + nullable: false, + defaultValue: 0m); + + migrationBuilder.AddColumn<DateTime>( + name: "OperatorTime", + table: "EnterpriseWalletTransaction", + type: "datetime2", + nullable: true); + + migrationBuilder.AddColumn<Guid>( + name: "OperatorUserId", + table: "EnterpriseWalletTransaction", + type: "uniqueidentifier", + nullable: true); + + migrationBuilder.AddColumn<Guid>( + name: "ReceiveUserId", + table: "EnterpriseWalletTransaction", + type: "uniqueidentifier", + nullable: true); + + migrationBuilder.AddColumn<decimal>( + name: "FreezeBalance", + table: "EnterpriseWallet", + type: "decimal(18,2)", + nullable: false, + defaultValue: 0m); + + migrationBuilder.CreateIndex( + name: "IX_TaskInfo_SettlementOperatorUserId", + table: "TaskInfo", + column: "SettlementOperatorUserId"); + + migrationBuilder.CreateIndex( + name: "IX_EnterpriseWalletTransaction_OperatorUserId", + table: "EnterpriseWalletTransaction", + column: "OperatorUserId"); + + migrationBuilder.CreateIndex( + name: "IX_EnterpriseWalletTransaction_ReceiveUserId", + table: "EnterpriseWalletTransaction", + column: "ReceiveUserId"); + + migrationBuilder.AddForeignKey( + name: "FK_EnterpriseWalletTransaction_User_OperatorUserId", + table: "EnterpriseWalletTransaction", + column: "OperatorUserId", + principalTable: "User", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_EnterpriseWalletTransaction_User_ReceiveUserId", + table: "EnterpriseWalletTransaction", + column: "ReceiveUserId", + principalTable: "User", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_TaskInfo_User_SettlementOperatorUserId", + table: "TaskInfo", + column: "SettlementOperatorUserId", + principalTable: "User", + principalColumn: "Id"); + } + + /// <inheritdoc /> + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_EnterpriseWalletTransaction_User_OperatorUserId", + table: "EnterpriseWalletTransaction"); + + migrationBuilder.DropForeignKey( + name: "FK_EnterpriseWalletTransaction_User_ReceiveUserId", + table: "EnterpriseWalletTransaction"); + + migrationBuilder.DropForeignKey( + name: "FK_TaskInfo_User_SettlementOperatorUserId", + table: "TaskInfo"); + + migrationBuilder.DropIndex( + name: "IX_TaskInfo_SettlementOperatorUserId", + table: "TaskInfo"); + + migrationBuilder.DropIndex( + name: "IX_EnterpriseWalletTransaction_OperatorUserId", + table: "EnterpriseWalletTransaction"); + + migrationBuilder.DropIndex( + name: "IX_EnterpriseWalletTransaction_ReceiveUserId", + table: "EnterpriseWalletTransaction"); + + migrationBuilder.DropColumn( + name: "ActualAmount", + table: "TaskInfoUser"); + + migrationBuilder.DropColumn( + name: "SettlementOperatorUserId", + table: "TaskInfo"); + + migrationBuilder.DropColumn( + name: "AfterBalance", + table: "EnterpriseWalletTransaction"); + + migrationBuilder.DropColumn( + name: "OperatorTime", + table: "EnterpriseWalletTransaction"); + + migrationBuilder.DropColumn( + name: "OperatorUserId", + table: "EnterpriseWalletTransaction"); + + migrationBuilder.DropColumn( + name: "ReceiveUserId", + table: "EnterpriseWalletTransaction"); + + migrationBuilder.DropColumn( + name: "FreezeBalance", + table: "EnterpriseWallet"); + } + } +} diff --git a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs index 8926aca..cbae2ef 100644 --- a/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs +++ b/FlexJobApi.Database.Migrations/Migrations/DefaultDbContextModelSnapshot.cs @@ -1077,6 +1077,9 @@ b.Property<Guid>("EnterpriseId") .HasColumnType("uniqueidentifier"); + b.Property<decimal>("FreezeBalance") + .HasColumnType("decimal(18,2)"); + b.Property<DateTime?>("InvalidTime") .HasColumnType("datetime2"); @@ -1287,6 +1290,9 @@ .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); + b.Property<decimal>("AfterBalance") + .HasColumnType("decimal(18,2)"); + b.Property<decimal>("Amount") .HasColumnType("decimal(18,2)"); @@ -1335,6 +1341,12 @@ b.Property<string>("Link") .HasColumnType("nvarchar(max)"); + b.Property<DateTime?>("OperatorTime") + .HasColumnType("datetime2"); + + b.Property<Guid?>("OperatorUserId") + .HasColumnType("uniqueidentifier"); + b.Property<decimal?>("OrderFee") .HasColumnType("decimal(18,2)"); @@ -1352,6 +1364,9 @@ b.Property<string>("ReceiveName") .HasColumnType("nvarchar(max)"); + + b.Property<Guid?>("ReceiveUserId") + .HasColumnType("uniqueidentifier"); b.Property<string>("ReceiverOpenId") .HasColumnType("nvarchar(max)"); @@ -1399,6 +1414,10 @@ .HasColumnType("uniqueidentifier"); b.HasKey("Id"); + + b.HasIndex("OperatorUserId"); + + b.HasIndex("ReceiveUserId"); b.HasIndex("TaskUserId"); @@ -2003,6 +2022,9 @@ b.Property<int>("SettlementCycle") .HasColumnType("int"); + b.Property<Guid?>("SettlementOperatorUserId") + .HasColumnType("uniqueidentifier"); + b.Property<string>("SettlementOrderName") .HasColumnType("nvarchar(max)"); @@ -2052,6 +2074,8 @@ b.HasIndex("EnterpriseId"); b.HasIndex("ProvinceCode"); + + b.HasIndex("SettlementOperatorUserId"); b.ToTable("TaskInfo"); }); @@ -2153,6 +2177,9 @@ b.Property<Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); + + b.Property<decimal>("ActualAmount") + .HasColumnType("decimal(18,2)"); b.Property<decimal?>("ActualSettlementAmount") .HasColumnType("decimal(18,2)"); @@ -3193,6 +3220,14 @@ modelBuilder.Entity("FlexJobApi.Core.EnterpriseWalletTransaction", b => { + b.HasOne("FlexJobApi.Core.User", "OperatorUser") + .WithMany() + .HasForeignKey("OperatorUserId"); + + b.HasOne("FlexJobApi.Core.User", "ReceiveUser") + .WithMany() + .HasForeignKey("ReceiveUserId"); + b.HasOne("FlexJobApi.Core.TaskInfoUser", "TaskUser") .WithMany() .HasForeignKey("TaskUserId"); @@ -3202,6 +3237,10 @@ .HasForeignKey("WalletId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + + b.Navigation("OperatorUser"); + + b.Navigation("ReceiveUser"); b.Navigation("TaskUser"); @@ -3275,11 +3314,17 @@ .HasPrincipalKey("Code") .OnDelete(DeleteBehavior.Restrict); + b.HasOne("FlexJobApi.Core.User", "SettlementOperatorUser") + .WithMany() + .HasForeignKey("SettlementOperatorUserId"); + b.Navigation("City"); b.Navigation("Enterprise"); b.Navigation("Province"); + + b.Navigation("SettlementOperatorUser"); }); modelBuilder.Entity("FlexJobApi.Core.TaskInfoBenefit", b => diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs index 3ee158a..7adf5bd 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs @@ -249,6 +249,7 @@ if (entity.SettlementStatus == null) throw Oops.Oh(EnumErrorCodeType.s510, "鏈紑濮嬬粨绠楋紝璇峰厛涓婁紶缁撶畻鍗曞苟纭"); if (entity.SettlementStatus == EnumTaskSettlementStatus.Completed) throw Oops.Oh(EnumErrorCodeType.s510, "宸茬粨绠�"); entity.SettlementStatus = EnumTaskSettlementStatus.InProcess; + entity.SettlementOperatorUserId = logier.Id; entity.SettlementStartTime = DateTime.Now; foreach (var user in entity.TaskInfoUsers) { diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs index 6dac49a..8a33475 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Commands/EnterpriseWalletCommandHandler.cs @@ -25,8 +25,7 @@ ) : IRequestHandler<OpenEnterpriseWalletCommand, OpenEnterpriseWalletCommandResult>, IRequestHandler<CloseEnterpriseWalletCommand, Guid>, - IRequestHandler<RechargeEnterpriseWalletCommand, RechargeEnterpriseWalletCommandResult>, - IRequestHandler<TransferEnterpriseWalletCommand, Guid> + IRequestHandler<RechargeEnterpriseWalletCommand, RechargeEnterpriseWalletCommandResult> { private readonly IRepository<EnterpriseWallet> rep = rep; private readonly IRepository<Enterprise> repEnterprise = repEnterprise; @@ -155,8 +154,10 @@ order.Remark = request.Remark ?? "鍏呭��"; order.ProductCode = "FUND_ACCOUNT_BOOK"; order.BizScene = "SATF_DEPOSIT"; - order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitSubmit; + order.TransactionStatus = EnumWalletTransactionStatus.WaitSubmit; order.Balance = entity.Balance; + order.OperatorUserId = logier.Id; + order.OperatorTime = DateTime.Now; await SetCode(order); await repEnterpriseWalletTransaction.InsertAsync(order); @@ -180,95 +181,12 @@ }, }, "/api/user/enterpriseWallet/alipayFundTransOrderChangedNotify"); if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); - order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitPay; + order.TransactionStatus = EnumWalletTransactionStatus.WaitPay; await repEnterpriseWalletTransaction.UpdateAsync(order); return new RechargeEnterpriseWalletCommandResult { PayUrl = response.Body }; - } - - /// <summary> - /// 浼佷笟閽卞寘杞处 - /// </summary> - /// <param name="request"></param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - [UnitOfWork(false)] - public async Task<Guid> Handle(TransferEnterpriseWalletCommand request, CancellationToken cancellationToken) - { - var logier = JwtUtils.GetCurrentLogier(); - var entity = await rep.AsQueryable() - .Where(it => it.EnterpriseId == logier.EnterpriseId && it.Access == EnumEnterpriseWalletAccess.Alipay) - .FirstOrDefaultAsync(); - if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘"); - if (entity.SignStatus != EnumEnterpriseWalletSignStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s510, "鏈绾�"); - if (entity.AccountBookStatus != EnumEnterpriseWalletAccountBookStatus.Normal) throw Oops.Oh(EnumErrorCodeType.s510, "鏈紑閫氳璐︽湰"); - await GetBalance(entity); - - var order = new EnterpriseWalletTransaction(); - order.Type = EnumEnterpriseWalletTransactionType.Recharge; - order.WalletId = entity.Id; - order.Amount = request.Amount; - order.Remark = request.Remark; - order.ProductCode = "SINGLE_TRANSFER_NO_PWD"; - order.BizScene = "ENTRUST_TRANSFER"; - order.TransactionStatus = EnumEnterpriseWalletTransactionStatus.WaitSubmit; - order.Balance = entity.Balance; - await SetCode(order); - await repEnterpriseWalletTransaction.InsertAsync(order); - - var response = alipayUtils.FundTransUniTransfer(new AlipayFundTransUniTransferModel - { - OutBizNo = order.Code, - TransAmount = order.Amount.ToString(), - ProductCode = order.ProductCode, - BizScene = order.BizScene, - PayeeInfo = new Participant - { - IdentityType = "ALIPAY_LOGON_ID", - Identity = "13616515310", - Name = "鏉ㄦ尟瀹�", - }, - PayerInfo = new Participant - { - IdentityType = "ACCOUNT_BOOK_ID", - Identity = entity.AccountBookId, - ExtInfo = new - { - agreement_no = entity.AgreementNo, - }.ToJson(), - }, - OrderTitle = order.Remark, - Remark = order.Remark, - BusinessParams = new - { - withdraw_timeliness = "T0" - }.ToJson() - }, "/api/user/enterpriseWallet/alipayFundTransOrderChangedNotify"); - if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg); - order.OrderId = response.OrderId; - order.PayFundOrderId = response.PayFundOrderId; - order.SettleSerialNo = response.SettleSerialNo; - order.TransDate = response.TransDate.ToDateTime(); - order.Link = response.Link; - order.Status = response.Status; - order.SubStatus = response.SubStatus; - order.TransactionStatus = response.Status == "SUCCESS" - ? EnumEnterpriseWalletTransactionStatus.Success - : response.Status == "DEALING" - ? EnumEnterpriseWalletTransactionStatus.Dealing - : response.Status == "REFUND" - ? EnumEnterpriseWalletTransactionStatus.Refund - : response.Status == "FAIL" - ? EnumEnterpriseWalletTransactionStatus.Fail - : throw Oops.Oh(EnumErrorCodeType.s510, $"鏈瘑鍒殑鐘舵�侊細{response.Status}"); - await repEnterpriseWalletTransaction.UpdateAsync(order); - if (order.TransactionStatus == EnumEnterpriseWalletTransactionStatus.Success) - { - await GetBalance(entity); - } - return entity.Id; } private async Task GetBalance(EnterpriseWallet entity) diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs index 05d4624..f95e00f 100644 --- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs +++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs @@ -196,16 +196,16 @@ entity.TransDate = response.PayDate.ToDateTime(); entity.Status = response.Status; entity.TransactionStatus = response.Status == "SUCCESS" - ? EnumEnterpriseWalletTransactionStatus.Success + ? EnumWalletTransactionStatus.Success : response.Status == "DEALING" - ? EnumEnterpriseWalletTransactionStatus.Dealing + ? EnumWalletTransactionStatus.Dealing : response.Status == "REFUND" - ? EnumEnterpriseWalletTransactionStatus.Refund + ? EnumWalletTransactionStatus.Refund : response.Status == "FAIL" - ? EnumEnterpriseWalletTransactionStatus.Fail + ? EnumWalletTransactionStatus.Fail : throw Oops.Oh(EnumErrorCodeType.s510, $"鏈瘑鍒殑鐘舵�侊細{response.Status}"); await repEnterpriseWalletTransaction.UpdateAsync(entity); - if (entity.TransactionStatus == EnumEnterpriseWalletTransactionStatus.Success) + if (entity.TransactionStatus == EnumWalletTransactionStatus.Success) { await GetBalance(entity.WalletId); } diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml index 41c7082..763fb20 100644 --- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml +++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml @@ -607,14 +607,6 @@ <returns></returns> <exception cref="T:System.NotImplementedException"></exception> </member> - <member name="M:FlexJobApi.UserServer.Application.EnterpriseWalletCommandHandler.Handle(FlexJobApi.Core.TransferEnterpriseWalletCommand,System.Threading.CancellationToken)"> - <summary> - 浼佷笟閽卞寘杞处 - </summary> - <param name="request"></param> - <param name="cancellationToken"></param> - <returns></returns> - </member> <member name="T:FlexJobApi.UserServer.Application.EnterpriseWalletExpandindirectCommandHandler"> <summary> 鏀粯瀹濊祫閲戜簩绾у晢鎴稫YB浠h繘浠� @@ -1238,6 +1230,32 @@ <param name="cancellationToken"></param> <returns></returns> </member> + <member name="T:FlexJobApi.UserServer.Application.GetPersonalUserTransactionsQueryHandler"> + <summary> + 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏 + </summary> + </member> + <member name="M:FlexJobApi.UserServer.Application.GetPersonalUserTransactionsQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.UserWalletTransaction})"> + <summary> + 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏 + </summary> + </member> + <member name="M:FlexJobApi.UserServer.Application.GetPersonalUserTransactionsQueryHandler.Handle(FlexJobApi.Core.GetPersonalUserTransactionsQuery,System.Threading.CancellationToken)"> + <summary> + 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏鍒嗛〉鍒楄〃鏁版嵁 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.UserServer.Application.GetPersonalUserTransactionsQueryHandler.Handle(FlexJobApi.Core.GetPersonalUserTransactionQuery,System.Threading.CancellationToken)"> + <summary> + 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏璇︽儏 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> <member name="T:FlexJobApi.UserServer.Application.GetUserInfoRolesQueryHandler"> <summary> 鏌ヨ鐢ㄦ埛瑙掕壊鍒楄〃 diff --git a/FlexJobApi.UserServer.Application/Users/Queries/GetPersonalUserTransactionsQueryHandler.cs b/FlexJobApi.UserServer.Application/Users/Queries/GetPersonalUserTransactionsQueryHandler.cs new file mode 100644 index 0000000..6ca7302 --- /dev/null +++ b/FlexJobApi.UserServer.Application/Users/Queries/GetPersonalUserTransactionsQueryHandler.cs @@ -0,0 +1,84 @@ +锘縰sing FlexJobApi.Core; +using Furion.DatabaseAccessor; +using Furion.FriendlyException; +using Mapster; +using MediatR; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.UserServer.Application +{ + /// <summary> + /// 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏 + /// </summary> + public class GetPersonalUserTransactionsQueryHandler( + IRepository<UserWalletTransaction> rep + ) : + IRequestHandler<GetPersonalUserTransactionsQuery, GetPersonalUserTransactionsQueryResult>, + IRequestHandler<GetPersonalUserTransactionQuery, GetPersonalUserTransactionQueryResult> + { + private readonly IRepository<UserWalletTransaction> rep = rep; + + /// <summary> + /// 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏鍒嗛〉鍒楄〃鏁版嵁 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<GetPersonalUserTransactionsQueryResult> Handle(GetPersonalUserTransactionsQuery request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + var q = rep.AsQueryable().AsNoTracking() + .OrderByDescending(it => it.CreatedTime) + .Where(it => + it.Wallet.UserId == logier.Id + && it.TransactionStatus == EnumWalletTransactionStatus.Success); + + if (request.CreatedTimeStart.HasValue && request.CreatedTimeEnd.HasValue) + { + q = q.Where(it => request.CreatedTimeStart <= it.CreatedTime && it.CreatedTime <= request.CreatedTimeEnd); + } + + var data = new GetPersonalUserTransactionsQueryResultObjectData(); + data.SumIncome = await q.Where(it => it.Type == EnumUserWalletTransactionType.Income).SumAsync(it => it.Amount); + data.SumWithdraw = await q.Where(it => it.Type == EnumUserWalletTransactionType.Withdraw).SumAsync(it => it.Amount); + + if (request.Type.HasValue) + { + q = q.Where(it => it.Type == request.Type); + } + + var s = q + .Select(it => new GetPersonalUserTransactionsQueryResultItem + { + Id = it.Id, + Title = it.Title, + CreatedTime = it.CreatedTime, + Balance = it.Balance + (it.Type == EnumUserWalletTransactionType.Income ? it.Amount : (0 - it.Amount)), + Amount = it.Type == EnumUserWalletTransactionType.Income ? it.Amount : (0 - it.Amount), + }); + var list = await request.PageModel.GetPagedListAsync<GetPersonalUserTransactionsQueryResult, GetPersonalUserTransactionsQueryResultItem>(s, cancellationToken); + + list.ObjectData = data; + + return list; + } + + /// <summary> + /// 鏌ヨ涓汉鐢ㄦ埛鏀舵敮鏄庣粏璇︽儏 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<GetPersonalUserTransactionQueryResult> Handle(GetPersonalUserTransactionQuery request, CancellationToken cancellationToken) + { + return await rep.AsQueryable().AsNoTracking() + .Where(it => it.Id == request.Id) + .GetDetail<UserWalletTransaction, GetPersonalUserTransactionQueryResult>(); + } + } +} -- Gitblit v1.9.1