using Aop.Api.Domain;
|
using Azure;
|
using FlexJobApi.Core;
|
using Furion.DatabaseAccessor;
|
using Furion.FriendlyException;
|
using Furion.HttpRemote;
|
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>
|
/// 支付宝资金二级商户KYB代进件
|
/// </summary>
|
public class AlipayFundExpandindirectCommandHandler(
|
AlipayUtils alipayUtils,
|
IHttpRemoteService httpRemoteService,
|
IRepository<AlipayFundExpandindirectOrder> rep
|
) :
|
IRequestHandler<AlipayFundExpandindirectCreateCommand, Guid>,
|
IRequestHandler<AlipayFundExpandindirectOrderCancelCommand, Guid>,
|
IRequestHandler<AlipayFundExpandindirectCreateNotifyCommand, Guid>
|
{
|
private readonly AlipayUtils alipayUtils = alipayUtils;
|
private readonly IHttpRemoteService httpRemoteService = httpRemoteService;
|
private readonly IRepository<AlipayFundExpandindirectOrder> rep = rep;
|
|
/// <summary>
|
/// 支付宝资金二级商户KYB代进件
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
[UnitOfWork(false)]
|
public async Task<Guid> Handle(AlipayFundExpandindirectCreateCommand request, CancellationToken cancellationToken)
|
{
|
AlipayFundExpandindirectOrder? entity;
|
if (request.Id.HasValue)
|
{
|
entity = await rep.AsQueryable()
|
.Where(it => it.Id == request.Id)
|
.FirstOrDefaultAsync(cancellationToken);
|
if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "代进件单");
|
}
|
else
|
{
|
entity = new AlipayFundExpandindirectOrder();
|
}
|
if (request.SceneImageOssUrl.IsNotNull() && entity.SceneImageOssUrl != request.SceneImageOssUrl)
|
{
|
entity.SceneImage = await GetAlipayImageIdAsync(request, request.SceneImageOssUrl);
|
}
|
if (request.SceneQualificationText.IsNotNull())
|
{
|
entity.SceneQualificationImage = request.SceneQualificationText;
|
}
|
else if (request.SceneQualificationImageOssUrl.IsNotNull() && entity.SceneQualificationImageOssUrl != request.SceneQualificationImageOssUrl)
|
{
|
entity.SceneQualificationImage = await GetAlipayImageIdAsync(request, request.SceneQualificationImageOssUrl);
|
}
|
entity.Sites = request.SitesInfo.ToJson();
|
request.Adapt(entity);
|
if (request.Id.HasValue)
|
{
|
await rep.UpdateNowAsync(entity);
|
}
|
else
|
{
|
await rep.InsertNowAsync(entity);
|
}
|
var model = entity.Adapt<AlipayFundExpandindirectCreateModel>();
|
var result = alipayUtils.FundExpandindirectCreate(model);
|
if (result.IsError)
|
{
|
entity.RiskReviewRemark = result.Msg;
|
}
|
entity.TaskFinishTime = result.TaskFinishTime;
|
entity.OrderId = result.OrderId;
|
entity.Status = result.Status;
|
await rep.UpdateNowAsync(entity);
|
if (result.IsError)
|
{
|
throw Oops.Oh(EnumErrorCodeType.s510, result.Msg);
|
}
|
return entity.Id;
|
}
|
|
/// <summary>
|
/// 支付宝资金二级商户KYB代进件单取消接口
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
/// <exception cref="NotImplementedException"></exception>
|
public async Task<Guid> Handle(AlipayFundExpandindirectOrderCancelCommand request, CancellationToken cancellationToken)
|
{
|
var entity = await rep.AsQueryable()
|
.Where(it => it.Id == request.Id)
|
.FirstOrDefaultAsync();
|
if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "代进件单");
|
var result = alipayUtils.FundExpandindirectOrderCancel(new AlipayFundExpandindirectOrderCancelModel
|
{
|
BizScene = entity.BizScene,
|
OrderId = entity.OrderId,
|
OutBizNo = entity.OutBizNo,
|
ProductCode = entity.ProductCode,
|
});
|
if (result.IsError) throw Oops.Oh(EnumErrorCodeType.s510, result.Msg);
|
result.Status = result.Status;
|
await rep.UpdateAsync(entity);
|
return entity.Id;
|
}
|
|
/// <summary>
|
/// 支付宝资金二级商户KYB代进件状态通知
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<Guid> Handle(AlipayFundExpandindirectCreateNotifyCommand request, CancellationToken cancellationToken)
|
{
|
return Task.FromResult(Guid.Empty);
|
}
|
|
private async Task<string> GetAlipayImageIdAsync(AlipayFundExpandindirectCreateCommand request, string ossUrl)
|
{
|
var url = AliyunOSSUtils.GetUrl(ossUrl);
|
var bytes = await httpRemoteService.GetAsByteArrayAsync(url);
|
var imageType = url.Substring(url.LastIndexOf(".") + 1);
|
var fileName = url.Substring(url.LastIndexOf("/") + 1);
|
var result = alipayUtils.FundExpandindirectImageUpload(new Aop.Api.Request.AlipayFundExpandindirectImageUploadRequest
|
{
|
ProductCode = request.ProductCode,
|
BizScene = request.BizScene,
|
ImageType = imageType,
|
ImageContent = new Aop.Api.Util.FileItem(fileName, bytes)
|
});
|
if (result.IsError) throw Oops.Oh(EnumErrorCodeType.s510, result.Msg);
|
return result.ImageId;
|
}
|
}
|
}
|