using Aop.Api.Domain;
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
{
///
/// 支付宝资金二级商户KYB代进件
///
public class AlipayFundExpandindirectCreateCommandHandler(
AlipayUtils alipayUtils,
IHttpRemoteService httpRemoteService,
IRepository rep
) :
IRequestHandler
{
private readonly AlipayUtils alipayUtils = alipayUtils;
private readonly IHttpRemoteService httpRemoteService = httpRemoteService;
private readonly IRepository rep = rep;
///
/// 支付宝资金二级商户KYB代进件
///
///
///
///
public async Task 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)
{
var url = AliyunOSSUtils.GetUrl(request.SceneImageOssUrl);
var bytes = await httpRemoteService.GetAsByteArrayAsync(url);
var imageType = url.Substring(url.LastIndexOf(".") + 1);
var fileName = url.Substring(url.LastIndexOf("/") + 1);
entity.SceneImage = alipayUtils.FundExpandindirectImageUpload(new Aop.Api.Request.AlipayFundExpandindirectImageUploadRequest
{
ProductCode = request.ProductCode,
BizScene = request.BizScene,
ImageType = imageType,
ImageContent = new Aop.Api.Util.FileItem(fileName, bytes)
}).ImageId;
}
if (request.SceneQualificationText.IsNotNull())
{
entity.SceneQualificationImage = request.SceneQualificationText;
}
else if (request.SceneQualificationImageOssUrl.IsNotNull() && entity.SceneQualificationImageOssUrl != request.SceneQualificationImageOssUrl)
{
var url = AliyunOSSUtils.GetUrl(request.SceneQualificationImageOssUrl);
var bytes = await httpRemoteService.GetAsByteArrayAsync(url);
var imageType = url.Substring(url.LastIndexOf(".") + 1);
var fileName = url.Substring(url.LastIndexOf("/") + 1);
entity.SceneQualificationImage = alipayUtils.FundExpandindirectImageUpload(new Aop.Api.Request.AlipayFundExpandindirectImageUploadRequest
{
ProductCode = request.ProductCode,
BizScene = request.BizScene,
ImageType = imageType,
ImageContent = new Aop.Api.Util.FileItem(fileName, bytes)
}).ImageId;
}
entity.Sites = request.SitesInfo.ToJson();
request.Adapt(entity);
if (request.Id.HasValue)
{
await rep.UpdateAsync(entity);
}
else
{
await rep.InsertAsync(entity);
}
var result = alipayUtils.FundExpandindirectCreate(entity.Adapt());
return entity.Id;
}
}
}