From c682cd59ded8e71957a802dd4f8dcf58e0113c0f Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 11 九月 2025 15:33:30 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs |  170 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 133 insertions(+), 37 deletions(-)

diff --git a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs
index aacd13c..a2e4c86 100644
--- a/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs
+++ b/FlexJobApi.UserServer.Application/EnterpriseWallets/Queries/EnterpriseWalletQueryHandler.cs
@@ -2,6 +2,7 @@
 using Azure;
 using FlexJobApi.Core;
 using Furion.DatabaseAccessor;
+using Furion.DistributedIDGenerator;
 using Furion.FriendlyException;
 using Mapster;
 using MediatR;
@@ -21,6 +22,7 @@
     public class EnterpriseWalletQueryHandler(
             IRepository<EnterpriseWallet> rep,
             IRepository<EnterpriseWalletTransaction> repEnterpriseWalletTransaction,
+            IRepository<EnterpriseWalletExpandindirectOrder> repEnterpriseWalletExpandindirectOrder,
             IRepository<Enterprise> repEnterprise,
             AlipayUtils alipayUtils
         ) :
@@ -29,6 +31,7 @@
     {
         private readonly IRepository<EnterpriseWallet> rep = rep;
         private readonly IRepository<EnterpriseWalletTransaction> repEnterpriseWalletTransaction = repEnterpriseWalletTransaction;
+        private readonly IRepository<EnterpriseWalletExpandindirectOrder> repEnterpriseWalletExpandindirectOrder = repEnterpriseWalletExpandindirectOrder;
         private readonly IRepository<Enterprise> repEnterprise = repEnterprise;
         private readonly AlipayUtils alipayUtils = alipayUtils;
 
@@ -53,7 +56,28 @@
             var entity = await rep.AsQueryable()
                 .Where(it => it.EnterpriseId == request.EnterpriseId && it.Access == request.Access)
                 .FirstOrDefaultAsync();
-            if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "浼佷笟閽卞寘");
+            if (entity == null)
+            {
+                entity = new EnterpriseWallet();
+                entity.EnterpriseId = request.EnterpriseId!.Value;
+                entity.Access = EnumEnterpriseWalletAccess.Alipay;
+                entity.PersonalProductCode = "FUND_SAFT_SIGN_WITHHOLDING_P";
+                entity.SignScene = "INDUSTRY|SATF_ACC";
+                entity.ThirdPartyType = "PARTNER";
+                entity.ProductCode = "FUND_SAFT_SIGN_WITHHOLDING";
+                entity.SignStatus = EnumEnterpriseWalletSignStatus.Wait;
+                await SetCode(entity);
+                await rep.InsertAsync(entity);
+
+                return new GetEnterpriseWalletQueryResult
+                {
+                    Id = entity.Id,
+                    Code = entity.Code,
+                    Access = request.Access,
+                    SignStatus = EnumEnterpriseWalletSignStatus.Wait,
+                    ExpandindirectOrderStatus = EnumEnterpriseWalletExpandindirectOrderStatus.Wait,
+                };
+            }
             var update = false;
             if (entity.Access == EnumEnterpriseWalletAccess.Alipay)
             {
@@ -66,25 +90,33 @@
                         ExternalAgreementNo = entity.Code,
                         ThirdPartyType = entity.ThirdPartyType,
                     });
-                    if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
-                    entity.AgreementNo = response.AgreementNo;
-                    entity.SignTime = response.SignTime.ToDateTime();
-                    entity.ValidTime = response.ValidTime.ToDateTime();
-                    entity.InvalidTime = response.InvalidTime.ToDateTime();
-                    entity.SignStatus = response.Status == "TEMP"
-                        ? EnumEnterpriseWalletSignStatus.Apply
-                        : response.Status == "NORMAL"
-                        ? EnumEnterpriseWalletSignStatus.Normal
-                        : response.Status == "STOP"
-                        ? EnumEnterpriseWalletSignStatus.Stop
-                        : throw Oops.Oh(EnumErrorCodeType.s510, "鐘舵�佸紓甯�");
-                    entity.PricipalType = response.PricipalType;
-                    entity.AlipayLogonId = response.AlipayLogonId;
-                    entity.PrincipalId = response.PrincipalId;
-                    entity.PrincipalOpenId = response.PrincipalOpenId;
-                    entity.ZmOpenId = response.ZmOpenId;
-                    entity.CreditAuthMode = response.CreditAuthMode;
-                    update = true;
+                    if (!response.IsError)
+                    {
+                        entity.AgreementNo = response.AgreementNo;
+                        entity.SignTime = response.SignTime.ToDateTime();
+                        entity.ValidTime = response.ValidTime.ToDateTime();
+                        entity.InvalidTime = response.InvalidTime.ToDateTime();
+                        entity.SignStatus = response.Status == "TEMP"
+                            ? EnumEnterpriseWalletSignStatus.Apply
+                            : response.Status == "NORMAL"
+                            ? EnumEnterpriseWalletSignStatus.Normal
+                            : response.Status == "STOP"
+                            ? EnumEnterpriseWalletSignStatus.Stop
+                            : throw Oops.Oh(EnumErrorCodeType.s510, "鐘舵�佸紓甯�");
+                        entity.PricipalType = response.PricipalType;
+                        entity.AlipayLogonId = response.AlipayLogonId;
+                        entity.PrincipalId = response.PrincipalId;
+                        entity.PrincipalOpenId = response.PrincipalOpenId;
+                        entity.ZmOpenId = response.ZmOpenId;
+                        entity.CreditAuthMode = response.CreditAuthMode;
+                        update = true;
+                    }
+                    else
+                    {
+                        entity.ErrorCode = response.Code;
+                        entity.FailReason = response.SubMsg ?? response.Msg;
+                        update = true;
+                    }
                 }
 
                 if (entity.SignStatus == EnumEnterpriseWalletSignStatus.Normal && entity.AccountBookStatus != EnumEnterpriseWalletAccountBookStatus.Normal)
@@ -100,18 +132,26 @@
                             cert_no = enterprise.SocietyCreditCode
                         }.ToJson()
                     });
-                    if (response.IsError) throw Oops.Oh(EnumErrorCodeType.s510, response.SubMsg ?? response.Msg);
-                    entity.AccountBookId = response.AccountBookId;
-                    entity.BankAccName = response.ExtCardInfo.BankAccName;
-                    entity.CardBank = response.ExtCardInfo.CardBank;
-                    entity.CardBranch = response.ExtCardInfo.CardBranch;
-                    entity.CardDeposit = response.ExtCardInfo.CardDeposit;
-                    entity.CardLocation = response.ExtCardInfo.CardLocation;
-                    entity.CardNo = response.ExtCardInfo.CardNo;
-                    entity.AccountBookStatus = response.ExtCardInfo.Status == "A"
-                        ? EnumEnterpriseWalletAccountBookStatus.Normal
-                        : EnumEnterpriseWalletAccountBookStatus.Exception;
-                    update = true;
+                    if (!response.IsError)
+                    {
+                        entity.AccountBookId = response.AccountBookId;
+                        entity.BankAccName = response.ExtCardInfo.BankAccName;
+                        entity.CardBank = response.ExtCardInfo.CardBank;
+                        entity.CardBranch = response.ExtCardInfo.CardBranch;
+                        entity.CardDeposit = response.ExtCardInfo.CardDeposit;
+                        entity.CardLocation = response.ExtCardInfo.CardLocation;
+                        entity.CardNo = response.ExtCardInfo.CardNo;
+                        entity.AccountBookStatus = response.ExtCardInfo.Status == "A"
+                            ? EnumEnterpriseWalletAccountBookStatus.Normal
+                            : EnumEnterpriseWalletAccountBookStatus.Exception;
+                        update = true;
+                    }
+                    else
+                    {
+                        entity.ErrorCode = response.Code;
+                        entity.FailReason = response.SubMsg ?? response.Msg;
+                        update = true;
+                    }
                 }
 
                 if (entity.AccountBookStatus == EnumEnterpriseWalletAccountBookStatus.Normal)
@@ -134,7 +174,63 @@
             }
 
             var model = entity.Adapt<GetEnterpriseWalletQueryResult>();
+
+            var expandindirectOrder = await repEnterpriseWalletExpandindirectOrder.AsQueryable()
+                .Include(it => it.Files)
+                .OrderByDescending(it => it.CreatedTime)
+                .Where(it => it.WalletId == model.Id)
+                .FirstOrDefaultAsync();
+            if (expandindirectOrder != null)
+            {
+                if (expandindirectOrder.OrderStatus == EnumEnterpriseWalletExpandindirectOrderStatus.PROCESSING)
+                {
+                    var response = alipayUtils.FundExpandindirectOrderQuery(new Aop.Api.Domain.AlipayFundExpandindirectOrderQueryModel
+                    {
+                        BizScene = expandindirectOrder.BizScene,
+                        OrderId = expandindirectOrder.OrderId,
+                        OutBizNo = expandindirectOrder.OutBizNo,
+                        ProductCode = expandindirectOrder.ProductCode,
+                    });
+                    if (!response.IsError)
+                    {
+                        expandindirectOrder.Status = response.Status;
+                        expandindirectOrder.OrderStatus = expandindirectOrder.Status.ToEnum<EnumEnterpriseWalletExpandindirectOrderStatus>("鏈瘑鍒殑鐘舵��")!.Value;
+                        expandindirectOrder.TaskFinishTime = response.TaskFinishTime.ToDateTime();
+                        expandindirectOrder.RiskReviewRemark = response.RiskReviewRemark;
+                    }
+                    else
+                    {
+                        expandindirectOrder.RiskReviewRemark = response.SubMsg ?? response.Msg;
+                    }
+                    await repEnterpriseWalletExpandindirectOrder.UpdateNowAsync(expandindirectOrder);
+                }
+
+                model.Name = expandindirectOrder.Name;
+                model.Identity = expandindirectOrder.Identity;
+                model.Scene = expandindirectOrder.Scene;
+                model.SceneDirections = expandindirectOrder.SceneDirections;
+                model.TaskFinishTime = expandindirectOrder.TaskFinishTime;
+                model.SitesInfo = expandindirectOrder.Sites?.JsonTo<GetEnterpriseWalletExpandindirectOrderQueryResultSites>();
+                model.Files = expandindirectOrder.Files?.Adapt<List<GetEnterpriseWalletExpandindirectOrderQueryResultFile>>() ?? new List<GetEnterpriseWalletExpandindirectOrderQueryResultFile>();
+                model.ExpandindirectOrderStatus = expandindirectOrder.OrderStatus;
+            }
+            else
+            {
+                model.ExpandindirectOrderStatus = EnumEnterpriseWalletExpandindirectOrderStatus.Wait;
+            }
+
             return model;
+        }
+
+        private async Task SetCode(EnterpriseWallet entity)
+        {
+            entity.Code = $"{DateTime.Now:yyyyMMddHHmmss}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";
+            var exist = await rep.AsQueryable().AsNoTracking()
+                .AnyAsync(it => it.Code == entity.Code);
+            if (exist)
+            {
+                await SetCode(entity);
+            }
         }
 
         /// <summary>
@@ -173,16 +269,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);
             }

--
Gitblit v1.9.1